ZGlmZiAtLWdpdCBhLy5pZGVhL2RibmF2aWdhdG9yLnhtbCBiLy5pZGVhL2RibmF2aWdhdG9yLnhtbAppbmRleCBiZDIyYWVmLi4wNTRiMmQwIDEwMDY0NAotLS0gYS8uaWRlYS9kYm5hdmlnYXRvci54bWwKKysrIGIvLmlkZWEvZGJuYXZpZ2F0b3IueG1sCkBAIC01MjMsNCArNTIzLDcgQEAKICAgICAgIDwvZW52aXJvbm1lbnQ+CiAgICAgPC9nZW5lcmFsLXNldHRpbmdzPgogICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJEQk5hdmlnYXRvci5Qcm9qZWN0LlN0YXRlbWVudEV4ZWN1dGlvbk1hbmFnZXIiPgorICAgIDxleGVjdXRpb24tdmFyaWFibGVzIC8+CisgIDwvY29tcG9uZW50PgogPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLy5pZGVhL3dvcmtzcGFjZS54bWwgYi8uaWRlYS93b3Jrc3BhY2UueG1sCmluZGV4IDBkNTk4MGEuLmFlM2VmM2YgMTAwNjQ0Ci0tLSBhLy5pZGVhL3dvcmtzcGFjZS54bWwKKysrIGIvLmlkZWEvd29ya3NwYWNlLnhtbApAQCAtNCw3ICs0LDQwIEBACiAgICAgPG9wdGlvbiBuYW1lPSJhdXRvUmVsb2FkVHlwZSIgdmFsdWU9IlNFTEVDVElWRSIgLz4KICAgPC9jb21wb25lbnQ+CiAgIDxjb21wb25lbnQgbmFtZT0iQ2hhbmdlTGlzdE1hbmFnZXIiPgotICAgIDxsaXN0IGRlZmF1bHQ9InRydWUiIGlkPSJmMDA4ZmUzMC0wNzExLTQyZTItYmIzMy0xN2RjZmRiYWQzODciIG5hbWU9IkNoYW5nZXMiIGNvbW1lbnQ9IiIgLz4KKyAgICA8bGlzdCBkZWZhdWx0PSJ0cnVlIiBpZD0iZjAwOGZlMzAtMDcxMS00MmUyLWJiMzMtMTdkY2ZkYmFkMzg3IiBuYW1lPSJDaGFuZ2VzIiBjb21tZW50PSIiPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkLy5pZGVhL2RibmF2aWdhdG9yLnhtbCIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkLy5pZGVhL2RibmF2aWdhdG9yLnhtbCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkLy5pZGVhL3dvcmtzcGFjZS54bWwiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC8uaWRlYS93b3Jrc3BhY2UueG1sIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvY3JlYXRlLnNxbCIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9wb20ueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvcG9tLnhtbCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L015UHJvamVjdEFwcGxpY2F0aW9uLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUmVzdWx0LmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9SZXN1bHQuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbmZpZy9NeU1ldGFPYmplY3RIYW5kbGVyLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb25maWcvTXlNZXRhT2JqZWN0SGFuZGxlci5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9JbnZpdGVDb250cm9sbGVyLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL3BhcmFtL0ludml0ZVBhcmFtLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL3BhcmFtL1RvcnJlbnRVcGxvYWRQYXJhbS5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL3BhcmFtL1RvcnJlbnRVcGxvYWRQYXJhbS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0VudGl0eUJhc2UuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9FbnRpdHlCYXNlLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvSW52aXRhdGlvbkVudGl0eS5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlci5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL0ludml0YXRpb25NYXBwZXIuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVXNlck1hcHBlci5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1VzZXJNYXBwZXIuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvSW52aXRhdGlvblNlcnZpY2UuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvSW52aXRhdGlvblNlcnZpY2UuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlclNlcnZpY2UuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlclNlcnZpY2UuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvSW52aXRhdGlvblNlcnZpY2VJbXBsLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Ub3JyZW50U2VydmljZUltcGwuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVG9ycmVudFNlcnZpY2VJbXBsLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ucHJvcGVydGllcyIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vcmVzb3VyY2VzL21hcHBlci9Qcm9tb3Rpb25NYXBwZXIueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vcmVzb3VyY2VzL21hcHBlci9Qcm9tb3Rpb25NYXBwZXIueG1sIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Ub3JyZW50Q29udHJvbGxlclRlc3QuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVG9ycmVudENvbnRyb2xsZXJUZXN0LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdC5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2FwcGxpY2F0aW9uLnByb3BlcnRpZXMiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L015UHJvamVjdEFwcGxpY2F0aW9uLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L015UHJvamVjdEFwcGxpY2F0aW9uLmNsYXNzIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkRW1haWxSZXF1ZXN0LmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkRW1haWxSZXF1ZXN0LmNsYXNzIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkVmVyaWZpY2F0aW9uUmVxdWVzdC5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyJFZlcmlmaWNhdGlvblJlcXVlc3QuY2xhc3MiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmNsYXNzIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyLmNsYXNzIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9Vc2VyTWFwcGVyLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9Vc2VyTWFwcGVyLmNsYXNzIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3V0aWxzL1Jlc3VsdC5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICA8L2xpc3Q+CiAgICAgPG9wdGlvbiBuYW1lPSJTSE9XX0RJQUxPRyIgdmFsdWU9ImZhbHNlIiAvPgogICAgIDxvcHRpb24gbmFtZT0iSElHSExJR0hUX0NPTkZMSUNUUyIgdmFsdWU9InRydWUiIC8+CiAgICAgPG9wdGlvbiBuYW1lPSJISUdITElHSFRfTk9OX0FDVElWRV9DSEFOR0VMSVNUIiB2YWx1ZT0iZmFsc2UiIC8+CkBAIC0zMCwyMyArNjMsMTAyIEBACiAgICAgICA8L01hdmVuSW1wb3J0aW5nU2V0dGluZ3M+CiAgICAgPC9vcHRpb24+CiAgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlByb2JsZW1zVmlld1N0YXRlIj4KKyAgICA8b3B0aW9uIG5hbWU9InNlbGVjdGVkVGFiSWQiIHZhbHVlPSJDdXJyZW50RmlsZSIgLz4KKyAgPC9jb21wb25lbnQ+CiAgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdElkIiBpZD0iMnZaTmZOVEVGeUhBcGR4bUhaN1kwcmxKaktCIiAvPgogICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RMZXZlbFZjc01hbmFnZXIiIHNldHRpbmdzRWRpdGVkTWFudWFsbHk9InRydWUiIC8+CiAgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdFZpZXdTdGF0ZSI+CiAgICAgPG9wdGlvbiBuYW1lPSJoaWRlRW1wdHlNaWRkbGVQYWNrYWdlcyIgdmFsdWU9InRydWUiIC8+CiAgICAgPG9wdGlvbiBuYW1lPSJzaG93TGlicmFyeUNvbnRlbnRzIiB2YWx1ZT0idHJ1ZSIgLz4KICAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iUHJvcGVydGllc0NvbXBvbmVudCI+PCFbQ0RBVEFbewotICAia2V5VG9TdHJpbmciOiB7Ci0gICAgIlJ1bk9uY2VBY3Rpdml0eS5PcGVuUHJvamVjdFZpZXdPblN0YXJ0IjogInRydWUiLAotICAgICJSdW5PbmNlQWN0aXZpdHkuU2hvd1JlYWRtZU9uU3RhcnQiOiAidHJ1ZSIKKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9wZXJ0aWVzQ29tcG9uZW50Ij57CisgICZxdW90O2tleVRvU3RyaW5nJnF1b3Q7OiB7CisgICAgJnF1b3Q7UnVuT25jZUFjdGl2aXR5Lk9wZW5Qcm9qZWN0Vmlld09uU3RhcnQmcXVvdDs6ICZxdW90O3RydWUmcXVvdDssCisgICAgJnF1b3Q7UnVuT25jZUFjdGl2aXR5LlNob3dSZWFkbWVPblN0YXJ0JnF1b3Q7OiAmcXVvdDt0cnVlJnF1b3Q7LAorICAgICZxdW90O2xhc3Rfb3BlbmVkX2ZpbGVfcGF0aCZxdW90OzogJnF1b3Q7RDovc3R1ZHkv5a2m5Lmg6LWE5rqQL+Wkp+S4ieS4iy96eTEmcXVvdDsKICAgfQotfV1dPjwvY29tcG9uZW50PgorfTwvY29tcG9uZW50PgogICA8Y29tcG9uZW50IG5hbWU9IlJlY2VudHNNYW5hZ2VyIj4KICAgICA8a2V5IG5hbWU9Ik1vdmVGaWxlLlJFQ0VOVF9LRVlTIj4KICAgICAgIDxyZWNlbnQgbmFtZT0iRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xzY2hvb2xcZWNoby1iYWNrZW5kXHNyY1xtYWluXHJlc291cmNlc1xtYXBwZXIiIC8+CiAgICAgPC9rZXk+CiAgIDwvY29tcG9uZW50PgorICA8Y29tcG9uZW50IG5hbWU9IlJ1bk1hbmFnZXIiIHNlbGVjdGVkPSLlupTnlKjnqIvluo8uTXlQcm9qZWN0QXBwbGljYXRpb24iPgorICAgIDxjb25maWd1cmF0aW9uIG5hbWU9IkJ0Q2xpZW50IiB0eXBlPSJBcHBsaWNhdGlvbiIgZmFjdG9yeU5hbWU9IkFwcGxpY2F0aW9uIiB0ZW1wb3Jhcnk9InRydWUiIG5hbWVJc0dlbmVyYXRlZD0idHJ1ZSI+CisgICAgICA8b3B0aW9uIG5hbWU9Ik1BSU5fQ0xBU1NfTkFNRSIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5jbGllbnQuQnRDbGllbnQiIC8+CisgICAgICA8bW9kdWxlIG5hbWU9ImVjaG8tYmFja2VuZCIgLz4KKyAgICAgIDxleHRlbnNpb24gbmFtZT0iY292ZXJhZ2UiPgorICAgICAgICA8cGF0dGVybj4KKyAgICAgICAgICA8b3B0aW9uIG5hbWU9IlBBVFRFUk4iIHZhbHVlPSJjb20uZXhhbXBsZS5teXByb2plY3QuY2xpZW50LioiIC8+CisgICAgICAgICAgPG9wdGlvbiBuYW1lPSJFTkFCTEVEIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgICAgPC9wYXR0ZXJuPgorICAgICAgPC9leHRlbnNpb24+CisgICAgICA8bWV0aG9kIHY9IjIiPgorICAgICAgICA8b3B0aW9uIG5hbWU9Ik1ha2UiIGVuYWJsZWQ9InRydWUiIC8+CisgICAgICA8L21ldGhvZD4KKyAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgPGNvbmZpZ3VyYXRpb24gbmFtZT0iTXlQcm9qZWN0QXBwbGljYXRpb24iIHR5cGU9IkFwcGxpY2F0aW9uIiBmYWN0b3J5TmFtZT0iQXBwbGljYXRpb24iIHRlbXBvcmFyeT0idHJ1ZSI+CisgICAgICA8b3B0aW9uIG5hbWU9Ik1BSU5fQ0xBU1NfTkFNRSIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5NeVByb2plY3RBcHBsaWNhdGlvbiIgLz4KKyAgICAgIDxtb2R1bGUgbmFtZT0iZWNoby1iYWNrZW5kIiAvPgorICAgICAgPGV4dGVuc2lvbiBuYW1lPSJjb3ZlcmFnZSI+CisgICAgICAgIDxwYXR0ZXJuPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0iUEFUVEVSTiIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC4qIiAvPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0iRU5BQkxFRCIgdmFsdWU9InRydWUiIC8+CisgICAgICAgIDwvcGF0dGVybj4KKyAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPG1ldGhvZCB2PSIyIj4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJNYWtlIiBlbmFibGVkPSJ0cnVlIiAvPgorICAgICAgPC9tZXRob2Q+CisgICAgPC9jb25maWd1cmF0aW9uPgorICAgIDxjb25maWd1cmF0aW9uIG5hbWU9Ik15UHJvamVjdEFwcGxpY2F0aW9uIiB0eXBlPSJBcHBsaWNhdGlvbiIgZmFjdG9yeU5hbWU9IkFwcGxpY2F0aW9uIiB0ZW1wb3Jhcnk9InRydWUiIG5hbWVJc0dlbmVyYXRlZD0idHJ1ZSI+CisgICAgICA8b3B0aW9uIG5hbWU9Ik1BSU5fQ0xBU1NfTkFNRSIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5NeVByb2plY3RBcHBsaWNhdGlvbiIgLz4KKyAgICAgIDxtb2R1bGUgbmFtZT0iZWNoby1iYWNrZW5kIiAvPgorICAgICAgPGV4dGVuc2lvbiBuYW1lPSJjb3ZlcmFnZSI+CisgICAgICAgIDxwYXR0ZXJuPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0iUEFUVEVSTiIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC4qIiAvPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0iRU5BQkxFRCIgdmFsdWU9InRydWUiIC8+CisgICAgICAgIDwvcGF0dGVybj4KKyAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPG1ldGhvZCB2PSIyIj4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJNYWtlIiBlbmFibGVkPSJ0cnVlIiAvPgorICAgICAgPC9tZXRob2Q+CisgICAgPC9jb25maWd1cmF0aW9uPgorICAgIDxjb25maWd1cmF0aW9uIG5hbWU9IlRyYWNrZXJTZXJ2ZXIiIHR5cGU9IkFwcGxpY2F0aW9uIiBmYWN0b3J5TmFtZT0iQXBwbGljYXRpb24iIHRlbXBvcmFyeT0idHJ1ZSIgbmFtZUlzR2VuZXJhdGVkPSJ0cnVlIj4KKyAgICAgIDxvcHRpb24gbmFtZT0iTUFJTl9DTEFTU19OQU1FIiB2YWx1ZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LnRyYWNrZXIuVHJhY2tlclNlcnZlciIgLz4KKyAgICAgIDxtb2R1bGUgbmFtZT0iZWNoby1iYWNrZW5kIiAvPgorICAgICAgPGV4dGVuc2lvbiBuYW1lPSJjb3ZlcmFnZSI+CisgICAgICAgIDxwYXR0ZXJuPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0iUEFUVEVSTiIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC50cmFja2VyLioiIC8+CisgICAgICAgICAgPG9wdGlvbiBuYW1lPSJFTkFCTEVEIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgICAgPC9wYXR0ZXJuPgorICAgICAgPC9leHRlbnNpb24+CisgICAgICA8bWV0aG9kIHY9IjIiPgorICAgICAgICA8b3B0aW9uIG5hbWU9Ik1ha2UiIGVuYWJsZWQ9InRydWUiIC8+CisgICAgICA8L21ldGhvZD4KKyAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgPGNvbmZpZ3VyYXRpb24gbmFtZT0iVG9ycmVudENvbnRyb2xsZXJUZXN0IiB0eXBlPSJKVW5pdCIgZmFjdG9yeU5hbWU9IkpVbml0IiB0ZW1wb3Jhcnk9InRydWUiIG5hbWVJc0dlbmVyYXRlZD0idHJ1ZSI+CisgICAgICA8bW9kdWxlIG5hbWU9ImVjaG8tYmFja2VuZCIgLz4KKyAgICAgIDxleHRlbnNpb24gbmFtZT0iY292ZXJhZ2UiPgorICAgICAgICA8cGF0dGVybj4KKyAgICAgICAgICA8b3B0aW9uIG5hbWU9IlBBVFRFUk4iIHZhbHVlPSJjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlci4qIiAvPgorICAgICAgICAgIDxvcHRpb24gbmFtZT0iRU5BQkxFRCIgdmFsdWU9InRydWUiIC8+CisgICAgICAgIDwvcGF0dGVybj4KKyAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPG9wdGlvbiBuYW1lPSJQQUNLQUdFX05BTUUiIHZhbHVlPSJjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlciIgLz4KKyAgICAgIDxvcHRpb24gbmFtZT0iTUFJTl9DTEFTU19OQU1FIiB2YWx1ZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIuVG9ycmVudENvbnRyb2xsZXJUZXN0IiAvPgorICAgICAgPG9wdGlvbiBuYW1lPSJURVNUX09CSkVDVCIgdmFsdWU9ImNsYXNzIiAvPgorICAgICAgPG1ldGhvZCB2PSIyIj4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJNYWtlIiBlbmFibGVkPSJ0cnVlIiAvPgorICAgICAgPC9tZXRob2Q+CisgICAgPC9jb25maWd1cmF0aW9uPgorICAgIDxyZWNlbnRfdGVtcG9yYXJ5PgorICAgICAgPGxpc3Q+CisgICAgICAgIDxpdGVtIGl0ZW12YWx1ZT0i5bqU55So56iL5bqPLk15UHJvamVjdEFwcGxpY2F0aW9uIiAvPgorICAgICAgICA8aXRlbSBpdGVtdmFsdWU9IkpVbml0LlRvcnJlbnRDb250cm9sbGVyVGVzdCIgLz4KKyAgICAgIDwvbGlzdD4KKyAgICA8L3JlY2VudF90ZW1wb3Jhcnk+CisgIDwvY29tcG9uZW50PgogICA8Y29tcG9uZW50IG5hbWU9IlNwZWxsQ2hlY2tlclNldHRpbmdzIiBSdW50aW1lRGljdGlvbmFyaWVzPSIwIiBGb2xkZXJzPSIwIiBDdXN0b21EaWN0aW9uYXJpZXM9IjAiIERlZmF1bHREaWN0aW9uYXJ5PSJhcHBsaWNhdGlvbi1sZXZlbCIgVXNlU2luZ2xlRGljdGlvbmFyeT0idHJ1ZSIgdHJhbnNmZXJyZWQ9InRydWUiIC8+CiAgIDxjb21wb25lbnQgbmFtZT0iVGFza01hbmFnZXIiPgogICAgIDx0YXNrIGFjdGl2ZT0idHJ1ZSIgaWQ9IkRlZmF1bHQiIHN1bW1hcnk9IkRlZmF1bHQgdGFzayI+CmRpZmYgLS1naXQgYS8udnNjb2RlL2xhdW5jaC5qc29uIGIvLnZzY29kZS9sYXVuY2guanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmRhMmVhCi0tLSAvZGV2L251bGwKKysrIGIvLnZzY29kZS9sYXVuY2guanNvbgpAQCAtMCwwICsxLDE0IEBACit7CisgICAgImNvbmZpZ3VyYXRpb25zIjogWworICAgICAgICB7CisgICAgICAgICAgICAidHlwZSI6ICJqYXZhIiwKKyAgICAgICAgICAgICJuYW1lIjogIlNwcmluZyBCb290LU15UHJvamVjdEFwcGxpY2F0aW9uPGVjaG8tYmFja2VuZD4iLAorICAgICAgICAgICAgInJlcXVlc3QiOiAibGF1bmNoIiwKKyAgICAgICAgICAgICJjd2QiOiAiJHt3b3Jrc3BhY2VGb2xkZXJ9IiwKKyAgICAgICAgICAgICJtYWluQ2xhc3MiOiAiY29tLmV4YW1wbGUubXlwcm9qZWN0Lk15UHJvamVjdEFwcGxpY2F0aW9uIiwKKyAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJlY2hvLWJhY2tlbmQiLAorICAgICAgICAgICAgImFyZ3MiOiAiIiwKKyAgICAgICAgICAgICJlbnZGaWxlIjogIiR7d29ya3NwYWNlRm9sZGVyfS8uZW52IgorICAgICAgICB9CisgICAgXQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLy52c2NvZGUvc2V0dGluZ3MuanNvbiBiLy52c2NvZGUvc2V0dGluZ3MuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODRmODljCi0tLSAvZGV2L251bGwKKysrIGIvLnZzY29kZS9zZXR0aW5ncy5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAgICJqYXZhLmNvbmZpZ3VyYXRpb24udXBkYXRlQnVpbGRDb25maWd1cmF0aW9uIjogImludGVyYWN0aXZlIiwKKyAgICAiamF2YS5jb21waWxlLm51bGxBbmFseXNpcy5tb2RlIjogImF1dG9tYXRpYyIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kYXRhL3RvcnJlbnRzL2E0Y2QxNmIyNmE4OWVjN2U1ZGM1MzQwNDBlZGNhOTQ4Zjc4OTE4ZWMudG9ycmVudCBiL2RhdGEvdG9ycmVudHMvYTRjZDE2YjI2YTg5ZWM3ZTVkYzUzNDA0MGVkY2E5NDhmNzg5MThlYy50b3JyZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OTA4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9kYXRhL3RvcnJlbnRzL2E0Y2QxNmIyNmE4OWVjN2U1ZGM1MzQwNDBlZGNhOTQ4Zjc4OTE4ZWMudG9ycmVudApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kYXRhL3RvcnJlbnRzL2ZpbGVzLnRvcnJlbnQgYi9kYXRhL3RvcnJlbnRzL2ZpbGVzLnRvcnJlbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0OTc0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RhdGEvdG9ycmVudHMvZmlsZXMudG9ycmVudApAQCAtMCwwICsxIEBACitkODphbm5vdW5jZTIyOmh0dHBzOi8vdHJhY2tlci5ieXIucHQxMDpjcmVhdGVkIGJ5MjE6cUJpdHRvcnJlbnQgdjQuNS4zLjEwMTM6Y3JlYXRpb24gZGF0ZWkxNzQ3NzE3OTAxZTQ6aW5mb2Q1OmZpbGVzbGQ2Omxlbmd0aGkxNzNlNDpwYXRobDEzOnZhbGlkLnRvcnJlbnRlZWU0Om5hbWU1OmZpbGVzMTI6cGllY2UgbGVuZ3RoaTE2Mzg0ZTY6cGllY2VzMjA6L/Ht6EX0NeM88vsf7NWEn1GhlvtlZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RhdGEvdG9ycmVudHMvdmFsaWQudG9ycmVudCBiL2RhdGEvdG9ycmVudHMvdmFsaWQudG9ycmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTkwZTUyCi0tLSAvZGV2L251bGwKKysrIGIvZGF0YS90b3JyZW50cy92YWxpZC50b3JyZW50CkBAIC0wLDAgKzEgQEAKK2QxMDpjcmVhdGVkIGJ5MTg6cUJpdHRvcnJlbnQgdjUuMS4wMTM6Y3JlYXRpb24gZGF0ZWkxNzQ1OTQ4OTk1ZTQ6aW5mb2Q2Omxlbmd0aGkyMmU0Om5hbWUxNTpleGFtcGxlLnRvcnJlbnQxMjpwaWVjZSBsZW5ndGhpMTYzODRlNjpwaWVjZXMyMDpGbh7wthop+jzHCY4G5sJoFKN0bDc6cHJpdmF0ZWkxZWVlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicy90dG9ycmVudC1iZW5jb2RpbmctMS4zLjAtU05BUFNIT1QuamFyIGIvbGlicy90dG9ycmVudC1iZW5jb2RpbmctMS4zLjAtU05BUFNIT1QuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYzdmYzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL3R0b3JyZW50LWJlbmNvZGluZy0xLjMuMC1TTkFQU0hPVC5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGlicy90dG9ycmVudC1jbGktMS4zLjAtU05BUFNIT1QuamFyIGIvbGlicy90dG9ycmVudC1jbGktMS4zLjAtU05BUFNIT1QuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNTFmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL3R0b3JyZW50LWNsaS0xLjMuMC1TTkFQU0hPVC5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGlicy90dG9ycmVudC1jbGllbnQtMS4zLjAtU05BUFNIT1QuamFyIGIvbGlicy90dG9ycmVudC1jbGllbnQtMS4zLjAtU05BUFNIT1QuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhM2QzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL3R0b3JyZW50LWNsaWVudC0xLjMuMC1TTkFQU0hPVC5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGlicy90dG9ycmVudC1jb21tb24tMS4zLjAtU05BUFNIT1QuamFyIGIvbGlicy90dG9ycmVudC1jb21tb24tMS4zLjAtU05BUFNIT1QuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNDBlN2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL3R0b3JyZW50LWNvbW1vbi0xLjMuMC1TTkFQU0hPVC5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGlicy90dG9ycmVudC1uZXR3b3JrLTEuMC5qYXIgYi9saWJzL3R0b3JyZW50LW5ldHdvcmstMS4wLmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODUxMTgxCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy90dG9ycmVudC1uZXR3b3JrLTEuMC5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGlicy90dG9ycmVudC10ZXN0LWFwaS0xLjAuamFyIGIvbGlicy90dG9ycmVudC10ZXN0LWFwaS0xLjAuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNGQ1NmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL3R0b3JyZW50LXRlc3QtYXBpLTEuMC5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGlicy90dG9ycmVudC10ZXN0cy0xLjMuMC1TTkFQU0hPVC5qYXIgYi9saWJzL3R0b3JyZW50LXRlc3RzLTEuMy4wLVNOQVBTSE9ULmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzdiZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy90dG9ycmVudC10ZXN0cy0xLjMuMC1TTkFQU0hPVC5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGlicy90dG9ycmVudC10cmFja2VyLTEuMy4wLVNOQVBTSE9ULmphciBiL2xpYnMvdHRvcnJlbnQtdHJhY2tlci0xLjMuMC1TTkFQU0hPVC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY3MDQ2MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvdHRvcnJlbnQtdHJhY2tlci0xLjMuMC1TTkFQU0hPVC5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG9tLnhtbCBiL3BvbS54bWwKaW5kZXggZGI2ZWQxOS4uNTVjYjY5OCAxMDA2NDQKLS0tIGEvcG9tLnhtbAorKysgYi9wb20ueG1sCkBAIC0xLDcgKzEsNyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KICAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAKICAgICA8Z3JvdXBJZD5ncm91cElkPC9ncm91cElkPgpAQCAtMTEsMTMgKzExLDEzIEBACiAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdDwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3Qtc3RhcnRlci1wYXJlbnQ8L2FydGlmYWN0SWQ+CiAgICAgICAgIDx2ZXJzaW9uPjIuNi4wPC92ZXJzaW9uPiA8IS0tIOS9v+eUqOS9oOW4jOacm+eahFNwcmluZyBCb29054mI5pysIC0tPgotICAgICAgICA8cmVsYXRpdmVQYXRoLz4gPCEtLSBsb29rdXAgcGFyZW50IGZyb20gcmVwb3NpdG9yeSAtLT4KKyAgICAgICAgPHJlbGF0aXZlUGF0aCAvPiA8IS0tIGxvb2t1cCBwYXJlbnQgZnJvbSByZXBvc2l0b3J5IC0tPgogICAgIDwvcGFyZW50PgotCiAgICAgPHByb3BlcnRpZXM+CiAgICAgICAgIDxtYXZlbi5jb21waWxlci5zb3VyY2U+MTc8L21hdmVuLmNvbXBpbGVyLnNvdXJjZT4KICAgICAgICAgPG1hdmVuLmNvbXBpbGVyLnRhcmdldD4xNzwvbWF2ZW4uY29tcGlsZXIudGFyZ2V0PgogICAgICAgICA8cHJvamVjdC5idWlsZC5zb3VyY2VFbmNvZGluZz5VVEYtODwvcHJvamVjdC5idWlsZC5zb3VyY2VFbmNvZGluZz4KKyAgICAgICAgPHNhLXRva2VuLnZlcnNpb24+MS4zNy4wPC9zYS10b2tlbi52ZXJzaW9uPgogICAgIDwvcHJvcGVydGllcz4KIAogICAgIDxkZXBlbmRlbmNpZXM+CkBAIC03OCw2ICs3OCwxNiBAQAogICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXgueG1sLmJpbmQ8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYXhiLWFwaTwvYXJ0aWZhY3RJZD4KICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbS5naXRodWIueGlhb3ltaW48L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5rbmlmZTRqLW9wZW5hcGkzLWpha2FydGEtc3ByaW5nLWJvb3Qtc3RhcnRlcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuNS4wPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXgudmFsaWRhdGlvbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnZhbGlkYXRpb24tYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLjEuRmluYWw8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPCEtLSBTcHJpbmcgV2ViIE1WQyAtLT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrPC9ncm91cElkPgpAQCAtMTA4LDExICsxMTgsMTcgQEAKICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMTguMzA8L3ZlcnNpb24+IDwhLS0g56Gu5L+d5L2/55So55qE5piv5pyA5paw54mI5pysIC0tPgogICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbS5naXRodWIucGFnZWhlbHBlcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnBhZ2VoZWxwZXItc3ByaW5nLWJvb3Qtc3RhcnRlcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuNC43PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKIAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5zbGY0ajwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNsZjRqLWFwaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuNy4zMDwvdmVyc2lvbj4gPCEtLSDniYjmnKzlj6/ku6XmoLnmja7pnIDopoHosIPmlbQgLS0+CisgICAgICAgICAgICA8dmVyc2lvbj4xLjcuMzI8L3ZlcnNpb24+IDwhLS0g54mI5pys5Y+v5Lul5qC55o2u6ZyA6KaB6LCD5pW0IC0tPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+Y2gucW9zLmxvZ2JhY2s8L2dyb3VwSWQ+CkBAIC0xMjksMTEgKzE0NSw3IEBACiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3Q8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctYm9vdC1zdGFydGVyLXZhbGlkYXRpb248L2FydGlmYWN0SWQ+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5jb20uYmFpZHViY2U8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5xaWFuZmFuPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MC4xLjE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KKwogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1ib290LXN0YXJ0ZXItd2ViZmx1eDwvYXJ0aWZhY3RJZD4KQEAgLTE0NCwxNiArMTU2LDY4IEBACiAgICAgICAgICAgICA8dmVyc2lvbj40LjEyPC92ZXJzaW9uPgogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm1vY2tpdG88L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5tb2NraXRvLWNvcmU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KKwogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1ib290LXN0YXJ0ZXItdGVzdDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbS50dXJuPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHRvcnJlbnQtY29tbW9uPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8IS0tIHR0b3JyZW50IC0tPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbS50dXJuPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHRvcnJlbnQtY2xpZW50PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20udHVybjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR0b3JyZW50LWNsaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLnR1cm48L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dG9ycmVudC1uZXR3b3JrPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4wPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLnR1cm48L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dG9ycmVudC10ZXN0LWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbS50dXJuPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHRvcnJlbnQtYmVuY29kaW5nPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20udHVybjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR0b3JyZW50LXRlc3RzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20udHVybjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR0b3JyZW50LXRyYWNrZXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4xLjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbS5naXRodWIueGlhb3ltaW48L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5rbmlmZTRqLW9wZW5hcGkzLWpha2FydGEtc3ByaW5nLWJvb3Qtc3RhcnRlcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuNS4wPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jbi5kZXYzMzwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNhLXRva2VuLXNwcmluZy1ib290LXN0YXJ0ZXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke3NhLXRva2VuLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKworCiAKICAgICA8L2RlcGVuZGVuY2llcz4KIApAQCAtMjAyLDcgKzI2Niw4IEBACiAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuOTwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPCEtLXN1cHByZXNzIFVucmVzb2x2ZWRNYXZlblByb3BlcnR5IC0tPgorICAgICAgICAgICAgICAgICAgICA8IS0tc3VwcHJlc3MKKyAgICAgICAgICAgICAgICAgICAgVW5yZXNvbHZlZE1hdmVuUHJvcGVydHkgLS0+CiAgICAgICAgICAgICAgICAgICAgIDxhcmdMaW5lPiR7c3VyZWZpcmVBcmdMaW5lfTwvYXJnTGluZT4KICAgICAgICAgICAgICAgICAgICAgPHNraXBUZXN0cz5mYWxzZTwvc2tpcFRlc3RzPgogICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZXM+CkBAIC0yMjEsMTQgKzI4NiwyMiBAQAogICAgICAgICAgICAgPC9wbHVnaW4+CiAKICAgICAgICAgPC9wbHVnaW5zPgotICAgICAgICA8cmVzb3VyY2VzPgotICAgICAgICAgICAgPHJlc291cmNlPgotICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+c3JjL21haW4vamF2YTwvZGlyZWN0b3J5PgotICAgICAgICAgICAgICAgIDxpbmNsdWRlcz4KLSAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi54bWw8L2luY2x1ZGU+Ci0gICAgICAgICAgICAgICAgPC9pbmNsdWRlcz4KLSAgICAgICAgICAgIDwvcmVzb3VyY2U+Ci0gICAgICAgIDwvcmVzb3VyY2VzPgorPCEtLSAgICAgICAgICAgICAgICA8cmVzb3VyY2VzPi0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgPHJlc291cmNlPi0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+c3JjL21haW4vamF2YTwvZGlyZWN0b3J5Pi0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlcz4tLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi54bWw8L2luY2x1ZGU+LS0+Cis8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPC9pbmNsdWRlcz4tLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgIDwvcmVzb3VyY2U+LS0+Cis8IS0tICAgICAgICAgICAgICAgICAgICA8cmVzb3VyY2U+LS0+Cis8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPGRpcmVjdG9yeT5saWJzPC9kaXJlY3Rvcnk+LS0+Cis8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPi0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZT4qLmphcjwvaW5jbHVkZT4tLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8L2luY2x1ZGVzPi0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgPC9yZXNvdXJjZT4tLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgIDwvcmVzb3VyY2VzPi0tPgorCisKICAgICA8L2J1aWxkPgogCiA8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L015UHJvamVjdEFwcGxpY2F0aW9uLmphdmEKaW5kZXggNDljZDVmMC4uZWI1ODA4MiAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uamF2YQorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5qYXZhCkBAIC01LDEwICs1LDE0IEBACiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LlNwcmluZ0FwcGxpY2F0aW9uOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdC5hdXRvY29uZmlndXJlLlNwcmluZ0Jvb3RBcHBsaWNhdGlvbjsKIAorCisKIEBTcHJpbmdCb290QXBwbGljYXRpb24KIEBNYXBwZXJTY2FuKCJjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyIikgIC8vIOaJq+aPjyBNYXBwZXIg5o6l5Y+jCisKIHB1YmxpYyBjbGFzcyBNeVByb2plY3RBcHBsaWNhdGlvbiB7CiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBTcHJpbmdBcHBsaWNhdGlvbi5ydW4oTXlQcm9qZWN0QXBwbGljYXRpb24uY2xhc3MsIGFyZ3MpOwogICAgIH0KIH0KKwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbW1vblJlc3VsdFN0YXR1cy5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbW1vblJlc3VsdFN0YXR1cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTYzYTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29tbW9uUmVzdWx0U3RhdHVzLmphdmEKQEAgLTAsMCArMSwzNyBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uOworCisKK3B1YmxpYyBlbnVtIENvbW1vblJlc3VsdFN0YXR1cyBpbXBsZW1lbnRzIFJlc3VsdFN0YXR1cyB7CisKKyAgICBPSygwLCAi5oiQ5YqfIiksCisKKyAgICBGQUlMKDUwMCwgIuWksei0pSIpLAorCisgICAgUEFSQU1fRVJST1IoNDAwLCAi5Y+C5pWw6Z2e5rOVIiksCisKKyAgICBSRUNPUkRfTk9UX0VYSVNUKDQwNCwgIuiusOW9leS4jeWtmOWcqCIpLAorCisgICAgVU5BVVRIT1JJWkVEKDQwMSwgIuacquaOiOadgyIpLAorCisgICAgRk9SQklEREVOKDQwMywgIuaXoOadg+mZkCIpLAorCisgICAgU0VSVkVSX0VSUk9SKDUwMCwgIuacjeWKoeWZqOWGhemDqOmUmeivryIpOworCisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgY29kZTsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtZXNzYWdlOworCisgICAgQ29tbW9uUmVzdWx0U3RhdHVzKGludCBjb2RlLCBTdHJpbmcgbWVzc2FnZSkgeworICAgICAgICB0aGlzLmNvZGUgPSBjb2RlOworICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0Q29kZSgpIHsKKyAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgeworICAgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzZDg2NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9Db25zdGFudHMuamF2YQpAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb247CisKKworcHVibGljIGludGVyZmFjZSBDb25zdGFudHMgeworCisgICAgU3RyaW5nIFRPS0VOX0hFQURFUl9OQU1FID0gIkF1dGhvcml6YXRpb24iOworICAgIFN0cmluZyBTRVNTSU9OX0NVUlJFTlRfVVNFUiA9ICJjdXJyZW50VXNlciI7CisKKyAgICAvKioKKyAgICAgKiDoj5zljZXmoLlpZAorICAgICAqLworICAgIEludGVnZXIgUkVTT1VSQ0VfUk9PVF9JRCA9IDA7CisKKyAgICBpbnRlcmZhY2UgT3JkZXIgeworICAgICAgICBTdHJpbmcgREVGQVVMVF9PUkRFUl9UWVBFID0gImRlc2MiOworCisgICAgICAgIFN0cmluZ1tdIE9SREVSX1RZUEUgPSBuZXcgU3RyaW5nW117ImRlc2MiLCAiYXNjIiwgIkRFU0MiLCAiQVNDIn07CisgICAgfQorCisgICAgaW50ZXJmYWNlIEZpbmlzaFN0YXR1cyB7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIOW3suWujOaIkOW5tua1i+ivlQorICAgICAgICAgKi8KKyAgICAgICAgU3RyaW5nIEZJTklTSEVEID0gIiAo5bey5a6M5oiQ5bm25rWL6K+V6YCa6L+HKSI7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIOacquWujOaIkOacqua1i+ivlQorICAgICAgICAgKi8KKyAgICAgICAgU3RyaW5nIFVORklOSVNIRUQgPSAiICjmnKrlrozmiJDmnKrmtYvor5UpIjsKKworICAgICAgICAvKioKKyAgICAgICAgICog5bey5a6M5oiQ5L2G5pyq5rWL6K+VCisgICAgICAgICAqLworICAgICAgICBTdHJpbmcgRklOSVNIRURfTk9UX1RFU1QgPSAiICjlt7LlrozmiJDkvYbmnKrmtYvor5UpIjsKKworICAgIH0KKworICAgIGludGVyZmFjZSBTb3VyY2UgeworICAgICAgICBTdHJpbmcgUFJFRklYID0gIltSS1RdICI7CisKKyAgICAgICAgU3RyaW5nIE5BTUUgPSAicm9ja2V0IHB0IjsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgQW5ub3VuY2UgeworCisgICAgICAgIFN0cmluZyBQUk9UT0NPTCA9ICJodHRwIjsKKworICAgICAgICBTdHJpbmcgSE9TVE5BTUUgPSAiMTkyLjE2OC42LjExMiI7CisKKyAgICAgICAgSW50ZWdlciBQT1JUID0gOTk2NjsKKworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9SZXN1bHRTdGF0dXMuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9SZXN1bHRTdGF0dXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmM3YWZlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL1Jlc3VsdFN0YXR1cy5qYXZhCkBAIC0wLDAgKzEsMTQgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbW1vbjsKKworCitwdWJsaWMgaW50ZXJmYWNlIFJlc3VsdFN0YXR1cyB7CisgICAgLyoqCisgICAgICog6ZSZ6K+v56CBCisgICAgICovCisgICAgaW50IGdldENvZGUoKTsKKworICAgIC8qKgorICAgICAqIOmUmeivr+S/oeaBrworICAgICAqLworICAgIFN0cmluZyBnZXRNZXNzYWdlKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9JMThuTWVzc2FnZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvSTE4bk1lc3NhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzI1ZTliCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvSTE4bk1lc3NhZ2UuamF2YQpAQCAtMCwwICsxLDYxIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uYmFzZTsKKworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5NZXNzYWdlU291cmNlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5pMThuLkxvY2FsZUNvbnRleHRIb2xkZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuUmVsb2FkYWJsZVJlc291cmNlQnVuZGxlTWVzc2FnZVNvdXJjZTsKKworaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOworCitpbXBvcnQgbG9tYm9rLmV4cGVyaW1lbnRhbC5VdGlsaXR5Q2xhc3M7CitpbXBvcnQgbG9tYm9rLmV4dGVybi5zbGY0ai5TbGY0ajsKKworQFNsZjRqCitAVXRpbGl0eUNsYXNzCitwdWJsaWMgY2xhc3MgSTE4bk1lc3NhZ2UgeworCisgICAgc3RhdGljIHsKKyAgICAgICAgUmVsb2FkYWJsZVJlc291cmNlQnVuZGxlTWVzc2FnZVNvdXJjZSBtZXNzYWdlU291cmNlID0KKyAgICAgICAgICAgICAgICBuZXcgUmVsb2FkYWJsZVJlc291cmNlQnVuZGxlTWVzc2FnZVNvdXJjZSgpOworICAgICAgICBtZXNzYWdlU291cmNlLnNldENhY2hlU2Vjb25kcyg1KTsKKyAgICAgICAgbWVzc2FnZVNvdXJjZS5zZXRCYXNlbmFtZXMoImNsYXNzcGF0aDppMThuL21lc3NhZ2UiKTsKKyAgICAgICAgSTE4bk1lc3NhZ2UuaW5pdChtZXNzYWdlU291cmNlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBNZXNzYWdlU291cmNlIG1lc3NhZ2VTb3VyY2U7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgaW5pdChNZXNzYWdlU291cmNlIG1lc3NhZ2VTb3VyY2UpIHsKKyAgICAgICAgT2JqZWN0cy5yZXF1aXJlTm9uTnVsbChtZXNzYWdlU291cmNlLCAiTWVzc2FnZVNvdXJjZSBjYW4ndCBiZSBudWxsIik7CisgICAgICAgIEkxOG5NZXNzYWdlLm1lc3NhZ2VTb3VyY2UgPSBtZXNzYWdlU291cmNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIOivu+WPluWbvemZheWMlua2iOaBrworICAgICAqCisgICAgICogQHBhcmFtIG1zZ0NvZGUg5raI5oGv56CBCisgICAgICogQHBhcmFtIGFyZ3MgICAg5raI5oGv5Y+C5pWwIOS+izogbmV3IFN0cmluZ1tdeyIxIiwiMiIsIjMifQorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBtc2dDb2RlLCBPYmplY3RbXSBhcmdzKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gSTE4bk1lc3NhZ2UubWVzc2FnZVNvdXJjZS5nZXRNZXNzYWdlKG1zZ0NvZGUsIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgIExvY2FsZUNvbnRleHRIb2xkZXIuZ2V0TG9jYWxlKCkpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgaWYgKGxvZy5pc0RlYnVnRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvZy5lcnJvcigiPT09PiDor7vlj5blm73pmYXljJbmtojmga/lpLHotKUsIGNvZGU6e30sIGFyZ3M6e30sIGV4Ont9IiwgbXNnQ29kZSwgYXJncywKKyAgICAgICAgICAgICAgICAgICAgZS5nZXRNZXNzYWdlKCkgPT0gbnVsbCA/IGUudG9TdHJpbmcoKSA6IGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gIi1Vbmtub3duLSI7CisgICAgfQorCisgICAgLyoqCisgICAgICog6I635Y+W5LiA5p2h6K+t6KiA6YWN572u5L+h5oGvCisgICAgICoKKyAgICAgKiBAcGFyYW0gbXNnQ29kZSDmtojmga/noIEKKyAgICAgKiBAcmV0dXJuIOWvueW6lOmFjee9rueahOS/oeaBrworICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIG1zZ0NvZGUpIHsKKyAgICAgICAgcmV0dXJuIEkxOG5NZXNzYWdlLmdldE1lc3NhZ2UobXNnQ29kZSwgbnVsbCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvT3JkZXJQYWdlUGFyYW0uamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL09yZGVyUGFnZVBhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFmZjM4YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL09yZGVyUGFnZVBhcmFtLmphdmEKQEAgLTAsMCArMSw5OSBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uLmJhc2U7CisKKworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uQ29tbW9uUmVzdWx0U3RhdHVzOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uQ29uc3RhbnRzOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uZXhjZXB0aW9uLlJvY2tldFBURXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN0cmluZ1V0aWxzOworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgY24uaHV0b29sLmNvcmUudXRpbC5BcnJheVV0aWw7CitpbXBvcnQgY24uaHV0b29sLmNvcmUudXRpbC5TdHJVdGlsOworaW1wb3J0IGlvLnN3YWdnZXIudjMub2FzLmFubm90YXRpb25zLm1lZGlhLlNjaGVtYTsKK2ltcG9ydCBsb21ib2suR2V0dGVyOworaW1wb3J0IGxvbWJvay5TZXR0ZXI7CisKK0BHZXR0ZXIKK0BTZXR0ZXIKK3B1YmxpYyBjbGFzcyBPcmRlclBhZ2VQYXJhbSBleHRlbmRzIFBhZ2VQYXJhbSB7CisKKyAgICAvKioKKyAgICAgKiDmjpLluo/lrZfmrrUKKyAgICAgKi8KKyAgICBAU2NoZW1hKGRlc2NyaXB0aW9uID0gIuaOkuW6j+Wtl+autSIpCisgICAgcHJvdGVjdGVkIFN0cmluZyBwcm9wOworCisgICAgLyoqCisgICAgICog5o6S5bqP6KeE5YiZCisgICAgICovCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLmjpLluo/op4TliJkiKQorICAgIHByb3RlY3RlZCBTdHJpbmcgc29ydDsKKworICAgIHB1YmxpYyB2b2lkIHZhbGlkT3JkZXIoTGlzdDxTdHJpbmc+IG9yZGVyS2V5KSB0aHJvd3MgUm9ja2V0UFRFeGNlcHRpb24geworICAgICAgICBwcm9wID0gU3RyaW5nVXRpbHMuaXNCbGFuayhwcm9wKSA/IG51bGwgOiBTdHJVdGlsLnRvVW5kZXJsaW5lQ2FzZShwcm9wKTsKKyAgICAgICAgc29ydCA9IFN0cmluZ1V0aWxzLmlzQmxhbmsoc29ydCkgPyBDb25zdGFudHMuT3JkZXIuREVGQVVMVF9PUkRFUl9UWVBFIDogc29ydDsKKworICAgICAgICBpZiAoQXJyYXlzLmFzTGlzdChDb25zdGFudHMuT3JkZXIuT1JERVJfVFlQRSkuaW5kZXhPZihzb3J0KSA8IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSb2NrZXRQVEV4Y2VwdGlvbihDb21tb25SZXN1bHRTdGF0dXMuUEFSQU1fRVJST1IsICLmjpLluo/mlrnlvI/pjK/oqqQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChTdHJpbmdVdGlscy5pc05vdEJsYW5rKHByb3ApICYmIEFycmF5cy5hc0xpc3Qob3JkZXJLZXkpLmluZGV4T2YocHJvcCkgPCAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUm9ja2V0UFRFeGNlcHRpb24oQ29tbW9uUmVzdWx0U3RhdHVzLlBBUkFNX0VSUk9SLCAi5o6S5bqP5qyE5L2N6Yyv6KqkIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB2YWxpZE9yZGVyKCkgdGhyb3dzIFJvY2tldFBURXhjZXB0aW9uIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IG9yZGVyS2V5ID0gZ2V0T3JkZXJLZXkoKTsKKyAgICAgICAgcHJvcCA9IFN0cmluZ1V0aWxzLmlzQmxhbmsocHJvcCkgPyBudWxsIDogU3RyVXRpbC50b1VuZGVybGluZUNhc2UocHJvcCk7CisgICAgICAgIHNvcnQgPSBTdHJpbmdVdGlscy5pc0JsYW5rKHNvcnQpID8gQ29uc3RhbnRzLk9yZGVyLkRFRkFVTFRfT1JERVJfVFlQRSA6IHNvcnQ7CisKKyAgICAgICAgaWYgKCFBcnJheVV0aWwuY29udGFpbnMoQ29uc3RhbnRzLk9yZGVyLk9SREVSX1RZUEUsIHNvcnQpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUm9ja2V0UFRFeGNlcHRpb24oQ29tbW9uUmVzdWx0U3RhdHVzLlBBUkFNX0VSUk9SLCAi5o6S5bqP5pa55byP6Yyv6KqkIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoU3RyaW5nVXRpbHMuaXNOb3RCbGFuayhwcm9wKSAmJiAhb3JkZXJLZXkuY29udGFpbnMocHJvcCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSb2NrZXRQVEV4Y2VwdGlvbihDb21tb25SZXN1bHRTdGF0dXMuUEFSQU1fRVJST1IsICLmjpLluo/mrITkvY3pjK/oqqQiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4g5Y+N5bCE6I635Y+W5a2X5q615YiX6KGoCisgICAgICovCisgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRPcmRlcktleSgpIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgICAgICBGaWVsZFtdIGZpZWxkcyA9IGdldENsYXNzKCkuZ2V0RGVjbGFyZWRGaWVsZHMoKTsKKyAgICAgICAgaWYgKGZpZWxkcyAhPSBudWxsKSB7CisgICAgICAgICAgICBmb3IgKEZpZWxkIGZpZWxkIDogZmllbGRzKSB7CisgICAgICAgICAgICAgICAgZmllbGQuc2V0QWNjZXNzaWJsZSh0cnVlKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGZpZWxkLmdldE5hbWUoKTsKKworICAgICAgICAgICAgICAgIGxpc3QuYWRkKFN0clV0aWwudG9VbmRlcmxpbmVDYXNlKG5hbWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGlzdDsKKyAgICB9CisgICAgLyoqCisgICAgICogQHJldHVybiDlj43lsITojrflj5blrZfmrrXliJfooagKKyAgICAgKi8KKyAgICBwdWJsaWMgTGlzdDxTdHJpbmc+IGdldE9yZGVyS2V5KENsYXNzIGNsYXp6KSB7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisKKyAgICAgICAgRmllbGRbXSBmaWVsZHMgPSBjbGF6ei5nZXREZWNsYXJlZEZpZWxkcygpOworICAgICAgICBpZiAoZmllbGRzICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAoRmllbGQgZmllbGQgOiBmaWVsZHMpIHsKKyAgICAgICAgICAgICAgICBmaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOworICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZmllbGQuZ2V0TmFtZSgpOworCisgICAgICAgICAgICAgICAgbGlzdC5hZGQoU3RyVXRpbC50b1VuZGVybGluZUNhc2UobmFtZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBsaXN0OworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUGFnZVBhcmFtLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9QYWdlUGFyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTkxMDhkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUGFnZVBhcmFtLmphdmEKQEAgLTAsMCArMSwyNSBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uLmJhc2U7CisKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLk1heDsKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLk1pbjsKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLk5vdE51bGw7CitpbXBvcnQgbG9tYm9rLkdldHRlcjsKK2ltcG9ydCBsb21ib2suU2V0dGVyOworaW1wb3J0IGxvbWJvay5Ub1N0cmluZzsKKworCitAR2V0dGVyCitAU2V0dGVyCitAVG9TdHJpbmcKK3B1YmxpYyBjbGFzcyBQYWdlUGFyYW0geworICAgIEBOb3ROdWxsKG1lc3NhZ2UgPSAicGFnZeWPguaVsOS4jeiDveS4uuepuiIpCisgICAgQE1pbih2YWx1ZSA9IDFMLCBtZXNzYWdlID0gInBhZ2Xlj4LmlbDlv4XpobvmmK/mlbDlrZfmiJbmlbDlgLzlsI/kuo7pmZDliLYiKQorICAgIHByb3RlY3RlZCBJbnRlZ2VyIHBhZ2U7CisKKyAgICBATm90TnVsbChtZXNzYWdlID0gIuWPguaVsOS4jeiDveS4uuepuiIpCisgICAgQE1pbih2YWx1ZSA9IDFMLCBtZXNzYWdlID0gIuWPguaVsOW/hemhu+aYr+aVsOWtl+aIluaVsOWAvOWwj+S6jumZkOWItiIpCisgICAgQE1heCh2YWx1ZSA9IDIwMEwsIG1lc3NhZ2UgPSAi5Y+C5pWw5b+F6aG75piv5pWw5a2X5oiW5pWw5YC85aSn5LqO6ZmQ5Yi2IikKKyAgICBwcm90ZWN0ZWQgSW50ZWdlciBzaXplOworCisKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1BhZ2VVdGlsLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9QYWdlVXRpbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YjUxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9QYWdlVXRpbC5qYXZhCkBAIC0wLDAgKzEsNTQgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbW1vbi5iYXNlOworCitpbXBvcnQgY29tLmdpdGh1Yi5wYWdlaGVscGVyLlBhZ2VIZWxwZXI7CitpbXBvcnQgY29tLmdpdGh1Yi5wYWdlaGVscGVyLlBhZ2VJbmZvOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK3B1YmxpYyBjbGFzcyBQYWdlVXRpbCB7CisKKworICAgIHB1YmxpYyBzdGF0aWMgaW50IERFRkFVTFRfUEFHRV9TSVpFID0gMjA7CisKKyAgICAvKioKKyAgICAgKiDlvIDlp4vliIbpobUKKyAgICAgKgorICAgICAqIEBwYXJhbSBwYXJhbQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGFydFBhZ2UoT3JkZXJQYWdlUGFyYW0gcGFyYW0pIHsKKyAgICAgICAgSW50ZWdlciBwYWdlID0gcGFyYW0uZ2V0UGFnZSgpOworICAgICAgICBpZiAocGFnZSA9PSBudWxsKSB7CisgICAgICAgICAgICBwYXJhbS5zZXRQYWdlKDEpOworICAgICAgICAgICAgcGFyYW0uc2V0U2l6ZShERUZBVUxUX1BBR0VfU0laRSk7CisgICAgICAgIH0KKworICAgICAgICBQYWdlSGVscGVyLnN0YXJ0UGFnZShwYXJhbS5nZXRQYWdlKCksIHBhcmFtLmdldFNpemUoKSk7CisKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDlvIDlp4vliIbpobUKKyAgICAgKgorICAgICAqIEBwYXJhbSBwYXJhbQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGFydFBhZ2UoUGFnZVBhcmFtIHBhcmFtKSB7CisgICAgICAgIEludGVnZXIgcGFnZSA9IHBhcmFtLmdldFBhZ2UoKTsKKyAgICAgICAgaWYgKHBhZ2UgPT0gbnVsbCkgeworICAgICAgICAgICAgcGFyYW0uc2V0UGFnZSgxKTsKKyAgICAgICAgICAgIHBhcmFtLnNldFNpemUoREVGQVVMVF9QQUdFX1NJWkUpOworICAgICAgICB9CisKKyAgICAgICAgUGFnZUhlbHBlci5zdGFydFBhZ2UocGFyYW0uZ2V0UGFnZSgpLCBwYXJhbS5nZXRTaXplKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIOWIhumhtee7k+aenAorICAgICAqCisgICAgICogQHBhcmFtIGxpc3QKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFJlc1BhZ2UgZ2V0UGFnZShMaXN0IGxpc3QpIHsKKyAgICAgICAgUGFnZUluZm8gcGFnZUluZm8gPSBuZXcgUGFnZUluZm8obGlzdCk7CisgICAgICAgIHJldHVybiBuZXcgUmVzUGFnZShwYWdlSW5mby5nZXRUb3RhbCgpLCBwYWdlSW5mby5nZXRQYWdlTnVtKCksIHBhZ2VJbmZvLmdldFNpemUoKSk7CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9SZXNQYWdlLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9SZXNQYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhMjJkZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1Jlc1BhZ2UuamF2YQpAQCAtMCwwICsxLDMxIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uYmFzZTsKK2ltcG9ydCBsb21ib2suQWxsQXJnc0NvbnN0cnVjdG9yOworaW1wb3J0IGxvbWJvay5HZXR0ZXI7CitpbXBvcnQgbG9tYm9rLk5vQXJnc0NvbnN0cnVjdG9yOworaW1wb3J0IGxvbWJvay5TZXR0ZXI7CitpbXBvcnQgbG9tYm9rLlRvU3RyaW5nOworCisvKioKKyAqIOWIhumhteeahOi/lOWbnuWAvAorICovCitAR2V0dGVyCitAU2V0dGVyCitAVG9TdHJpbmcoY2FsbFN1cGVyID0gZmFsc2UpCitATm9BcmdzQ29uc3RydWN0b3IKK0BBbGxBcmdzQ29uc3RydWN0b3IKK3B1YmxpYyBjbGFzcyBSZXNQYWdlIHsKKworICAgIHByaXZhdGUgbG9uZyB0b3RhbDsKKworICAgIHByaXZhdGUgaW50IHBhZ2U7CisKKyAgICBwcml2YXRlIGludCBzaXplOworCisgICAgcHVibGljIHN0YXRpYyBSZXNQYWdlIGdldFBhZ2UobG9uZyB0b3RhbCwgaW50IHBhZ2UsIGludCBzaXplKSB7CisgICAgICAgIHJldHVybiBuZXcgUmVzUGFnZSh0b3RhbCwgcGFnZSwgc2l6ZSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBSZXNQYWdlIGRlZmF1bHRQYWdlKCkgeworICAgICAgICByZXR1cm4gbmV3IFJlc1BhZ2UoMTAsIDEsIDEwKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9SZXN1bHQuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1Jlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMjBmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9SZXN1bHQuamF2YQpAQCAtMCwwICsxLDE3OCBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uLmJhc2U7CisKKworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5hbm5vdGF0aW9uLkpzb25JZ25vcmU7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvblByb3BlcnR5OworCitpbXBvcnQgbG9tYm9rLkdldHRlcjsKK2ltcG9ydCBsb21ib2suTm9BcmdzQ29uc3RydWN0b3I7CitpbXBvcnQgbG9tYm9rLlNldHRlcjsKK2ltcG9ydCBsb21ib2suVG9TdHJpbmc7CisKKy8qKgorICog6L+U5Zue5YC85a6e5L2T57G7CisgKi8KK0BHZXR0ZXIKK0BTZXR0ZXIKK0BUb1N0cmluZworQE5vQXJnc0NvbnN0cnVjdG9yCitwdWJsaWMgY2xhc3MgUmVzdWx0PFQ+IHsKKworICAgIHByaXZhdGUgaW50IGNvZGU7CisKKyAgICBwcml2YXRlIFN0cmluZyBtc2c7CisKKyAgICBASnNvblByb3BlcnR5CisgICAgcHJpdmF0ZSBUIGRhdGE7CisKKyAgICBwcml2YXRlIFJlc1BhZ2UgcGFnZTsKKworCisgICAgcHVibGljIFJlc3VsdChTdGF0dXMgc3RhdHVzKSB7CisgICAgICAgIHRoaXMuY29kZSA9IHN0YXR1cy5nZXRDb2RlKCk7CisgICAgICAgIHRoaXMubXNnID0gc3RhdHVzLmdldE1zZygpOworICAgICAgICB0aGlzLmRhdGEgPSBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBSZXN1bHQoU3RhdHVzIHN0YXR1cywgVCBkYXRhKSB7CisgICAgICAgIHRoaXMuY29kZSA9IHN0YXR1cy5nZXRDb2RlKCk7CisgICAgICAgIHRoaXMubXNnID0gc3RhdHVzLmdldE1zZygpOworICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOworICAgIH0KKworICAgIHB1YmxpYyBSZXN1bHQoU3RhdHVzIHN0YXR1cywgU3RyaW5nIG1zZykgeworICAgICAgICB0aGlzLmNvZGUgPSBzdGF0dXMuZ2V0Q29kZSgpOworICAgICAgICB0aGlzLm1zZyA9IG1zZzsKKyAgICAgICAgdGhpcy5kYXRhID0gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgUmVzdWx0KFN0YXR1cyBzdGF0dXMsIGludCBtc2dDb2RlKSB7CisgICAgICAgIHRoaXMuY29kZSA9IHN0YXR1cy5nZXRDb2RlKCk7CisgICAgICAgIHRoaXMubXNnID0gSTE4bk1lc3NhZ2UuZ2V0TWVzc2FnZShTdHJpbmcudmFsdWVPZihtc2dDb2RlKSk7CisgICAgICAgIHRoaXMuZGF0YSA9IG51bGw7CisgICAgfQorCisgICAgcHVibGljIFJlc3VsdChTdGF0dXMgc3RhdHVzLCBTdHJpbmcgbXNnLCBUIGRhdGEpIHsKKyAgICAgICAgdGhpcy5jb2RlID0gc3RhdHVzLmdldENvZGUoKTsKKyAgICAgICAgdGhpcy5tc2cgPSBtc2c7CisgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CisgICAgfQorCisgICAgcHVibGljIFJlc3VsdChTdGF0dXMgc3RhdHVzLCBpbnQgbXNnQ29kZSwgVCBkYXRhKSB7CisgICAgICAgIHRoaXMuY29kZSA9IHN0YXR1cy5nZXRDb2RlKCk7CisgICAgICAgIHRoaXMubXNnID0gSTE4bk1lc3NhZ2UuZ2V0TWVzc2FnZShTdHJpbmcudmFsdWVPZihtc2dDb2RlKSk7CisgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CisgICAgfQorCisgICAgcHVibGljIFJlc3VsdChTdGF0dXMgc3RhdHVzLCBUIGRhdGEsIFJlc1BhZ2UgcGFnZSkgeworICAgICAgICB0aGlzLmNvZGUgPSBzdGF0dXMuZ2V0Q29kZSgpOworICAgICAgICB0aGlzLm1zZyA9IHN0YXR1cy5nZXRNc2coKTsKKyAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKKyAgICAgICAgdGhpcy5wYWdlID0gcGFnZTsKKyAgICB9CisKKyAgICBwdWJsaWMgUmVzdWx0KFN0YXR1cyBzdGF0dXMsIFN0cmluZyBtc2csIFQgZGF0YSwgUmVzUGFnZSBwYWdlKSB7CisgICAgICAgIHRoaXMuY29kZSA9IHN0YXR1cy5nZXRDb2RlKCk7CisgICAgICAgIHRoaXMubXNnID0gbXNnOworICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOworICAgICAgICB0aGlzLnBhZ2UgPSBwYWdlOworICAgIH0KKworICAgIHB1YmxpYyBSZXN1bHQoU3RhdHVzIHN0YXR1cywgaW50IG1zZ0NvZGUsIFQgZGF0YSwgUmVzUGFnZSBwYWdlKSB7CisgICAgICAgIHRoaXMuY29kZSA9IHN0YXR1cy5nZXRDb2RlKCk7CisgICAgICAgIHRoaXMubXNnID0gSTE4bk1lc3NhZ2UuZ2V0TWVzc2FnZShTdHJpbmcudmFsdWVPZihtc2dDb2RlKSk7CisgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CisgICAgICAgIHRoaXMucGFnZSA9IHBhZ2U7CisgICAgfQorCisgICAgQEpzb25JZ25vcmUKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1N1Y2Nlc3MoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmNvZGUgPT0gU3RhdHVzLlNVQ0NFU1MuZ2V0Q29kZSgpOworICAgIH0KKworICAgIEBKc29uSWdub3JlCisgICAgcHVibGljIGJvb2xlYW4gbm9uU3VjY2VzcygpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY29kZSAhPSBTdGF0dXMuU1VDQ0VTUy5nZXRDb2RlKCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IHN1Y2Nlc3MoU3RyaW5nIOWPlua2iOaUtuiXj+aIkOWKnykgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdDxUPihTdGF0dXMuU1VDQ0VTUyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IG9rKCkgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdDxUPihTdGF0dXMuU1VDQ0VTUyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IG9rKFQgZGF0YSkgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdDxUPihTdGF0dXMuU1VDQ0VTUywgZGF0YSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IGlsbGVnYWwoKSB7CisgICAgICAgIHJldHVybiBuZXcgUmVzdWx0PFQ+KFN0YXR1cy5CQURfUkVRVUVTVCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IHVuYXV0aG9yaXplZCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQ8VD4oU3RhdHVzLlVOQVVUSE9SSVpFRCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IGZvcmJpZGRlbigpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQ8VD4oU3RhdHVzLkZPUkJJRERFTik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IG5vdEZvdW5kKCkgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdDxUPihTdGF0dXMuTk9UX0ZPVU5EKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBSZXN1bHQ8VD4gZmFpbHVyZSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQ8VD4oU3RhdHVzLkZBSUxVUkUpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFJlc3VsdDxUPiBmYWlsdXJlKFN0cmluZyBtc2cpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQ8VD4oU3RhdHVzLkZBSUxVUkUsIG1zZyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IGVycm9yKFN0cmluZyBtc2cpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQ8VD4oU3RhdHVzLkZBSUxVUkUsIG1zZyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IGNvbmZsaWN0KCkgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdDxUPihTdGF0dXMuQ09ORkxJQ1QpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFJlc3VsdDxUPiBidWlsZChTdGF0dXMgc3RhdHVzLCBUIGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQ8VD4oc3RhdHVzLCBkYXRhKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBSZXN1bHQ8VD4gYnVpbGQoU3RhdHVzIHN0YXR1cywgU3RyaW5nIG1zZykgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdDxUPihzdGF0dXMsIG1zZyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IGJ1aWxkKFN0YXR1cyBzdGF0dXMsIGludCBtc2dDb2RlKSB7CisgICAgICAgIHJldHVybiBuZXcgUmVzdWx0PFQ+KHN0YXR1cywgbXNnQ29kZSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IGJ1aWxkKFN0YXR1cyBzdGF0dXMsIFN0cmluZyBtc2csIFQgZGF0YSkgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdDxUPihzdGF0dXMsIG1zZywgZGF0YSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IGJ1aWxkKFN0YXR1cyBzdGF0dXMsIGludCBtc2dDb2RlLCBUIGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQ8VD4oc3RhdHVzLCBtc2dDb2RlLCBkYXRhKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFJlc3VsdCBvayhPYmplY3QgZGF0YSwgUmVzUGFnZSBwYWdlKSB7CisgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KFN0YXR1cy5TVUNDRVNTLCBkYXRhLCBwYWdlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFJlc3VsdCBidWlsZChTdGF0dXMgc3RhdHVzLCBPYmplY3QgZGF0YSwgUmVzUGFnZSBwYWdlKSB7CisgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KHN0YXR1cywgZGF0YSwgcGFnZSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBSZXN1bHQgYnVpbGQoU3RhdHVzIHN0YXR1cywgU3RyaW5nIG1zZywgT2JqZWN0IGRhdGEsIFJlc1BhZ2UgcGFnZSkgeworICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChzdGF0dXMsIG1zZywgZGF0YSwgcGFnZSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBSZXN1bHQgYnVpbGQoU3RhdHVzIHN0YXR1cywgaW50IG1zZ0NvZGUsIE9iamVjdCBkYXRhLCBSZXNQYWdlIHBhZ2UpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQoc3RhdHVzLCBtc2dDb2RlLCBkYXRhLCBwYWdlKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1N0YXR1cy5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvU3RhdHVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0OWQwYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1N0YXR1cy5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbW1vbi5iYXNlOworCisKK3B1YmxpYyBlbnVtIFN0YXR1cyB7CisKKyAgICAvKioKKyAgICAgKiDor7fmsYLmiafooYzmiJDlip8KKyAgICAgKi8KKyAgICBTVUNDRVNTKDAsICLmk43kvZzmiJDlip8iKSwKKworICAgIC8qKgorICAgICAqIOivt+axgumqjOivgeWksei0pQorICAgICAqLworICAgIEJBRF9SRVFVRVNUKDQwMCwgIuaTjeS9nOmqjOivgeWksei0pSIpLAorCisgICAgLyoqCisgICAgICog5p2D6ZmQ5LiN6LazCisgICAgICovCisgICAgVU5BVVRIT1JJWkVEKDQwMSwgIuaTjeS9nOacquaOiOadgyIpLAorCisgICAgLyoqCisgICAgICog6K+35rGC5ouS57udCisgICAgICovCisgICAgRk9SQklEREVOKDQwMywgIuaTjeS9nOiiq+aLkue7nSIpLAorCisgICAgLyoqCisgICAgICog5pyq55+l6K+35rGCCisgICAgICovCisgICAgTk9UX0ZPVU5EKDQwNCwgIuacquefpeaTjeS9nCIpLAorCisgICAgLyoqCisgICAgICog5pyq55+l6K+35rGCCisgICAgICovCisgICAgQ09ORkxJQ1QoNDA5LCAi6K+35rGC5Y+R55Sf5Yay56qBIiksCisKKyAgICAvKioKKyAgICAgKiDor7fmsYLmiafooYzlpLHotKUKKyAgICAgKi8KKyAgICBGQUlMVVJFKDUwMCwgIuaTjeS9nOWksei0pSIpOworCisgICAgcHJpdmF0ZSBpbnQgY29kZTsKKworICAgIHByaXZhdGUgU3RyaW5nIG1zZzsKKworICAgIFN0YXR1cyhpbnQgY29kZSwgU3RyaW5nIG1zZykgeworICAgICAgICB0aGlzLmNvZGUgPSBjb2RlOworICAgICAgICB0aGlzLm1zZyA9IG1zZzsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldENvZGUoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmNvZGU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRNc2coKSB7CisgICAgICAgIHJldHVybiB0aGlzLm1zZzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vZXhjZXB0aW9uL1JvY2tldFBURXhjZXB0aW9uLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vZXhjZXB0aW9uL1JvY2tldFBURXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E0NzVmMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9leGNlcHRpb24vUm9ja2V0UFRFeGNlcHRpb24uamF2YQpAQCAtMCwwICsxLDI5IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uZXhjZXB0aW9uOworCitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbW1vbi5Db21tb25SZXN1bHRTdGF0dXM7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbW1vbi5SZXN1bHRTdGF0dXM7CisKK3B1YmxpYyBjbGFzcyBSb2NrZXRQVEV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24geworICAgIHByaXZhdGUgZmluYWwgUmVzdWx0U3RhdHVzIHN0YXR1czsKKworICAgIHB1YmxpYyBSb2NrZXRQVEV4Y2VwdGlvbihSZXN1bHRTdGF0dXMgc3RhdHVzKSB7CisgICAgICAgIHN1cGVyKHN0YXR1cy5nZXRNZXNzYWdlKCkpOworICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1czsKKyAgICB9CisKKyAgICBwdWJsaWMgUm9ja2V0UFRFeGNlcHRpb24oUmVzdWx0U3RhdHVzIHN0YXR1cywgU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgc3VwZXIobWVzc2FnZSk7CisgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOworICAgIH0KKworICAgIHB1YmxpYyBSb2NrZXRQVEV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkgeworICAgICAgICBzdXBlcihtZXNzYWdlKTsKKyAgICAgICAgdGhpcy5zdGF0dXMgPSBDb21tb25SZXN1bHRTdGF0dXMuRkFJTDsKKyAgICB9CisKKyAgICBwdWJsaWMgUmVzdWx0U3RhdHVzIGdldFN0YXR1cygpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL015TWV0YU9iamVjdEhhbmRsZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbmZpZy9NeU1ldGFPYmplY3RIYW5kbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzMWI5MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbmZpZy9NeU1ldGFPYmplY3RIYW5kbGVyLmphdmEKQEAgLTAsMCArMSwyNCBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29uZmlnOworCitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmNvcmUuaGFuZGxlcnMuTWV0YU9iamVjdEhhbmRsZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5pYmF0aXMucmVmbGVjdGlvbi5NZXRhT2JqZWN0OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5Db21wb25lbnQ7CisKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKKworQENvbXBvbmVudAorcHVibGljIGNsYXNzIE15TWV0YU9iamVjdEhhbmRsZXIgaW1wbGVtZW50cyBNZXRhT2JqZWN0SGFuZGxlciB7CisKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGluc2VydEZpbGwoTWV0YU9iamVjdCBtZXRhT2JqZWN0KSB7CisgICAgICAgIHRoaXMuc3RyaWN0SW5zZXJ0RmlsbChtZXRhT2JqZWN0LCAiY3JlYXRlVGltZSIsIExvY2FsRGF0ZVRpbWUuY2xhc3MsIExvY2FsRGF0ZVRpbWUubm93KCkpOworICAgICAgICB0aGlzLnN0cmljdEluc2VydEZpbGwobWV0YU9iamVjdCwgInVwZGF0ZVRpbWUiLCBMb2NhbERhdGVUaW1lLmNsYXNzLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKyAgICB9CisKKyAgICAvLyDmm7TmlrDml7boh6rliqjloavlhYUKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB1cGRhdGVGaWxsKE1ldGFPYmplY3QgbWV0YU9iamVjdCkgeworICAgICAgICB0aGlzLnN0cmljdFVwZGF0ZUZpbGwobWV0YU9iamVjdCwgInVwZGF0ZVRpbWUiLCBMb2NhbERhdGVUaW1lLmNsYXNzLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb25maWcvVHJhY2tlckNvbmZpZy5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL1RyYWNrZXJDb25maWcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzUyMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL1RyYWNrZXJDb25maWcuamF2YQpAQCAtMCwwICsxLDgxIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb25maWc7CisKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC50cmFja2VyLlRyYWNrZWRUb3JyZW50OworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LnRyYWNrZXIuVHJhY2tlcjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5WYWx1ZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuYW5ub3RhdGlvbi5CZWFuOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5hbm5vdGF0aW9uLkNvbmZpZ3VyYXRpb247CitpbXBvcnQgamF2YXguYW5ub3RhdGlvbi5QcmVEZXN0cm95OworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOworCitAQ29uZmlndXJhdGlvbgorcHVibGljIGNsYXNzIFRyYWNrZXJDb25maWcgeworICAgIEBWYWx1ZSgiJHtwdC50cmFja2VyLnBvcnR9IikKKyAgICBwcml2YXRlIGludCB0cmFja2VyUG9ydDsKKworICAgIEBWYWx1ZSgiJHtwdC50cmFja2VyLnRvcnJlbnQtZGlyfSIpCisgICAgcHJpdmF0ZSBTdHJpbmcgdG9ycmVudERpcjsKKyAgICBAVmFsdWUoIiR7cHQudHJhY2tlci5hbm5vdW5jZS11cmx9IikKKyAgICBwcml2YXRlIFN0cmluZyBhbm5vdW5jZVVSTDsKKworICAgIHByaXZhdGUgVHJhY2tlciB0cmFja2VyOyAvLyDlrZjlgqggVHJhY2tlciDlrp7kvosKKworICAgIEBCZWFuCisgICAgcHVibGljIFRyYWNrZXIgdG9ycmVudFRyYWNrZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAvLyDpqozor4HlubbliJvlu7rnm67lvZUKKyAgICAgICAgRmlsZSBkaXIgPSBuZXcgRmlsZSh0b3JyZW50RGlyKTsKKyAgICAgICAgdmFsaWRhdGVUb3JyZW50RGlyZWN0b3J5KGRpcik7CisKKyAgICAgICAgLy8g5Yid5aeL5YyWIFRyYWNrZXIKKyAgICAgICAgdHJhY2tlciA9IG5ldyBUcmFja2VyKHRyYWNrZXJQb3J0LCBhbm5vdW5jZVVSTCk7CisgICAgICAgIHRyYWNrZXIuc2V0QWNjZXB0Rm9yZWlnblRvcnJlbnRzKGZhbHNlKTsgLy8gUFQg56uZ54K55b+F6aG75YWz6Zet5Yy/5ZCN5qih5byPCisgICAgICAgIHRyYWNrZXIuc2V0QW5ub3VuY2VJbnRlcnZhbCgxODAwKTsgLy8gMzDliIbpkp8gYW5ub3VuY2Ug6Ze06ZqUCisKKyAgICAgICAgLy8g5Yqg6L2956eN5a2Q5paH5Lu2CisgICAgICAgIGxvYWRUb3JyZW50cyh0cmFja2VyLCBkaXIpOworCisgICAgICAgIC8vIOWQr+WKqCBUcmFja2VyCisgICAgICAgIHRyYWNrZXIuc3RhcnQodHJ1ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhY2tlciBzdGFydGVkIG9uIHBvcnQgIiArIHRyYWNrZXJQb3J0KTsKKyAgICAgICAgcmV0dXJuIHRyYWNrZXI7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlVG9ycmVudERpcmVjdG9yeShGaWxlIGRpcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKCFkaXIuZXhpc3RzKCkpIHsKKyAgICAgICAgICAgIGlmICghZGlyLm1rZGlycygpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCLml6Dms5XliJvlu7rnm67lvZU6ICIgKyBkaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZGlyLmlzRGlyZWN0b3J5KCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIui3r+W+hOS4jeaYr+ebruW9lTogIiArIGRpci5nZXRBYnNvbHV0ZVBhdGgoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkaXIuY2FuUmVhZCgpIHx8ICFkaXIuY2FuV3JpdGUoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCLlupTnlKjnqIvluo/ml6DmnYPpmZDorr/pl67nm67lvZU6ICIgKyBkaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGxvYWRUb3JyZW50cyhUcmFja2VyIHRyYWNrZXIsIEZpbGUgZGlyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAoIWRpci5leGlzdHMoKSB8fCAhZGlyLmlzRGlyZWN0b3J5KCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigi5peg5pWI55qE56eN5a2Q55uu5b2VOiAiICsgZGlyLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEZpbGVbXSB0b3JyZW50RmlsZXMgPSBkaXIubGlzdEZpbGVzKChkLCBuYW1lKSAtPiBuYW1lLmVuZHNXaXRoKCIudG9ycmVudCIpKTsKKyAgICAgICAgaWYgKHRvcnJlbnRGaWxlcyA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIuaXoOazleivu+WPluebruW9leWGheWuuTogIiArIGRpci5nZXRBYnNvbHV0ZVBhdGgoKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEZpbGUgZiA6IHRvcnJlbnRGaWxlcykgeworICAgICAgICAgICAgdHJhY2tlci5hbm5vdW5jZShUcmFja2VkVG9ycmVudC5sb2FkKGYpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBQcmVEZXN0cm95CisgICAgcHVibGljIHZvaWQgc3RvcFRyYWNrZXIoKSB7CisgICAgICAgIGlmICh0cmFja2VyICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyYWNrZXIuc3RvcCgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcmFja2VyIHN0b3BwZWQuIik7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Ub3JyZW50Q29udHJvbGxlci5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Ub3JyZW50Q29udHJvbGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYTJjY2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1RvcnJlbnRDb250cm9sbGVyLmphdmEKQEAgLTAsMCArMSwyOTMgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uLmJhc2UuUGFnZVV0aWw7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Ub3JyZW50RW50aXR5OworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlRvcnJlbnRTZXJ2aWNlOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlByb21vdGlvblNlcnZpY2U7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmR0by5wYXJhbS5Ub3JyZW50UGFyYW07CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmR0by52by5Ub3JyZW50Vk87CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbW1vbi5iYXNlLlJlc3VsdDsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnBhcmFtLlRvcnJlbnRVcGxvYWRQYXJhbTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLlRvcnJlbnRVcGRhdGVEVE87CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmR0by5Qcm9tb3Rpb25DcmVhdGVEVE87CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Qcm9tb3Rpb247CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuVXNlclNlcnZpY2U7CisKK2ltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5PcGVyYXRpb247CitpbXBvcnQgaW8uc3dhZ2dlci52My5vYXMuYW5ub3RhdGlvbnMubWVkaWEuQ29udGVudDsKK2ltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5tZWRpYS5TY2hlbWE7CitpbXBvcnQgaW8uc3dhZ2dlci52My5vYXMuYW5ub3RhdGlvbnMucmVzcG9uc2VzLkFwaVJlc3BvbnNlOworCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5IdHRwU3RhdHVzOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnZhbGlkYXRpb24uYW5ub3RhdGlvbi5WYWxpZGF0ZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLio7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIubXVsdGlwYXJ0Lk11bHRpcGFydEZpbGU7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBjbi5kZXYzMy5zYXRva2VuLmFubm90YXRpb24uU2FDaGVja0xvZ2luOworaW1wb3J0IGNuLmRldjMzLnNhdG9rZW4uc3RwLlN0cFV0aWw7CisKK0BSZXN0Q29udHJvbGxlcgorQFJlcXVlc3RNYXBwaW5nKCIvc2VlZHMiKQorcHVibGljIGNsYXNzIFRvcnJlbnRDb250cm9sbGVyIHsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFRvcnJlbnRTZXJ2aWNlIHRvcnJlbnRTZXJ2aWNlOworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgUHJvbW90aW9uU2VydmljZSBwcm9tb3Rpb25TZXJ2aWNlOworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgVXNlclNlcnZpY2UgdXNlclNlcnZpY2U7CisKKworICAgIEBTYUNoZWNrTG9naW4KKyAgICBAT3BlcmF0aW9uKHN1bW1hcnkgPSAi56eN5a2Q5YiX6KGo5p+l6K+iIiwgZGVzY3JpcHRpb24gPSAi56eN5a2Q5YiX6KGo5p2h5Lu25p+l6K+iLeWIhumhtS3mjpLluo8iKQorICAgIEBBcGlSZXNwb25zZShyZXNwb25zZUNvZGUgPSAiMCIsIGRlc2NyaXB0aW9uID0gIuaTjeS9nOaIkOWKnyIsCisgICAgICAgICAgICBjb250ZW50ID0ge0BDb250ZW50KG1lZGlhVHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIiwKKyAgICAgICAgICAgICAgICAgICAgc2NoZW1hID0gQFNjaGVtYShpbXBsZW1lbnRhdGlvbiA9IFRvcnJlbnRWTy5jbGFzcykpCisgICAgICAgICAgICB9KQorICAgIEBQb3N0TWFwcGluZygiL2xpc3QiKQorICAgIHB1YmxpYyBSZXN1bHQgbGlzdChAUmVxdWVzdEJvZHkgVG9ycmVudFBhcmFtIHBhcmFtKSB7CisgICAgICAgIC8vIOaehOW7uuaOkuW6j+WSjOaooeeziuafpeivouadoeS7tgorICAgICAgICBwYXJhbS52YWxpZE9yZGVyKHBhcmFtLmdldE9yZGVyS2V5KFRvcnJlbnRFbnRpdHkuY2xhc3MpKTsKKyAgICAgICAgcGFyYW0uYnVpbGRMaWtlKCk7CisKKyAgICAgICAgUGFnZVV0aWwuc3RhcnRQYWdlKHBhcmFtKTsKKworICAgICAgICAvLyDmn6Xor6LmlbDmja4KKyAgICAgICAgTGlzdDxUb3JyZW50RW50aXR5PiBsaXN0ID0gdG9ycmVudFNlcnZpY2Uuc2VhcmNoKHBhcmFtKTsKKworICAgICAgICAvLyDov5Tlm57liIbpobXnu5PmnpwKKyAgICAgICAgcmV0dXJuIFJlc3VsdC5vayhsaXN0LCBQYWdlVXRpbC5nZXRQYWdlKGxpc3QpKTsKKyAgICB9CisKKyAgICBAU2FDaGVja0xvZ2luCisgICAgQE9wZXJhdGlvbihzdW1tYXJ5ID0gIuenjeWtkOivpuaDheafpeivoiIpCisgICAgQEFwaVJlc3BvbnNlKHJlc3BvbnNlQ29kZSA9ICIwIiwgZGVzY3JpcHRpb24gPSAi5pON5L2c5oiQ5YqfIiwgY29udGVudCA9IHsKKyAgICAgICAgICAgIEBDb250ZW50KG1lZGlhVHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIiwgc2NoZW1hID0gQFNjaGVtYShpbXBsZW1lbnRhdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIFRvcnJlbnRFbnRpdHkuY2xhc3MpKQorICAgIH0pCisgICAgQFBvc3RNYXBwaW5nKCIvaW5mby97aWR9IikKKyAgICBwdWJsaWMgUmVzdWx0IGluZm8oQFBhdGhWYXJpYWJsZSgiaWQiKUxvbmcgaWQpIHsKKworICAgICAgICBUb3JyZW50RW50aXR5IGVudGl0eSA9IHRvcnJlbnRTZXJ2aWNlLnNlbGVjdEJ5U2VlZElkKGlkKTsKKyAgICAgICAgcmV0dXJuIFJlc3VsdC5vayhlbnRpdHkpOworICAgIH0KKworQE9wZXJhdGlvbihzdW1tYXJ5ID0gIuS4iuS8oOenjeWtkCIpCisKKyAgICBAUG9zdE1hcHBpbmcoIi91cGxvYWQiKQorICAgIHB1YmxpYyBSZXN1bHQgdXBsb2FkVG9ycmVudCgKKyAgICAgICAgICAgIEBSZXF1ZXN0UGFyYW0oImZpbGUiKSBNdWx0aXBhcnRGaWxlIGZpbGUsCisgICAgICAgICAgICBATW9kZWxBdHRyaWJ1dGUgQFZhbGlkYXRlZCBUb3JyZW50VXBsb2FkUGFyYW0gcGFyYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyDpqozor4HnlKjmiLfmnYPpmZAKKyAgICAgICAgICAgIC8vIExvbmcgdXNlcklkID0gU3RwVXRpbC5nZXRMb2dpbklkQXNMb25nKCk7CisgICAgICAgICAgICBTdHJpbmcgdXNlcklkID0gU3RyaW5nLnZhbHVlT2YocGFyYW0uZ2V0VXBsb2FkZXIoKSk7CisgICAgICAgICAgICBwYXJhbS5zZXRVcGxvYWRlcih1c2VySWQpOworCisgICAgICAgICAgICAvLyDpqozor4Hmlofku7blpKflsI/lkoznsbvlnosKKyAgICAgICAgICAgIGlmIChmaWxlLmlzRW1wdHkoKSB8fCBmaWxlLmdldFNpemUoKSA+IDEwICogMTAyNCAqIDEwMjQpIHsgLy8gMTBNQumZkOWItgorICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIuaWh+S7tuWkp+Wwj+S4jeespuWQiOimgeaxgiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWZpbGUuZ2V0T3JpZ2luYWxGaWxlbmFtZSgpLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi50b3JyZW50IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLlj6rmlK/mjIEudG9ycmVudOaWh+S7tiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0b3JyZW50U2VydmljZS51cGxvYWRUb3JyZW50KGZpbGUsIHBhcmFtKTsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQub2soKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIuenjeWtkOS4iuS8oOWksei0pTogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIOiOt+WPluenjeWtkOaWh+S7tgorICAgICAqLworICAgIEBHZXRNYXBwaW5nKCIve3NlZWRfaWR9L2Rvd25sb2FkIikKKyAgICBwdWJsaWMgdm9pZCBkb3dubG9hZFRvcnJlbnQoCisgICAgICAgICAgICBAUGF0aFZhcmlhYmxlKCJzZWVkX2lkIikgTG9uZyBzZWVkSWQsCisgICAgICAgICAgICBAUmVxdWVzdFBhcmFtKCJwYXNza2V5IikgU3RyaW5nIHBhc3NrZXksCisgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgSU9FeGNlcHRpb24geworCisgICAgICAgIC8vIOiOt+WPluenjeWtkOWunuS9kworICAgICAgICBUb3JyZW50RW50aXR5IGVudGl0eSA9IHRvcnJlbnRTZXJ2aWNlLnNlbGVjdEJ5U2VlZElkKHNlZWRJZCk7CisgICAgICAgIGlmIChlbnRpdHkgPT0gbnVsbCkgeworICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZEVycm9yKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfTk9UX0ZPVU5ELCAi56eN5a2Q5LiN5a2Y5ZyoIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyDojrflj5blubblpITnkIbnp43lrZDmlofku7blhoXlrrnvvIjpnIDlnKhzZXJ2aWNl5Lit5a6e546wcGFzc2tleeazqOWFpe+8iQorICAgICAgICBieXRlW10gdG9ycmVudEJ5dGVzID0gdG9ycmVudFNlcnZpY2UuZmV0Y2goc2VlZElkLCBwYXNza2V5KTsKKworICAgICAgICAvLyDorr7nva7kuIvovb3mlofku7blkI0KKyAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gZW50aXR5LmdldEZpbGVOYW1lKCk7CisgICAgICAgIGlmIChmaWxlbmFtZSA9PSBudWxsIHx8IGZpbGVuYW1lLmlzQmxhbmsoKSkgeworICAgICAgICAgICAgZmlsZW5hbWUgPSBzZWVkSWQgKyAiLnRvcnJlbnQiOworICAgICAgICB9CisgICAgICAgIGlmICghZmlsZW5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLnRvcnJlbnQiKSkgeworICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZSArICIudG9ycmVudCI7CisgICAgICAgIH0KKyAgICAgICAgZmlsZW5hbWUgPSBqYXZhLm5ldC5VUkxFbmNvZGVyLmVuY29kZShmaWxlbmFtZSwgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzLlVURl84KS5yZXBsYWNlQWxsKCJcXCsiLAorICAgICAgICAgICAgICAgICIlMjAiKTsKKworICAgICAgICAvLyDorr7nva7lk43lupTlpLQKKyAgICAgICAgcmVzcG9uc2Uuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzLlVURl84Lm5hbWUoKSk7CisgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRMZW5ndGgodG9ycmVudEJ5dGVzLmxlbmd0aCk7CisgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQiKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uIiwgImF0dGFjaG1lbnQ7ZmlsZW5hbWU9IiArIGZpbGVuYW1lKTsKKworICAgICAgICAvLyDlhpnlhaXmlofku7blhoXlrrkKKyAgICAgICAgcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCkud3JpdGUodG9ycmVudEJ5dGVzKTsKKyAgICAgICAgcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCkuZmx1c2goKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDmlLbol4/miJbogIXlj5bmtojmlLbol48KKyAgICAgKi8KKyAgICBAUG9zdE1hcHBpbmcoIi97c2VlZF9pZH0vZmF2b3JpdGUtdG9nZ2xlIikKKyAgICBwdWJsaWMgUmVzdWx0IGZhdm9yaXRlKAorICAgICAgICAgICAgQFBhdGhWYXJpYWJsZSgic2VlZF9pZCIpIExvbmcgc2VlZElkLAorICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSgidXNlcl9pZCIpIExvbmcgIHVzZXJJZCkgeworICAgICAgICB0cnkgeworCisgICAgICAgICAgICByZXR1cm4gIHRvcnJlbnRTZXJ2aWNlLmZhdm9yaXRlKHNlZWRJZCwgdXNlcklkKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIuWksei0pTogIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAU2FDaGVja0xvZ2luCisgICAgQE9wZXJhdGlvbihzdW1tYXJ5ID0gIuWIoOmZpOenjeWtkCIpCisgICAgQERlbGV0ZU1hcHBpbmcoIi97dG9ycmVudElkfSIpCisgICAgcHVibGljIFJlc3VsdCBkZWxldGVUb3JyZW50KEBQYXRoVmFyaWFibGUgTG9uZyB0b3JyZW50SWQpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgLy8gIOmqjOivgeeUqOaIt+adg+mZkAorICAgICAgICAgICAgTG9uZyB1c2VySWQgPSBTdHBVdGlsLmdldExvZ2luSWRBc0xvbmcoKTsKKyAgICAgICAgICAgIGlmICghdG9ycmVudFNlcnZpY2UuY2FuVXNlckRlbGV0ZVRvcnJlbnQodG9ycmVudElkLCB1c2VySWQpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi5rKh5pyJ5p2D6ZmQ5Yig6Zmk5q2k56eN5a2QIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRvcnJlbnRTZXJ2aWNlLmRlbGV0ZVRvcnJlbnQodG9ycmVudElkKTsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQub2soKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIuWIoOmZpOWksei0pTogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBTYUNoZWNrTG9naW4KKyAgICBAT3BlcmF0aW9uKHN1bW1hcnkgPSAi5L+u5pS556eN5a2Q5L+h5oGvIikKKyAgICBAUHV0TWFwcGluZygiL3t0b3JyZW50SWR9IikKKyAgICBwdWJsaWMgUmVzdWx0IHVwZGF0ZVRvcnJlbnQoCisgICAgICAgICAgICBAUGF0aFZhcmlhYmxlIExvbmcgdG9ycmVudElkLAorICAgICAgICAgICAgQFJlcXVlc3RCb2R5IEBWYWxpZGF0ZWQgVG9ycmVudFVwZGF0ZURUTyB1cGRhdGVEVE8pIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vIOmqjOivgeeUqOaIt+adg+mZkAorICAgICAgICAgICAgTG9uZyB1c2VySWQgPSBTdHBVdGlsLmdldExvZ2luSWRBc0xvbmcoKTsKKyAgICAgICAgICAgIGlmICghdG9ycmVudFNlcnZpY2UuY2FuVXNlclVwZGF0ZVRvcnJlbnQodG9ycmVudElkLCB1c2VySWQpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi5rKh5pyJ5p2D6ZmQ5L+u5pS55q2k56eN5a2QIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRvcnJlbnRTZXJ2aWNlLnVwZGF0ZVRvcnJlbnQodG9ycmVudElkLCB1cGRhdGVEVE8pOworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5vaygpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi5pu05paw5aSx6LSlOiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgQFNhQ2hlY2tMb2dpbgorICAgIEBPcGVyYXRpb24oc3VtbWFyeSA9ICLliJvlu7rkv4PplIDmtLvliqgiKQorICAgIEBQb3N0TWFwcGluZygiL3Byb21vdGlvbnMiKQorICAgIHB1YmxpYyBSZXN1bHQgY3JlYXRlUHJvbW90aW9uKEBSZXF1ZXN0Qm9keSBAVmFsaWRhdGVkIFByb21vdGlvbkNyZWF0ZURUTyBwcm9tb3Rpb25EVE8pIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vIOmqjOivgeeUqOaIt+adg+mZkO+8iOWPquacieeuoeeQhuWRmOWPr+S7peWIm+W7uuS/g+mUgO+8iQorLy8gICAgICAgICAgICBpZiAoIVN0cFV0aWwuaGFzUm9sZSgiYWRtaW4iKSkgeworLy8gICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi5rKh5pyJ5p2D6ZmQ5Yib5bu65L+D6ZSA5rS75YqoIik7CisvLyAgICAgICAgICAgIH0KKy8vCisgICAgICAgICAgICBQcm9tb3Rpb24gcHJvbW90aW9uID0gcHJvbW90aW9uU2VydmljZS5jcmVhdGVQcm9tb3Rpb24ocHJvbW90aW9uRFRPKTsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQub2socHJvbW90aW9uKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIuWIm+W7uuS/g+mUgOWksei0pTogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBTYUNoZWNrTG9naW4KKyAgICBAT3BlcmF0aW9uKHN1bW1hcnkgPSAi6I635Y+W5L+D6ZSA5rS75Yqo5YiX6KGoIikKKyAgICBAR2V0TWFwcGluZygiL3Byb21vdGlvbnMiKQorICAgIHB1YmxpYyBSZXN1bHQgZ2V0UHJvbW90aW9ucygpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIExpc3Q8UHJvbW90aW9uPiBwcm9tb3Rpb25zID0gcHJvbW90aW9uU2VydmljZS5nZXRBbGxBY3RpdmVQcm9tb3Rpb25zKCk7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKHByb21vdGlvbnMpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi6I635Y+W5L+D6ZSA5YiX6KGo5aSx6LSlOiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgQFNhQ2hlY2tMb2dpbgorICAgIEBPcGVyYXRpb24oc3VtbWFyeSA9ICLojrflj5bkv4PplIDor6bmg4UiKQorICAgIEBHZXRNYXBwaW5nKCIvcHJvbW90aW9ucy97cHJvbW90aW9uSWR9IikKKyAgICBwdWJsaWMgUmVzdWx0IGdldFByb21vdGlvbkRldGFpbHMoQFBhdGhWYXJpYWJsZSBMb25nIHByb21vdGlvbklkKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBQcm9tb3Rpb24gcHJvbW90aW9uID0gcHJvbW90aW9uU2VydmljZS5nZXRQcm9tb3Rpb25CeUlkKHByb21vdGlvbklkKTsKKyAgICAgICAgICAgIGlmIChwcm9tb3Rpb24gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIuS/g+mUgOa0u+WKqOS4jeWtmOWcqCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5vayhwcm9tb3Rpb24pOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi6I635Y+W5L+D6ZSA6K+m5oOF5aSx6LSlOiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgQFNhQ2hlY2tMb2dpbgorICAgIEBPcGVyYXRpb24oc3VtbWFyeSA9ICLliKDpmaTkv4PplIDmtLvliqgiKQorICAgIEBEZWxldGVNYXBwaW5nKCIvcHJvbW90aW9ucy97cHJvbW90aW9uSWR9IikKKyAgICBwdWJsaWMgUmVzdWx0IGRlbGV0ZVByb21vdGlvbihAUGF0aFZhcmlhYmxlIExvbmcgcHJvbW90aW9uSWQpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vIOmqjOivgeeUqOaIt+adg+mZkO+8iOWPquacieeuoeeQhuWRmOWPr+S7peWIoOmZpOS/g+mUgO+8iQorICAgICAgICAgICAgaWYgKCFTdHBVdGlsLmhhc1JvbGUoImFkbWluIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLmsqHmnInmnYPpmZDliKDpmaTkv4PplIDmtLvliqgiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvbW90aW9uU2VydmljZS5kZWxldGVQcm9tb3Rpb24ocHJvbW90aW9uSWQpOworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5vaygpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi5Yig6Zmk5L+D6ZSA5aSx6LSlOiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g5LiL6L2956eN5a2Q77yI5YyF5ZCr5Y+N5L2c5byK5py65Yi277yJCisgICAgQFBvc3RNYXBwaW5nKCIve3RvcnJlbnRJZH0vZG93bmxvYWQiKQorICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTw/PiBkb3dubG9hZFRvcnJlbnQoQFBhdGhWYXJpYWJsZSBMb25nIHRvcnJlbnRJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAUmVxdWVzdFBhcmFtIExvbmcgdXNlcklkKSB7CisvLyAgICAgICAgLy8g6aqM6K+B55So5oi36Lqr5Lu95ZKM5p2D6ZmQCisvLyAgICAgICAgaWYgKCF1c2VyU2VydmljZS52YWxpZGF0ZVVzZXIodXNlcklkKSkgeworLy8gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkuc3RhdHVzKEh0dHBTdGF0dXMuVU5BVVRIT1JJWkVEKS5idWlsZCgpOworLy8gICAgICAgIH0KKworICAgICAgICAvLyDmo4Dmn6XnlKjmiLfkuIrkvKDph4/mmK/lkKbotrPlpJ8KKyAgICAgICAgaWYgKCF0b3JyZW50U2VydmljZS5jaGVja1VzZXJVcGxvYWRSYXRpbyh1c2VySWQpKSB7CisgICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkuc3RhdHVzKEh0dHBTdGF0dXMuRk9SQklEREVOKQorICAgICAgICAgICAgICAgIC5ib2R5KCLkuIrkvKDph4/kuI3otrPvvIzml6Dms5XkuIvovb0iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIOW6lOeUqOS/g+mUgOaKmOaJo++8iOWmguaenOacie+8iQorICAgICAgICBkb3VibGUgZG93bmxvYWRTaXplID0gdG9ycmVudFNlcnZpY2UuY2FsY3VsYXRlRG93bmxvYWRTaXplKHRvcnJlbnRJZCwgdXNlcklkKTsKKworICAgICAgICAvLyDorrDlvZXkuIvovb0KKyAgICAgICAgdG9ycmVudFNlcnZpY2UucmVjb3JkRG93bmxvYWQodG9ycmVudElkLCB1c2VySWQsIGRvd25sb2FkU2l6ZSk7CisKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKCkuYnVpbGQoKTsKKyAgICB9CisKKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5qYXZhCmluZGV4IDRiZjZhZGYuLmFjZGE0MDMgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIuamF2YQorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmphdmEKQEAgLTEsMTYgKzEsMjUgQEAKIHBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7CiAKK2ltcG9ydCBjbi5kZXYzMy5zYXRva2VuLmFubm90YXRpb24uU2FDaGVja0xvZ2luOwogaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5jb3JlLmNvbmRpdGlvbnMucXVlcnkuUXVlcnlXcmFwcGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uYmFzZS5QYWdlVXRpbDsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnBhcmFtLlRvcnJlbnRQYXJhbTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnZvLlRvcnJlbnRWTzsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRvcnJlbnRFbnRpdHk7CiBpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5Vc2VyTWFwcGVyOwogaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXI7CiBpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyOwogaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVmVyaWZpY2F0aW9uVG9rZW47CiBpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuRW1haWxTZXJ2aWNlOwogaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlVzZXJTZXJ2aWNlOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC51dGlscy5SZXN1bHQ7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbW1vbi5iYXNlLlJlc3VsdDsKIGltcG9ydCBpby5zd2FnZ2VyLmFubm90YXRpb25zLkFwaTsKIGltcG9ydCBpby5zd2FnZ2VyLmFubm90YXRpb25zLkFwaU9wZXJhdGlvbjsKIGltcG9ydCBpby5zd2FnZ2VyLmFubm90YXRpb25zLkFwaVBhcmFtOworaW1wb3J0IGlvLnN3YWdnZXIudjMub2FzLmFubm90YXRpb25zLk9wZXJhdGlvbjsKK2ltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5tZWRpYS5Db250ZW50OworaW1wb3J0IGlvLnN3YWdnZXIudjMub2FzLmFubm90YXRpb25zLm1lZGlhLlNjaGVtYTsKK2ltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5yZXNwb25zZXMuQXBpUmVzcG9uc2U7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlJhbmRvbVN0cmluZ1V0aWxzOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CkBAIC0yNyw2ICszNiw3IEBACiBpbXBvcnQgamF2YXguYW5ub3RhdGlvbi5SZXNvdXJjZTsKIGltcG9ydCBqYXZhLnRpbWUuSW5zdGFudDsKIGltcG9ydCBqYXZhLnRpbWUudGVtcG9yYWwuQ2hyb25vVW5pdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogQFJlc3RDb250cm9sbGVyCiBAUmVxdWVzdE1hcHBpbmcoIi91c2VyIikKQEAgLTYxLDkgKzcxLDkgQEAKICAgICAgICAgICAgIFVzZXIgdXNlciA9IHVzZXJNYXBwZXIuc2VsZWN0T25lKG5ldyBRdWVyeVdyYXBwZXI8VXNlcj4oKS5lcSgidXNlcm5hbWUiLCB1c2VybmFtZSkpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvZ2luIHN1Y2Nlc3NmdWwgZm9yIHVzZXI6ICIgKyB1c2VybmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3ModXNlcik7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKHVzZXIpOwogICAgICAgICB9IGNhdGNoIChBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCI0MDEiLCAi55m75b2V5aSx6LSl77yaIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIueZu+W9leWksei0pSIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC03MSwxNSArODEsMTUgQEAKICAgICBAQXBpT3BlcmF0aW9uKHZhbHVlID0gIueUqOaIt+azqOWGjCIsIG5vdGVzID0gIuS9v+eUqOeUqOaIt+S/oeaBr+i/m+ihjOazqOWGjCIpCiAgICAgcHVibGljIFJlc3VsdCByZWdpc3RlckNvbnRyb2xsZXIoQFJlcXVlc3RCb2R5IEBBcGlQYXJhbSh2YWx1ZSA9ICLmlrDnlKjmiLfkv6Hmga8iLCByZXF1aXJlZCA9IHRydWUpIFVzZXIgbmV3VXNlcikgewogICAgICAgICBpZiAodXNlclNlcnZpY2UuY2hlY2tFbWFpbEV4aXN0cyhuZXdVc2VyLmdldEVtYWlsKCkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLpgq7nrrHlhrLnqoEiLCAi6YKu566x5bey6KKr5L2/55So77yM6K+35L2/55So5YW25LuW6YKu566x5rOo5YaM5oiW5om+5Zue5a+G56CB77yBIik7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCAi6YKu566x5bey6KKr5L2/55So77yM6K+35L2/55So5YW25LuW6YKu566x5rOo5YaM5oiW5om+5Zue5a+G56CB77yBIik7CiAgICAgICAgIH0KICAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gdXNlclNlcnZpY2UucHJlUmVnaXN0ZXJVc2VyKG5ld1VzZXIpOwogICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgVXNlciByZXNwb25zZVVzZXIgPSBuZXcgVXNlcigpOwogICAgICAgICAgICAgcmVzcG9uc2VVc2VyLnNldEVtYWlsKG5ld1VzZXIuZ2V0RW1haWwoKSk7Ci0gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MocmVzcG9uc2VVc2VyLCAi6aqM6K+B6YKu5Lu25bey5Y+R6YCB77yM6K+35qOA5p+l5oKo55qE6YKu566x44CCIik7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLms6jlhozlpLHotKUiLCAi6LSm5Y+35bey5a2Y5Zyo5oiW5rOo5YaM5aSx6LSl77yBIik7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLotKblj7flt7LlrZjlnKjmiJbms6jlhozlpLHotKXvvIEiKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTAwLDkgKzExMCw5IEBACiAgICAgICAgIFN0cmluZyBjb2RlID0gdmVyaWZpY2F0aW9uUmVxdWVzdC5nZXRDb2RlKCk7CiAgICAgICAgIGJvb2xlYW4gaXNWZXJpZmllZCA9IHVzZXJTZXJ2aWNlLnZlcmlmeUVtYWlsKGVtYWlsLCBjb2RlKTsKICAgICAgICAgaWYgKGlzVmVyaWZpZWQpIHsKLSAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhudWxsLCAi6YKu566x6aqM6K+B5oiQ5Yqf77yBIik7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLpqozor4HlpLHotKUiLCAi6aqM6K+B56CB6ZSZ6K+v5oiW5bey6L+H5pyf77yBIik7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCAi6aqM6K+B56CB6ZSZ6K+v5oiW5bey6L+H5pyf77yBIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEyMyw3ICsxMzMsNyBAQAogICAgICAgICBpZiAodXNlciA9PSBudWxsKSB7CiAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIuacquaJvuWIsOS4juivpemCrueuseWcsOWdgOebuOWFs+iBlOeahOeUqOaItzoge30iLCBlbWFpbCk7CiAgICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkuc3RhdHVzKEh0dHBTdGF0dXMuQkFEX1JFUVVFU1QpCi0gICAgICAgICAgICAgICAgICAgIC5ib2R5KFJlc3VsdC5lcnJvcigiMSIsIuacquaJvuWIsOS4juivpemCrueuseWcsOWdgOebuOWFs+iBlOeahOeUqOaItyIpKTsKKyAgICAgICAgICAgICAgICAgICAgLmJvZHkoUmVzdWx0LmVycm9yKCLmnKrmib7liLDkuI7or6Xpgq7nrrHlnLDlnYDnm7jlhbPogZTnmoTnlKjmiLciKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyDnlJ/miJDpqozor4HnoIEKQEAgLTEzOSwxNSArMTQ5LDQyIEBACiAgICAgICAgIGxvZ2dlci5pbmZvKCLpqozor4Hku6TniYzlt7Lkv53lrZjvvIznlKjmiLc6IHt9IiwgdXNlci5nZXRVc2VybmFtZSgpKTsKICAgICAgICAgZW1haWxTZXJ2aWNlLnNlbmRWZXJpZmljYXRpb25FbWFpbChlbWFpbCwgdG9rZW4pOwogCi0gICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vayhSZXN1bHQuc3VjY2VzcygyMDAsICLpqozor4Hpgq7ku7blt7Llj5HpgIHvvIEiKSk7CisgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vayhSZXN1bHQub2soKSk7CiAgICAgfQogICAgIEBQb3N0TWFwcGluZygiL2NoZWNrUGFzc3dvcmQiKQogICAgIHB1YmxpYyBSZXN1bHQ8U3RyaW5nPiBjaGVja1Bhc3N3b3JkKEBSZXF1ZXN0UGFyYW0gTG9uZyB1c2VySWQsIEBSZXF1ZXN0UGFyYW0gU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIGJvb2xlYW4gaXNQYXNzd29yZENvcnJlY3QgPSB1c2VyU2VydmljZS5jaGVja1Bhc3N3b3JkKHVzZXJJZCwgcGFzc3dvcmQpOwogICAgICAgICBpZiAoaXNQYXNzd29yZENvcnJlY3QpIHsKLSAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcygiMjAwIiwi5Y6f5aeL5a+G56CB6L6T5YWl5q2j56GuIik7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCIzMDUiLCLljp/lp4vlr4bnoIHovpPlhaXplJnor68iKTsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIuWOn+Wni+Wvhueggei+k+WFpemUmeivryIpOwogICAgICAgICB9CiAgICAgfQorCisKKy8vICAgIEBTYUNoZWNrTG9naW4KKy8vICAgIEBPcGVyYXRpb24oc3VtbWFyeSA9ICLnlKjmiLfmlLbol4/liJfooagiLCBkZXNjcmlwdGlvbiA9ICLojrflj5bnlKjmiLfmlLbol4/nmoTnp43lrZDliJfooagt5YiG6aG1LeaOkuW6jyIpCisvLyAgICBAQXBpUmVzcG9uc2UocmVzcG9uc2VDb2RlID0gIjAiLCBkZXNjcmlwdGlvbiA9ICLmk43kvZzmiJDlip8iLAorLy8gICAgICAgICAgICBjb250ZW50ID0ge0BDb250ZW50KG1lZGlhVHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIiwKKy8vICAgICAgICAgICAgICAgICAgICBzY2hlbWEgPSBAU2NoZW1hKGltcGxlbWVudGF0aW9uID0gVG9ycmVudFZPLmNsYXNzKSkKKy8vICAgICAgICAgICAgfSkKKy8vICAgIEBQb3N0TWFwcGluZygiL2Zhdm9yaXRlL2xpc3QiKQorLy8gICAgcHVibGljIFJlc3VsdCBsaXN0RmF2b3JpdGVzKEBSZXF1ZXN0Qm9keSBGYXZvcml0ZVBhcmFtIHBhcmFtKSB7CisvLyAgICAgICAgaWYgKHBhcmFtLmdldFVzZXJJZCgpID09IG51bGwpIHsKKy8vICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi57y65bCRIHVzZXJJZCIpOworLy8gICAgICAgIH0KKy8vCisvLyAgICAgICAgLy8g5qCh6aqM5o6S5bqP5a2X5q615piv5ZCm5ZCI55CG77yI5Y+v6YCJ77yJCisvLyAgICAgICAgcGFyYW0udmFsaWRPcmRlcihwYXJhbS5nZXRPcmRlcktleShUb3JyZW50RW50aXR5LmNsYXNzKSk7CisvLworLy8gICAgICAgIFBhZ2VVdGlsLnN0YXJ0UGFnZShwYXJhbSk7CisvLworLy8gICAgICAgIExpc3Q8VG9ycmVudEVudGl0eT4gbGlzdCA9IGZhdm9yaXRlU2VydmljZS5nZXRVc2VyRmF2b3JpdGVzUGFnZWQocGFyYW0uZ2V0VXNlcklkKCkpOworLy8KKy8vICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKGxpc3QsIFBhZ2VVdGlsLmdldFBhZ2UobGlzdCkpOworLy8gICAgfQorLy8KKworCisKIH0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9Qcm9tb3Rpb25DcmVhdGVEVE8uamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9Qcm9tb3Rpb25DcmVhdGVEVE8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTE5NzliCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL1Byb21vdGlvbkNyZWF0ZURUTy5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmR0bzsKKworaW1wb3J0IGxvbWJvay5EYXRhOworaW1wb3J0IGphdmF4LnZhbGlkYXRpb24uY29uc3RyYWludHMuKjsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworQERhdGEKK3B1YmxpYyBjbGFzcyBQcm9tb3Rpb25DcmVhdGVEVE8geworICAgIEBOb3RCbGFuayhtZXNzYWdlID0gIuS/g+mUgOWQjeensOS4jeiDveS4uuepuiIpCisgICAgQFNpemUobWF4ID0gMTAwLCBtZXNzYWdlID0gIuS/g+mUgOWQjeensOmVv+W6puS4jeiDvei2hei/hzEwMOS4quWtl+espiIpCisgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKyAgICAKKyAgICBAU2l6ZShtYXggPSA1MDAsIG1lc3NhZ2UgPSAi5o+P6L+w6ZW/5bqm5LiN6IO96LaF6L+HNTAw5Liq5a2X56ymIikKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAKKyAgICBATm90TnVsbChtZXNzYWdlID0gIuW8gOWni+aXtumXtOS4jeiDveS4uuepuiIpCisgICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIHN0YXJ0VGltZTsKKyAgICAKKyAgICBATm90TnVsbChtZXNzYWdlID0gIue7k+adn+aXtumXtOS4jeiDveS4uuepuiIpCisgICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIGVuZFRpbWU7CisgICAgCisgICAgQE5vdE51bGwobWVzc2FnZSA9ICLmipjmiaPmr5TkvovkuI3og73kuLrnqboiKQorICAgIEBNaW4odmFsdWUgPSAwLCBtZXNzYWdlID0gIuaKmOaJo+avlOS+i+S4jeiDveWwj+S6jjAiKQorICAgIEBNYXgodmFsdWUgPSAxMDAsIG1lc3NhZ2UgPSAi5oqY5omj5q+U5L6L5LiN6IO95aSn5LqOMTAwIikKKyAgICBwcml2YXRlIGRvdWJsZSBkaXNjb3VudFBlcmNlbnRhZ2U7CisgICAgCisgICAgQE5vdEVtcHR5KG1lc3NhZ2UgPSAi6YCC55So56eN5a2Q5YiX6KGo5LiN6IO95Li656m6IikKKyAgICBwcml2YXRlIExpc3Q8TG9uZz4gYXBwbGljYWJsZVRvcnJlbnRJZHM7CisgICAgCisgICAgQEFzc2VydFRydWUobWVzc2FnZSA9ICLnu5PmnZ/ml7bpl7Tlv4XpobvmmZrkuo7lvIDlp4vml7bpl7QiKQorICAgIHB1YmxpYyBib29sZWFuIGlzRW5kVGltZUFmdGVyU3RhcnRUaW1lKCkgeworICAgICAgICByZXR1cm4gZW5kVGltZSAhPSBudWxsICYmIHN0YXJ0VGltZSAhPSBudWxsICYmIGVuZFRpbWUuaXNBZnRlcihzdGFydFRpbWUpOworICAgIH0KK30gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL1RvcnJlbnRVcGRhdGVEVE8uamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9Ub3JyZW50VXBkYXRlRFRPLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwOTMyMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9Ub3JyZW50VXBkYXRlRFRPLmphdmEKQEAgLTAsMCArMSwyNCBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvOworCitpbXBvcnQgbG9tYm9rLkRhdGE7CitpbXBvcnQgamF2YXgudmFsaWRhdGlvbi5jb25zdHJhaW50cy5Ob3RCbGFuazsKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLlNpemU7CisKK0BEYXRhCitwdWJsaWMgY2xhc3MgVG9ycmVudFVwZGF0ZURUTyB7CisgICAgQE5vdEJsYW5rKG1lc3NhZ2UgPSAi5qCH6aKY5LiN6IO95Li656m6IikKKyAgICBAU2l6ZShtYXggPSAzMCwgbWVzc2FnZSA9ICLlkI3np7Dplb/luqbkuI3og73otoXov4czMOS4quWtl+espiIpCisgICAgcHJpdmF0ZSBTdHJpbmcgdGl0bGU7CisgICAgCisgICAgQFNpemUobWF4ID0gMTAwMCwgbWVzc2FnZSA9ICLmj4/ov7Dplb/luqbkuI3og73otoXov4cxMDAw5Liq5a2X56ymIikKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAKKyAgICBATm90QmxhbmsobWVzc2FnZSA9ICLliIbnsbvkuI3og73kuLrnqboiKQorICAgIHByaXZhdGUgU3RyaW5nIGNhdGVnb3J5OworICAgIAorCisgICAgcHJpdmF0ZSBTdHJpbmcgdGFnczsKKyAgICBATm90QmxhbmsobWVzc2FnZSA9ICLlsIHpnaLkuI3og73kuLrnqboiKQorICAgIAorICAgIHByaXZhdGUgU3RyaW5nIGltYWdlVXJsOworfSAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFBhcmFtLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFBhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVmODMyYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9wYXJhbS9Ub3JyZW50UGFyYW0uamF2YQpAQCAtMCwwICsxLDQzIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5kdG8ucGFyYW07CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uLmJhc2UuT3JkZXJQYWdlUGFyYW07CitpbXBvcnQgaW8uc3dhZ2dlci52My5vYXMuYW5ub3RhdGlvbnMubWVkaWEuU2NoZW1hOworaW1wb3J0IGxvbWJvay5EYXRhOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlsczsKKworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICog56eN5a2Q5p+l6K+i5Y+C5pWwCisgKi8KK0BEYXRhCitAU2NoZW1hKGRlc2NyaXB0aW9uID0gIuenjeWtkOafpeivouWPguaVsCIpCitwdWJsaWMgY2xhc3MgVG9ycmVudFBhcmFtIGV4dGVuZHMgT3JkZXJQYWdlUGFyYW0geworCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLlhbPplK7lrZciKQorICAgIHByaXZhdGUgU3RyaW5nIGtleXdvcmQ7CisKKyAgICBAU2NoZW1hKGRlc2NyaXB0aW9uID0gIuWIhuexuyIpCisgICAgcHJpdmF0ZSBTdHJpbmcgY2F0ZWdvcnk7CisKKyAgICBAU2NoZW1hKGRlc2NyaXB0aW9uID0gIuS/g+mUgOenjeWtkCIpCisgICAgcHJpdmF0ZSBTdHJpbmcgZnJlZTsKKworICAgIHByaXZhdGUgU2V0PFN0cmluZz4gbGlrZUV4cHJlc3Npb25zOworCisgICAgcHVibGljIHZvaWQgYnVpbGRMaWtlKCkgeworICAgICAgICBsaWtlRXhwcmVzc2lvbnMgPSBuZXcgTGlua2VkSGFzaFNldDw+KCk7CisgICAgICAgIGlmIChTdHJpbmdVdGlscy5pc0VtcHR5KGtleXdvcmQpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAga2V5d29yZCA9IGtleXdvcmQucmVwbGFjZSgiLiIsICIgIik7CisgICAgICAgIFN0cmluZ1tdIHNlYXJjaHN0ckV4cGxvZGVkID0ga2V5d29yZC5zcGxpdCgiICIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlYXJjaHN0ckV4cGxvZGVkLmxlbmd0aCAmJiBpIDwgMTA7IGkrKykgeworICAgICAgICAgICAgU3RyaW5nIHNlYXJjaHN0ckVsZW1lbnQgPSBzZWFyY2hzdHJFeHBsb2RlZFtpXS50cmltKCk7CisgICAgICAgICAgICBpZiAoIXNlYXJjaHN0ckVsZW1lbnQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbGlrZUV4cHJlc3Npb25zLmFkZChzZWFyY2hzdHJFbGVtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFVwbG9hZFBhcmFtLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFVwbG9hZFBhcmFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVkZTQ2OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by9wYXJhbS9Ub3JyZW50VXBsb2FkUGFyYW0uamF2YQpAQCAtMCwwICsxLDI4IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5kdG8ucGFyYW07CisKK2ltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5tZWRpYS5TY2hlbWE7CitpbXBvcnQgbG9tYm9rLkRhdGE7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworQERhdGEKK0BTY2hlbWEoZGVzY3JpcHRpb24gPSAi56eN5a2Q5LiK5Lyg5Y+C5pWwIikKK3B1YmxpYyBjbGFzcyBUb3JyZW50VXBsb2FkUGFyYW0geworICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi5LiK5Lyg6ICFIikKKyAgICBwcml2YXRlIFN0cmluZyB1cGxvYWRlcjsKKworICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi56eN5a2Q5qCH6aKYIikKKyAgICBwcml2YXRlIFN0cmluZyB0aXRsZTsKKworICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi56eN5a2Q5o+P6L+wIikKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKKworICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi56eN5a2Q5qCH562+IikKKyAgICBwcml2YXRlIFN0cmluZyB0YWdzOworCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLnp43lrZDliIbnsbsiKQorICAgIHByaXZhdGUgU3RyaW5nIGNhdGVnb3J5OworCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLnp43lrZDlsIHpnaLlm74gVVJMIikKKyAgICBwcml2YXRlIFN0cmluZyBpbWFnZVVybDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vdm8vVG9ycmVudFZPLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vdm8vVG9ycmVudFZPLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcyM2NiMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2R0by92by9Ub3JyZW50Vk8uamF2YQpAQCAtMCwwICsxLDEwNSBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnZvOworCitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CisKK2ltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5tZWRpYS5TY2hlbWE7CitpbXBvcnQgamF2YXgudmFsaWRhdGlvbi5jb25zdHJhaW50cy5Ob3RFbXB0eTsKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLk5vdE51bGw7CitpbXBvcnQgbG9tYm9rLkRhdGE7CisKK0BEYXRhCitwdWJsaWMgY2xhc3MgVG9ycmVudFZPIHsKKyAgICAvKioKKyAgICAgKiDnp43lrZBJRAorICAgICAqLworICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi56eN5a2QSUQiKQorICAgIHByaXZhdGUgTG9uZyBpZDsKKworICAgIC8qKgorICAgICAqIOagh+mimAorICAgICAqLworICAgIEBOb3RFbXB0eQorICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi5qCH6aKYIikKKyAgICBwcml2YXRlIFN0cmluZyB0aXRsZTsKKworCisgICAgLyoqCisgICAgICog5bCB6Z2iCisgICAgICovCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLlsIHpnaIiKQorICAgIHByaXZhdGUgU3RyaW5nIGltYWdlVXJsOworICAgIC8qKgorICAgICAqIOaPj+i/sAorICAgICAqLworICAgIEBOb3RFbXB0eQorICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi5o+P6L+wIikKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKKworICAgIC8qKgorICAgICAqIOexu+WIqworICAgICAqLworICAgIEBOb3ROdWxsCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLnsbvliKsiKQorICAgIHByaXZhdGUgU3RyaW5nIGNhdGVnb3J5OworCisKKyAgICAvKioKKyAgICAgKiDmt7vliqDml6XmnJ8KKyAgICAgKi8KKyAgICBAU2NoZW1hKGRlc2NyaXB0aW9uID0gIua3u+WKoOaXpeacnyIpCisgICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIGNyZWF0ZVRpbWU7CisKKyAgICAvKioKKyAgICAgKiDkv67mlLnml6XmnJ8KKyAgICAgKi8KKyAgICBAU2NoZW1hKGRlc2NyaXB0aW9uID0gIuS/ruaUueaXpeacnyIpCisgICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIHVwZGF0ZVRpbWU7CisKKyAgICAvKioKKyAgICAgKiDkuIrkvKDogIUKKyAgICAgKi8KKyAgICBAU2NoZW1hKGRlc2NyaXB0aW9uID0gIuS4iuS8oOiAhSIpCisgICAgcHJpdmF0ZSBTdHJpbmcgdXBsb2FkZXI7CisgICAgLyoqCisgICAgICog5paH5Lu25aSn5bCPCisgICAgICovCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLmlofku7blpKflsI8iKQorICAgIHByaXZhdGUgTG9uZyBzaXplOworICAgCisKKworICAgIC8qKgorICAgICAqIOivhOiuuuaVsAorICAgICAqLworICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi6K+E6K665pWwIikKKyAgICBwcml2YXRlIEludGVnZXIgY29tbWVudHM7CisgICAgLyoqCisgICAgICog5rWP6KeI5qyh5pWwCisgICAgICovCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLmtY/op4jmrKHmlbAiKQorICAgIHByaXZhdGUgSW50ZWdlciB2aWV3czsKKyAgICAvKioKKyAgICAgKiDngrnlh7vmrKHmlbAKKyAgICAgKi8KKyAgICBAU2NoZW1hKGRlc2NyaXB0aW9uID0gIueCueWHu+asoeaVsCIpCisgICAgcHJpdmF0ZSBJbnRlZ2VyIGhpdHM7CisKKworICAgIC8qKgorICAgICAqIOS4i+i9veaVsAorICAgICAqLworICAgIEBTY2hlbWEoZGVzY3JpcHRpb24gPSAi5LiL6L295pWwIikKKyAgICBwcml2YXRlIEludGVnZXIgbGVlY2hlcnM7CisgICAgLyoqCisgICAgICog5YGa56eN5pWwCisgICAgICovCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLlgZrnp43mlbAiKQorICAgIHByaXZhdGUgSW50ZWdlciBzZWVkZXJzOworCisgICAgLyoqCisgICAgICog5a6M5oiQ5qyh5pWwCisgICAgICovCisgICAgQFNjaGVtYShkZXNjcmlwdGlvbiA9ICLlrozmiJDmrKHmlbAiKQorICAgIHByaXZhdGUgSW50ZWdlciBjb21wbGV0aW9uczsKKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0VudGl0eUJhc2UuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9FbnRpdHlCYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1ODNjYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9FbnRpdHlCYXNlLmphdmEKQEAgLTAsMCArMSw2MSBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OworCisKKworaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5hbm5vdGF0aW9uLklkVHlwZTsKK2ltcG9ydCBjb20uYmFvbWlkb3UubXliYXRpc3BsdXMuYW5ub3RhdGlvbi5UYWJsZUlkOworCitpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CisKK2ltcG9ydCBsb21ib2suR2V0dGVyOworaW1wb3J0IGxvbWJvay5TZXR0ZXI7CisKKy8qKgorICogQmFzZSBjbGFzcyBmb3IgYW4gZW50aXR5LCBhcyBleHBsYWluZWQgaW4gdGhlIGJvb2sgIkRvbWFpbiBEcml2ZW4gRGVzaWduIi4KKyAqIEFsbCBlbnRpdGllcyBpbiB0aGlzIHByb2plY3QgaGF2ZSBhbiBpZGVudGl0eSBhdHRyaWJ1dGUgd2l0aCB0eXBlIExvbmcgYW5kCisgKiBuYW1lIGlkLiBJbnNwaXJlZCBieSB0aGUgREREIFNhbXBsZSBwcm9qZWN0LgorCisgKi8KK0BTZXR0ZXIKK0BHZXR0ZXIKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBFbnRpdHlCYXNlIHsKKworICAgIC8qKgorICAgICAqIFRoaXMgaWRlbnRpdHkgZmllbGQgaGFzIHRoZSB3cmFwcGVyIGNsYXNzIHR5cGUgTG9uZyBzbyB0aGF0IGFuIGVudGl0eSB3aGljaAorICAgICAqIGhhcyBub3QgYmVlbiBzYXZlZCBpcyByZWNvZ25pemFibGUgYnkgYSBudWxsIGlkZW50aXR5LgorICAgICAqLworICAgIEBUYWJsZUlkKHR5cGUgPSBJZFR5cGUuQVVUTykKKyAgICBwcml2YXRlIEludGVnZXIgaWQ7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoZmluYWwgT2JqZWN0IG9iamVjdCkgeworICAgICAgICBpZiAoIShvYmplY3QgaW5zdGFuY2VvZiBFbnRpdHlCYXNlKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghZ2V0Q2xhc3MoKS5lcXVhbHMob2JqZWN0LmdldENsYXNzKCkpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZmluYWwgRW50aXR5QmFzZSB0aGF0ID0gKEVudGl0eUJhc2UpIG9iamVjdDsKKyAgICAgICAgX2NoZWNrSWRlbnRpdHkodGhpcyk7CisgICAgICAgIF9jaGVja0lkZW50aXR5KHRoYXQpOworICAgICAgICByZXR1cm4gdGhpcy5pZC5lcXVhbHModGhhdC5nZXRJZCgpKTsKKyAgICB9CisKKworICAgIHByaXZhdGUgdm9pZCBfY2hlY2tJZGVudGl0eShmaW5hbCBFbnRpdHlCYXNlIGVudGl0eSkgeworICAgICAgICBpZiAoZW50aXR5LmdldElkKCkgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ29tcGFyaXNvbiBpZGVudGl0eSBtaXNzaW5nIGluIGVudGl0eTogIiArIGVudGl0eSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworICAgICAgICByZXR1cm4gT2JqZWN0cy5oYXNoKHRoaXMuZ2V0SWQoKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiPCIgKyBnZXRJZCgpICsgIj4iOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0Zhdm9yaXRlRW50aXR5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRmF2b3JpdGVFbnRpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjc2Y2ZlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0Zhdm9yaXRlRW50aXR5LmphdmEKQEAgLTAsMCArMSwzNiBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OworCitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmFubm90YXRpb24uSWRUeXBlOworaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5hbm5vdGF0aW9uLlRhYmxlRmllbGQ7CitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmFubm90YXRpb24uVGFibGVJZDsKK2ltcG9ydCBjb20uYmFvbWlkb3UubXliYXRpc3BsdXMuYW5ub3RhdGlvbi5UYWJsZU5hbWU7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvblByb3BlcnR5OworaW1wb3J0IGlvLnN3YWdnZXIuYW5ub3RhdGlvbnMuQXBpTW9kZWw7CitpbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGlNb2RlbFByb3BlcnR5OworaW1wb3J0IGxvbWJvay5EYXRhOworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK0BEYXRhCitAVGFibGVOYW1lKCJmYXZvcml0ZSIpCitAQXBpTW9kZWwoIuaUtuiXj+WunuS9k+exuyIpCitwdWJsaWMgY2xhc3MgRmF2b3JpdGVFbnRpdHkgeworICAgIEBUYWJsZUlkKHR5cGUgPSBJZFR5cGUuQVVUTykKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLmlLbol49JRCIsIGV4YW1wbGUgPSAiMSIpCisgICAgcHJpdmF0ZSBMb25nIGlkOworCisgICAgQEFwaU1vZGVsUHJvcGVydHkodmFsdWUgPSAi55So5oi3SUQiLCBleGFtcGxlID0gIjEwMDEiKQorICAgIEBKc29uUHJvcGVydHkoInVzZXJJZCIpCisgICAgQFRhYmxlRmllbGQoInVzZXJfaWQiKQorICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7CisKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLnp43lrZBJRCIsIGV4YW1wbGUgPSAiMjAwMSIpCisgICAgQEpzb25Qcm9wZXJ0eSgic2VlZElkIikKKyAgICBAVGFibGVGaWVsZCgic2VlZF9pZCIpCisgICAgcHJpdmF0ZSBMb25nIHNlZWRJZDsKKworICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuaUtuiXj+aXtumXtCIsIGV4YW1wbGUgPSAiMjAyNC0wNS0xMyAxMjowMDowMCIpCisgICAgQEpzb25Qcm9wZXJ0eSgiY3JlYXRlVGltZSIpCisgICAgQFRhYmxlRmllbGQoImNyZWF0ZV90aW1lIikKKyAgICBwcml2YXRlIERhdGUgY3JlYXRlVGltZTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvUHJvbW90aW9uLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvUHJvbW90aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNhODQ2YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Qcm9tb3Rpb24uamF2YQpAQCAtMCwwICsxLDM0IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7CisKK2ltcG9ydCBjb20uYmFvbWlkb3UubXliYXRpc3BsdXMuYW5ub3RhdGlvbi5JZFR5cGU7CitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmFubm90YXRpb24uVGFibGVJZDsKK2ltcG9ydCBjb20uYmFvbWlkb3UubXliYXRpc3BsdXMuYW5ub3RhdGlvbi5UYWJsZU5hbWU7CitpbXBvcnQgbG9tYm9rLkRhdGE7CisKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworQERhdGEKK0BUYWJsZU5hbWUoInByb21vdGlvbiIpCitwdWJsaWMgY2xhc3MgUHJvbW90aW9uIHsKKyAgICBAVGFibGVJZCh0eXBlID0gSWRUeXBlLkFVVE8pCisgICAgcHJpdmF0ZSBMb25nIGlkOworICAgIAorICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CisgICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CisgICAgCisgICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIHN0YXJ0VGltZTsKKyAgICAKKyAgICBwcml2YXRlIExvY2FsRGF0ZVRpbWUgZW5kVGltZTsKKyAgICAKKyAgICBwcml2YXRlIGRvdWJsZSBkaXNjb3VudFBlcmNlbnRhZ2U7CisgICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgYXBwbGljYWJsZVRvcnJlbnRJZHM7CisgICAgCisgICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIGNyZWF0ZVRpbWU7CisgICAgCisgICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIHVwZGF0ZVRpbWU7CisgICAgCisgICAgcHJpdmF0ZSBCb29sZWFuIGlzRGVsZXRlZDsKK30gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1RvcnJlbnRFbnRpdHkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Ub3JyZW50RW50aXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyZmI3NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Ub3JyZW50RW50aXR5LmphdmEKQEAgLTAsMCArMSwxMDggQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKKworaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5hbm5vdGF0aW9uLio7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvblByb3BlcnR5OworaW1wb3J0IGlvLnN3YWdnZXIuYW5ub3RhdGlvbnMuQXBpTW9kZWw7CitpbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGlNb2RlbFByb3BlcnR5OworaW1wb3J0IGxvbWJvay5EYXRhOworCitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK0BEYXRhCitAVGFibGVOYW1lKCJ0b3JyZW50IikKK0BBcGlNb2RlbCgi56eN5a2Q5a6e5L2T57G7IikKK3B1YmxpYyBjbGFzcyBUb3JyZW50RW50aXR5IHsKKworICAgIEBUYWJsZUlkKHR5cGUgPSBJZFR5cGUuQVVUTykKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLnp43lrZBJRCIsIGV4YW1wbGUgPSAiMSIpCisgICAgcHJpdmF0ZSBMb25nIGlkOworCisgICAgQEpzb25Qcm9wZXJ0eSgiaW5mb0hhc2giKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuenjeWtkOS/oeaBr+WTiOW4jCIsIGV4YW1wbGUgPSAiYWJjZGVmMTIzNDU2IikKKyAgICBwcml2YXRlIFN0cmluZyBpbmZvSGFzaDsKKworICAgIEBKc29uUHJvcGVydHkoImZpbGVOYW1lIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLnp43lrZDmlofku7blkI0iLCBleGFtcGxlID0gIm1vdmllX3RvcnJlbnRfZmlsZS50b3JyZW50IikKKyAgICBwcml2YXRlIFN0cmluZyBmaWxlTmFtZTsKKworICAgIEBKc29uUHJvcGVydHkoInVwbG9hZGVyIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLkuIrkvKDogIUiLCBleGFtcGxlID0gInVzZXIxMjMiKQorICAgIHByaXZhdGUgU3RyaW5nIHVwbG9hZGVyOworCisgICAgQEpzb25Qcm9wZXJ0eSgiY3JlYXRlZFRpbWUiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuS4iuS8oOaXtumXtCIsIGV4YW1wbGUgPSAiMjAyNC0wMS0wMSAxMjowMDowMCIpCisgICAgQFRhYmxlRmllbGQoZmlsbCA9IEZpZWxkRmlsbC5JTlNFUlQpCisgICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIGNyZWF0ZVRpbWU7CisKKyAgICBASnNvblByb3BlcnR5KCJ1cGRhdGVUaW1lIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLmm7TmlrDml7bpl7QiLCBleGFtcGxlID0gIjIwMjQtMDEtMDEgMTI6MDA6MDAiKQorCisgICAgQFRhYmxlRmllbGQoZmlsbCA9IEZpZWxkRmlsbC5JTlNFUlRfVVBEQVRFKQorICAgIHByaXZhdGUgTG9jYWxEYXRlVGltZSB1cGRhdGVUaW1lOworCisgICAgQEpzb25Qcm9wZXJ0eSgic2l6ZSIpCisgICAgQEFwaU1vZGVsUHJvcGVydHkodmFsdWUgPSAi56eN5a2Q5paH5Lu25aSn5bCPIiwgZXhhbXBsZSA9ICIxMjM0NTYiKQorICAgIHByaXZhdGUgTG9uZyBzaXplOworCisgICAgQEpzb25Qcm9wZXJ0eSgidGl0bGUiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuenjeWtkOagh+mimCIsIGV4YW1wbGUgPSAi44CK5pif6ZmF56m/6LaK44CLIikKKyAgICBwcml2YXRlIFN0cmluZyB0aXRsZTsKKworICAgIEBKc29uUHJvcGVydHkoImRlc2NyaXB0aW9uIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLnp43lrZDmj4/ov7AiLCBleGFtcGxlID0gIui/meaYr+S4gOmDqOWlveeci+eahOenkeW5u+eUteW9sSIpCisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CisKKyAgICBASnNvblByb3BlcnR5KCJ0YWdzIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLnp43lrZDmoIfnrb4iLCBleGFtcGxlID0gIltcIuenkeW5u1wiLFwi5Yqo5L2cXCJdIikKKyAgICBwcml2YXRlIFN0cmluZyB0YWdzOworCisgICAgQEpzb25Qcm9wZXJ0eSgiY2F0ZWdvcnkiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuenjeWtkOWIhuexuyIsIGV4YW1wbGUgPSAibW92aWUiKQorICAgIHByaXZhdGUgU3RyaW5nIGNhdGVnb3J5OworCisgICAgQEpzb25Qcm9wZXJ0eSgiaW1hZ2VVcmwiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuenjeWtkOWwgemdouWbvlVSTCIsIGV4YW1wbGUgPSAiaHR0cDovL2V4YW1wbGUuY29tL2ltYWdlcy9jb3Zlci5qcGciKQorICAgIHByaXZhdGUgU3RyaW5nIGltYWdlVXJsOworCisgICAgQEpzb25Qcm9wZXJ0eSgibGVlY2hlcnMiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuS4i+i9veasoeaVsCIsIGV4YW1wbGUgPSAiMTIzIikKKyAgICBwcml2YXRlIEludGVnZXIgbGVlY2hlcnM7CisKKyAgICBASnNvblByb3BlcnR5KCJzZWVkZXJzIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLlgZrnp43mlbAiLCBleGFtcGxlID0gIjEwIikKKyAgICBwcml2YXRlIEludGVnZXIgc2VlZGVyczsKKworICAgIEBKc29uUHJvcGVydHkoImNvbW1lbnRzIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLor4TorrrmlbAiLCBleGFtcGxlID0gIjUiKQorICAgIHByaXZhdGUgSW50ZWdlciBjb21tZW50czsKKworICAgIEBKc29uUHJvcGVydHkoInZpZXdzIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLmtY/op4jmrKHmlbAiLCBleGFtcGxlID0gIjEwMDAiKQorICAgIHByaXZhdGUgSW50ZWdlciB2aWV3czsKKworICAgIEBKc29uUHJvcGVydHkoImhpdHMiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIueCueWHu+asoeaVsCIsIGV4YW1wbGUgPSAiMjAwMCIpCisgICAgcHJpdmF0ZSBJbnRlZ2VyIGhpdHM7CisKKyAgICBASnNvblByb3BlcnR5KCJwcm9tb3Rpb25UaW1lVHlwZSIpCisgICAgQEFwaU1vZGVsUHJvcGVydHkodmFsdWUgPSAi5L+D6ZSA5pe26Ze057G75Z6LIiwgZXhhbXBsZSA9ICIxIikKKyAgICBwcml2YXRlIEludGVnZXIgcHJvbW90aW9uVGltZVR5cGU7CisKKyAgICBASnNvblByb3BlcnR5KCJwcm9tb3Rpb25VbnRpbCIpCisgICAgQEFwaU1vZGVsUHJvcGVydHkodmFsdWUgPSAi5L+D6ZSA5oiq5q2i5pel5pyfIiwgZXhhbXBsZSA9ICIyMDI0LTEyLTMxVDIzOjU5OjU5IikKKyAgICBwcml2YXRlIExvY2FsRGF0ZVRpbWUgcHJvbW90aW9uVW50aWw7CisKKyAgICAKKyAgICBASnNvblByb3BlcnR5KCJ0b3JyZW50RmlsZSIpCisgICAgQEFwaU1vZGVsUHJvcGVydHkodmFsdWUgPSAi56eN5a2Q5paH5Lu2IiwgZXhhbXBsZSA9ICJiYXNlNjQgZW5jb2RlZCB0b3JyZW50IGZpbGUiKQorICAgIHByaXZhdGUgYnl0ZVtdIHRvcnJlbnRGaWxlOworCisgICAgQEpzb25Qcm9wZXJ0eSgiaXNEZWxldGVkIikKKyAgICBAQXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICLmmK/lkKbliKDpmaQiLCBleGFtcGxlID0gImZhbHNlIikKKyAgICBwcml2YXRlIEJvb2xlYW4gaXNEZWxldGVkOworCisgICAgcHVibGljIFRvcnJlbnRFbnRpdHkoKSB7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlci5qYXZhCmluZGV4IDIwZjcxMzguLjc1NzRlNjcgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyLmphdmEKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXIuamF2YQpAQCAtOSw2ICs5LDggQEAKIGltcG9ydCBpby5zd2FnZ2VyLmFubm90YXRpb25zLkFwaU1vZGVsUHJvcGVydHk7CiBpbXBvcnQgbG9tYm9rLkRhdGE7CiAKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKKwogQERhdGEKIEBUYWJsZU5hbWUoInVzZXIiKSAvLyDmjIflrprmlbDmja7lupPooajlkI0KIEBBcGlNb2RlbCgi55So5oi35a6e5L2T57G7IikgLy8g55So5LqO5o+P6L+w5qih5Z6LCkBAIC01MCw2ICs1MiwyNiBAQAogICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuWktOWDjyIpCiAgICAgcHJpdmF0ZSBTdHJpbmcgYXZhdGFyOwogCisgICAgQEpzb25Qcm9wZXJ0eSgidXBsb2FkZWQiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuS4iuS8oOmHjyIsIGV4YW1wbGUgPSAiMTAwMCIpCisgICAgcHJpdmF0ZSBMb25nIHVwbG9hZGVkOworCisgICAgQEpzb25Qcm9wZXJ0eSgiZG93bmxvYWRlZCIpCisgICAgQEFwaU1vZGVsUHJvcGVydHkodmFsdWUgPSAi5LiL6L296YePIiwgZXhhbXBsZSA9ICI1MDAiKQorICAgIHByaXZhdGUgTG9uZyBkb3dubG9hZGVkOworCisgICAgQEpzb25Qcm9wZXJ0eSgiY3JlYXRlX3RpbWUiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuWIm+W7uuaXtumXtCIsIGV4YW1wbGUgPSAiMjAyNC0wNC0wMVQxMjowMDowMCIpCisgICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIGNyZWF0ZVRpbWU7CisKKyAgICBASnNvblByb3BlcnR5KCJ1cGRhdGVfdGltZSIpCisgICAgQEFwaU1vZGVsUHJvcGVydHkodmFsdWUgPSAi5pu05paw5pe26Ze0IiwgZXhhbXBsZSA9ICIyMDI0LTA0LTAxVDEyOjAwOjAwIikKKyAgICBwcml2YXRlIExvY2FsRGF0ZVRpbWUgdXBkYXRlVGltZTsKKworICAgIEBKc29uUHJvcGVydHkoImlzX2RlbGV0ZWQiKQorICAgIEBBcGlNb2RlbFByb3BlcnR5KHZhbHVlID0gIuaYr+WQpuWIoOmZpCIsIGV4YW1wbGUgPSAiZmFsc2UiKQorICAgIHByaXZhdGUgQm9vbGVhbiBpc0RlbGV0ZWQ7CisKICAgICBwdWJsaWMgVXNlcigpIHsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvRmF2b3JpdGVNYXBwZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9GYXZvcml0ZU1hcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YjgxNTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvRmF2b3JpdGVNYXBwZXIuamF2YQpAQCAtMCwwICsxLDE1IEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXI7CisKK2ltcG9ydCBjb20uYmFvbWlkb3UubXliYXRpc3BsdXMuY29yZS5tYXBwZXIuQmFzZU1hcHBlcjsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkZhdm9yaXRlRW50aXR5OworaW1wb3J0IG9yZy5hcGFjaGUuaWJhdGlzLmFubm90YXRpb25zLio7CisKK0BNYXBwZXIKK3B1YmxpYyBpbnRlcmZhY2UgRmF2b3JpdGVNYXBwZXIgZXh0ZW5kcyBCYXNlTWFwcGVyPEZhdm9yaXRlRW50aXR5PiB7CisKKyAgIEBTZWxlY3QoIlNFTEVDVCAqIEZST00gZmF2b3JpdGUgV0hFUkUgdXNlcl9pZCA9ICN7dXNlcklkfSBBTkQgc2VlZF9pZCA9ICN7c2VlZElkfSBMSU1JVCAxIikKKyAgICBGYXZvcml0ZUVudGl0eSBzZWxlY3RCeVVzZXJJZEFuZFNlZWRJZChAUGFyYW0oInVzZXJJZCIpIExvbmcgdXNlcklkLCBAUGFyYW0oInNlZWRJZCIpIExvbmcgc2VlZElkKTsKKworICAgIEBEZWxldGUoIkRFTEVURSBGUk9NIGZhdm9yaXRlIFdIRVJFIHVzZXJfaWQgPSAje3VzZXJJZH0gQU5EIHNlZWRfaWQgPSAje3NlZWRJZH0iKQorICAgIHZvaWQgZGVsZXRlQnlVc2VySWRBbmRTZWVkSWQoQFBhcmFtKCJ1c2VySWQiKSBMb25nIHVzZXJJZCwgQFBhcmFtKCJzZWVkSWQiKSBMb25nIHNlZWRJZCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1Byb21vdGlvbk1hcHBlci5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1Byb21vdGlvbk1hcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0Nzg4MzUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLmphdmEKQEAgLTAsMCArMSw1MiBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyOworCitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmNvcmUubWFwcGVyLkJhc2VNYXBwZXI7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Qcm9tb3Rpb247CitpbXBvcnQgb3JnLmFwYWNoZS5pYmF0aXMuYW5ub3RhdGlvbnMuTWFwcGVyOworaW1wb3J0IG9yZy5hcGFjaGUuaWJhdGlzLmFubm90YXRpb25zLlBhcmFtOworaW1wb3J0IG9yZy5hcGFjaGUuaWJhdGlzLmFubm90YXRpb25zLlNlbGVjdDsKK2ltcG9ydCBvcmcuYXBhY2hlLmliYXRpcy5hbm5vdGF0aW9ucy5VcGRhdGU7CisKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworQE1hcHBlcgorcHVibGljIGludGVyZmFjZSBQcm9tb3Rpb25NYXBwZXIgZXh0ZW5kcyBCYXNlTWFwcGVyPFByb21vdGlvbj4geworCisgICAgQFNlbGVjdCgiU0VMRUNUICogRlJPTSBwcm9tb3Rpb24gV0hFUkUgaXNfZGVsZXRlZCA9IGZhbHNlICIgKworICAgICAgICAgICAgIkFORCBzdGFydF90aW1lIDw9ICN7bm93fSBBTkQgZW5kX3RpbWUgPj0gI3tub3d9IikKKyAgICBMaXN0PFByb21vdGlvbj4gZmluZEFjdGl2ZVByb21vdGlvbnMoQFBhcmFtKCJub3ciKSBMb2NhbERhdGVUaW1lIG5vdyk7CisKKyAgICAvKioKKyAgICAgKiDmn6Xmib7mn5DkuKp0b3JyZW50SWTmmK/lkKblnKjkv4PplIDmtLvliqjnmoRhcHBsaWNhYmxlX3RvcnJlbnRfaWRz5a2X56ym5Liy5LitCisgICAgICog55SoTXlTUUznmoRGSU5EX0lOX1NFVOWIpOaWrQorICAgICAqLworICAgIEBTZWxlY3QoIlNFTEVDVCBwLiogRlJPTSBwcm9tb3Rpb24gcCAiICsKKyAgICAgICAgICAgICJXSEVSRSBwLmlzX2RlbGV0ZWQgPSBmYWxzZSAiICsKKyAgICAgICAgICAgICJBTkQgcC5zdGFydF90aW1lIDw9ICN7bm93fSBBTkQgcC5lbmRfdGltZSA+PSAje25vd30gIiArCisgICAgICAgICAgICAiQU5EIEZJTkRfSU5fU0VUKCN7dG9ycmVudElkfSwgcC5hcHBsaWNhYmxlX3RvcnJlbnRfaWRzKSA+IDAiKQorICAgIExpc3Q8UHJvbW90aW9uPiBmaW5kQWN0aXZlUHJvbW90aW9uc0ZvclRvcnJlbnQoCisgICAgICAgICAgICBAUGFyYW0oInRvcnJlbnRJZCIpIExvbmcgdG9ycmVudElkLAorICAgICAgICAgICAgQFBhcmFtKCJub3ciKSBMb2NhbERhdGVUaW1lIG5vdyk7CisKKyAgICAvKioKKyAgICAgKiDmoKHpqoznp43lrZBpZOaYr+WQpuWtmOWcqO+8jOi/lOWbnuiuoeaVsO+8jDDku6PooajkuI3lrZjlnKjvvIw+MOS7o+ihqOWtmOWcqAorICAgICAqLworICAgIEBTZWxlY3QoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHRvcnJlbnQgV0hFUkUgaWQgPSAje3RvcnJlbnRJZH0iKQorICAgIGludCBjaGVja1RvcnJlbnRFeGlzdHMoQFBhcmFtKCJ0b3JyZW50SWQiKSBMb25nIHRvcnJlbnRJZCk7CisKKyAgICAvKioKKyAgICAgKiDmj5LlhaXkv4PplIDmtLvliqgKKyAgICAgKi8KKy8vICAgIGludCBpbnNlcnQoUHJvbW90aW9uIHByb21vdGlvbik7CisKKyAgICAvKioKKyAgICAgKiDmoLnmja5JROabtOaWsOS/g+mUgOa0u+WKqO+8iOS+i+Wmgui9r+WIoOmZpO+8iQorICAgICAqLworICAgIGludCB1cGRhdGVCeUlkKFByb21vdGlvbiBwcm9tb3Rpb24pOworCisgICAgLyoqCisgICAgICog5qC55o2uSUTmn6Xor6Lkv4PplIDmtLvliqgKKyAgICAgKi8KKyAgICBQcm9tb3Rpb24gc2VsZWN0QnlJZChAUGFyYW0oImlkIikgTG9uZyBpZCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVG9ycmVudE1hcHBlci5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1RvcnJlbnRNYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWNkY2RjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1RvcnJlbnRNYXBwZXIuamF2YQpAQCAtMCwwICsxLDMyIEBACitwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXI7CisKK2ltcG9ydCBjb20uYmFvbWlkb3UubXliYXRpc3BsdXMuY29yZS5tYXBwZXIuQmFzZU1hcHBlcjsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnBhcmFtLlRvcnJlbnRQYXJhbTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRvcnJlbnRFbnRpdHk7CitpbXBvcnQgb3JnLmFwYWNoZS5pYmF0aXMuYW5ub3RhdGlvbnMuTWFwcGVyOworaW1wb3J0IG9yZy5hcGFjaGUuaWJhdGlzLmFubm90YXRpb25zLlBhcmFtOworaW1wb3J0IG9yZy5hcGFjaGUuaWJhdGlzLmFubm90YXRpb25zLlNlbGVjdDsKK2ltcG9ydCBvcmcuYXBhY2hlLmliYXRpcy5hbm5vdGF0aW9ucy5VcGRhdGU7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworQE1hcHBlcgorcHVibGljIGludGVyZmFjZSBUb3JyZW50TWFwcGVyIGV4dGVuZHMgQmFzZU1hcHBlcjxUb3JyZW50RW50aXR5PiB7CisKKyAgICBAU2VsZWN0KCJTRUxFQ1QgKiBGUk9NIHRvcnJlbnRzIFdIRVJFIGluZm9faGFzaCA9ICN7aW5mb0hhc2h9IikKKyAgICBUb3JyZW50RW50aXR5IHNlbGVjdEJ5SW5mb0hhc2goU3RyaW5nIGluZm9IYXNoKTsKKyAgICAKKyAgICBAU2VsZWN0KCJTRUxFQ1QgKiBGUk9NIHRvcnJlbnRzIFdIRVJFIHNlZWRfaWQgPSAje3NlZWRJZH0iKQorICAgIFRvcnJlbnRFbnRpdHkgc2VsZWN0QnlTZWVkSWQoTG9uZyBzZWVkSWQpOworICAgIAorICAgIExpc3Q8VG9ycmVudEVudGl0eT4gc2VhcmNoKEBQYXJhbSgicGFyYW0iKSBUb3JyZW50UGFyYW0gcGFyYW0pOworICAgIAorICAgIEBVcGRhdGUoIlVQREFURSB0b3JyZW50IFNFVCBkb3dubG9hZHMgPSBkb3dubG9hZHMgKyAxIFdIRVJFIGlkID0gI3t0b3JyZW50SWR9IikKKyAgICB2b2lkIGluY3JlYXNlRG93bmxvYWRzKEBQYXJhbSgidG9ycmVudElkIikgTG9uZyB0b3JyZW50SWQpOworICAgIAorICAgIGJvb2xlYW4gY2hlY2tGYXZvcml0ZShAUGFyYW0oInNlZWRJZCIpIExvbmcgc2VlZElkLCBAUGFyYW0oInVzZXJJZCIpIExvbmcgdXNlcklkKTsKKyAgICAKKyAgICB2b2lkIGFkZEZhdm9yaXRlKEBQYXJhbSgic2VlZElkIikgTG9uZyBzZWVkSWQsIEBQYXJhbSgidXNlcklkIikgTG9uZyB1c2VySWQpOworICAgIAorICAgIHZvaWQgcmVtb3ZlRmF2b3JpdGUoQFBhcmFtKCJzZWVkSWQiKSBMb25nIHNlZWRJZCwgQFBhcmFtKCJ1c2VySWQiKSBMb25nIHVzZXJJZCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1VzZXJNYXBwZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9Vc2VyTWFwcGVyLmphdmEKaW5kZXggYTA3MGJiNS4uM2EyOWI2NCAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1VzZXJNYXBwZXIuamF2YQorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVXNlck1hcHBlci5qYXZhCkBAIC00LDYgKzQsNyBAQAogaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5jb3JlLm1hcHBlci5CYXNlTWFwcGVyOwogaW1wb3J0IG9yZy5hcGFjaGUuaWJhdGlzLmFubm90YXRpb25zLk1hcHBlcjsKIGltcG9ydCBvcmcuYXBhY2hlLmliYXRpcy5hbm5vdGF0aW9ucy5TZWxlY3Q7CitpbXBvcnQgb3JnLmFwYWNoZS5pYmF0aXMuYW5ub3RhdGlvbnMuVXBkYXRlOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5yZXBvc2l0b3J5LnF1ZXJ5LlBhcmFtOwogCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CkBAIC0yMiw0ICsyMyw5IEBACiAgICAgLy8g5qC55o2u55So5oi35ZCN5YyF5ZCr5p+l5om+55So5oi3CiAgICAgTGlzdDxVc2VyPiBzZWxlY3RCeVVzZXJuYW1lQ29udGFpbmluZyhAUGFyYW0oIm5hbWUiKSBTdHJpbmcgbmFtZSk7CiAKKyAgICBAVXBkYXRlKCJVUERBVEUgdXNlciBTRVQgZG93bmxvYWRlZCA9IGRvd25sb2FkZWQgKyAje3NpemV9IFdIRVJFIGlkID0gI3t1c2VySWR9IikKKyAgICB2b2lkIGluY3JlYXNlRG93bmxvYWRlZChAUGFyYW0oInVzZXJJZCIpIExvbmcgdXNlcklkLCBAUGFyYW0oInNpemUiKSBkb3VibGUgc2l6ZSk7CisgICAgCisgICAgYm9vbGVhbiBoYXNSb2xlKEBQYXJhbSgidXNlcklkIikgTG9uZyB1c2VySWQsIEBQYXJhbSgicm9sZSIpIFN0cmluZyByb2xlKTsKKwogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvUHJvbW90aW9uU2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Qcm9tb3Rpb25TZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg3YzEzYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvUHJvbW90aW9uU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2U7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlByb21vdGlvbjsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLlByb21vdGlvbkNyZWF0ZURUTzsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGludGVyZmFjZSBQcm9tb3Rpb25TZXJ2aWNlIHsKKyAgICBQcm9tb3Rpb24gY3JlYXRlUHJvbW90aW9uKFByb21vdGlvbkNyZWF0ZURUTyBwcm9tb3Rpb25EVE8pOworICAgIAorICAgIExpc3Q8UHJvbW90aW9uPiBnZXRBbGxBY3RpdmVQcm9tb3Rpb25zKCk7CisgICAgCisgICAgUHJvbW90aW9uIGdldFByb21vdGlvbkJ5SWQoTG9uZyBwcm9tb3Rpb25JZCk7CisgICAgCisgICAgdm9pZCBkZWxldGVQcm9tb3Rpb24oTG9uZyBwcm9tb3Rpb25JZCk7CisgICAgCisgICAgZG91YmxlIGdldEN1cnJlbnREaXNjb3VudChMb25nIHRvcnJlbnRJZCk7Cit9IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVG9ycmVudFNlcnZpY2UuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVG9ycmVudFNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDE4MDRkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Ub3JyZW50U2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2U7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuY29tbW9uLmJhc2UuUmVzdWx0OworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVG9ycmVudEVudGl0eTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnBhcmFtLlRvcnJlbnRQYXJhbTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnBhcmFtLlRvcnJlbnRVcGxvYWRQYXJhbTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLlRvcnJlbnRVcGRhdGVEVE87CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIubXVsdGlwYXJ0Lk11bHRpcGFydEZpbGU7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgaW50ZXJmYWNlIFRvcnJlbnRTZXJ2aWNlIHsKKyAgICBMaXN0PFRvcnJlbnRFbnRpdHk+IHNlYXJjaChUb3JyZW50UGFyYW0gcGFyYW0pOworICAgIAorICAgIFRvcnJlbnRFbnRpdHkgc2VsZWN0QnlTZWVkSWQoTG9uZyBzZWVkSWQpOworICAgIAorICAgIHZvaWQgdXBsb2FkVG9ycmVudChNdWx0aXBhcnRGaWxlIGZpbGUsIFRvcnJlbnRVcGxvYWRQYXJhbSBwYXJhbSkgdGhyb3dzIElPRXhjZXB0aW9uOworICAgIAorICAgIGJ5dGVbXSBmZXRjaChMb25nIHNlZWRJZCwgU3RyaW5nIHBhc3NrZXkpIHRocm93cyBJT0V4Y2VwdGlvbjsKKyAgICAKKyAgICBSZXN1bHQgZmF2b3JpdGUoTG9uZyBzZWVkSWQsIExvbmcgdXNlcklkKTsKKyAgICAKKyAgICB2b2lkIGRlbGV0ZVRvcnJlbnQoTG9uZyBzZWVkSWQpOworICAgIAorICAgIHZvaWQgdXBkYXRlVG9ycmVudChMb25nIHNlZWRJZCwgVG9ycmVudFVwZGF0ZURUTyB1cGRhdGVEVE8pOworICAgIAorICAgIGJvb2xlYW4gY2FuVXNlckRlbGV0ZVRvcnJlbnQoTG9uZyBzZWVkSWQsIExvbmcgdXNlcklkKTsKKyAgICAKKyAgICBib29sZWFuIGNhblVzZXJVcGRhdGVUb3JyZW50KExvbmcgc2VlZElkLCBMb25nIHVzZXJJZCk7CisgICAgCisgICAgYm9vbGVhbiBjaGVja1VzZXJVcGxvYWRSYXRpbyhMb25nIHVzZXJJZCk7CisgICAgCisgICAgZG91YmxlIGNhbGN1bGF0ZURvd25sb2FkU2l6ZShMb25nIHRvcnJlbnRJZCwgTG9uZyB1c2VySWQpOworICAgIAorICAgIHZvaWQgcmVjb3JkRG93bmxvYWQoTG9uZyB0b3JyZW50SWQsIExvbmcgdXNlcklkLCBkb3VibGUgZG93bmxvYWRTaXplKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlclNlcnZpY2UuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlclNlcnZpY2UuamF2YQppbmRleCA1MzVmNjM1Li43MTQzNWM3IDEwMDY0NAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJTZXJ2aWNlLmphdmEKKysrIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5qYXZhCkBAIC0yMSw0ICsyMSw1IEBACiAgICAgYm9vbGVhbiBjaGVja1Bhc3N3b3JkKExvbmcgdXNlcklkLCBTdHJpbmcgcmF3UGFzc3dvcmQpOwogCiAKKy8vICAgIEludGVnZXIgZ2V0VXNlcklkKCk7CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Qcm9tb3Rpb25TZXJ2aWNlSW1wbC5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Qcm9tb3Rpb25TZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMzRjYmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1Byb21vdGlvblNlcnZpY2VJbXBsLmphdmEKQEAgLTAsMCArMSwxMTQgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2Uuc2VydmljZUltcGw7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlByb21vdGlvbjsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlByb21vdGlvbk1hcHBlcjsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5Qcm9tb3Rpb25TZXJ2aWNlOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5kdG8uUHJvbW90aW9uQ3JlYXRlRFRPOworCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsudHJhbnNhY3Rpb24uYW5ub3RhdGlvbi5UcmFuc2FjdGlvbmFsOworCitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOworCitAU2VydmljZQorcHVibGljIGNsYXNzIFByb21vdGlvblNlcnZpY2VJbXBsIGltcGxlbWVudHMgUHJvbW90aW9uU2VydmljZSB7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBQcm9tb3Rpb25NYXBwZXIgcHJvbW90aW9uTWFwcGVyOworCisgICAgQE92ZXJyaWRlCisgICAgQFRyYW5zYWN0aW9uYWwKKyAgICBwdWJsaWMgUHJvbW90aW9uIGNyZWF0ZVByb21vdGlvbihQcm9tb3Rpb25DcmVhdGVEVE8gcHJvbW90aW9uRFRPKSB7CisgICAgICAgIC8vIOmqjOivgeaXtumXtAorICAgICAgICBMb2NhbERhdGVUaW1lIG5vdyA9IExvY2FsRGF0ZVRpbWUubm93KCk7CisgICAgICAgIGlmIChwcm9tb3Rpb25EVE8uZ2V0RW5kVGltZSgpLmlzQmVmb3JlKG5vdykpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCLnu5PmnZ/ml7bpl7TkuI3og73ml6nkuo7lvZPliY3ml7bpl7QiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIOmqjOivgeenjeWtkElE5piv5ZCm5a2Y5ZyoCisgICAgICAgIHZhbGlkYXRlVG9ycmVudElkcyhwcm9tb3Rpb25EVE8uZ2V0QXBwbGljYWJsZVRvcnJlbnRJZHMoKSk7CisKKyAgICAgICAgLy8g5Yib5bu65L+D6ZSA5rS75YqoCisgICAgICAgIFByb21vdGlvbiBwcm9tb3Rpb24gPSBuZXcgUHJvbW90aW9uKCk7CisgICAgICAgIHByb21vdGlvbi5zZXROYW1lKHByb21vdGlvbkRUTy5nZXROYW1lKCkpOworICAgICAgICBwcm9tb3Rpb24uc2V0RGVzY3JpcHRpb24ocHJvbW90aW9uRFRPLmdldERlc2NyaXB0aW9uKCkpOworICAgICAgICBwcm9tb3Rpb24uc2V0U3RhcnRUaW1lKHByb21vdGlvbkRUTy5nZXRTdGFydFRpbWUoKSk7CisgICAgICAgIHByb21vdGlvbi5zZXRFbmRUaW1lKHByb21vdGlvbkRUTy5nZXRFbmRUaW1lKCkpOworICAgICAgICBwcm9tb3Rpb24uc2V0RGlzY291bnRQZXJjZW50YWdlKHByb21vdGlvbkRUTy5nZXREaXNjb3VudFBlcmNlbnRhZ2UoKSk7CisKKyAgICAgICAgLy8g5oqKTGlzdDxMb25nPui9rOaNouaIkOmAl+WPt+WIhumalOWtl+espuS4sgorICAgICAgICBTdHJpbmcgYXBwbGljYWJsZVRvcnJlbnRJZHNTdHIgPSBwcm9tb3Rpb25EVE8uZ2V0QXBwbGljYWJsZVRvcnJlbnRJZHMoKS5zdHJlYW0oKQorICAgICAgICAgICAgICAgIC5tYXAoU3RyaW5nOjp2YWx1ZU9mKQorICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMuam9pbmluZygiLCIpKTsKKyAgICAgICAgcHJvbW90aW9uLnNldEFwcGxpY2FibGVUb3JyZW50SWRzKGFwcGxpY2FibGVUb3JyZW50SWRzU3RyKTsKKworICAgICAgICBwcm9tb3Rpb24uc2V0Q3JlYXRlVGltZShub3cpOworICAgICAgICBwcm9tb3Rpb24uc2V0VXBkYXRlVGltZShub3cpOworICAgICAgICBwcm9tb3Rpb24uc2V0SXNEZWxldGVkKGZhbHNlKTsKKworICAgICAgICBwcm9tb3Rpb25NYXBwZXIuaW5zZXJ0KHByb21vdGlvbik7CisgICAgICAgIHJldHVybiBwcm9tb3Rpb247CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIExpc3Q8UHJvbW90aW9uPiBnZXRBbGxBY3RpdmVQcm9tb3Rpb25zKCkgeworICAgICAgICBMb2NhbERhdGVUaW1lIG5vdyA9IExvY2FsRGF0ZVRpbWUubm93KCk7CisgICAgICAgIHJldHVybiBwcm9tb3Rpb25NYXBwZXIuZmluZEFjdGl2ZVByb21vdGlvbnMobm93KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgUHJvbW90aW9uIGdldFByb21vdGlvbkJ5SWQoTG9uZyBwcm9tb3Rpb25JZCkgeworICAgICAgICBQcm9tb3Rpb24gcHJvbW90aW9uID0gcHJvbW90aW9uTWFwcGVyLnNlbGVjdEJ5SWQocHJvbW90aW9uSWQpOworICAgICAgICBpZiAocHJvbW90aW9uID09IG51bGwgfHwgcHJvbW90aW9uLmdldElzRGVsZXRlZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJvbW90aW9uOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIEBUcmFuc2FjdGlvbmFsCisgICAgcHVibGljIHZvaWQgZGVsZXRlUHJvbW90aW9uKExvbmcgcHJvbW90aW9uSWQpIHsKKyAgICAgICAgUHJvbW90aW9uIHByb21vdGlvbiA9IGdldFByb21vdGlvbkJ5SWQocHJvbW90aW9uSWQpOworICAgICAgICBpZiAocHJvbW90aW9uID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCLkv4PplIDmtLvliqjkuI3lrZjlnKgiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIOi9r+WIoOmZpAorICAgICAgICBwcm9tb3Rpb24uc2V0SXNEZWxldGVkKHRydWUpOworICAgICAgICBwcm9tb3Rpb24uc2V0VXBkYXRlVGltZShMb2NhbERhdGVUaW1lLm5vdygpKTsKKyAgICAgICAgcHJvbW90aW9uTWFwcGVyLnVwZGF0ZUJ5SWQocHJvbW90aW9uKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgZG91YmxlIGdldEN1cnJlbnREaXNjb3VudChMb25nIHRvcnJlbnRJZCkgeworICAgICAgICBMb2NhbERhdGVUaW1lIG5vdyA9IExvY2FsRGF0ZVRpbWUubm93KCk7CisgICAgICAgIExpc3Q8UHJvbW90aW9uPiBhY3RpdmVQcm9tb3Rpb25zID0gcHJvbW90aW9uTWFwcGVyLmZpbmRBY3RpdmVQcm9tb3Rpb25zRm9yVG9ycmVudCh0b3JyZW50SWQsIG5vdyk7CisKKyAgICAgICAgLy8g5aaC5p6c5pyJ5aSa5Liq5L+D6ZSA5rS75Yqo77yM5Y+W5oqY5omj5pyA5aSn55qECisgICAgICAgIHJldHVybiBhY3RpdmVQcm9tb3Rpb25zLnN0cmVhbSgpCisgICAgICAgICAgICAgICAgLm1hcFRvRG91YmxlKFByb21vdGlvbjo6Z2V0RGlzY291bnRQZXJjZW50YWdlKQorICAgICAgICAgICAgICAgIC5tYXgoKQorICAgICAgICAgICAgICAgIC5vckVsc2UoMC4wKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDpqozor4Hnp43lrZBJROaYr+WQpuWtmOWcqAorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZVRvcnJlbnRJZHMoTGlzdDxMb25nPiB0b3JyZW50SWRzKSB7CisgICAgICAgIGlmICh0b3JyZW50SWRzID09IG51bGwgfHwgdG9ycmVudElkcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCLpgILnlKjnp43lrZDliJfooajkuI3og73kuLrnqboiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIOajgOafpeaJgOacieenjeWtkElE5piv5ZCm6YO95a2Y5ZyoCisgICAgICAgIExpc3Q8TG9uZz4gaW52YWxpZElkcyA9IHRvcnJlbnRJZHMuc3RyZWFtKCkKKyAgICAgICAgICAgICAgICAuZmlsdGVyKGlkIC0+IHByb21vdGlvbk1hcHBlci5jaGVja1RvcnJlbnRFeGlzdHMoaWQpID09IDApICAvLyDmlLnmiJAgPT0gMAorICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOworCisgICAgICAgIGlmICghaW52YWxpZElkcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCLku6XkuIvnp43lrZBJROS4jeWtmOWcqDogIiArIGludmFsaWRJZHMpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Ub3JyZW50U2VydmljZUltcGwuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVG9ycmVudFNlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg0YzY1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVG9ycmVudFNlcnZpY2VJbXBsLmphdmEKQEAgLTAsMCArMSwyOTYgQEAKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2Uuc2VydmljZUltcGw7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRvcnJlbnRFbnRpdHk7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVG9ycmVudE1hcHBlcjsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlVzZXJNYXBwZXI7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuVG9ycmVudFNlcnZpY2U7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuUHJvbW90aW9uU2VydmljZTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnBhcmFtLlRvcnJlbnRQYXJhbTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnBhcmFtLlRvcnJlbnRVcGxvYWRQYXJhbTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLlRvcnJlbnRVcGRhdGVEVE87CitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQuYmNvZGVjLkJEZWNvZGVyOworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LmJjb2RlYy5CRVZhbHVlOworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LmJjb2RlYy5CRW5jb2RlcjsKK2ltcG9ydCBjb20udHVybi50dG9ycmVudC5jbGllbnQuU2ltcGxlQ2xpZW50OworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LmNvbW1vbi5jcmVhdGlvbi5NZXRhZGF0YUJ1aWxkZXI7CitpbXBvcnQgY29tLnR1cm4udHRvcnJlbnQudHJhY2tlci5UcmFja2VyOworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LnRyYWNrZXIuVHJhY2tlZFRvcnJlbnQ7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbW1vbi5iYXNlLlJlc3VsdDsKKworaW1wb3J0IGNvbS50dXJuLnR0b3JyZW50LnRyYWNrZXIuVHJhY2tlZFRvcnJlbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvZGVjLmJpbmFyeS5IZXg7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsudHJhbnNhY3Rpb24uYW5ub3RhdGlvbi5UcmFuc2FjdGlvbmFsOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLm11bHRpcGFydC5NdWx0aXBhcnRGaWxlOworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5TdGFuZGFyZENvcHlPcHRpb247CitpbXBvcnQgamF2YS5zZWN1cml0eS5NZXNzYWdlRGlnZXN0OworaW1wb3J0IGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGltZS5Mb2NhbFRpbWU7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzOworCitAU2VydmljZQorcHVibGljIGNsYXNzIFRvcnJlbnRTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIFRvcnJlbnRTZXJ2aWNlIHsKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBUcmFja2VyIHRyYWNrZXI7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBUb3JyZW50TWFwcGVyIHRvcnJlbnRNYXBwZXI7CisKKyAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIFRyYWNrZWRUb3JyZW50PiB0b3JyZW50UmVnaXN0cnkgPSBuZXcgSGFzaE1hcDw+KCk7CisKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFVzZXJNYXBwZXIgdXNlck1hcHBlcjsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFByb21vdGlvblNlcnZpY2UgcHJvbW90aW9uU2VydmljZTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBNSU5fVVBMT0FEX1JBVElPID0gMC41OyAvLyDmnIDlsI/kuIrkvKDmr5TkvovopoHmsYIKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBMaXN0PFRvcnJlbnRFbnRpdHk+IHNlYXJjaChUb3JyZW50UGFyYW0gcGFyYW0pIHsKKyAgICAgICAgcmV0dXJuIHRvcnJlbnRNYXBwZXIuc2VhcmNoKHBhcmFtKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgVG9ycmVudEVudGl0eSBzZWxlY3RCeVNlZWRJZChMb25nIHNlZWRJZCkgeworICAgICAgICByZXR1cm4gdG9ycmVudE1hcHBlci5zZWxlY3RCeUlkKHNlZWRJZCk7CisgICAgfQorICAgIHByaXZhdGUgZmluYWwgRXhlY3V0b3JTZXJ2aWNlIHNlZWRlckV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld0NhY2hlZFRocmVhZFBvb2woKTsKKworICAgIEBPdmVycmlkZQorICAgIEBUcmFuc2FjdGlvbmFsCisgICAgcHVibGljIHZvaWQgdXBsb2FkVG9ycmVudChNdWx0aXBhcnRGaWxlIGZpbGUsIFRvcnJlbnRVcGxvYWRQYXJhbSBwYXJhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgLy8g6aqM6K+B55So5oi35p2D6ZmQCisgICAgICAgIFVzZXIgdXNlciA9IHVzZXJNYXBwZXIuc2VsZWN0QnlJZChwYXJhbS5nZXRVcGxvYWRlcigpKTsKKyAgICAgICAgaWYgKHVzZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIueUqOaIt+S4jeWtmOWcqCIpOworICAgICAgICB9CisgICAgICAgIFN0cmluZyB3b3JraW5nRGlyID0gU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLmRpciIpOworICAgICAgICBQYXRoIG9yaWdpbmFsRGlyID0gUGF0aHMuZ2V0KHdvcmtpbmdEaXIsICJkYXRhIiwgImZpbGVzIik7CisgICAgICAgIEZpbGVzLmNyZWF0ZURpcmVjdG9yaWVzKG9yaWdpbmFsRGlyKTsKKyAgICAgICAgUGF0aCBvcmlnaW5hbEZpbGVQYXRoID0gb3JpZ2luYWxEaXIucmVzb2x2ZShmaWxlLmdldE9yaWdpbmFsRmlsZW5hbWUoKSk7CisgICAgICAgIEZpbGVzLmNvcHkoZmlsZS5nZXRJbnB1dFN0cmVhbSgpLCBvcmlnaW5hbEZpbGVQYXRoLCBTdGFuZGFyZENvcHlPcHRpb24uUkVQTEFDRV9FWElTVElORyk7CisKKyAgICAgICAgTWV0YWRhdGFCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgTWV0YWRhdGFCdWlsZGVyKCkKKyAgICAgICAgICAgICAgICAuYWRkRmlsZShvcmlnaW5hbEZpbGVQYXRoLnRvRmlsZSgpLCBmaWxlLmdldE9yaWdpbmFsRmlsZW5hbWUoKSkgLy8g5re75Yqg5Y6f5aeL5paH5Lu2CisgICAgICAgICAgICAgICAgLnNldFRyYWNrZXIoIiAiKSAvLyDorr7nva5UcmFja2Vy5Zyw5Z2ACisgICAgICAgICAgICAgICAgLnNldFBpZWNlTGVuZ3RoKDUxMiAqIDEwMjQpIC8vIOWIhueJh+Wkp+WwjzUxMktCCisgICAgICAgICAgICAgICAgLnNldENvbW1lbnQoIkdlbmVyYXRlZCBieSBQVOermSIpCisgICAgICAgICAgICAgICAgLnNldENyZWF0ZWRCeSgiUFQtU2VydmVyIik7CisKKyAgICAgICAgLy8g5aSE55CG56eN5a2Q5paH5Lu2CisgICAgICAgIGJ5dGVbXSB0b3JyZW50Qnl0ZXMgPSBmaWxlLmdldEJ5dGVzKCk7CisgICAgICAgIFN0cmluZyBpbmZvSGFzaCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbmZvSGFzaCA9IGNhbGN1bGF0ZUluZm9IYXNoKHRvcnJlbnRCeXRlcyk7CisgICAgICAgIH0gY2F0Y2ggKE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIOS/neWtmOenjeWtkOaWh+S7tuWIsGRhdGEvdG9ycmVudHPnm67lvZUKKyAgICAgICAgUGF0aCB0b3JyZW50RGlyID0gUGF0aHMuZ2V0KHdvcmtpbmdEaXIsICJkYXRhIiwgInRvcnJlbnRzIik7CisgICAgICAgIEZpbGVzLmNyZWF0ZURpcmVjdG9yaWVzKHRvcnJlbnREaXIpOworICAgICAgICBQYXRoIHRvcnJlbnRQYXRoID0gdG9ycmVudERpci5yZXNvbHZlKGluZm9IYXNoICsgIi50b3JyZW50Iik7CisgICAgICAgIEZpbGVzLmNvcHkobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHRvcnJlbnRCeXRlcyksIHRvcnJlbnRQYXRoLCBTdGFuZGFyZENvcHlPcHRpb24uUkVQTEFDRV9FWElTVElORyk7CisKKyAgICAgICAgLy8g5rOo5YaM5YiwVHJhY2tlcgorICAgICAgICBUcmFja2VkVG9ycmVudCB0b3JyZW50ID0gVHJhY2tlZFRvcnJlbnQubG9hZCh0b3JyZW50UGF0aC50b0ZpbGUoKSk7CisgICAgICAgIHRyYWNrZXIuYW5ub3VuY2UodG9ycmVudCk7CisKKworICAgICAgICAvLyDlvILmraXlkK/liqjlgZrnp43lrqLmiLfnq68KKyAgICAgICAgc2VlZGVyRXhlY3V0b3Iuc3VibWl0KCgpIC0+IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgc3RhcnRTZWVkaW5nKHRvcnJlbnRQYXRoLCBvcmlnaW5hbERpcik7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIFJlc3VsdC5lcnJvcigi5YGa56eN5aSx6LSlOiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworCisKKworICAgICAgICAvLyDkv53lrZjnp43lrZDkv6Hmga8KKyAgICAgICAgVG9ycmVudEVudGl0eSBlbnRpdHk9IG5ldyBUb3JyZW50RW50aXR5KCk7CisgICAgICAgIGVudGl0eS5zZXRVcGxvYWRlcihwYXJhbS5nZXRVcGxvYWRlcigpKTsKKyAgICAgICAgZW50aXR5LnNldEZpbGVOYW1lKGZpbGUuZ2V0T3JpZ2luYWxGaWxlbmFtZSgpKTsKKyAgICAgICAgZW50aXR5LnNldFNpemUoZmlsZS5nZXRTaXplKCkpOworICAgICAgICBlbnRpdHkuc2V0Q2F0ZWdvcnkocGFyYW0uZ2V0Q2F0ZWdvcnkoKSk7CisgICAgICAgIGVudGl0eS5zZXRUYWdzKHBhcmFtLmdldFRhZ3MoKSk7CisgICAgICAgIGVudGl0eS5zZXRUaXRsZShwYXJhbS5nZXRUaXRsZSgpKTsKKyAgICAgICAgZW50aXR5LnNldEltYWdlVXJsKHBhcmFtLmdldEltYWdlVXJsKCkpOworICAgICAgICBlbnRpdHkuc2V0VG9ycmVudEZpbGUodG9ycmVudEJ5dGVzKTsKKyAgICAgICAgZW50aXR5LnNldEluZm9IYXNoKGluZm9IYXNoKTsKKworICAgICAgICB0b3JyZW50TWFwcGVyLmluc2VydChlbnRpdHkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBieXRlW10gZmV0Y2goTG9uZyBzZWVkSWQsIFN0cmluZyBwYXNza2V5KSB7CisgICAgICAgIFRvcnJlbnRFbnRpdHkgdG9ycmVudCA9IHNlbGVjdEJ5U2VlZElkKHNlZWRJZCk7CisgICAgICAgIGlmICh0b3JyZW50ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCLnp43lrZDkuI3lrZjlnKgiKTsKKyAgICAgICAgfQorCisgICAgICAgIGJ5dGVbXSB0b3JyZW50Qnl0ZXMgPSB0b3JyZW50LmdldFRvcnJlbnRGaWxlKCk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vIDEuIOino+eggSAudG9ycmVudCDmlofku7bkuLogTWFwCisgICAgICAgICAgICBNYXA8U3RyaW5nLCBCRVZhbHVlPiBkZWNvZGVkID0gQkRlY29kZXIuYmRlY29kZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0odG9ycmVudEJ5dGVzKSkuZ2V0TWFwKCk7CisKKyAgICAgICAgICAgIC8vIDIuIOiOt+WPluWOn+WniyBhbm5vdW5jZSDlrZfmrrUKKyAgICAgICAgICAgIFN0cmluZyBhbm5vdW5jZSA9IGRlY29kZWQuZ2V0KCJhbm5vdW5jZSIpLmdldFN0cmluZygpOworCisgICAgICAgICAgICAvLyAzLiDms6jlhaUgcGFzc2tleSDliLAgYW5ub3VuY2UgVVJMCisgICAgICAgICAgICBpZiAoIWFubm91bmNlLmNvbnRhaW5zKCJwYXNza2V5PSIpKSB7CisgICAgICAgICAgICAgICAgYW5ub3VuY2UgPSBhbm5vdW5jZSArICI/cGFzc2tleT0iICsgcGFzc2tleTsKKyAgICAgICAgICAgICAgICBkZWNvZGVkLnB1dCgiYW5ub3VuY2UiLCBuZXcgQkVWYWx1ZShhbm5vdW5jZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyA0LiDnvJbnoIHmiJDmlrDnmoQgLnRvcnJlbnQg5paH5Lu25a2X6IqC5pWw57uECisgICAgICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworICAgICAgICAgICAgQkVuY29kZXIuYmVuY29kZShkZWNvZGVkLCBvdXQpOworICAgICAgICAgICAgcmV0dXJuIG91dC50b0J5dGVBcnJheSgpOworCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigi5aSE55CGIHRvcnJlbnQg5paH5Lu25aSx6LSlIiwgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBAVHJhbnNhY3Rpb25hbAorICAgIHB1YmxpYyBSZXN1bHQgZmF2b3JpdGUoTG9uZyBzZWVkSWQsIExvbmcgdXNlcklkKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBib29sZWFuIGV4aXN0cyA9IHRvcnJlbnRNYXBwZXIuY2hlY2tGYXZvcml0ZShzZWVkSWQsIHVzZXJJZCk7CisgICAgICAgICAgICBpZiAoZXhpc3RzKSB7CisgICAgICAgICAgICAgICAgdG9ycmVudE1hcHBlci5yZW1vdmVGYXZvcml0ZShzZWVkSWQsIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKCLlj5bmtojmlLbol4/miJDlip8iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdG9ycmVudE1hcHBlci5hZGRGYXZvcml0ZShzZWVkSWQsIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKCLmlLbol4/miJDlip8iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIuWksei0pTogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIEBUcmFuc2FjdGlvbmFsCisgICAgcHVibGljIHZvaWQgZGVsZXRlVG9ycmVudChMb25nIHNlZWRJZCkgeworICAgICAgICB0b3JyZW50TWFwcGVyLmRlbGV0ZUJ5SWQoc2VlZElkKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBAVHJhbnNhY3Rpb25hbAorICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVRvcnJlbnQoTG9uZyBzZWVkSWQsIFRvcnJlbnRVcGRhdGVEVE8gdXBkYXRlRFRPKSB7CisgICAgICAgIFRvcnJlbnRFbnRpdHkgdG9ycmVudCA9IHNlbGVjdEJ5U2VlZElkKHNlZWRJZCk7CisgICAgICAgIGlmICh0b3JyZW50ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCLnp43lrZDkuI3lrZjlnKgiKTsKKyAgICAgICAgfQorCisKKyAgICAgICAgdG9ycmVudC5zZXREZXNjcmlwdGlvbih1cGRhdGVEVE8uZ2V0RGVzY3JpcHRpb24oKSk7CisgICAgICAgIHRvcnJlbnQuc2V0Q2F0ZWdvcnkodXBkYXRlRFRPLmdldENhdGVnb3J5KCkpOworICAgICAgICB0b3JyZW50LnNldFRpdGxlKHVwZGF0ZURUTy5nZXRUaXRsZSgpKTsKKyAgICAgICAgdG9ycmVudC5zZXRUYWdzKHVwZGF0ZURUTy5nZXRUYWdzKCkpOworICAgICAgICB0b3JyZW50LnNldEltYWdlVXJsKHVwZGF0ZURUTy5nZXRJbWFnZVVybCgpKTsKKworICAgICAgICB0b3JyZW50TWFwcGVyLnVwZGF0ZUJ5SWQodG9ycmVudCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gY2FuVXNlckRlbGV0ZVRvcnJlbnQoTG9uZyBzZWVkSWQsIExvbmcgdXNlcklkKSB7CisgICAgICAgIFRvcnJlbnRFbnRpdHkgdG9ycmVudCA9IHNlbGVjdEJ5U2VlZElkKHNlZWRJZCk7CisgICAgICAgIGlmICh0b3JyZW50ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIOajgOafpeaYr+WQpuaYr+enjeWtkOWPkeW4g+iAheaIlueuoeeQhuWRmAorICAgICAgICByZXR1cm4gdG9ycmVudC5nZXRVcGxvYWRlcigpLmVxdWFscyh1c2VySWQpIHx8CisgICAgICAgICAgICAgICAgdXNlck1hcHBlci5oYXNSb2xlKHVzZXJJZCwgImFkbWluIik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gY2FuVXNlclVwZGF0ZVRvcnJlbnQoTG9uZyBzZWVkSWQsIExvbmcgdXNlcklkKSB7CisgICAgICAgIHJldHVybiBjYW5Vc2VyRGVsZXRlVG9ycmVudChzZWVkSWQsIHVzZXJJZCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gY2hlY2tVc2VyVXBsb2FkUmF0aW8oTG9uZyB1c2VySWQpIHsKKyAgICAgICAgVXNlciB1c2VyID0gdXNlck1hcHBlci5zZWxlY3RCeUlkKHVzZXJJZCk7CisgICAgICAgIGlmICh1c2VyID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIOmYsuatoumZpOS7pembtgorICAgICAgICBpZiAodXNlci5nZXREb3dubG9hZGVkKCkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBkb3VibGUgdXBsb2FkUmF0aW8gPSB1c2VyLmdldFVwbG9hZGVkKCkgLyAoZG91YmxlKSB1c2VyLmdldERvd25sb2FkZWQoKTsKKyAgICAgICAgcmV0dXJuIHVwbG9hZFJhdGlvID49IE1JTl9VUExPQURfUkFUSU87CisgICAgfQorICAgIC8qKgorICAgICAqIOWQr+WKqOWBmuenjeWuouaIt+errworICAgICAqLworICAgIHByaXZhdGUgdm9pZCBzdGFydFNlZWRpbmcoUGF0aCB0b3JyZW50UGF0aCwgUGF0aCBkYXRhRGlyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU2ltcGxlQ2xpZW50IHNlZWRlckNsaWVudCA9IG5ldyBTaW1wbGVDbGllbnQoKTsKKyAgICAgICAgc2VlZGVyQ2xpZW50LmRvd25sb2FkVG9ycmVudCgKKyAgICAgICAgICAgICAgICB0b3JyZW50UGF0aC50b1N0cmluZygpLAorICAgICAgICAgICAgICAgIGRhdGFEaXIudG9TdHJpbmcoKSwKKyAgICAgICAgICAgICAgICBJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKSk7CisgICAgICAgIC8vIOS/neaMgeWBmuenjeeKtuaAge+8iOmYu+Whnue6v+eoi++8iQorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDYwMDAwKTsgLy8g5q+PNjDnp5Lmo4Dmn6XkuIDmrKEKKyAgICAgICAgfQorICAgIH0KKworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGRvdWJsZSBjYWxjdWxhdGVEb3dubG9hZFNpemUoTG9uZyB0b3JyZW50SWQsIExvbmcgdXNlcklkKSB7CisgICAgICAgIFRvcnJlbnRFbnRpdHkgdG9ycmVudCA9IHNlbGVjdEJ5U2VlZElkKHRvcnJlbnRJZCk7CisgICAgICAgIGlmICh0b3JyZW50ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCLnp43lrZDkuI3lrZjlnKgiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIOiOt+WPluW9k+WJjeacieaViOeahOS/g+mUgOa0u+WKqAorICAgICAgICBkb3VibGUgZGlzY291bnQgPSBwcm9tb3Rpb25TZXJ2aWNlLmdldEN1cnJlbnREaXNjb3VudCh0b3JyZW50SWQpOworCisgICAgICAgIC8vIOiuoeeul+WunumZheS4i+i9vemHjworICAgICAgICByZXR1cm4gdG9ycmVudC5nZXRTaXplKCkgKiAoMSAtIGRpc2NvdW50IC8gMTAwLjApOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIEBUcmFuc2FjdGlvbmFsCisgICAgcHVibGljIHZvaWQgcmVjb3JkRG93bmxvYWQoTG9uZyB0b3JyZW50SWQsIExvbmcgdXNlcklkLCBkb3VibGUgZG93bmxvYWRTaXplKSB7CisgICAgICAgIC8vIOabtOaWsOeUqOaIt+S4i+i9vemHjworICAgICAgICB1c2VyTWFwcGVyLmluY3JlYXNlRG93bmxvYWRlZCh1c2VySWQsIGRvd25sb2FkU2l6ZSk7CisKKyAgICAgICAgLy8g5pu05paw56eN5a2Q5LiL6L295qyh5pWwCisgICAgICAgIHRvcnJlbnRNYXBwZXIuaW5jcmVhc2VEb3dubG9hZHModG9ycmVudElkKTsKKyAgICB9CisgICAgLyoqCisgICAgICog6K6h566X56eN5a2Q5paH5Lu255qEaW5mb0hhc2gKKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyBjYWxjdWxhdGVJbmZvSGFzaChieXRlW10gdG9ycmVudERhdGEpIHRocm93cyBOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24gIHsKKyAgICAgICAgTWVzc2FnZURpZ2VzdCBzaGExID0gTWVzc2FnZURpZ2VzdC5nZXRJbnN0YW5jZSgiU0hBLTEiKTsKKyAgICAgICAgc2hhMS51cGRhdGUodG9ycmVudERhdGEpOworICAgICAgICBieXRlW10gaGFzaEJ5dGVzID0gc2hhMS5kaWdlc3QoKTsKKyAgICAgICAgcmV0dXJuIEhleC5lbmNvZGVIZXhTdHJpbmcoaGFzaEJ5dGVzKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvUmVzdWx0LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC91dGlscy9SZXN1bHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgzOGExYy4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC91dGlscy9SZXN1bHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC51dGlsczsKLQotCi1wdWJsaWMgY2xhc3MgUmVzdWx0PFQ+IHsKLSAgICBwcml2YXRlIFN0cmluZyBjb2RlOwotICAgIHByaXZhdGUgU3RyaW5nIG1zZzsKLSAgICBwcml2YXRlIFQgZGF0YTsKLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29kZSgpIHsKLSAgICAgICAgcmV0dXJuIGNvZGU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29kZShTdHJpbmcgY29kZSkgewotICAgICAgICB0aGlzLmNvZGUgPSBjb2RlOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TXNnKCkgewotICAgICAgICByZXR1cm4gbXNnOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE1zZyhTdHJpbmcgbXNnKSB7Ci0gICAgICAgIHRoaXMubXNnID0gbXNnOwotICAgIH0KLQotICAgIHB1YmxpYyBUIGdldERhdGEoKSB7Ci0gICAgICAgIHJldHVybiBkYXRhOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldERhdGEoVCBkYXRhKSB7Ci0gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7Ci0gICAgfQotCi0gICAgcHVibGljIFJlc3VsdCgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUmVzdWx0KFQgZGF0YSkgewotICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IHN1Y2Nlc3MoKSB7Ci0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0PD4oKTsKLSAgICAgICAgcmVzdWx0LnNldENvZGUoIjIwMCIpOwotICAgICAgICByZXN1bHQuc2V0TXNnKCLmiJDlip8iKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIDxUPiBSZXN1bHQ8VD4gc3VjY2VzcyhUIGRhdGEpIHsKLSAgICAgICAgUmVzdWx0PFQ+IHJlc3VsdCA9IG5ldyBSZXN1bHQ8PihkYXRhKTsKLSAgICAgICAgcmVzdWx0LnNldENvZGUoIjIwMCIpOwotICAgICAgICByZXN1bHQuc2V0TXNnKCLmiJDlip8iKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IHN1Y2Nlc3MoU3RyaW5nIG1zZykgewotICAgICAgICBSZXN1bHQgcmVzdWx0ID0gbmV3IFJlc3VsdCgpOwotICAgICAgICByZXN1bHQuc2V0Q29kZSgiMjAwIik7Ci0gICAgICAgIHJlc3VsdC5zZXRNc2coIuaIkOWKnyIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFJlc3VsdDxUPiBzdWNjZXNzKFQgZGF0YSxTdHJpbmcgbXNnKSB7Ci0gICAgICAgIFJlc3VsdDxUPiByZXN1bHQgPSBuZXcgUmVzdWx0PD4oZGF0YSk7Ci0gICAgICAgIHJlc3VsdC5zZXRDb2RlKCIyMDAiKTsKLSAgICAgICAgcmVzdWx0LnNldE1zZyhtc2cpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IGVycm9yKFN0cmluZyBjb2RlLCBTdHJpbmcgbXNnKSB7Ci0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7Ci0gICAgICAgIHJlc3VsdC5zZXRDb2RlKGNvZGUpOwotICAgICAgICByZXN1bHQuc2V0TXNnKG1zZyk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIC8qKgotICAgICAqIOWIm+W7uuS4gOS4quihqOekuuaWh+S7tuWkp+Wwj+i2heWHuumZkOWItueahOe7k+aenOWvueixoeOAggotICAgICAqCi0gICAgICogQHJldHVybiDmnoTpgKDnmoTmlofku7bov4flpKfplJnor6/nu5Pmnpzlr7nosaEKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFJlc3VsdCBmaWxlVG9vTGFyZ2UoKSB7Ci0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7Ci0gICAgICAgIHJlc3VsdC5zZXRDb2RlKCI0MTMiKTsKLSAgICAgICAgcmVzdWx0LnNldE1zZygi5paH5Lu25aSn5bCP6LaF5Ye66ZmQ5Yi244CCIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog5Yib5bu65LiA5Liq6KGo56S65paH5Lu25qC85byP5LiN5pSv5oyB55qE57uT5p6c5a+56LGh44CCCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIOaehOmAoOeahOaWh+S7tuagvOW8j+mUmeivr+e7k+aenOWvueixoQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IHVuc3VwcG9ydGVkRmlsZVR5cGUoKSB7Ci0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7Ci0gICAgICAgIHJlc3VsdC5zZXRDb2RlKCI0MTUiKTsKLSAgICAgICAgcmVzdWx0LnNldE1zZygi5LiN5pSv5oyB55qE5paH5Lu25qC85byP44CCIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog5Yib5bu65LiA5Liq6KGo56S65paH5Lu25pyq5om+5Yiw55qE57uT5p6c5a+56LGh44CCCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIOaehOmAoOeahOaWh+S7tuacquaJvuWIsOmUmeivr+e7k+aenOWvueixoQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IGZpbGVOb3RGb3VuZCgpIHsKLSAgICAgICAgUmVzdWx0IHJlc3VsdCA9IG5ldyBSZXN1bHQoKTsKLSAgICAgICAgcmVzdWx0LnNldENvZGUoIjQwNCIpOwotICAgICAgICByZXN1bHQuc2V0TXNnKCLmlofku7bmnKrmib7liLDjgIIiKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiDliJvlu7rkuIDkuKrooajnpLrmlofku7blrZjlgqjplJnor6/nmoTnu5Pmnpzlr7nosaHjgIIKLSAgICAgKgotICAgICAqIEBwYXJhbSBlcnJvck1zZyDor6bnu4bplJnor6/kv6Hmga8KLSAgICAgKiBAcmV0dXJuIOaehOmAoOeahOaWh+S7tuWtmOWCqOmUmeivr+e7k+aenOWvueixoQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IGZpbGVTdG9yYWdlRXJyb3IoU3RyaW5nIGVycm9yTXNnKSB7Ci0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7Ci0gICAgICAgIHJlc3VsdC5zZXRDb2RlKCI1MDAiKTsKLSAgICAgICAgcmVzdWx0LnNldE1zZygi5paH5Lu25a2Y5YKo6ZSZ6K+vOiAiICsgZXJyb3JNc2cpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IHBlcm1pc3Npb25EZW5pZWQoKSB7Ci0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7Ci0gICAgICAgIHJlc3VsdC5zZXRDb2RlKCI0MDEiKTsKLSAgICAgICAgcmVzdWx0LnNldE1zZygi5p2D6ZmQ5LiN6Laz77yM5peg5rOV5omn6KGM6K+l5pON5L2c44CCIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ucHJvcGVydGllcyBiL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCmluZGV4IGI3NTNkYTcuLjA1OTAzMzMgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCisrKyBiL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCkBAIC0xOSwzICsxOSwxMyBAQAogc3ByaW5nLmpwYS5lbmFibGVkPWZhbHNlCiBzcHJpbmcuanBhLmhpYmVybmF0ZS5kZGwtYXV0bz1ub25lCiBzcHJpbmcuanBhLm9wZW4taW4tdmlldz1mYWxzZQorCisjIHRyYWNrZXI/PworcHQudHJhY2tlci5wb3J0PTY5NjkKKworcHQudHJhY2tlci50b3JyZW50LWRpcj0ke3VzZXIuZGlyfS9kYXRhL3RvcnJlbnRzCisKK3B0LnRyYWNrZXIuYWxsb3ctZm9yZWlnbj1mYWxzZQorcHQudHJhY2tlci5hbm5vdW5jZS11cmw9L2N1c3RvbS1hbm5vdW5jZQorCitteWJhdGlzLXBsdXMubWFwcGVyLWxvY2F0aW9ucz1jbGFzc3BhdGg6L21hcHBlci8qKi8qLnhtbApkaWZmIC0tZ2l0IGEvc3JjL21haW4vcmVzb3VyY2VzL2ZpbGVzL2ZpbGVzLnRvcnJlbnQgYi9zcmMvbWFpbi9yZXNvdXJjZXMvZmlsZXMvZmlsZXMudG9ycmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDQ5NzRmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vcmVzb3VyY2VzL2ZpbGVzL2ZpbGVzLnRvcnJlbnQKQEAgLTAsMCArMSBAQAorZDg6YW5ub3VuY2UyMjpodHRwczovL3RyYWNrZXIuYnlyLnB0MTA6Y3JlYXRlZCBieTIxOnFCaXR0b3JyZW50IHY0LjUuMy4xMDEzOmNyZWF0aW9uIGRhdGVpMTc0NzcxNzkwMWU0OmluZm9kNTpmaWxlc2xkNjpsZW5ndGhpMTczZTQ6cGF0aGwxMzp2YWxpZC50b3JyZW50ZWVlNDpuYW1lNTpmaWxlczEyOnBpZWNlIGxlbmd0aGkxNjM4NGU2OnBpZWNlczIwOi/x7ehF9DXjPPL7H+zVhJ9RoZb7ZWUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL0Zhdm9yaXRlTWFwcGVyLnhtbCBiL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvRmF2b3JpdGVNYXBwZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNDhlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL0Zhdm9yaXRlTWFwcGVyLnhtbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgbWFwcGVyIFBVQkxJQyAiLS8vbXliYXRpcy5vcmcvL0RURCBNYXBwZXIgMy4wLy9FTiIKKyAgICAgICAgImh0dHA6Ly9teWJhdGlzLm9yZy9kdGQvbXliYXRpcy0zLW1hcHBlci5kdGQiPgorPG1hcHBlciBuYW1lc3BhY2U9ImNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuRmF2b3JpdGVNYXBwZXIiPgorIAorPC9tYXBwZXI+CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL1Byb21vdGlvbk1hcHBlci54bWwgYi9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL1Byb21vdGlvbk1hcHBlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmZmQ5NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLnhtbApAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIG1hcHBlciBQVUJMSUMgIi0vL215YmF0aXMub3JnLy9EVEQgTWFwcGVyIDMuMC8vRU4iCisgICAgICAgICJodHRwOi8vbXliYXRpcy5vcmcvZHRkL215YmF0aXMtMy1tYXBwZXIuZHRkIj4KKzxtYXBwZXIgbmFtZXNwYWNlPSJjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlByb21vdGlvbk1hcHBlciI+CisKKyAgICA8aW5zZXJ0IGlkPSJpbnNlcnQiIHBhcmFtZXRlclR5cGU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuUHJvbW90aW9uIj4KKyAgICAgICAgSU5TRVJUIElOVE8gcHJvbW90aW9uICgKKyAgICAgICAgbmFtZSwgZGVzY3JpcHRpb24sIHN0YXJ0X3RpbWUsIGVuZF90aW1lLCBkaXNjb3VudF9wZXJjZW50YWdlLCBhcHBsaWNhYmxlX3RvcnJlbnRfaWRzCisgICAgICAgICkgVkFMVUVTICgKKyAgICAgICAgI3tuYW1lfSwgI3tkZXNjcmlwdGlvbn0sICN7c3RhcnRUaW1lfSwgI3tlbmRUaW1lfSwgI3tkaXNjb3VudFBlcmNlbnRhZ2V9LCAje2FwcGxpY2FibGVUb3JyZW50SWRzfQorICAgICAgICApCisgICAgPC9pbnNlcnQ+CisKKzwvbWFwcGVyPgpkaWZmIC0tZ2l0IGEvc3JjL21haW4vcmVzb3VyY2VzL21hcHBlci9Ub3JyZW50TWFwcGVyLnhtbCBiL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvVG9ycmVudE1hcHBlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVmMDE4ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvVG9ycmVudE1hcHBlci54bWwKQEAgLTAsMCArMSwxMDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgbWFwcGVyIFBVQkxJQyAiLS8vbXliYXRpcy5vcmcvL0RURCBNYXBwZXIgMy4wLy9FTiIKKyAgICAgICAgImh0dHA6Ly9teWJhdGlzLm9yZy9kdGQvbXliYXRpcy0zLW1hcHBlci5kdGQiPgorCis8bWFwcGVyIG5hbWVzcGFjZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5Ub3JyZW50TWFwcGVyIj4KKyAgICA8cmVzdWx0TWFwIGlkPSJCYXNlUmVzdWx0TWFwIiB0eXBlPSJjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRvcnJlbnRFbnRpdHkiPgorICAgICAgICA8aWQgY29sdW1uPSJpbmZvX2hhc2giIHByb3BlcnR5PSJpbmZvSGFzaCIvPgorICAgICAgICA8cmVzdWx0IGNvbHVtbj0iZmlsZV9uYW1lIiBwcm9wZXJ0eT0iZmlsZU5hbWUiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49InVwbG9hZGVyIiBwcm9wZXJ0eT0idXBsb2FkZXIiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49InVwbG9hZF90aW1lIiBwcm9wZXJ0eT0idXBsb2FkVGltZSIvPgorICAgICAgICA8cmVzdWx0IGNvbHVtbj0ic2l6ZSIgcHJvcGVydHk9InNpemUiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49InRpdGxlIiBwcm9wZXJ0eT0idGl0bGUiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49ImRlc2NyaXB0aW9uIiBwcm9wZXJ0eT0iZGVzY3JpcHRpb24iLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49ImNhdGVnb3J5IiBwcm9wZXJ0eT0iY2F0ZWdvcnkiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49ImltYWdlX3VybCIgcHJvcGVydHk9ImltYWdlVXJsIi8+CisgICAgPC9yZXN1bHRNYXA+CisKKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeUluZm9IYXNoIiByZXN1bHRNYXA9IkJhc2VSZXN1bHRNYXAiPgorICAgICAgICBTRUxFQ1QgKiBGUk9NIHRvcnJlbnQgV0hFUkUgaW5mb19oYXNoID0gI3tpbmZvSGFzaH0KKyAgICA8L3NlbGVjdD4KKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeVNlZWRJZCIgcmVzdWx0TWFwPSJCYXNlUmVzdWx0TWFwIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB0b3JyZW50IFdIRVJFIHNlZWRfaWQgPSAje3NlZWRJZH0KKyAgICA8L3NlbGVjdD4KKworCisKKworICAgIDx1cGRhdGUgaWQ9InVwZGF0ZSIgcGFyYW1ldGVyVHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Ub3JyZW50RW50aXR5Ij4KKyAgICAgICAgVVBEQVRFIHRvcnJlbnQKKyAgICAgICAgU0VUIGZpbGVfbmFtZSA9ICN7ZmlsZU5hbWV9LAorICAgICAgICB1cGxvYWRlciA9ICN7dXBsb2FkZXJ9LAorICAgICAgICB1cGxvYWRfdGltZSA9ICN7dXBsb2FkVGltZX0sCisgICAgICAgIHNpemUgPSAje3NpemV9LAorICAgICAgICB0aXRsZSA9ICN7dGl0bGV9LAorICAgICAgICBkZXNjcmlwdGlvbiA9ICN7ZGVzY3JpcHRpb259LAorICAgICAgICBjYXRlZ29yeSA9ICN7Y2F0ZWdvcnl9LAorICAgICAgICBpbWFnZV91cmwgPSAje2ltYWdlVXJsfQorICAgICAgICBXSEVSRSBpbmZvX2hhc2ggPSAje2luZm9IYXNofQorICAgIDwvdXBkYXRlPgorICAgIDxzZWxlY3QgaWQ9InNlYXJjaCIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Ub3JyZW50RW50aXR5Ij4KKyAgICAgICAgU0VMRUNUICogRlJPTSB0b3JyZW50CisgICAgICAgIDx3aGVyZT4KKyAgICAgICAgICAgIDxpZiB0ZXN0PSJwYXJhbS5jYXRlZ29yeSAhPSBudWxsIj4KKyAgICAgICAgICAgICAgICBBTkQgY2F0ZWdvcnkgPSAje3BhcmFtLmNhdGVnb3J5fQorICAgICAgICAgICAgPC9pZj4KKworICAgICAgICAgICAgPCEtLSAgICAgICAgPGlmIHRlc3Q9InBhcmFtLmZyZWUgIT0gbnVsbCBhbmQgcGFyYW0uZnJlZSAhPSAnJyI+LS0+CisgICAgICAgICAgICA8IS0tICAgICAgICAgICAgQU5EIGZyZWUgPSAje3BhcmFtLmZyZWV9LS0+CisgICAgICAgICAgICA8IS0tICAgICAgICA8L2lmPi0tPgorICAgICAgICAgICAgPGlmIHRlc3Q9InBhcmFtLmZyZWUgIT0gbnVsbCI+CisgICAgICAgICAgICA8Y2hvb3NlPgorICAgICAgICAgICAgICAgIDwhLS0g562b6YCJ4oCc5q2j5Zyo5L+D6ZSA5Lit4oCd55qE56eN5a2QIC0tPgorICAgICAgICAgICAgICAgIDx3aGVuIHRlc3Q9InBhcmFtLmZyZWUgPT0gdHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgIEFORCBFWElTVFMgKAorICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgMSBGUk9NIHByb21vdGlvbiBwCisgICAgICAgICAgICAgICAgICAgIFdIRVJFCisgICAgICAgICAgICAgICAgICAgIEpTT05fQ09OVEFJTlMocC5hcHBsaWNhYmxlX3RvcnJlbnRfaWRzLCBKU09OX0FSUkFZKHQuaWQpKQorICAgICAgICAgICAgICAgICAgICBBTkQgTk9XKCkgQkVUV0VFTiBwLnN0YXJ0X3RpbWUgQU5EIHAuZW5kX3RpbWUKKyAgICAgICAgICAgICAgICAgICAgQU5EIHAuaXNfZGVsZXRlZCA9IDAKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIDwvd2hlbj4KKyAgICAgICAgICAgICAgICA8IS0tIOetm+mAieKAnOacquWcqOS/g+mUgOS4reKAneeahOenjeWtkCAtLT4KKyAgICAgICAgICAgICAgICA8b3RoZXJ3aXNlPgorICAgICAgICAgICAgICAgICAgICBBTkQgTk9UIEVYSVNUUyAoCisgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAxIEZST00gcHJvbW90aW9uIHAKKyAgICAgICAgICAgICAgICAgICAgV0hFUkUKKyAgICAgICAgICAgICAgICAgICAgSlNPTl9DT05UQUlOUyhwLmFwcGxpY2FibGVfdG9ycmVudF9pZHMsIEpTT05fQVJSQVkodC5pZCkpCisgICAgICAgICAgICAgICAgICAgIEFORCBOT1coKSBCRVRXRUVOIHAuc3RhcnRfdGltZSBBTkQgcC5lbmRfdGltZQorICAgICAgICAgICAgICAgICAgICBBTkQgcC5pc19kZWxldGVkID0gMAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgPC9vdGhlcndpc2U+CisgICAgICAgICAgICA8L2Nob29zZT4KKyAgICAgICAgICAgIDwvaWY+CisKKyAgICAgICAgICAgIDxpZiB0ZXN0PSJwYXJhbS5saWtlRXhwcmVzc2lvbnMgIT0gbnVsbCBhbmQgcGFyYW0ubGlrZUV4cHJlc3Npb25zLnNpemUgPiAwIj4KKyAgICAgICAgICAgICAgICBBTkQgKAorICAgICAgICAgICAgICAgIDxmb3JlYWNoIGNvbGxlY3Rpb249InBhcmFtLmxpa2VFeHByZXNzaW9ucyIgaXRlbT0iaXRlbSIgb3Blbj0iKCIgc2VwYXJhdG9yPSIgQU5EICIgY2xvc2U9IikiPgorCisgICAgICAgICAgICAgICAgICAgICggdGl0bGUgTElLRSBDT05DQVQoJyUnLCAje2l0ZW19LCAnJScpICkgb3IgKCBkZXNjcmlwdGlvbiBMSUtFIENPTkNBVCgnJScsICN7aXRlbX0sICclJykgKSBvciAoIHRhZ3MgTElLRSBDT05DQVQoJyUnLCAje2l0ZW19LCAnJScpICkKKyAgICAgICAgICAgICAgICA8L2ZvcmVhY2g+CisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgPC9pZj4KKyAgICAgICAgPC93aGVyZT4KKworICAgICAgICA8aWYgdGVzdD0icGFyYW0ucHJvcCAhPSBudWxsIGFuZCBwYXJhbS5zb3J0ICE9IG51bGwiPgorICAgICAgICAgICAgT1JERVIgQlkgJHtwYXJhbS5wcm9wfSAke3BhcmFtLnNvcnR9CisgICAgICAgIDwvaWY+CisgICAgPC9zZWxlY3Q+CisgICAgPHNlbGVjdCBpZD0iY2hlY2tGYXZvcml0ZSIgcmVzdWx0VHlwZT0iYm9vbGVhbiI+CisgICAgICAgIFNFTEVDVCBDT1VOVCgqKSA+IDAKKyAgICAgICAgRlJPTSBmYXZvcml0ZQorICAgICAgICBXSEVSRSBzZWVkX2lkID0gI3tzZWVkSWR9IEFORCB1c2VyX2lkID0gI3t1c2VySWR9CisgICAgPC9zZWxlY3Q+CisgICAgPGluc2VydCBpZD0iYWRkRmF2b3JpdGUiPgorICAgICAgICBJTlNFUlQgSU5UTyBmYXZvcml0ZSAoc2VlZF9pZCwgdXNlcl9pZCkKKyAgICAgICAgVkFMVUVTICgje3NlZWRJZH0sICN7dXNlcklkfSkKKyAgICA8L2luc2VydD4KKyAgICA8ZGVsZXRlIGlkPSJyZW1vdmVGYXZvcml0ZSI+CisgICAgICAgIERFTEVURSBGUk9NIGZhdm9yaXRlCisgICAgICAgIFdIRVJFIHNlZWRfaWQgPSAje3NlZWRJZH0gQU5EIHVzZXJfaWQgPSAje3VzZXJJZH0KKyAgICA8L2RlbGV0ZT4KKworCis8L21hcHBlcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9yZXNvdXJjZXMvb3V0cHV0L3ZhbGlkLnRvcnJlbnQgYi9zcmMvbWFpbi9yZXNvdXJjZXMvb3V0cHV0L3ZhbGlkLnRvcnJlbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5MGU1MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL3Jlc291cmNlcy9vdXRwdXQvdmFsaWQudG9ycmVudApAQCAtMCwwICsxIEBACitkMTA6Y3JlYXRlZCBieTE4OnFCaXR0b3JyZW50IHY1LjEuMDEzOmNyZWF0aW9uIGRhdGVpMTc0NTk0ODk5NWU0OmluZm9kNjpsZW5ndGhpMjJlNDpuYW1lMTU6ZXhhbXBsZS50b3JyZW50MTI6cGllY2UgbGVuZ3RoaTE2Mzg0ZTY6cGllY2VzMjA6Rm4e8LYaKfo8xwmOBubCaBSjdGw3OnByaXZhdGVpMWVlZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVG9ycmVudENvbnRyb2xsZXJUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1RvcnJlbnRDb250cm9sbGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1RvcnJlbnRDb250cm9sbGVyVGVzdC5qYXZhCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QuamF2YQppbmRleCA4YTA5ZTUzLi5kMzMyZjMxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdC5qYXZhCisrKyBiL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmphdmEKQEAgLTYsMTMgKzYsMTIgQEAKIGltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5Vc2VyU2VydmljZTsKIGltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlVzZXJNYXBwZXI7CiBpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5WZXJpZmljYXRpb25Ub2tlbk1hcHBlcjsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QudXRpbHMuUmVzdWx0OworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uYmFzZS5SZXN1bHQ7CiBpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CiBpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CiBpbXBvcnQgb3JnLm1vY2tpdG8uKjsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5hdXRoZW50aWNhdGlvbi5BdXRoZW50aWNhdGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5hdXRoZW50aWNhdGlvbi5Vc2VybmFtZVBhc3N3b3JkQXV0aGVudGljYXRpb25Ub2tlbjsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvcmUuQXV0aGVudGljYXRpb247CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLkF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uOwogCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzIGIvdGFyZ2V0L2NsYXNzZXMvYXBwbGljYXRpb24ucHJvcGVydGllcwppbmRleCBiNzUzZGE3Li4wNTkwMzMzIDEwMDY0NAotLS0gYS90YXJnZXQvY2xhc3Nlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCisrKyBiL3RhcmdldC9jbGFzc2VzL2FwcGxpY2F0aW9uLnByb3BlcnRpZXMKQEAgLTE5LDMgKzE5LDEzIEBACiBzcHJpbmcuanBhLmVuYWJsZWQ9ZmFsc2UKIHNwcmluZy5qcGEuaGliZXJuYXRlLmRkbC1hdXRvPW5vbmUKIHNwcmluZy5qcGEub3Blbi1pbi12aWV3PWZhbHNlCisKKyMgdHJhY2tlcj8/CitwdC50cmFja2VyLnBvcnQ9Njk2OQorCitwdC50cmFja2VyLnRvcnJlbnQtZGlyPSR7dXNlci5kaXJ9L2RhdGEvdG9ycmVudHMKKworcHQudHJhY2tlci5hbGxvdy1mb3JlaWduPWZhbHNlCitwdC50cmFja2VyLmFubm91bmNlLXVybD0vY3VzdG9tLWFubm91bmNlCisKK215YmF0aXMtcGx1cy5tYXBwZXItbG9jYXRpb25zPWNsYXNzcGF0aDovbWFwcGVyLyoqLyoueG1sCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uY2xhc3MKaW5kZXggMWViZDM0OS4uYTEyODFhOSAxMDA2NDQKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L015UHJvamVjdEFwcGxpY2F0aW9uLmNsYXNzCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbW1vblJlc3VsdFN0YXR1cy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29tbW9uUmVzdWx0U3RhdHVzLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMzBlMmMKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbW1vblJlc3VsdFN0YXR1cy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRBbm5vdW5jZS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzJEFubm91bmNlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMDJhZmUKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRBbm5vdW5jZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRGaW5pc2hTdGF0dXMuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRGaW5pc2hTdGF0dXMuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcxODk4ZgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzJEZpbmlzaFN0YXR1cy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRPcmRlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzJE9yZGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YjA4Y2EKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRPcmRlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRTb3VyY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cyRTb3VyY2UuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjYmZlZAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzJFNvdXJjZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vQ29uc3RhbnRzLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkY2U0NjYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL0NvbnN0YW50cy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL1Jlc3VsdFN0YXR1cy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vUmVzdWx0U3RhdHVzLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYTY3MDAKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL1Jlc3VsdFN0YXR1cy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvSTE4bk1lc3NhZ2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvSTE4bk1lc3NhZ2UuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhZTMxOQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9JMThuTWVzc2FnZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvT3JkZXJQYWdlUGFyYW0uY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvT3JkZXJQYWdlUGFyYW0uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyZWM0MAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9PcmRlclBhZ2VQYXJhbS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUGFnZVBhcmFtLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1BhZ2VQYXJhbS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjg1ZmMxCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1BhZ2VQYXJhbS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUGFnZVV0aWwuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUGFnZVV0aWwuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4MDgwZQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9QYWdlVXRpbC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUmVzUGFnZS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vYmFzZS9SZXNQYWdlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDg5MzMKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUmVzUGFnZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUmVzdWx0LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1Jlc3VsdC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDkyZGQxCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1Jlc3VsdC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvU3RhdHVzLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1N0YXR1cy5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2YzNzJiCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1N0YXR1cy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2V4Y2VwdGlvbi9Sb2NrZXRQVEV4Y2VwdGlvbi5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb21tb24vZXhjZXB0aW9uL1JvY2tldFBURXhjZXB0aW9uLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YTQ5MzEKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2V4Y2VwdGlvbi9Sb2NrZXRQVEV4Y2VwdGlvbi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL015TWV0YU9iamVjdEhhbmRsZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL015TWV0YU9iamVjdEhhbmRsZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxM2FmZgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb25maWcvTXlNZXRhT2JqZWN0SGFuZGxlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL1RyYWNrZXJDb25maWcuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL1RyYWNrZXJDb25maWcuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc0YWEyNwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb25maWcvVHJhY2tlckNvbmZpZy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Ub3JyZW50Q29udHJvbGxlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1RvcnJlbnRDb250cm9sbGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGJhM2YKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Ub3JyZW50Q29udHJvbGxlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRFbWFpbFJlcXVlc3QuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRFbWFpbFJlcXVlc3QuY2xhc3MKaW5kZXggZDEyZGVkZS4uMDRmZmQ4NSAxMDA2NDQKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkRW1haWxSZXF1ZXN0LmNsYXNzCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyJEVtYWlsUmVxdWVzdC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRWZXJpZmljYXRpb25SZXF1ZXN0LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkVmVyaWZpY2F0aW9uUmVxdWVzdC5jbGFzcwppbmRleCBhYTEzNzFlLi4yNzI1MDVlIDEwMDY0NAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRWZXJpZmljYXRpb25SZXF1ZXN0LmNsYXNzCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyJFZlcmlmaWNhdGlvblJlcXVlc3QuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5jbGFzcwppbmRleCBkMWQ2ODVjLi5jZDFhYjEzIDEwMDY0NAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5jbGFzcworKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL1Byb21vdGlvbkNyZWF0ZURUTy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vUHJvbW90aW9uQ3JlYXRlRFRPLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwODdkMzkKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL1Byb21vdGlvbkNyZWF0ZURUTy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL1RvcnJlbnRVcGRhdGVEVE8uY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL1RvcnJlbnRVcGRhdGVEVE8uY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4NTg2OAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vVG9ycmVudFVwZGF0ZURUTy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL3BhcmFtL1RvcnJlbnRQYXJhbS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFBhcmFtLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOGEyYzUKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL3BhcmFtL1RvcnJlbnRQYXJhbS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL3BhcmFtL1RvcnJlbnRVcGxvYWRQYXJhbS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFVwbG9hZFBhcmFtLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YmJjMDkKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL3BhcmFtL1RvcnJlbnRVcGxvYWRQYXJhbS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL3ZvL1RvcnJlbnRWTy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vdm8vVG9ycmVudFZPLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMjEyNGUKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZHRvL3ZvL1RvcnJlbnRWTy5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0VudGl0eUJhc2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0VudGl0eUJhc2UuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE2YzUyYQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRW50aXR5QmFzZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0Zhdm9yaXRlRW50aXR5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9GYXZvcml0ZUVudGl0eS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGFjZDhiCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9GYXZvcml0ZUVudGl0eS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1Byb21vdGlvbi5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvUHJvbW90aW9uLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZGY2ZGQKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1Byb21vdGlvbi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1RvcnJlbnRFbnRpdHkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1RvcnJlbnRFbnRpdHkuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmMjBkYQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVG9ycmVudEVudGl0eS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXIuY2xhc3MKaW5kZXggNjJlYjVhMS4uM2VlOGZmZSAxMDA2NDQKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyLmNsYXNzCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL0Zhdm9yaXRlTWFwcGVyLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9GYXZvcml0ZU1hcHBlci5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzA3NWM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9GYXZvcml0ZU1hcHBlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1Byb21vdGlvbk1hcHBlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NGM4NTYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1Byb21vdGlvbk1hcHBlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1RvcnJlbnRNYXBwZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1RvcnJlbnRNYXBwZXIuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4MGRmZAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVG9ycmVudE1hcHBlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1VzZXJNYXBwZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1VzZXJNYXBwZXIuY2xhc3MKaW5kZXggN2I4MDMxNi4uMTBhOWVjMSAxMDA2NDQKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9Vc2VyTWFwcGVyLmNsYXNzCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVXNlck1hcHBlci5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Qcm9tb3Rpb25TZXJ2aWNlLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvUHJvbW90aW9uU2VydmljZS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjA5NjNiCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvUHJvbW90aW9uU2VydmljZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Ub3JyZW50U2VydmljZS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1RvcnJlbnRTZXJ2aWNlLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwY2ZlZWQKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Ub3JyZW50U2VydmljZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Qcm9tb3Rpb25TZXJ2aWNlSW1wbC5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1Byb21vdGlvblNlcnZpY2VJbXBsLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODQ4MzkKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Qcm9tb3Rpb25TZXJ2aWNlSW1wbC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Ub3JyZW50U2VydmljZUltcGwuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Ub3JyZW50U2VydmljZUltcGwuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5NjAwZAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1RvcnJlbnRTZXJ2aWNlSW1wbC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvUmVzdWx0LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3V0aWxzL1Jlc3VsdC5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE4ZTU5ZS4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvUmVzdWx0LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvZmlsZXMvZmlsZXMudG9ycmVudCBiL3RhcmdldC9jbGFzc2VzL2ZpbGVzL2ZpbGVzLnRvcnJlbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0OTc0ZgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2ZpbGVzL2ZpbGVzLnRvcnJlbnQKQEAgLTAsMCArMSBAQAorZDg6YW5ub3VuY2UyMjpodHRwczovL3RyYWNrZXIuYnlyLnB0MTA6Y3JlYXRlZCBieTIxOnFCaXR0b3JyZW50IHY0LjUuMy4xMDEzOmNyZWF0aW9uIGRhdGVpMTc0NzcxNzkwMWU0OmluZm9kNTpmaWxlc2xkNjpsZW5ndGhpMTczZTQ6cGF0aGwxMzp2YWxpZC50b3JyZW50ZWVlNDpuYW1lNTpmaWxlczEyOnBpZWNlIGxlbmd0aGkxNjM4NGU2OnBpZWNlczIwOi/x7ehF9DXjPPL7H+zVhJ9RoZb7ZWUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvRmF2b3JpdGVNYXBwZXIueG1sIGIvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL0Zhdm9yaXRlTWFwcGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDQ4ZWMyCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL0Zhdm9yaXRlTWFwcGVyLnhtbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgbWFwcGVyIFBVQkxJQyAiLS8vbXliYXRpcy5vcmcvL0RURCBNYXBwZXIgMy4wLy9FTiIKKyAgICAgICAgImh0dHA6Ly9teWJhdGlzLm9yZy9kdGQvbXliYXRpcy0zLW1hcHBlci5kdGQiPgorPG1hcHBlciBuYW1lc3BhY2U9ImNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuRmF2b3JpdGVNYXBwZXIiPgorIAorPC9tYXBwZXI+CmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLnhtbCBiL3RhcmdldC9jbGFzc2VzL21hcHBlci9Qcm9tb3Rpb25NYXBwZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZmZkOTUKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLnhtbApAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIG1hcHBlciBQVUJMSUMgIi0vL215YmF0aXMub3JnLy9EVEQgTWFwcGVyIDMuMC8vRU4iCisgICAgICAgICJodHRwOi8vbXliYXRpcy5vcmcvZHRkL215YmF0aXMtMy1tYXBwZXIuZHRkIj4KKzxtYXBwZXIgbmFtZXNwYWNlPSJjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlByb21vdGlvbk1hcHBlciI+CisKKyAgICA8aW5zZXJ0IGlkPSJpbnNlcnQiIHBhcmFtZXRlclR5cGU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuUHJvbW90aW9uIj4KKyAgICAgICAgSU5TRVJUIElOVE8gcHJvbW90aW9uICgKKyAgICAgICAgbmFtZSwgZGVzY3JpcHRpb24sIHN0YXJ0X3RpbWUsIGVuZF90aW1lLCBkaXNjb3VudF9wZXJjZW50YWdlLCBhcHBsaWNhYmxlX3RvcnJlbnRfaWRzCisgICAgICAgICkgVkFMVUVTICgKKyAgICAgICAgI3tuYW1lfSwgI3tkZXNjcmlwdGlvbn0sICN7c3RhcnRUaW1lfSwgI3tlbmRUaW1lfSwgI3tkaXNjb3VudFBlcmNlbnRhZ2V9LCAje2FwcGxpY2FibGVUb3JyZW50SWRzfQorICAgICAgICApCisgICAgPC9pbnNlcnQ+CisKKzwvbWFwcGVyPgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1RvcnJlbnRNYXBwZXIueG1sIGIvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1RvcnJlbnRNYXBwZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZjAxOGUKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVG9ycmVudE1hcHBlci54bWwKQEAgLTAsMCArMSwxMDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgbWFwcGVyIFBVQkxJQyAiLS8vbXliYXRpcy5vcmcvL0RURCBNYXBwZXIgMy4wLy9FTiIKKyAgICAgICAgImh0dHA6Ly9teWJhdGlzLm9yZy9kdGQvbXliYXRpcy0zLW1hcHBlci5kdGQiPgorCis8bWFwcGVyIG5hbWVzcGFjZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5Ub3JyZW50TWFwcGVyIj4KKyAgICA8cmVzdWx0TWFwIGlkPSJCYXNlUmVzdWx0TWFwIiB0eXBlPSJjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRvcnJlbnRFbnRpdHkiPgorICAgICAgICA8aWQgY29sdW1uPSJpbmZvX2hhc2giIHByb3BlcnR5PSJpbmZvSGFzaCIvPgorICAgICAgICA8cmVzdWx0IGNvbHVtbj0iZmlsZV9uYW1lIiBwcm9wZXJ0eT0iZmlsZU5hbWUiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49InVwbG9hZGVyIiBwcm9wZXJ0eT0idXBsb2FkZXIiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49InVwbG9hZF90aW1lIiBwcm9wZXJ0eT0idXBsb2FkVGltZSIvPgorICAgICAgICA8cmVzdWx0IGNvbHVtbj0ic2l6ZSIgcHJvcGVydHk9InNpemUiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49InRpdGxlIiBwcm9wZXJ0eT0idGl0bGUiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49ImRlc2NyaXB0aW9uIiBwcm9wZXJ0eT0iZGVzY3JpcHRpb24iLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49ImNhdGVnb3J5IiBwcm9wZXJ0eT0iY2F0ZWdvcnkiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49ImltYWdlX3VybCIgcHJvcGVydHk9ImltYWdlVXJsIi8+CisgICAgPC9yZXN1bHRNYXA+CisKKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeUluZm9IYXNoIiByZXN1bHRNYXA9IkJhc2VSZXN1bHRNYXAiPgorICAgICAgICBTRUxFQ1QgKiBGUk9NIHRvcnJlbnQgV0hFUkUgaW5mb19oYXNoID0gI3tpbmZvSGFzaH0KKyAgICA8L3NlbGVjdD4KKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeVNlZWRJZCIgcmVzdWx0TWFwPSJCYXNlUmVzdWx0TWFwIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB0b3JyZW50IFdIRVJFIHNlZWRfaWQgPSAje3NlZWRJZH0KKyAgICA8L3NlbGVjdD4KKworCisKKworICAgIDx1cGRhdGUgaWQ9InVwZGF0ZSIgcGFyYW1ldGVyVHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Ub3JyZW50RW50aXR5Ij4KKyAgICAgICAgVVBEQVRFIHRvcnJlbnQKKyAgICAgICAgU0VUIGZpbGVfbmFtZSA9ICN7ZmlsZU5hbWV9LAorICAgICAgICB1cGxvYWRlciA9ICN7dXBsb2FkZXJ9LAorICAgICAgICB1cGxvYWRfdGltZSA9ICN7dXBsb2FkVGltZX0sCisgICAgICAgIHNpemUgPSAje3NpemV9LAorICAgICAgICB0aXRsZSA9ICN7dGl0bGV9LAorICAgICAgICBkZXNjcmlwdGlvbiA9ICN7ZGVzY3JpcHRpb259LAorICAgICAgICBjYXRlZ29yeSA9ICN7Y2F0ZWdvcnl9LAorICAgICAgICBpbWFnZV91cmwgPSAje2ltYWdlVXJsfQorICAgICAgICBXSEVSRSBpbmZvX2hhc2ggPSAje2luZm9IYXNofQorICAgIDwvdXBkYXRlPgorICAgIDxzZWxlY3QgaWQ9InNlYXJjaCIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Ub3JyZW50RW50aXR5Ij4KKyAgICAgICAgU0VMRUNUICogRlJPTSB0b3JyZW50CisgICAgICAgIDx3aGVyZT4KKyAgICAgICAgICAgIDxpZiB0ZXN0PSJwYXJhbS5jYXRlZ29yeSAhPSBudWxsIj4KKyAgICAgICAgICAgICAgICBBTkQgY2F0ZWdvcnkgPSAje3BhcmFtLmNhdGVnb3J5fQorICAgICAgICAgICAgPC9pZj4KKworICAgICAgICAgICAgPCEtLSAgICAgICAgPGlmIHRlc3Q9InBhcmFtLmZyZWUgIT0gbnVsbCBhbmQgcGFyYW0uZnJlZSAhPSAnJyI+LS0+CisgICAgICAgICAgICA8IS0tICAgICAgICAgICAgQU5EIGZyZWUgPSAje3BhcmFtLmZyZWV9LS0+CisgICAgICAgICAgICA8IS0tICAgICAgICA8L2lmPi0tPgorICAgICAgICAgICAgPGlmIHRlc3Q9InBhcmFtLmZyZWUgIT0gbnVsbCI+CisgICAgICAgICAgICA8Y2hvb3NlPgorICAgICAgICAgICAgICAgIDwhLS0g562b6YCJ4oCc5q2j5Zyo5L+D6ZSA5Lit4oCd55qE56eN5a2QIC0tPgorICAgICAgICAgICAgICAgIDx3aGVuIHRlc3Q9InBhcmFtLmZyZWUgPT0gdHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgIEFORCBFWElTVFMgKAorICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgMSBGUk9NIHByb21vdGlvbiBwCisgICAgICAgICAgICAgICAgICAgIFdIRVJFCisgICAgICAgICAgICAgICAgICAgIEpTT05fQ09OVEFJTlMocC5hcHBsaWNhYmxlX3RvcnJlbnRfaWRzLCBKU09OX0FSUkFZKHQuaWQpKQorICAgICAgICAgICAgICAgICAgICBBTkQgTk9XKCkgQkVUV0VFTiBwLnN0YXJ0X3RpbWUgQU5EIHAuZW5kX3RpbWUKKyAgICAgICAgICAgICAgICAgICAgQU5EIHAuaXNfZGVsZXRlZCA9IDAKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIDwvd2hlbj4KKyAgICAgICAgICAgICAgICA8IS0tIOetm+mAieKAnOacquWcqOS/g+mUgOS4reKAneeahOenjeWtkCAtLT4KKyAgICAgICAgICAgICAgICA8b3RoZXJ3aXNlPgorICAgICAgICAgICAgICAgICAgICBBTkQgTk9UIEVYSVNUUyAoCisgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAxIEZST00gcHJvbW90aW9uIHAKKyAgICAgICAgICAgICAgICAgICAgV0hFUkUKKyAgICAgICAgICAgICAgICAgICAgSlNPTl9DT05UQUlOUyhwLmFwcGxpY2FibGVfdG9ycmVudF9pZHMsIEpTT05fQVJSQVkodC5pZCkpCisgICAgICAgICAgICAgICAgICAgIEFORCBOT1coKSBCRVRXRUVOIHAuc3RhcnRfdGltZSBBTkQgcC5lbmRfdGltZQorICAgICAgICAgICAgICAgICAgICBBTkQgcC5pc19kZWxldGVkID0gMAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgPC9vdGhlcndpc2U+CisgICAgICAgICAgICA8L2Nob29zZT4KKyAgICAgICAgICAgIDwvaWY+CisKKyAgICAgICAgICAgIDxpZiB0ZXN0PSJwYXJhbS5saWtlRXhwcmVzc2lvbnMgIT0gbnVsbCBhbmQgcGFyYW0ubGlrZUV4cHJlc3Npb25zLnNpemUgPiAwIj4KKyAgICAgICAgICAgICAgICBBTkQgKAorICAgICAgICAgICAgICAgIDxmb3JlYWNoIGNvbGxlY3Rpb249InBhcmFtLmxpa2VFeHByZXNzaW9ucyIgaXRlbT0iaXRlbSIgb3Blbj0iKCIgc2VwYXJhdG9yPSIgQU5EICIgY2xvc2U9IikiPgorCisgICAgICAgICAgICAgICAgICAgICggdGl0bGUgTElLRSBDT05DQVQoJyUnLCAje2l0ZW19LCAnJScpICkgb3IgKCBkZXNjcmlwdGlvbiBMSUtFIENPTkNBVCgnJScsICN7aXRlbX0sICclJykgKSBvciAoIHRhZ3MgTElLRSBDT05DQVQoJyUnLCAje2l0ZW19LCAnJScpICkKKyAgICAgICAgICAgICAgICA8L2ZvcmVhY2g+CisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgPC9pZj4KKyAgICAgICAgPC93aGVyZT4KKworICAgICAgICA8aWYgdGVzdD0icGFyYW0ucHJvcCAhPSBudWxsIGFuZCBwYXJhbS5zb3J0ICE9IG51bGwiPgorICAgICAgICAgICAgT1JERVIgQlkgJHtwYXJhbS5wcm9wfSAke3BhcmFtLnNvcnR9CisgICAgICAgIDwvaWY+CisgICAgPC9zZWxlY3Q+CisgICAgPHNlbGVjdCBpZD0iY2hlY2tGYXZvcml0ZSIgcmVzdWx0VHlwZT0iYm9vbGVhbiI+CisgICAgICAgIFNFTEVDVCBDT1VOVCgqKSA+IDAKKyAgICAgICAgRlJPTSBmYXZvcml0ZQorICAgICAgICBXSEVSRSBzZWVkX2lkID0gI3tzZWVkSWR9IEFORCB1c2VyX2lkID0gI3t1c2VySWR9CisgICAgPC9zZWxlY3Q+CisgICAgPGluc2VydCBpZD0iYWRkRmF2b3JpdGUiPgorICAgICAgICBJTlNFUlQgSU5UTyBmYXZvcml0ZSAoc2VlZF9pZCwgdXNlcl9pZCkKKyAgICAgICAgVkFMVUVTICgje3NlZWRJZH0sICN7dXNlcklkfSkKKyAgICA8L2luc2VydD4KKyAgICA8ZGVsZXRlIGlkPSJyZW1vdmVGYXZvcml0ZSI+CisgICAgICAgIERFTEVURSBGUk9NIGZhdm9yaXRlCisgICAgICAgIFdIRVJFIHNlZWRfaWQgPSAje3NlZWRJZH0gQU5EIHVzZXJfaWQgPSAje3VzZXJJZH0KKyAgICA8L2RlbGV0ZT4KKworCis8L21hcHBlcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVXNlck1hcHBlci54bWwgYi90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVXNlck1hcHBlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAzYWIwYQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL21hcHBlci9Vc2VyTWFwcGVyLnhtbApAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIG1hcHBlciBQVUJMSUMgIi0vL215YmF0aXMub3JnLy9EVEQgTWFwcGVyIDMuMC8vRU4iCisgICAgICAgICJodHRwOi8vbXliYXRpcy5vcmcvZHRkL215YmF0aXMtMy1tYXBwZXIuZHRkIj4KKzxtYXBwZXIgbmFtZXNwYWNlPSJjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlVzZXJNYXBwZXIiPgorICAgIDwhLS0g5qC55o2u55So5oi35ZCN5p+l5om+55So5oi3IC0tPgorICAgIDxzZWxlY3QgaWQ9InNlbGVjdEJ5VXNlcm5hbWUiIHBhcmFtZXRlclR5cGU9InN0cmluZyIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB1c2VyIFdIRVJFIHVzZXJuYW1lID0gI3t1c2VybmFtZX0KKyAgICA8L3NlbGVjdD4KKyAgICA8IS0tIOagueaNrueUqOaIt+WQjeWSjOWvhueggeafpeaJvueUqOaItyAtLT4KKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeVVzZXJuYW1lQW5kUGFzc3dvcmQiIHBhcmFtZXRlclR5cGU9Im1hcCIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB1c2VyIFdIRVJFIHVzZXJuYW1lID0gI3t1c2VybmFtZX0gQU5EIHBhc3N3b3JkID0gI3twYXNzd29yZH0KKyAgICA8L3NlbGVjdD4KKyAgICA8IS0tIOagueaNrumCrueuseafpeaJvueUqOaItyAtLT4KKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeUVtYWlsIiBwYXJhbWV0ZXJUeXBlPSJzdHJpbmciIHJlc3VsdFR5cGU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlciI+CisgICAgICAgIFNFTEVDVCAqIEZST00gdXNlciBXSEVSRSBlbWFpbCA9ICN7ZW1haWx9CisgICAgPC9zZWxlY3Q+CisgICAgPCEtLSDmoLnmja7nlKjmiLflkI3ljIXlkKvmn6Xmib7nlKjmiLcgLS0+CisgICAgPHNlbGVjdCBpZD0ic2VsZWN0QnlVc2VybmFtZUNvbnRhaW5pbmciIHBhcmFtZXRlclR5cGU9InN0cmluZyIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB1c2VyIFdIRVJFIHVzZXJuYW1lIExJS0UgQ09OQ0FUKCclJywgI3tuYW1lfSwgJyUnKQorICAgIDwvc2VsZWN0PgorPC9tYXBwZXI+CmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIueG1sIGIvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1ZlcmlmaWNhdGlvblRva2VuTWFwcGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2IxOWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1ZlcmlmaWNhdGlvblRva2VuTWFwcGVyLnhtbApAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhRE9DVFlQRSBtYXBwZXIgUFVCTElDICItLy9teWJhdGlzLm9yZy8vRFREIE1hcHBlciAzLjAvL0VOIgorICAgICAgICAiaHR0cDovL215YmF0aXMub3JnL2R0ZC9teWJhdGlzLTMtbWFwcGVyLmR0ZCI+Cis8bWFwcGVyIG5hbWVzcGFjZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5WZXJpZmljYXRpb25Ub2tlbk1hcHBlciI+CisgICAgPCEtLSDpgJrov4cgdG9rZW4g5ZKMIGVtYWlsIOafpeivoiBWZXJpZmljYXRpb25Ub2tlbiAtLT4KKyAgICA8c2VsZWN0IGlkPSJmaW5kQnlUb2tlbkFuZEVtYWlsIiByZXN1bHRUeXBlPSJjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlZlcmlmaWNhdGlvblRva2VuIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB2ZXJpZmljYXRpb25fdG9rZW4KKyAgICAgICAgV0hFUkUgdG9rZW4gPSAje3Rva2VufSBBTkQgZW1haWwgPSAje2VtYWlsfQorICAgIDwvc2VsZWN0PgorPC9tYXBwZXI+CmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9vdXRwdXQvdmFsaWQudG9ycmVudCBiL3RhcmdldC9jbGFzc2VzL291dHB1dC92YWxpZC50b3JyZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOTBlNTIKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9vdXRwdXQvdmFsaWQudG9ycmVudApAQCAtMCwwICsxIEBACitkMTA6Y3JlYXRlZCBieTE4OnFCaXR0b3JyZW50IHY1LjEuMDEzOmNyZWF0aW9uIGRhdGVpMTc0NTk0ODk5NWU0OmluZm9kNjpsZW5ndGhpMjJlNDpuYW1lMTU6ZXhhbXBsZS50b3JyZW50MTI6cGllY2UgbGVuZ3RoaTE2Mzg0ZTY6cGllY2VzMjA6Rm4e8LYaKfo8xwmOBubCaBSjdGw3OnByaXZhdGVpMWVlZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphciBiL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWU5NzlhCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2VjaG8tYmFja2VuZC0xLjAtU05BUFNIT1QuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphci5vcmlnaW5hbCBiL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphci5vcmlnaW5hbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmQ4MDE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2VjaG8tYmFja2VuZC0xLjAtU05BUFNIT1QuamFyLm9yaWdpbmFsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9tYXZlbi1hcmNoaXZlci9wb20ucHJvcGVydGllcyBiL3RhcmdldC9tYXZlbi1hcmNoaXZlci9wb20ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2M5NDBlCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L21hdmVuLWFyY2hpdmVyL3BvbS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMyBAQAorYXJ0aWZhY3RJZD1lY2hvLWJhY2tlbmQKK2dyb3VwSWQ9Z3JvdXBJZAordmVyc2lvbj0xLjAtU05BUFNIT1QKZGlmZiAtLWdpdCBhL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL2NvbXBpbGUvZGVmYXVsdC1jb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QgYi90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9jcmVhdGVkRmlsZXMubHN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OTRkMGEKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9jcmVhdGVkRmlsZXMubHN0CkBAIC0wLDAgKzEsNTggQEAKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cQ29uc3RhbnRzJEZpbmlzaFN0YXR1cy5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbmZpZ1xNeU1ldGFPYmplY3RIYW5kbGVyLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxVc2VyU2VydmljZUltcGwuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJDb250cm9sbGVyLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXHZvXFRvcnJlbnRWTy5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xQcm9tb3Rpb25DcmVhdGVEVE8uY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFRvcnJlbnRDb250cm9sbGVyLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxVc2VyU2VydmljZS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxDb25zdGFudHMkT3JkZXIuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVXNlckRldGFpbHMuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxSZXN1bHQuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcUHJvbW90aW9uLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcUmVzUGFnZS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxUb3JyZW50TWFwcGVyLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXFNlY3VyaXR5Q29uZmlnLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxJbnZpdGF0aW9uU2VydmljZS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcVG9ycmVudFNlcnZpY2VJbXBsLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFZlcmlmaWNhdGlvblRva2VuTWFwcGVyLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFRvcnJlbnRFbnRpdHkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcRW50aXR5QmFzZS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xwYXJhbVxUb3JyZW50UGFyYW0uY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXFVzZXJEZXRhaWxzU2VydmljZUltcGwuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFVzZXJEZXRhaWxzU2VydmljZS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVG9ycmVudFNlcnZpY2UuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxJMThuTWVzc2FnZS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxDb25zdGFudHMuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVmVyaWZpY2F0aW9uVG9rZW4uY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcSW52aXRhdGlvbk1hcHBlci5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXE9yZGVyUGFnZVBhcmFtLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxJbnZpdGF0aW9uU2VydmljZUltcGwuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcR2xvYmFsQ29yc0NvbmZpZy5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxVc2VyTWFwcGVyLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcTXlQcm9qZWN0QXBwbGljYXRpb24uY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcVHJhY2tlckNvbmZpZy5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxGYXZvcml0ZU1hcHBlci5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxDb25zdGFudHMkU291cmNlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXFJlc3VsdFN0YXR1cy5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xUb3JyZW50VXBkYXRlRFRPLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcUGFnZVV0aWwuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcR2xvYmFsQ29yc0NvbmZpZyQxLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXENvbnN0YW50cyRBbm5vdW5jZS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxDb21tb25SZXN1bHRTdGF0dXMuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJDb250cm9sbGVyJFZlcmlmaWNhdGlvblJlcXVlc3QuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXEVtYWlsU2VydmljZUltcGwuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJDb250cm9sbGVyJEVtYWlsUmVxdWVzdC5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcUHJvbW90aW9uU2VydmljZUltcGwuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxTdGF0dXMuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxQYWdlUGFyYW0uY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcUHJvbW90aW9uTWFwcGVyLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGV4Y2VwdGlvblxSb2NrZXRQVEV4Y2VwdGlvbi5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcdXRpbHNcVmVyaWZ5Q29kZS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xwYXJhbVxJbnZpdGVQYXJhbS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xwYXJhbVxUb3JyZW50VXBsb2FkUGFyYW0uY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcSW52aXRhdGlvbkVudGl0eS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcRW1haWxTZXJ2aWNlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxQcm9tb3Rpb25TZXJ2aWNlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEZhdm9yaXRlRW50aXR5LmNsYXNzCmRpZmYgLS1naXQgYS90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9pbnB1dEZpbGVzLmxzdCBiL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL2NvbXBpbGUvZGVmYXVsdC1jb21waWxlL2lucHV0RmlsZXMubHN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZjI4MDcKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9pbnB1dEZpbGVzLmxzdApAQCAtMCwwICsxLDUyIEBACitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXEludml0YXRpb25TZXJ2aWNlSW1wbC5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cQ29tbW9uUmVzdWx0U3RhdHVzLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbmZpZ1xTZWN1cml0eUNvbmZpZy5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxkdG9cVG9ycmVudFVwZGF0ZURUTy5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcVXNlck1hcHBlci5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxQYWdlUGFyYW0uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEVudGl0eUJhc2UuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxVc2VyRGV0YWlsc1NlcnZpY2UuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGV4Y2VwdGlvblxSb2NrZXRQVEV4Y2VwdGlvbi5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcRmF2b3JpdGVNYXBwZXIuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXHBhcmFtXFRvcnJlbnRQYXJhbS5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcUHJvbW90aW9uTWFwcGVyLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxGYXZvcml0ZUVudGl0eS5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVG9ycmVudEVudGl0eS5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxVc2VyQ29udHJvbGxlci5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxkdG9ccGFyYW1cSW52aXRlUGFyYW0uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcSTE4bk1lc3NhZ2UuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXHBhcmFtXFRvcnJlbnRVcGxvYWRQYXJhbS5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxPcmRlclBhZ2VQYXJhbS5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcUHJvbW90aW9uLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxJbnZpdGF0aW9uRW50aXR5LmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcSW52aXRhdGlvblNlcnZpY2UuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxUb3JyZW50U2VydmljZUltcGwuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXFJlc3VsdFN0YXR1cy5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXEVtYWlsU2VydmljZUltcGwuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXENvbnN0YW50cy5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcVHJhY2tlckNvbmZpZy5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxSZXNQYWdlLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcUHJvbW90aW9uU2VydmljZS5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXFVzZXJTZXJ2aWNlSW1wbC5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXFVzZXJEZXRhaWxzU2VydmljZUltcGwuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxFbWFpbFNlcnZpY2UuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcU3RhdHVzLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHV0aWxzXFZlcmlmeUNvZGUuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcTXlQcm9qZWN0QXBwbGljYXRpb24uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFRvcnJlbnRNYXBwZXIuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFVzZXJEZXRhaWxzLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVXNlclNlcnZpY2UuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFVzZXIuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcUGFnZVV0aWwuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcUmVzdWx0LmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1x2b1xUb3JyZW50Vk8uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXEludml0YXRpb25NYXBwZXIuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxUb3JyZW50U2VydmljZS5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcTXlNZXRhT2JqZWN0SGFuZGxlci5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVmVyaWZpY2F0aW9uVG9rZW4uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxQcm9tb3Rpb25TZXJ2aWNlSW1wbC5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXEludml0ZUNvbnRyb2xsZXIuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXEdsb2JhbENvcnNDb25maWcuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXFByb21vdGlvbkNyZWF0ZURUTy5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFRvcnJlbnRDb250cm9sbGVyLmphdmEKZGlmZiAtLWdpdCBhL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL3Rlc3RDb21waWxlL2RlZmF1bHQtdGVzdENvbXBpbGUvY3JlYXRlZEZpbGVzLmxzdCBiL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL3Rlc3RDb21waWxlL2RlZmF1bHQtdGVzdENvbXBpbGUvY3JlYXRlZEZpbGVzLmxzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWMyMzViCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vdGVzdENvbXBpbGUvZGVmYXVsdC10ZXN0Q29tcGlsZS9jcmVhdGVkRmlsZXMubHN0CkBAIC0wLDAgKzEsMiBAQAorY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlckNvbnRyb2xsZXJUZXN0JDEuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJDb250cm9sbGVyVGVzdC5jbGFzcwpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vdGVzdENvbXBpbGUvZGVmYXVsdC10ZXN0Q29tcGlsZS9pbnB1dEZpbGVzLmxzdCBiL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL3Rlc3RDb21waWxlL2RlZmF1bHQtdGVzdENvbXBpbGUvaW5wdXRGaWxlcy5sc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4ZGNlOAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL3Rlc3RDb21waWxlL2RlZmF1bHQtdGVzdENvbXBpbGUvaW5wdXRGaWxlcy5sc3QKQEAgLTAsMCArMSwyIEBACitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcdGVzdFxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJDb250cm9sbGVyVGVzdC5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcdGVzdFxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFRvcnJlbnRDb250cm9sbGVyVGVzdC5qYXZhCmRpZmYgLS1naXQgYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NsYXNzcGF0aC5pbmRleCBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY2xhc3NwYXRoLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMGFmZjYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvdGVzdC1jbGFzc2VzL2NsYXNzcGF0aC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdCQxLmNsYXNzIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QkMS5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzI5NTRiCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QkMS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdC5jbGFzcyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyM2NhMDkKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCg==