ZGlmZiAtLWdpdCBhL2NhdGFsb2ctdWkvc3JjL2FwcC9tb2RlbHMvb3BlcmF0aW9uLnRzIGIvY2F0YWxvZy11aS9zcmMvYXBwL21vZGVscy9vcGVyYXRpb24udHMKaW5kZXggMmFhMTMzMi4uNmVlY2NlYyAxMDA2NDQKLS0tIGEvY2F0YWxvZy11aS9zcmMvYXBwL21vZGVscy9vcGVyYXRpb24udHMKKysrIGIvY2F0YWxvZy11aS9zcmMvYXBwL21vZGVscy9vcGVyYXRpb24udHMKQEAgLTMsMTUgKzMsMTUgQEAKIGV4cG9ydCBjbGFzcyBPcGVyYXRpb25QYXJhbWV0ZXIgewogICAgIG5hbWU6IHN0cmluZzsKICAgICB0eXBlOiBTdHJpbmc7Ci0gICAgcHJvcGVydHk6IHN0cmluZzsKLSAgICBtYW5kYXRvcnk6IGJvb2xlYW47CisgICAgaW5wdXRJZDogc3RyaW5nOworICAgIHJlcXVpcmVkOiBib29sZWFuOwogCiAgICAgY29uc3RydWN0b3IocGFyYW0/OiBPcGVyYXRpb25QYXJhbWV0ZXIpIHsKICAgICAgICAgaWYgKHBhcmFtKSB7CiAgICAgICAgICAgICB0aGlzLm5hbWUgPSBwYXJhbS5uYW1lOwogICAgICAgICAgICAgdGhpcy50eXBlID0gcGFyYW0udHlwZTsKLSAgICAgICAgICAgIHRoaXMucHJvcGVydHkgPSBwYXJhbS5wcm9wZXJ0eTsKLSAgICAgICAgICAgIHRoaXMubWFuZGF0b3J5ID0gcGFyYW0ubWFuZGF0b3J5OworICAgICAgICAgICAgdGhpcy5pbnB1dElkID0gcGFyYW0uaW5wdXRJZDsKKyAgICAgICAgICAgIHRoaXMucmVxdWlyZWQgPSBwYXJhbS5yZXF1aXJlZDsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTI2LDEzICsyNiwxMyBAQAogICAgIHN0YXRpYyBFWElTVElORyA9ICdFWElTVElORyc7CiB9CiAKLWV4cG9ydCBjbGFzcyBPcGVyYXRpb25Nb2RlbCB7Ci0gICAgb3BlcmF0aW9uVHlwZTogc3RyaW5nOworZXhwb3J0IGNsYXNzIEJFT3BlcmF0aW9uTW9kZWwgeworICAgIG5hbWU6IHN0cmluZzsKICAgICBkZXNjcmlwdGlvbjogc3RyaW5nOwogICAgIHVuaXF1ZUlkOiBzdHJpbmc7CiAKLSAgICBpbnB1dFBhcmFtczogSU9wZXJhdGlvblBhcmFtc0xpc3Q7Ci0gICAgb3V0cHV0UGFyYW1zOiBJT3BlcmF0aW9uUGFyYW1zTGlzdDsKKyAgICBpbnB1dHM6IElPcGVyYXRpb25QYXJhbXNMaXN0OworICAgIG91dHB1dHM6IElPcGVyYXRpb25QYXJhbXNMaXN0OwogCiAgICAgd29ya2Zsb3dBc3NvY2lhdGlvblR5cGU6IHN0cmluZzsKICAgICB3b3JrZmxvd0lkOiBzdHJpbmc7CkBAIC00MCwxMiArNDAsMTIgQEAKIAogICAgIGNvbnN0cnVjdG9yKG9wZXJhdGlvbj86IGFueSkgewogICAgICAgICBpZiAob3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICB0aGlzLm9wZXJhdGlvblR5cGUgPSBvcGVyYXRpb24ub3BlcmF0aW9uVHlwZTsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9IG9wZXJhdGlvbi5uYW1lOwogICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IG9wZXJhdGlvbi5kZXNjcmlwdGlvbjsKICAgICAgICAgICAgIHRoaXMudW5pcXVlSWQgPSBvcGVyYXRpb24udW5pcXVlSWQ7CiAKLSAgICAgICAgICAgIHRoaXMuaW5wdXRQYXJhbXMgPSBvcGVyYXRpb24uaW5wdXRQYXJhbXM7Ci0gICAgICAgICAgICB0aGlzLm91dHB1dFBhcmFtcyA9IG9wZXJhdGlvbi5vdXRwdXRQYXJhbXM7CisgICAgICAgICAgICB0aGlzLmlucHV0cyA9IG9wZXJhdGlvbi5pbnB1dHM7CisgICAgICAgICAgICB0aGlzLm91dHB1dHMgPSBvcGVyYXRpb24ub3V0cHV0czsKIAogICAgICAgICAgICAgdGhpcy53b3JrZmxvd0Fzc29jaWF0aW9uVHlwZSA9IG9wZXJhdGlvbi53b3JrZmxvd0Fzc29jaWF0aW9uVHlwZTsKICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dJZCA9IG9wZXJhdGlvbi53b3JrZmxvd0lkOwpAQCAtNTMsMjMgKzUzLDY2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgY3JlYXRlSW5wdXRQYXJhbXNMaXN0KGlucHV0UGFyYW1zOiBBcnJheTxPcGVyYXRpb25QYXJhbWV0ZXI+KTogdm9pZCB7Ci0gICAgICAgIHRoaXMuaW5wdXRQYXJhbXMgPSB7Ci0gICAgICAgICAgICBsaXN0VG9zY2FEYXRhRGVmaW5pdGlvbjogaW5wdXRQYXJhbXMKKyAgICBwdWJsaWMgY3JlYXRlSW5wdXRzTGlzdChpbnB1dHM6IEFycmF5PE9wZXJhdGlvblBhcmFtZXRlcj4pOiB2b2lkIHsKKyAgICAgICAgdGhpcy5pbnB1dHMgPSB7CisgICAgICAgICAgICBsaXN0VG9zY2FEYXRhRGVmaW5pdGlvbjogaW5wdXRzCiAgICAgICAgIH07CiAgICAgfQogCi0gICAgcHVibGljIGNyZWF0ZU91dHB1dFBhcmFtc0xpc3Qob3V0cHV0UGFyYW1zOiBBcnJheTxPcGVyYXRpb25QYXJhbWV0ZXI+KTogdm9pZCB7Ci0gICAgICAgIHRoaXMub3V0cHV0UGFyYW1zID0gewotICAgICAgICAgICAgbGlzdFRvc2NhRGF0YURlZmluaXRpb246IF8ubWFwKG91dHB1dFBhcmFtcywgb3V0cHV0ID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBuZXdPdXRwdXQgPSB7Li4ub3V0cHV0fTsKLSAgICAgICAgICAgICAgICBkZWxldGUgbmV3T3V0cHV0LnByb3BlcnR5OwotICAgICAgICAgICAgICAgIHJldHVybiBuZXdPdXRwdXQ7CisgICAgcHVibGljIGNyZWF0ZU91dHB1dHNMaXN0KG91dHB1dHM6IEFycmF5PE9wZXJhdGlvblBhcmFtZXRlcj4pOiB2b2lkIHsKKyAgICAgICAgdGhpcy5vdXRwdXRzID0geworICAgICAgICAgICAgbGlzdFRvc2NhRGF0YURlZmluaXRpb246IF8ubWFwKG91dHB1dHMsIG91dHB1dCA9PiB7CisgICAgICAgICAgICAgICAgZGVsZXRlIG91dHB1dC5pbnB1dElkOworICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7CiAgICAgICAgICAgICB9KQogICAgICAgICB9OwogICAgIH0KIH0KIAotZXhwb3J0IGludGVyZmFjZSBDcmVhdGVPcGVyYXRpb25SZXNwb25zZSBleHRlbmRzIE9wZXJhdGlvbk1vZGVsIHsKK2V4cG9ydCBjbGFzcyBPcGVyYXRpb25Nb2RlbCBleHRlbmRzIEJFT3BlcmF0aW9uTW9kZWwgeworICAgIGludGVyZmFjZVR5cGU6IHN0cmluZzsKKyAgICBpbnRlcmZhY2VJZDogc3RyaW5nOworCisgICAgY29uc3RydWN0b3Iob3BlcmF0aW9uPzogYW55KSB7CisgICAgICAgIHN1cGVyKG9wZXJhdGlvbik7CisgICAgICAgIGlmIChvcGVyYXRpb24pIHsKKyAgICAgICAgICAgIHRoaXMuaW50ZXJmYWNlSWQgPSBvcGVyYXRpb24uaW50ZXJmYWNlSWQ7CisgICAgICAgICAgICB0aGlzLmludGVyZmFjZVR5cGUgPSBvcGVyYXRpb24uaW50ZXJmYWNlVHlwZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBkaXNwbGF5TmFtZSgpOiBzdHJpbmcgeworICAgICAgICBjb25zdCBsYXN0RG90ID0gdGhpcy5uYW1lID8gdGhpcy5uYW1lLmxhc3RJbmRleE9mKCcuJykgOiAtMTsKKyAgICAgICAgcmV0dXJuIGxhc3REb3QgPT09IC0xID8gdGhpcy5uYW1lIDogdGhpcy5uYW1lLnN1YnN0cihsYXN0RG90ICsgMSk7CisgICAgfQorfQorCitleHBvcnQgY2xhc3MgQ3JlYXRlT3BlcmF0aW9uUmVzcG9uc2UgZXh0ZW5kcyBPcGVyYXRpb25Nb2RlbCB7CiAgICAgYXJ0aWZhY3RVVUlEOiBzdHJpbmc7CisKKyAgICBjb25zdHJ1Y3RvcihvcGVyYXRpb24/OiBhbnkpIHsKKyAgICAgICAgc3VwZXIob3BlcmF0aW9uKTsKKyAgICAgICAgaWYgKG9wZXJhdGlvbikgeworICAgICAgICAgICAgdGhpcy5hcnRpZmFjdFVVSUQgPSBvcGVyYXRpb24uYXJ0aWZhY3RVVUlEOworICAgICAgICB9CisgICAgfQorfQorCitleHBvcnQgY2xhc3MgSW50ZXJmYWNlTW9kZWwgeworICAgIHR5cGU6IHN0cmluZzsKKyAgICB1bmlxdWVJZDogc3RyaW5nOworICAgIG9wZXJhdGlvbnM6IEFycmF5PE9wZXJhdGlvbk1vZGVsPjsKKworICAgIGNvbnN0cnVjdG9yKGludGVyZj86IGFueSkgeworICAgICAgICBpZiAoaW50ZXJmKSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBpbnRlcmYudHlwZTsKKyAgICAgICAgICAgIHRoaXMudW5pcXVlSWQgPSBpbnRlcmYudW5pcXVlSWQ7CisgICAgICAgICAgICB0aGlzLm9wZXJhdGlvbnMgPSBpbnRlcmYub3BlcmF0aW9uczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBkaXNwbGF5VHlwZSgpOiBzdHJpbmcgeworICAgICAgICBjb25zdCBsYXN0RG90ID0gdGhpcy50eXBlID8gdGhpcy50eXBlLmxhc3RJbmRleE9mKCcuJykgOiAtMTsKKyAgICAgICAgcmV0dXJuIGxhc3REb3QgPT09IC0xID8gdGhpcy50eXBlIDogdGhpcy50eXBlLnN1YnN0cihsYXN0RG90ICsgMSk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL2ludGVyZmFjZS1vcGVyYXRpb24ubW9kdWxlLnRzIGIvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL2ludGVyZmFjZS1vcGVyYXRpb24ubW9kdWxlLnRzCmluZGV4IDM0MTQ3NjkuLjYyOTJkODUgMTAwNjQ0Ci0tLSBhL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9pbnRlcmZhY2Utb3BlcmF0aW9uLm1vZHVsZS50cworKysgYi9jYXRhbG9nLXVpL3NyYy9hcHAvbmcyL3BhZ2VzL2ludGVyZmFjZS1vcGVyYXRpb24vaW50ZXJmYWNlLW9wZXJhdGlvbi5tb2R1bGUudHMKQEAgLTEsNyArMSw5IEBACiBpbXBvcnQge05nTW9kdWxlfSBmcm9tICJAYW5ndWxhci9jb3JlIjsKIGltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICJAYW5ndWxhci9jb21tb24iOwogaW1wb3J0IHtJbnRlcmZhY2VPcGVyYXRpb25Db21wb25lbnR9IGZyb20gIi4vaW50ZXJmYWNlLW9wZXJhdGlvbi5wYWdlLmNvbXBvbmVudCI7CitpbXBvcnQge1NkY1VpQ29tcG9uZW50c01vZHVsZX0gZnJvbSAic2RjLXVpL2xpYi9hbmd1bGFyL2luZGV4IjsKIGltcG9ydCB7VWlFbGVtZW50c01vZHVsZX0gZnJvbSAiYXBwL25nMi9jb21wb25lbnRzL3VpL3VpLWVsZW1lbnRzLm1vZHVsZSI7CitpbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAiYXBwL25nMi9zaGFyZWQvdHJhbnNsYXRvci90cmFuc2xhdGUubW9kdWxlIjsKIAogQE5nTW9kdWxlKHsKICAgICBkZWNsYXJhdGlvbnM6IFsKQEAgLTksNyArMTEsOSBAQAogICAgIF0sCiAgICAgaW1wb3J0czogWwogICAgICAgICBDb21tb25Nb2R1bGUsCi0gICAgICAgIFVpRWxlbWVudHNNb2R1bGUKKyAgICAgICAgU2RjVWlDb21wb25lbnRzTW9kdWxlLAorICAgICAgICBVaUVsZW1lbnRzTW9kdWxlLAorICAgICAgICBUcmFuc2xhdGVNb2R1bGUKICAgICBdLAogICAgIGV4cG9ydHM6IFtdLAogICAgIGVudHJ5Q29tcG9uZW50czogWwpkaWZmIC0tZ2l0IGEvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL2ludGVyZmFjZS1vcGVyYXRpb24ucGFnZS5jb21wb25lbnQuaHRtbCBiL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9pbnRlcmZhY2Utb3BlcmF0aW9uLnBhZ2UuY29tcG9uZW50Lmh0bWwKaW5kZXggYzlmZGY5NC4uYWZlZmY0OCAxMDA2NDQKLS0tIGEvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL2ludGVyZmFjZS1vcGVyYXRpb24ucGFnZS5jb21wb25lbnQuaHRtbAorKysgYi9jYXRhbG9nLXVpL3NyYy9hcHAvbmcyL3BhZ2VzL2ludGVyZmFjZS1vcGVyYXRpb24vaW50ZXJmYWNlLW9wZXJhdGlvbi5wYWdlLmNvbXBvbmVudC5odG1sCkBAIC0xLDU2ICsxLDE0MiBAQAogPCEtLQotICB+IENvcHlyaWdodCCpIDIwMTYtMjAxOCBFdXJvcGVhbiBTdXBwb3J0IExpbWl0ZWQKLSAgfgotICB+IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgfgotICB+ICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gIH4KLSAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gIC0tPgotICAKKyAgICB+IENvcHlyaWdodCDCqSAyMDE2LTIwMTggRXVyb3BlYW4gU3VwcG9ydCBMaW1pdGVkCisgICAgfgorICAgIH4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICB+CisgICAgfiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgIH4KKyAgICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorICAgIAogPGRpdiBjbGFzcz0iaW50ZXJmYWNlLW9wZXJhdGlvbiI+CiAgICAgPGxvYWRlciBbZGlzcGxheV09ImlzTG9hZGluZyIgW3NpemVdPSInbGFyZ2UnIiBbcmVsYXRpdmVdPSJ0cnVlIj48L2xvYWRlcj4KIAogICAgIDxkaXYKLSAgICAgICAgY2xhc3M9ImFkZC1idG4iCisgICAgICAgIGNsYXNzPSJ0b3AtYWRkLWJ0biBhZGQtYnRuIgorICAgICAgICAqbmdJZj0iIWlzTGlzdEVtcHR5KCkiCiAgICAgICAgIFtuZ0NsYXNzXT0ieydkaXNhYmxlZCc6IHJlYWRvbmx5fSIKICAgICAgICAgZGF0YS10ZXN0cy1pZD0iYWRkSW50ZXJmYWNlT3BlcmF0aW9uIgogICAgICAgICAoY2xpY2spPSJvbkVkaXRPcGVyYXRpb24oKSI+Ci0gICAgICAgIEFkZCBPcGVyYXRpb24KKyAgICAgICAge3sgJ0lOVEVSRkFDRV9BRERfT1BFUkFUSU9OJyB8IHRyYW5zbGF0ZSB9fQogICAgIDwvZGl2PgogCiAgICAgPGRpdiBjbGFzcz0ib3BlcmF0aW9uLWxpc3QiPgogCiAgICAgICAgIDxkaXYKLSAgICAgICAgICAgIGNsYXNzPSJvcGVyYXRpb24tcm93IgotICAgICAgICAgICAgKm5nRm9yPSJsZXQgb3BlcmF0aW9uIG9mIG9wZXJhdGlvbkxpc3QiCi0gICAgICAgICAgICAoY2xpY2spPSJvbkVkaXRPcGVyYXRpb24ob3BlcmF0aW9uKSI+Ci0KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJvcGVyYXRpb24taW5mby1jb250YWluZXIiPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJvcGVyYXRpb24tdGl0bGUiPgotICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ib3BlcmF0aW9uLXRleHQiIGRhdGEtdGVzdHMtaWQ9ImludGVyZmFjZU9wZXJhdGlvblR5cGUiPnt7b3BlcmF0aW9uLm9wZXJhdGlvblR5cGV9fTwvcD4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ib3BlcmF0aW9uLWRlc2NyaXB0aW9uIj4KLSAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im9wZXJhdGlvbi10ZXh0IiBkYXRhLXRlc3RzLWlkPSJpbnRlcmZhY2VPcGVyYXRpb25EZXNjcmlwdGlvbiI+e3tvcGVyYXRpb24uZGVzY3JpcHRpb259fTwvcD4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICA8L3NwYW4+Ci0KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJvcGVyYXRpb24tZHVtYm8iICpuZ0lmPSIhcmVhZG9ubHkiPgotICAgICAgICAgICAgICAgIDxzcGFuCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzcHJpdGUtbmV3IGRlbGV0ZS1pdGVtLWljb24iCi0gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdHMtaWQ9ImRlbGV0ZUludGVyZmFjZU9wZXJhdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib25SZW1vdmVPcGVyYXRpb24oJGV2ZW50LCBvcGVyYXRpb24pIj4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICA8L3NwYW4+Ci0KKyAgICAgICAgICAgIGNsYXNzPSJlbXB0eS1saXN0LWNvbnRhaW5lciIKKyAgICAgICAgICAgICpuZ0lmPSJpc0xpc3RFbXB0eSgpICYmICFpc0xvYWRpbmciPgorICAgICAgICAgICAgPGRpdgorICAgICAgICAgICAgICAgIGNsYXNzPSJlbXB0eS1saXN0LWFkZC1idG4iCisgICAgICAgICAgICAgICAgW25nQ2xhc3NdPSJ7J2Rpc2FibGVkJzogcmVhZG9ubHl9IgorICAgICAgICAgICAgICAgIChjbGljayk9Im9uRWRpdE9wZXJhdGlvbigpIj4KKyAgICAgICAgICAgICAgICA8c3ZnLWljb24KKyAgICAgICAgICAgICAgICAgICAgbmFtZT0icGx1cy1jaXJjbGUiCisgICAgICAgICAgICAgICAgICAgIG1vZGU9InByaW1hcnkiCisgICAgICAgICAgICAgICAgICAgIHNpemU9InhfbGFyZ2UiCisgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09InJlYWRvbmx5Ij4KKyAgICAgICAgICAgICAgICA8L3N2Zy1pY29uPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi10ZXh0Ij57eyAnSU5URVJGQUNFX0FERF9PUEVSQVRJT04nIHwgdHJhbnNsYXRlIH19PC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiAqbmdJZj0iIWlzTGlzdEVtcHR5KCkiPgorCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJleHBhbmQtY29sbGFwc2UiPgorICAgICAgICAgICAgICAgIDxhCisgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJsaW5rIgorICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109InsnZGlzYWJsZWQnOiBpc0FsbEV4cGFuZGVkKCl9IgorICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb2xsYXBzZUFsbChmYWxzZSkiPgorICAgICAgICAgICAgICAgICAgICB7eyAnSU5URVJGQUNFX0VYUEFORF9BTEwnIHwgdHJhbnNsYXRlIH19CisgICAgICAgICAgICAgICAgPC9hPiB8CisgICAgICAgICAgICAgICAgPGEKKyAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImxpbmsiCisgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT0ieydkaXNhYmxlZCc6IGlzQWxsQ29sbGFwc2VkKCl9IgorICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb2xsYXBzZUFsbCgpIj4KKyAgICAgICAgICAgICAgICAgICAge3sgJ0lOVEVSRkFDRV9DT0xMQVBTRV9BTEwnIHwgdHJhbnNsYXRlIH19CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgIDxkaXYKKyAgICAgICAgICAgICAgICBjbGFzcz0iaW50ZXJmYWNlLXJvdyIKKyAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBpbnRlcmZhY2Ugb2YgaW50ZXJmYWNlcyI+CisKKyAgICAgICAgICAgICAgICA8ZGl2CisgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpbnRlcmZhY2UtYWNjb3JkaW9uIgorICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJpbnRlcmZhY2UudG9nZ2xlQ29sbGFwc2UoKSI+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY2hldnJvbi1jb250YWluZXIiCisgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109InsnaXNDb2xsYXBzZWQnOiBpbnRlcmZhY2UuaXNDb2xsYXBzZWR9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzdmctaWNvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ImNhcmV0MS1kb3duLW8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT0icHJpbWFyeSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPSJzbWFsbCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zy1pY29uPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbnRlcmZhY2UtbmFtZSI+e3tpbnRlcmZhY2UuZGlzcGxheVR5cGUoKX19PC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgPGRpdgorICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZ2VuZXJpYy10YWJsZSIKKyAgICAgICAgICAgICAgICAgICAgKm5nSWY9IiFpbnRlcmZhY2UuaXNDb2xsYXBzZWQiPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItcm93IHRhYmxlLXJvdyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjZWxsIGhlYWRlci1jZWxsIGZpZWxkLW5hbWUgaGVhZGVyLW5hbWUiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdJTlRFUkZBQ0VfSEVBREVSX05BTUUnIHwgdHJhbnNsYXRlIH19CisgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjZWxsIGhlYWRlci1jZWxsIGZpZWxkLWRlc2NyaXB0aW9uIGhlYWRlci1kZXNjcmlwdGlvbiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0lOVEVSRkFDRV9IRUFERVJfREVTQ1JJUFRJT04nIHwgdHJhbnNsYXRlIH19CisgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjZWxsIGhlYWRlci1jZWxsIGZpZWxkLWFjdGlvbnMgaGVhZGVyLWFjdGlvbnMiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKXj+KXj+KXjworICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICA8ZGl2CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZGF0YS1yb3ciCisgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBvcGVyYXRpb24gb2YgaW50ZXJmYWNlLm9wZXJhdGlvbnMiCisgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJvbkVkaXRPcGVyYXRpb24ob3BlcmF0aW9uKSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjZWxsIGZpZWxkLW5hbWUiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3BlcmF0aW9uLm5hbWV9fQorICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY2VsbCBmaWVsZC1kZXNjcmlwdGlvbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109InsnY29sbGFwc2VkJzogb3BlcmF0aW9uLmlzQ29sbGFwc2VkfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcGVyYXRpb24uZ2V0RGVzY3JpcHRpb25FbGxpcHNpcygpfX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibW9yZS1vci1sZXNzIGxpbmsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im9wZXJhdGlvbi50b2dnbGVDb2xsYXBzZWQoJGV2ZW50KSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IW9wZXJhdGlvbi5pc0VsbGlwc2lzID8gJycgOiBvcGVyYXRpb24uaXNDb2xsYXBzZWQgPyAnTW9yZScgOiAnTGVzcyd9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjZWxsIGZpZWxkLWFjdGlvbnMiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJkZWxldGUtYWN0aW9uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RzLWlkPSJkZWxldGVPcGVyYXRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im9uUmVtb3ZlT3BlcmF0aW9uKCRldmVudCwgb3BlcmF0aW9uKSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmctaWNvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IiFyZWFkb25seSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InRyYXNoLW8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlPSJpbmZvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT0ic21hbGwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xpY2thYmxlXT0idHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnLWljb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorCiAgICAgPC9kaXY+CiAKIDwvZGl2PgpkaWZmIC0tZ2l0IGEvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL2ludGVyZmFjZS1vcGVyYXRpb24ucGFnZS5jb21wb25lbnQubGVzcyBiL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9pbnRlcmZhY2Utb3BlcmF0aW9uLnBhZ2UuY29tcG9uZW50Lmxlc3MKaW5kZXggNDM1NTAyMC4uYjc5ZTJmNSAxMDA2NDQKLS0tIGEvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL2ludGVyZmFjZS1vcGVyYXRpb24ucGFnZS5jb21wb25lbnQubGVzcworKysgYi9jYXRhbG9nLXVpL3NyYy9hcHAvbmcyL3BhZ2VzL2ludGVyZmFjZS1vcGVyYXRpb24vaW50ZXJmYWNlLW9wZXJhdGlvbi5wYWdlLmNvbXBvbmVudC5sZXNzCkBAIC0xLDg4ICsxLDE5NiBAQAogQGltcG9ydCAnLi4vLi4vLi4vLi4vYXNzZXRzL3N0eWxlcy92YXJpYWJsZXMubGVzcyc7CitAaW1wb3J0ICcuLi8uLi8uLi8uLi9hc3NldHMvc3R5bGVzL292ZXJyaWRlLmxlc3MnOwogCiAuaW50ZXJmYWNlLW9wZXJhdGlvbiB7Ci0gICAgLmFkZC1idG4geworICAgIGZvbnQtc2l6ZTogMTRweDsKKworICAgIC50b3AtYWRkLWJ0biB7CiAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgdG9wOiAtMzFweDsKICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICAgZm9udC1zaXplOiAxNHB4OworICAgICAgICBmb250LWZhbWlseTogQGZvbnQtb3BlbnNhbnMtbWVkaXVtOwogICAgIH0KIAotICAgIGE6bm90KC5kaXNhYmxlZCkgewotICAgICAgICAmOmhvdmVyIHsKLSAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKKyAgICAubGluayB7CisgICAgICAgIGNvbG9yOiBAc2RjdWlfY29sb3JfYmx1ZTsKKyAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgICAgICAgIGZvbnQtZmFtaWx5OiBAZm9udC1vcGVuc2Fucy1yZWd1bGFyOworCisgICAgICAgICY6bm90KC5kaXNhYmxlZCkgeworICAgICAgICAgICAgJjpub3QoLmVtcHR5LWxpc3QtYWRkLWJ0bikgeworICAgICAgICAgICAgICAgICY6aG92ZXIgeworICAgICAgICAgICAgICAgICAgICBjb2xvcjogQHNkY3VpX2NvbG9yX2RhcmstYmx1ZTsKKyAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIC5vcGVyYXRpb24tbGlzdCB7CiAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBAbWFpbl9jb2xvcl9vOwotICAgICAgICBwYWRkaW5nLXRvcDogMjVweDsKKyAgICAgICAgcGFkZGluZy10b3A6IDVweDsKIAotICAgICAgICAub3BlcmF0aW9uLXJvdyB7CisgICAgICAgIC5lbXB0eS1saXN0LWNvbnRhaW5lciB7CiAgICAgICAgICAgICB3aWR0aDogMTAwJTsKLSAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBtYWluX2NvbG9yX287CiAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwotICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKLSAgICAgICAgICAgIGhlaWdodDogMTAwcHg7CisgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKIAotICAgICAgICAgICAgJjpob3ZlciB7Ci0gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBAbWFpbl9jb2xvcl9jOwotICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7Ci0gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLm9wZXJhdGlvbi1pbmZvLWNvbnRhaW5lciB7Ci0gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwotICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKLSAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDYwcHg7Ci0KLSAgICAgICAgICAgICAgICAub3BlcmF0aW9uLXRpdGxlLCAub3BlcmF0aW9uLWRlc2NyaXB0aW9uIHsKLSAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKLQotICAgICAgICAgICAgICAgICAgICAub3BlcmF0aW9uLXRleHQgewotICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA1cmVtOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLm9wZXJhdGlvbi10aXRsZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZsZXgtc2hyaW5rOiAwOwotICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjAwcHg7Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMTNweCk7Ci0gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIEBtYWluX2NvbG9yX287Ci0gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNHB4IDA7Ci0gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMzBweDsKLQotICAgICAgICAgICAgICAgICAgICAub3BlcmF0aW9uLXRleHQgewotICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLm9wZXJhdGlvbi1kZXNjcmlwdGlvbiB7Ci0gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMzBweDsKLSAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKLSAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IEBmb250LW9wZW5zYW5zLXJlZ3VsYXI7Ci0KLSAgICAgICAgICAgICAgICAgICAgLm9wZXJhdGlvbi10ZXh0IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC5vcGVyYXRpb24tZHVtYm8gewotICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CisgICAgICAgICAgICAuZW1wdHktbGlzdC1hZGQtYnRuIHsKICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci0gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGxlZnQ7CisgICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CisgICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKKworICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBtYWluX2NvbG9yX287CisgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogNTBweDsKKworICAgICAgICAgICAgICAgIGhlaWdodDogMjI5cHg7CisgICAgICAgICAgICAgICAgd2lkdGg6IDQ4MHB4OworCisgICAgICAgICAgICAgICAgJi5kaXNhYmxlZCB7CisgICAgICAgICAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICY6aG92ZXIgeworICAgICAgICAgICAgICAgICAgICAmOm5vdCguZGlzYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBzZGN1aV9jb2xvcl9ibHVlOworICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLmJ1dHRvbi10ZXh0IHsKKyAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogOXB4OworICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogQGZvbnQtb3BlbnNhbnMtbWVkaXVtOworICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7CisgICAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CisgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBAc2RjdWlfY29sb3JfYmx1ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICAuZXhwYW5kLWNvbGxhcHNlIHsKKyAgICAgICAgICAgIG1hcmdpbi10b3A6IDRweDsKKyAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE4cHg7CisgICAgICAgICAgICBjb2xvcjogQHNkY3VpX2NvbG9yX2xpZ2h0LWdyYXk7CisgICAgICAgIH0KKworICAgICAgICAuaW50ZXJmYWNlLXJvdyB7CisgICAgICAgICAgICB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgIG1hcmdpbi10b3A6IDEzcHg7CisgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQG1haW5fY29sb3JfbzsKKyAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNHB4OworICAgICAgICAgICAgbWluLWhlaWdodDogMzdweDsKKworCisgICAgICAgICAgICAuaW50ZXJmYWNlLWFjY29yZGlvbiB7CisgICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOworCisgICAgICAgICAgICAgICAgLmNoZXZyb24tY29udGFpbmVyIHsKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKKworICAgICAgICAgICAgICAgICAgICAmLmlzQ29sbGFwc2VkIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAtNnB4OworICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgKiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAmOm5vdCguaXNDb2xsYXBzZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogNnB4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICogeworICAgICAgICAgICAgICAgICAgICAgICAgJjpob3ZlciB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC5pbnRlcmZhY2UtbmFtZSB7CisgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsKKyAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IEBmb250LW9wZW5zYW5zLWJvbGQ7CisgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuZ2VuZXJpYy10YWJsZSB7CisgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKKyAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OworICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAyMnB4OworICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKKworICAgICAgICAgICAgICAgIC5oZWFkZXItcm93LCAuZGF0YS1yb3cgeworICAgICAgICAgICAgICAgICAgICAuY2VsbCB7CisgICAgICAgICAgICAgICAgICAgICAgICAmLmZpZWxkLWRlc2NyaXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4OiAyLjU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICYuZmllbGQtYWN0aW9ucyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleC1iYXNpczogNzJweDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAuaGVhZGVyLXJvdyB7CisgICAgICAgICAgICAgICAgICAgIC5jZWxsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IEBzZGN1aV9jb2xvcl9zaWx2ZXI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICYuZmllbGQtYWN0aW9ucyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxMHB4OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLmRhdGEtcm93IHsKKyAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOworCisgICAgICAgICAgICAgICAgICAgICY6aG92ZXIgeworICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogQHNkY3VpX2NvbG9yX2xpZ2h0LXNpbHZlcjsKKworICAgICAgICAgICAgICAgICAgICAgICAgLmNlbGwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYuZmllbGQtbmFtZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBAc2RjdWlfY29sb3JfZGFyay1ibHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICY6bm90KDpob3ZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAuZmllbGQtYWN0aW9ucyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLmNlbGwgeworICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOworICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKworICAgICAgICAgICAgICAgICAgICAgICAgJi5maWVsZC1kZXNjcmlwdGlvbiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJjpub3QoLmNvbGxhcHNlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmLmNvbGxhcHNlZCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGNsaXA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tb3JlLW9yLWxlc3MgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogNXB4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgJi5maWVsZC1hY3Rpb25zIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGVsZXRlLWFjdGlvbiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAycHg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9pbnRlcmZhY2Utb3BlcmF0aW9uLnBhZ2UuY29tcG9uZW50LnRzIGIvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL2ludGVyZmFjZS1vcGVyYXRpb24ucGFnZS5jb21wb25lbnQudHMKaW5kZXggZTE5ZDM0NS4uZTliMjAwMSAxMDA2NDQKLS0tIGEvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL2ludGVyZmFjZS1vcGVyYXRpb24ucGFnZS5jb21wb25lbnQudHMKKysrIGIvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL2ludGVyZmFjZS1vcGVyYXRpb24ucGFnZS5jb21wb25lbnQudHMKQEAgLTMsMTIgKzMsMTcgQEAKIGltcG9ydCB7Q29tcG9uZW50IGFzIElDb21wb25lbnR9IGZyb20gJ2FwcC9tb2RlbHMvY29tcG9uZW50cy9jb21wb25lbnQnOwogCiBpbXBvcnQge1NkY0NvbmZpZ1Rva2VuLCBJU2RjQ29uZmlnfSBmcm9tICJhcHAvbmcyL2NvbmZpZy9zZGMtY29uZmlnLmNvbmZpZyI7CitpbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gImFwcC9uZzIvc2hhcmVkL3RyYW5zbGF0b3IvdHJhbnNsYXRlLnNlcnZpY2UiOwogCiBpbXBvcnQge09ic2VydmFibGV9IGZyb20gInJ4anMvT2JzZXJ2YWJsZSI7CiAKIGltcG9ydCB7TW9kYWxDb21wb25lbnR9IGZyb20gJ2FwcC9uZzIvY29tcG9uZW50cy91aS9tb2RhbC9tb2RhbC5jb21wb25lbnQnOwogaW1wb3J0IHtNb2RhbFNlcnZpY2V9IGZyb20gJ2FwcC9uZzIvc2VydmljZXMvbW9kYWwuc2VydmljZSc7Ci1pbXBvcnQge01vZGFsTW9kZWwsIEJ1dHRvbk1vZGVsLCBJbnB1dEJFTW9kZWwsIE9wZXJhdGlvbk1vZGVsLCBDcmVhdGVPcGVyYXRpb25SZXNwb25zZSwgV09SS0ZMT1dfQVNTT0NJQVRJT05fT1BUSU9OU30gZnJvbSAnYXBwL21vZGVscyc7CitpbXBvcnQge01vZGFsTW9kZWwsIEJ1dHRvbk1vZGVsLCBJbnB1dEJFTW9kZWwsIE9wZXJhdGlvbk1vZGVsLCBJbnRlcmZhY2VNb2RlbCwgQ3JlYXRlT3BlcmF0aW9uUmVzcG9uc2UsIFdPUktGTE9XX0FTU09DSUFUSU9OX09QVElPTlN9IGZyb20gJ2FwcC9tb2RlbHMnOworCitpbXBvcnQge0lNb2RhbENvbmZpZywgSU1vZGFsQnV0dG9uQ29tcG9uZW50fSBmcm9tICJzZGMtdWkvbGliL2FuZ3VsYXIvbW9kYWxzL21vZGVscy9tb2RhbC1jb25maWciOworaW1wb3J0IHtTZGNVaUNvbXBvbmVudHN9IGZyb20gInNkYy11aS9saWIvYW5ndWxhciI7CitpbXBvcnQge01vZGFsQnV0dG9uQ29tcG9uZW50fSBmcm9tICJzZGMtdWkvbGliL2FuZ3VsYXIvY29tcG9uZW50cyI7CiAKIGltcG9ydCB7Q29tcG9uZW50U2VydmljZU5nMn0gZnJvbSAnYXBwL25nMi9zZXJ2aWNlcy9jb21wb25lbnQtc2VydmljZXMvY29tcG9uZW50LnNlcnZpY2UnOwogaW1wb3J0IHtDb21wb25lbnRHZW5lcmljUmVzcG9uc2V9IGZyb20gJ2FwcC9uZzIvc2VydmljZXMvcmVzcG9uc2VzL2NvbXBvbmVudC1nZW5lcmljLXJlc3BvbnNlJzsKQEAgLTE2LDIxICsyMSw5NiBAQAogCiBpbXBvcnQge09wZXJhdGlvbkNyZWF0b3JDb21wb25lbnQsIE9wZXJhdGlvbkNyZWF0b3JJbnB1dH0gZnJvbSAnLi9vcGVyYXRpb24tY3JlYXRvci9vcGVyYXRpb24tY3JlYXRvci5jb21wb25lbnQnOwogCitleHBvcnQgY2xhc3MgVUlPcGVyYXRpb25Nb2RlbCBleHRlbmRzIE9wZXJhdGlvbk1vZGVsIHsKKyAgICBpc0NvbGxhcHNlZDogYm9vbGVhbiA9IHRydWU7CisgICAgaXNFbGxpcHNpczogYm9vbGVhbjsKKyAgICBNQVhfTEVOR1RIID0gNzU7CisgICAgX2Rlc2NyaXB0aW9uOiBzdHJpbmc7CisKKyAgICBjb25zdHJ1Y3RvcihvcGVyYXRpb246IE9wZXJhdGlvbk1vZGVsKSB7CisgICAgICAgIHN1cGVyKG9wZXJhdGlvbik7CisKKyAgICAgICAgaWYgKCFvcGVyYXRpb24uZGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSAnJzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uLmxlbmd0aCA+IHRoaXMuTUFYX0xFTkdUSCkgeworICAgICAgICAgICAgdGhpcy5pc0VsbGlwc2lzID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuaXNFbGxpcHNpcyA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgZ2V0RGVzY3JpcHRpb25FbGxpcHNpcygpOiBzdHJpbmcgeworICAgICAgICBpZiAodGhpcy5pc0NvbGxhcHNlZCAmJiB0aGlzLmRlc2NyaXB0aW9uLmxlbmd0aCA+IHRoaXMuTUFYX0xFTkdUSCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb24uc3Vic3RyKDAsIHRoaXMuTUFYX0xFTkdUSCAtIDMpICsgJy4uLic7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb247CisgICAgfQorCisgICAgdG9nZ2xlQ29sbGFwc2VkKGUpIHsKKyAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdGhpcy5pc0NvbGxhcHNlZCA9ICF0aGlzLmlzQ29sbGFwc2VkOworICAgIH0KK30KKworY2xhc3MgTW9kYWxUcmFuc2xhdGlvbiB7CisgICAgQ1JFQVRFX1RJVExFOiBzdHJpbmc7CisgICAgRURJVF9USVRMRTogc3RyaW5nOworICAgIERFTEVURV9USVRMRTogc3RyaW5nOworICAgIENBTkNFTF9CVVRUT046IHN0cmluZzsKKyAgICBTQVZFX0JVVFRPTjogc3RyaW5nOworICAgIENSRUFURV9CVVRUT046IHN0cmluZzsKKyAgICBERUxFVEVfQlVUVE9OOiBzdHJpbmc7CisgICAgZGVsZXRlVGV4dDogRnVuY3Rpb247CisKKyAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIFRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHsKKyAgICAgICAgdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLmxhbmd1YWdlQ2hhbmdlZE9ic2VydmFibGUuc3Vic2NyaWJlKGxhbmcgPT4geworICAgICAgICAgICAgdGhpcy5DUkVBVEVfVElUTEUgPSB0aGlzLlRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCJJTlRFUkZBQ0VfQ1JFQVRFX1RJVExFIik7CisgICAgICAgICAgICB0aGlzLkVESVRfVElUTEUgPSB0aGlzLlRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCJJTlRFUkZBQ0VfRURJVF9USVRMRSIpOworICAgICAgICAgICAgdGhpcy5ERUxFVEVfVElUTEUgPSB0aGlzLlRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCJJTlRFUkZBQ0VfREVMRVRFX1RJVExFIik7CisgICAgICAgICAgICB0aGlzLkNBTkNFTF9CVVRUT04gPSB0aGlzLlRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCJJTlRFUkZBQ0VfQ0FOQ0VMX0JVVFRPTiIpOworICAgICAgICAgICAgdGhpcy5TQVZFX0JVVFRPTiA9IHRoaXMuVHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoIklOVEVSRkFDRV9TQVZFX0JVVFRPTiIpOworICAgICAgICAgICAgdGhpcy5DUkVBVEVfQlVUVE9OID0gdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgiSU5URVJGQUNFX0NSRUFURV9CVVRUT04iKTsKKyAgICAgICAgICAgIHRoaXMuREVMRVRFX0JVVFRPTiA9IHRoaXMuVHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoIklOVEVSRkFDRV9ERUxFVEVfQlVUVE9OIik7CisgICAgICAgICAgICB0aGlzLmRlbGV0ZVRleHQgPSAob3BlcmF0aW9uTmFtZSkgPT4gdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgiSU5URVJGQUNFX0RFTEVURV9URVhUIiwge29wZXJhdGlvbk5hbWV9KTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCitleHBvcnQgY2xhc3MgVUlJbnRlcmZhY2VNb2RlbCBleHRlbmRzIEludGVyZmFjZU1vZGVsIHsKKyAgICBpc0NvbGxhcHNlZDogYm9vbGVhbiA9IGZhbHNlOworCisgICAgY29uc3RydWN0b3IoaW50ZXJmPzogYW55KSB7CisgICAgICAgIHN1cGVyKGludGVyZik7CisgICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IF8ubWFwKAorICAgICAgICAgICAgdGhpcy5vcGVyYXRpb25zLAorICAgICAgICAgICAgb3BlcmF0aW9uID0+IG5ldyBVSU9wZXJhdGlvbk1vZGVsKG9wZXJhdGlvbikKKyAgICAgICAgKTsKKyAgICB9CisKKyAgICB0b2dnbGVDb2xsYXBzZSgpIHsKKyAgICAgICAgdGhpcy5pc0NvbGxhcHNlZCA9ICF0aGlzLmlzQ29sbGFwc2VkOworICAgIH0KK30KKwogQENvbXBvbmVudCh7CiAgICAgc2VsZWN0b3I6ICdpbnRlcmZhY2Utb3BlcmF0aW9uJywKICAgICB0ZW1wbGF0ZVVybDogJy4vaW50ZXJmYWNlLW9wZXJhdGlvbi5wYWdlLmNvbXBvbmVudC5odG1sJywKICAgICBzdHlsZVVybHM6IFsnaW50ZXJmYWNlLW9wZXJhdGlvbi5wYWdlLmNvbXBvbmVudC5sZXNzJ10sCi0gICAgcHJvdmlkZXJzOiBbTW9kYWxTZXJ2aWNlXQorICAgIHByb3ZpZGVyczogW01vZGFsU2VydmljZSwgVHJhbnNsYXRlU2VydmljZV0KIH0pCiAKIGV4cG9ydCBjbGFzcyBJbnRlcmZhY2VPcGVyYXRpb25Db21wb25lbnQgewogCisgICAgaW50ZXJmYWNlczogQXJyYXk8VUlJbnRlcmZhY2VNb2RlbD47CiAgICAgbW9kYWxJbnN0YW5jZTogQ29tcG9uZW50UmVmPE1vZGFsQ29tcG9uZW50PjsKLSAgICBvcGVyYXRpb25MaXN0OiBBcnJheTxPcGVyYXRpb25Nb2RlbD4gPSBbXTsKICAgICBvcGVuT3BlcmF0aW9uOiBPcGVyYXRpb25Nb2RlbDsKICAgICBlbmFibGVXb3JrZmxvd0Fzc29jaWF0aW9uOiBib29sZWFuOwogICAgIGlucHV0czogQXJyYXk8SW5wdXRCRU1vZGVsPjsKICAgICBpc0xvYWRpbmc6IGJvb2xlYW47CisgICAgaW50ZXJmYWNlVHlwZXM6eyBbaW50ZXJmYWNlVHlwZTogc3RyaW5nXTogQXJyYXk8c3RyaW5nPiB9OworICAgIG1vZGFsVHJhbnNsYXRpb246IE1vZGFsVHJhbnNsYXRpb247CiAKICAgICBASW5wdXQoKSBjb21wb25lbnQ6IElDb21wb25lbnQ7CiAgICAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW47CkBAIC00MCw0MCArMTIwLDc5IEBACiAgICAgY29uc3RydWN0b3IoCiAgICAgICAgIEBJbmplY3QoU2RjQ29uZmlnVG9rZW4pIHByaXZhdGUgc2RjQ29uZmlnOiBJU2RjQ29uZmlnLAogICAgICAgICBASW5qZWN0KCIkc3RhdGUiKSBwcml2YXRlICRzdGF0ZTogbmcudWkuSVN0YXRlU2VydmljZSwKKyAgICAgICAgcHJpdmF0ZSBUcmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLAogICAgICAgICBwcml2YXRlIENvbXBvbmVudFNlcnZpY2VOZzI6IENvbXBvbmVudFNlcnZpY2VOZzIsCiAgICAgICAgIHByaXZhdGUgV29ya2Zsb3dTZXJ2aWNlTmcyOiBXb3JrZmxvd1NlcnZpY2VOZzIsCiAgICAgICAgIHByaXZhdGUgTW9kYWxTZXJ2aWNlTmcyOiBNb2RhbFNlcnZpY2UsCisgICAgICAgIHByaXZhdGUgTW9kYWxTZXJ2aWNlU2RjVUk6IFNkY1VpQ29tcG9uZW50cy5Nb2RhbFNlcnZpY2UKICAgICApIHsKICAgICAgICAgdGhpcy5lbmFibGVXb3JrZmxvd0Fzc29jaWF0aW9uID0gc2RjQ29uZmlnLmVuYWJsZVdvcmtmbG93QXNzb2NpYXRpb247CisgICAgICAgIHRoaXMubW9kYWxUcmFuc2xhdGlvbiA9IG5ldyBNb2RhbFRyYW5zbGF0aW9uKFRyYW5zbGF0ZVNlcnZpY2UpOwogICAgIH0KIAogICAgIG5nT25Jbml0KCk6IHZvaWQgewogICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7CiAgICAgICAgIE9ic2VydmFibGUuZm9ya0pvaW4oCi0gICAgICAgICAgICB0aGlzLkNvbXBvbmVudFNlcnZpY2VOZzIuZ2V0SW50ZXJmYWNlT3BlcmF0aW9ucyh0aGlzLmNvbXBvbmVudCksCi0gICAgICAgICAgICB0aGlzLkNvbXBvbmVudFNlcnZpY2VOZzIuZ2V0Q29tcG9uZW50SW5wdXRzKHRoaXMuY29tcG9uZW50KQotICAgICAgICApLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHsKKyAgICAgICAgICAgIHRoaXMuQ29tcG9uZW50U2VydmljZU5nMi5nZXRJbnRlcmZhY2VzKHRoaXMuY29tcG9uZW50KSwKKyAgICAgICAgICAgIHRoaXMuQ29tcG9uZW50U2VydmljZU5nMi5nZXRDb21wb25lbnRJbnB1dHModGhpcy5jb21wb25lbnQpLAorICAgICAgICAgICAgdGhpcy5Db21wb25lbnRTZXJ2aWNlTmcyLmdldEludGVyZmFjZVR5cGVzKHRoaXMuY29tcG9uZW50KQorICAgICAgICApLnN1YnNjcmliZSgocmVzcG9uc2U6IEFycmF5PGFueT4pID0+IHsKICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnRlcmZhY2VPcGVyYXRpb25zID0gcmVzcG9uc2VbMF0uaW50ZXJmYWNlT3BlcmF0aW9uczsKLSAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uTGlzdCA9IF8udG9BcnJheShyZXNwb25zZVswXS5pbnRlcmZhY2VPcGVyYXRpb25zKS5zb3J0KChhLCBiKSA9PiBhLm9wZXJhdGlvblR5cGUubG9jYWxlQ29tcGFyZShiLm9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgIHRoaXMuaW5pdEludGVyZmFjZXMocmVzcG9uc2VbMF0uaW50ZXJmYWNlcyk7CisgICAgICAgICAgICB0aGlzLnNvcnRJbnRlcmZhY2VzKCk7CiAgICAgICAgICAgICB0aGlzLmlucHV0cyA9IHJlc3BvbnNlWzFdLmlucHV0czsKKyAgICAgICAgICAgIHRoaXMuaW50ZXJmYWNlVHlwZXMgPSByZXNwb25zZVsyXTsKICAgICAgICAgfSk7CiAgICAgfQogCisgICAgaW5pdEludGVyZmFjZXMoaW50ZXJmYWNlczogQXJyYXk8SW50ZXJmYWNlTW9kZWw+KTogdm9pZCB7CisgICAgICAgIHRoaXMuaW50ZXJmYWNlcyA9IF8ubWFwKGludGVyZmFjZXMsIGludGVyZiA9PiBuZXcgVUlJbnRlcmZhY2VNb2RlbChpbnRlcmYpKTsKKyAgICB9CisKKyAgICBzb3J0SW50ZXJmYWNlcygpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5pbnRlcmZhY2VzID0gXy5maWx0ZXIodGhpcy5pbnRlcmZhY2VzLCBpbnRlcmYgPT4gaW50ZXJmLm9wZXJhdGlvbnMgJiYgaW50ZXJmLm9wZXJhdGlvbnMubGVuZ3RoID4gMCk7IC8vIHJlbW92ZSBlbXB0eSBpbnRlcmZhY2VzCisgICAgICAgIHRoaXMuaW50ZXJmYWNlcy5zb3J0KChhLCBiKSA9PiBhLnR5cGUubG9jYWxlQ29tcGFyZShiLnR5cGUpKTsgLy8gc29ydCBpbnRlcmZhY2VzIGFscGhhYmV0aWNhbGx5CisgICAgICAgIF8uZm9yRWFjaCh0aGlzLmludGVyZmFjZXMsIGludGVyZiA9PiB7CisgICAgICAgICAgICBpbnRlcmYub3BlcmF0aW9ucy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTsgLy8gc29ydCBvcGVyYXRpb25zIGFscGhhYmV0aWNhbGx5CisgICAgICAgIH0pOworICAgIH0KKworICAgIGNvbGxhcHNlQWxsKHZhbHVlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQgeworICAgICAgICBfLmZvckVhY2godGhpcy5pbnRlcmZhY2VzLCBpbnRlcmYgPT4geworICAgICAgICAgICAgaW50ZXJmLmlzQ29sbGFwc2VkID0gdmFsdWU7CisgICAgICAgIH0pOworICAgIH0KKworICAgIGlzQWxsQ29sbGFwc2VkKCk6IGJvb2xlYW4geworICAgICAgICByZXR1cm4gXy5ldmVyeSh0aGlzLmludGVyZmFjZXMsIGludGVyZiA9PiBpbnRlcmYuaXNDb2xsYXBzZWQpOworICAgIH0KKworICAgIGlzQWxsRXhwYW5kZWQoKTogYm9vbGVhbiB7CisgICAgICAgIHJldHVybiBfLmV2ZXJ5KHRoaXMuaW50ZXJmYWNlcywgaW50ZXJmID0+ICFpbnRlcmYuaXNDb2xsYXBzZWQpOworICAgIH0KKworICAgIGlzTGlzdEVtcHR5KCk6IGJvb2xlYW4geworICAgICAgICByZXR1cm4gXy5maWx0ZXIoCisgICAgICAgICAgICB0aGlzLmludGVyZmFjZXMsCisgICAgICAgICAgICBpbnRlcmYgPT4gaW50ZXJmLm9wZXJhdGlvbnMgJiYgaW50ZXJmLm9wZXJhdGlvbnMubGVuZ3RoID4gMAorICAgICAgICApLmxlbmd0aCA9PT0gMDsKKyAgICB9CisKICAgICBnZXREaXNhYmxlZCA9ICgpOiBib29sZWFuID0+IHsKICAgICAgICAgcmV0dXJuICF0aGlzLm1vZGFsSW5zdGFuY2UuaW5zdGFuY2UuZHluYW1pY0NvbnRlbnQuaW5zdGFuY2UuY2hlY2tGb3JtVmFsaWRGb3JTdWJtaXQoKTsKICAgICB9CiAKICAgICBvbkVkaXRPcGVyYXRpb24gPSAob3BlcmF0aW9uPzogT3BlcmF0aW9uTW9kZWwpOiB2b2lkID0+IHsKKwogICAgICAgICBjb25zdCBtb2RhbE1hcCA9IHsKICAgICAgICAgICAgIGNyZWF0ZTogewotICAgICAgICAgICAgICAgIG1vZGFsVGl0bGU6ICdDcmVhdGUgYSBOZXcgT3BlcmF0aW9uJywKLSAgICAgICAgICAgICAgICBzYXZlQnRuVGV4dDogJ0NyZWF0ZScsCisgICAgICAgICAgICAgICAgbW9kYWxUaXRsZTogdGhpcy5tb2RhbFRyYW5zbGF0aW9uLkNSRUFURV9USVRMRSwKKyAgICAgICAgICAgICAgICBzYXZlQnRuVGV4dDogdGhpcy5tb2RhbFRyYW5zbGF0aW9uLkNSRUFURV9CVVRUT04sCiAgICAgICAgICAgICAgICAgc3VibWl0Q2FsbGJhY2s6IHRoaXMuY3JlYXRlT3BlcmF0aW9uLAogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIGVkaXQ6IHsKLSAgICAgICAgICAgICAgICBtb2RhbFRpdGxlOiAnRWRpdCBPcGVyYXRpb24nLAotICAgICAgICAgICAgICAgIHNhdmVCdG5UZXh0OiAnU2F2ZScsCisgICAgICAgICAgICAgICAgbW9kYWxUaXRsZTogdGhpcy5tb2RhbFRyYW5zbGF0aW9uLkVESVRfVElUTEUsCisgICAgICAgICAgICAgICAgc2F2ZUJ0blRleHQ6IHRoaXMubW9kYWxUcmFuc2xhdGlvbi5TQVZFX0JVVFRPTiwKICAgICAgICAgICAgICAgICBzdWJtaXRDYWxsYmFjazogdGhpcy51cGRhdGVPcGVyYXRpb24sCiAgICAgICAgICAgICB9CiAgICAgICAgIH07CkBAIC04NiwyMyArMjA1LDI4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBjYW5jZWxCdXR0b246IEJ1dHRvbk1vZGVsID0gbmV3IEJ1dHRvbk1vZGVsKAotICAgICAgICAgICAgJ0NhbmNlbCcsCi0gICAgICAgICAgICAnb3V0bGluZSB3aGl0ZScsCi0gICAgICAgICAgICAoKSA9PiB7CisgICAgICAgIGNvbnN0IGNhbmNlbEJ1dHRvbjogSU1vZGFsQnV0dG9uQ29tcG9uZW50ID0geworICAgICAgICAgICAgaWQ6ICdjYW5jZWxCdXR0b24nLAorICAgICAgICAgICAgdGV4dDogdGhpcy5tb2RhbFRyYW5zbGF0aW9uLkNBTkNFTF9CVVRUT04sCisgICAgICAgICAgICB0eXBlOiAnc2Vjb25kYXJ5JywKKyAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsCisgICAgICAgICAgICBjbG9zZU1vZGFsOiB0cnVlLAorICAgICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHsKICAgICAgICAgICAgICAgICB0aGlzLm9wZW5PcGVyYXRpb24gPSBudWxsOwotICAgICAgICAgICAgICAgIHRoaXMuTW9kYWxTZXJ2aWNlTmcyLmNsb3NlQ3VycmVudE1vZGFsKCk7CiAgICAgICAgICAgICB9LAotICAgICAgICApOworICAgICAgICB9OwogCi0gICAgICAgIGNvbnN0IHNhdmVCdXR0b246IEJ1dHRvbk1vZGVsID0gbmV3IEJ1dHRvbk1vZGVsKAotICAgICAgICAgICAgbW9kYWxEYXRhLnNhdmVCdG5UZXh0LAotICAgICAgICAgICAgJ2JsdWUnLAotICAgICAgICAgICAgKCkgPT4gewotICAgICAgICAgICAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5pbnN0YW5jZS5keW5hbWljQ29udGVudC5pbnN0YW5jZS5jcmVhdGVQYXJhbUxpc3RzKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5Nb2RhbFNlcnZpY2VOZzIuY2xvc2VDdXJyZW50TW9kYWwoKTsKKyAgICAgICAgY29uc3Qgc2F2ZUJ1dHRvbjogSU1vZGFsQnV0dG9uQ29tcG9uZW50ID0geworICAgICAgICAgICAgaWQ6ICdzYXZlQnV0dG9uJywKKyAgICAgICAgICAgIHRleHQ6IG1vZGFsRGF0YS5zYXZlQnRuVGV4dCwKKyAgICAgICAgICAgIHR5cGU6ICdwcmltYXJ5JywKKyAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsCisgICAgICAgICAgICBjbG9zZU1vZGFsOiB0cnVlLAorICAgICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHsKKyAgICAgICAgICAgICAgICBjb25zdCBtb2RhbEluc3RhbmNlID0gdGhpcy5Nb2RhbFNlcnZpY2VTZGNVSS5nZXRDdXJyZW50SW5zdGFuY2UoKS5pbm5lck1vZGFsQ29udGVudC5pbnN0YW5jZTsKIAotICAgICAgICAgICAgICAgIGNvbnN0IHtvcGVyYXRpb24sIGlzVXNpbmdFeGlzdGluZ1dGfSA9IHRoaXMubW9kYWxJbnN0YW5jZS5pbnN0YW5jZS5keW5hbWljQ29udGVudC5pbnN0YW5jZTsKKyAgICAgICAgICAgICAgICBjb25zdCB7b3BlcmF0aW9uLCBpc1VzaW5nRXhpc3RpbmdXRiwgY3JlYXRlUGFyYW1MaXN0c30gPSBtb2RhbEluc3RhbmNlOworICAgICAgICAgICAgICAgIGNyZWF0ZVBhcmFtTGlzdHMoKTsKICAgICAgICAgICAgICAgICB0aGlzLm9wZW5PcGVyYXRpb24gPSB7Li4ub3BlcmF0aW9ufTsKIAogICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVdvcmtmbG93QXNzb2NpYXRpb24gJiYgIWlzVXNpbmdFeGlzdGluZ1dGKCkpIHsKQEAgLTExMSw3NCArMjM1LDgxIEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgbW9kYWxEYXRhLnN1Ym1pdENhbGxiYWNrKG9wZXJhdGlvbik7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgdGhpcy5nZXREaXNhYmxlZCwKLSAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKIAotICAgICAgICBjb25zdCBtb2RhbE1vZGVsOiBNb2RhbE1vZGVsID0gbmV3IE1vZGFsTW9kZWwoCi0gICAgICAgICAgICAnbCcsCi0gICAgICAgICAgICBtb2RhbERhdGEubW9kYWxUaXRsZSwKLSAgICAgICAgICAgICcnLAotICAgICAgICAgICAgW3NhdmVCdXR0b24sIGNhbmNlbEJ1dHRvbl0sCi0gICAgICAgICAgICAnc3RhbmRhcmQnLAotICAgICAgICApOwotCi0gICAgICAgIHRoaXMubW9kYWxJbnN0YW5jZSA9IHRoaXMuTW9kYWxTZXJ2aWNlTmcyLmNyZWF0ZUN1c3RvbU1vZGFsKG1vZGFsTW9kZWwpOwotCi0gICAgICAgIGxldCBpbnB1dDogT3BlcmF0aW9uQ3JlYXRvcklucHV0ID0gewotICAgICAgICAgICAgb3BlcmF0aW9uLAorICAgICAgICBjb25zdCBpbnB1dDogT3BlcmF0aW9uQ3JlYXRvcklucHV0ID0geworICAgICAgICAgICAgaW5wdXRPcGVyYXRpb246IG9wZXJhdGlvbiwKICAgICAgICAgICAgIGlucHV0UHJvcGVydGllczogdGhpcy5pbnB1dHMsCiAgICAgICAgICAgICBlbmFibGVXb3JrZmxvd0Fzc29jaWF0aW9uOiB0aGlzLmVuYWJsZVdvcmtmbG93QXNzb2NpYXRpb24sCiAgICAgICAgICAgICByZWFkb25seTogdGhpcy5yZWFkb25seSwKLSAgICAgICAgICAgIGlzU2VydmljZTogdGhpcy5jb21wb25lbnQuaXNTZXJ2aWNlKCkKLSAgICAgICAgfQorICAgICAgICAgICAgaXNTZXJ2aWNlOiB0aGlzLmNvbXBvbmVudC5pc1NlcnZpY2UoKSwKKyAgICAgICAgICAgIGludGVyZmFjZVR5cGVzOiB0aGlzLmludGVyZmFjZVR5cGVzLAorICAgICAgICAgICAgdmFsaWRpdHlDaGFuZ2VkQ2FsbGJhY2s6IHRoaXMuZW5hYmxlT3JEaXNhYmxlU2F2ZUJ1dHRvbgorICAgICAgICB9OwogCi0gICAgICAgIHRoaXMuTW9kYWxTZXJ2aWNlTmcyLmFkZER5bmFtaWNDb250ZW50VG9Nb2RhbCgKLSAgICAgICAgICAgIHRoaXMubW9kYWxJbnN0YW5jZSwKLSAgICAgICAgICAgIE9wZXJhdGlvbkNyZWF0b3JDb21wb25lbnQsCi0gICAgICAgICAgICBpbnB1dCwKLSAgICAgICAgKTsKKyAgICAgICAgY29uc3QgbW9kYWxDb25maWc6IElNb2RhbENvbmZpZyA9IHsKKyAgICAgICAgICAgIHRpdGxlOiBtb2RhbERhdGEubW9kYWxUaXRsZSwKKyAgICAgICAgICAgIHNpemU6ICdsJywKKyAgICAgICAgICAgIHR5cGU6ICdjdXN0b20nLAorICAgICAgICAgICAgYnV0dG9uczogW3NhdmVCdXR0b24sIGNhbmNlbEJ1dHRvbl0gYXMgSU1vZGFsQnV0dG9uQ29tcG9uZW50W10KKyAgICAgICAgfTsKIAotICAgICAgICB0aGlzLm1vZGFsSW5zdGFuY2UuaW5zdGFuY2Uub3BlbigpOworICAgICAgICB0aGlzLk1vZGFsU2VydmljZVNkY1VJLm9wZW5DdXN0b21Nb2RhbChtb2RhbENvbmZpZywgT3BlcmF0aW9uQ3JlYXRvckNvbXBvbmVudCwgaW5wdXQpOworCisgICAgfQorCisgICAgcHJpdmF0ZSBlbmFibGVPckRpc2FibGVTYXZlQnV0dG9uID0gKHNob3VsZEVuYWJsZTogYm9vbGVhbik6IHZvaWQgPT4geworICAgICAgICBsZXQgc2F2ZUJ1dHRvbjogTW9kYWxCdXR0b25Db21wb25lbnQgPSB0aGlzLk1vZGFsU2VydmljZVNkY1VJLmdldEN1cnJlbnRJbnN0YW5jZSgpLmdldEJ1dHRvbkJ5SWQoJ3NhdmVCdXR0b24nKTsKKyAgICAgICAgc2F2ZUJ1dHRvbi5kaXNhYmxlZCA9ICFzaG91bGRFbmFibGU7CiAgICAgfQogCiAgICAgb25SZW1vdmVPcGVyYXRpb24gPSAoZXZlbnQ6IEV2ZW50LCBvcGVyYXRpb246IE9wZXJhdGlvbk1vZGVsKTogdm9pZCA9PiB7CiAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogCiAgICAgICAgIGNvbnN0IGNvbmZpcm1DYWxsYmFjayA9ICgpID0+IHsKLSAgICAgICAgICAgIHRoaXMuTW9kYWxTZXJ2aWNlTmcyLmNsb3NlQ3VycmVudE1vZGFsKCk7CiAgICAgICAgICAgICB0aGlzLkNvbXBvbmVudFNlcnZpY2VOZzIKICAgICAgICAgICAgICAgICAuZGVsZXRlSW50ZXJmYWNlT3BlcmF0aW9uKHRoaXMuY29tcG9uZW50LCBvcGVyYXRpb24pCiAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gXy5maW5kSW5kZXgodGhpcy5vcGVyYXRpb25MaXN0LCBlbCA9PiBlbC51bmlxdWVJZCA9PT0gb3BlcmF0aW9uLnVuaXF1ZUlkKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRpb25MaXN0LnNwbGljZShpbmRleCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmludGVyZmFjZU9wZXJhdGlvbnMgPSB0aGlzLm9wZXJhdGlvbkxpc3Q7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1ckludGVyZiA9IF8uZmluZCh0aGlzLmludGVyZmFjZXMsIGludGVyZiA9PiBpbnRlcmYudHlwZSA9PT0gb3BlcmF0aW9uLmludGVyZmFjZVR5cGUpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IF8uZmluZEluZGV4KGN1ckludGVyZi5vcGVyYXRpb25zLCBlbCA9PiBlbC51bmlxdWVJZCA9PT0gb3BlcmF0aW9uLnVuaXF1ZUlkKTsKKyAgICAgICAgICAgICAgICAgICAgY3VySW50ZXJmLm9wZXJhdGlvbnMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJJbnRlcmYub3BlcmF0aW9ucy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVyZkluZGV4ID0gXy5maW5kSW5kZXgodGhpcy5pbnRlcmZhY2VzLCBpbnRlcmYgPT4gaW50ZXJmLnR5cGUgPT09IG9wZXJhdGlvbi5pbnRlcmZhY2VUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJmYWNlcy5zcGxpY2UoaW50ZXJmSW5kZXgsIDEpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLm1vZGFsSW5zdGFuY2UgPSB0aGlzLk1vZGFsU2VydmljZU5nMi5jcmVhdGVBY3Rpb25Nb2RhbCgKLSAgICAgICAgICAgIG9wZXJhdGlvbi5vcGVyYXRpb25UeXBlLAotICAgICAgICAgICAgJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBvcGVyYXRpb24/JywKLSAgICAgICAgICAgICdEZWxldGUnLAorICAgICAgICB0aGlzLk1vZGFsU2VydmljZVNkY1VJLm9wZW5BbGVydE1vZGFsKAorICAgICAgICAgICAgdGhpcy5tb2RhbFRyYW5zbGF0aW9uLkRFTEVURV9USVRMRSwKKyAgICAgICAgICAgIHRoaXMubW9kYWxUcmFuc2xhdGlvbi5kZWxldGVUZXh0KG9wZXJhdGlvbi5uYW1lKSwKKyAgICAgICAgICAgIHRoaXMubW9kYWxUcmFuc2xhdGlvbi5ERUxFVEVfQlVUVE9OLAogICAgICAgICAgICAgY29uZmlybUNhbGxiYWNrLAotICAgICAgICAgICAgJ0NhbmNlbCcsCisgICAgICAgICAgICAnZGVsZXRlT3BlcmF0aW9uTW9kYWwnCiAgICAgICAgICk7Ci0KLSAgICAgICAgdGhpcy5tb2RhbEluc3RhbmNlLmluc3RhbmNlLm9wZW4oKTsKICAgICB9CiAKICAgICBwcml2YXRlIGNyZWF0ZU9wZXJhdGlvbiA9IChvcGVyYXRpb246IE9wZXJhdGlvbk1vZGVsKTogdm9pZCA9PiB7CiAgICAgICAgIHRoaXMuQ29tcG9uZW50U2VydmljZU5nMi5jcmVhdGVJbnRlcmZhY2VPcGVyYXRpb24odGhpcy5jb21wb25lbnQsIG9wZXJhdGlvbikuc3Vic2NyaWJlKChyZXNwb25zZTogQ3JlYXRlT3BlcmF0aW9uUmVzcG9uc2UpID0+IHsKICAgICAgICAgICAgIHRoaXMub3Blbk9wZXJhdGlvbiA9IG51bGw7Ci0gICAgICAgICAgICB0aGlzLm9wZXJhdGlvbkxpc3QucHVzaChuZXcgT3BlcmF0aW9uTW9kZWwocmVzcG9uc2UpKTsKLSAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uTGlzdC5zb3J0KChhLCBiKSA9PiBhLm9wZXJhdGlvblR5cGUubG9jYWxlQ29tcGFyZShiLm9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgIGxldCBjdXJJbnRlcmYgPSBfLmZpbmQoCisgICAgICAgICAgICAgICAgdGhpcy5pbnRlcmZhY2VzLAorICAgICAgICAgICAgICAgIGludGVyZiA9PiBpbnRlcmYudHlwZSA9PT0gb3BlcmF0aW9uLmludGVyZmFjZVR5cGUKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIGlmICghY3VySW50ZXJmKSB7CisgICAgICAgICAgICAgICAgY3VySW50ZXJmID0gbmV3IFVJSW50ZXJmYWNlTW9kZWwoeworICAgICAgICAgICAgICAgICAgICB0eXBlOiByZXNwb25zZS5pbnRlcmZhY2VUeXBlLAorICAgICAgICAgICAgICAgICAgICB1bmlxdWVJZDogcmVzcG9uc2UudW5pcXVlSWQsCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnM6IFtdCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgdGhpcy5pbnRlcmZhY2VzLnB1c2goY3VySW50ZXJmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1ckludGVyZi5vcGVyYXRpb25zLnB1c2gobmV3IFVJT3BlcmF0aW9uTW9kZWwocmVzcG9uc2UpKTsKKyAgICAgICAgICAgIHRoaXMuc29ydEludGVyZmFjZXMoKTsKIAogICAgICAgICAgICAgaWYgKHJlc3BvbnNlLndvcmtmbG93SWQgJiYgb3BlcmF0aW9uLndvcmtmbG93QXNzb2NpYXRpb25UeXBlID09PSBXT1JLRkxPV19BU1NPQ0lBVElPTl9PUFRJT05TLkVYSVNUSU5HKSB7Ci0gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW9uSWQgPSByZXNwb25zZS51bmlxdWVJZDsKLSAgICAgICAgICAgICAgICBjb25zdCB3b3JrZmxvd0lkID0gcmVzcG9uc2Uud29ya2Zsb3dJZDsKLSAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uSWQgPSByZXNwb25zZS53b3JrZmxvd1ZlcnNpb25JZDsKLSAgICAgICAgICAgICAgICBjb25zdCBhcnRpZmFjdElkID0gcmVzcG9uc2UuYXJ0aWZhY3RVVUlEOwotICAgICAgICAgICAgICAgIHRoaXMuV29ya2Zsb3dTZXJ2aWNlTmcyLmFzc29jaWF0ZVdvcmtmbG93QXJ0aWZhY3QodGhpcy5jb21wb25lbnQsIG9wZXJhdGlvbklkLCB3b3JrZmxvd0lkLCB2ZXJzaW9uSWQsIGFydGlmYWN0SWQpLnN1YnNjcmliZSgpOworICAgICAgICAgICAgICAgIHRoaXMuV29ya2Zsb3dTZXJ2aWNlTmcyLmFzc29jaWF0ZVdvcmtmbG93QXJ0aWZhY3QodGhpcy5jb21wb25lbnQsIHJlc3BvbnNlKS5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uLndvcmtmbG93QXNzb2NpYXRpb25UeXBlID09PSBXT1JLRkxPV19BU1NPQ0lBVElPTl9PUFRJT05TLk5FVykgewogICAgICAgICAgICAgICAgIHRoaXMuJHN0YXRlLmdvKCd3b3Jrc3BhY2UucGx1Z2lucycsIHsgcGF0aDogJ3dvcmtmbG93RGVzaWduZXInIH0pOwogICAgICAgICAgICAgfQpAQCAtMTg4LDE2ICszMTksMjIgQEAKICAgICBwcml2YXRlIHVwZGF0ZU9wZXJhdGlvbiA9IChvcGVyYXRpb246IE9wZXJhdGlvbk1vZGVsKTogdm9pZCA9PiB7CiAgICAgICAgIHRoaXMuQ29tcG9uZW50U2VydmljZU5nMi51cGRhdGVJbnRlcmZhY2VPcGVyYXRpb24odGhpcy5jb21wb25lbnQsIG9wZXJhdGlvbikuc3Vic2NyaWJlKG5ld09wZXJhdGlvbiA9PiB7CiAgICAgICAgICAgICB0aGlzLm9wZW5PcGVyYXRpb24gPSBudWxsOwotICAgICAgICAgICAgY29uc3QgaW5kZXggPSBfLmZpbmRJbmRleCh0aGlzLm9wZXJhdGlvbkxpc3QsIGVsID0+IGVsLnVuaXF1ZUlkID09PSBvcGVyYXRpb24udW5pcXVlSWQpOwotICAgICAgICAgICAgdGhpcy5vcGVyYXRpb25MaXN0LnNwbGljZShpbmRleCwgMSwgbmV3T3BlcmF0aW9uKTsKLSAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmludGVyZmFjZU9wZXJhdGlvbnMgPSB0aGlzLm9wZXJhdGlvbkxpc3Q7CisKKyAgICAgICAgICAgIF8uZm9yRWFjaCh0aGlzLmludGVyZmFjZXMsIGludGVyZiA9PiB7CisgICAgICAgICAgICAgICAgXy5mb3JFYWNoKGludGVyZi5vcGVyYXRpb25zLCBvcCA9PiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChvcC51bmlxdWVJZCA9PT0gbmV3T3BlcmF0aW9uLnVuaXF1ZUlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRJbmRleCA9IF8uZmluZEluZGV4KGludGVyZi5vcGVyYXRpb25zLCBlbCA9PiBlbC51bmlxdWVJZCA9PT0gb3AudW5pcXVlSWQpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmLm9wZXJhdGlvbnMuc3BsaWNlKG9sZEluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgY29uc3QgbmV3SW50ZXJmID0gXy5maW5kKHRoaXMuaW50ZXJmYWNlcywgaW50ZXJmID0+IGludGVyZi50eXBlID09PSBvcGVyYXRpb24uaW50ZXJmYWNlVHlwZSk7CisgICAgICAgICAgICBuZXdJbnRlcmYub3BlcmF0aW9ucy5wdXNoKG5ldyBVSU9wZXJhdGlvbk1vZGVsKG5ld09wZXJhdGlvbikpOworICAgICAgICAgICAgdGhpcy5zb3J0SW50ZXJmYWNlcygpOwogCiAgICAgICAgICAgICBpZiAobmV3T3BlcmF0aW9uLndvcmtmbG93SWQgJiYgb3BlcmF0aW9uLndvcmtmbG93QXNzb2NpYXRpb25UeXBlID09PSBXT1JLRkxPV19BU1NPQ0lBVElPTl9PUFRJT05TLkVYSVNUSU5HKSB7Ci0gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBuZXdPcGVyYXRpb24udW5pcXVlSWQ7Ci0gICAgICAgICAgICAgICAgY29uc3Qgd29ya2Zsb3dJZCA9IG5ld09wZXJhdGlvbi53b3JrZmxvd0lkOwotICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb25JZCA9IG5ld09wZXJhdGlvbi53b3JrZmxvd1ZlcnNpb25JZDsKLSAgICAgICAgICAgICAgICBjb25zdCBhcnRpZmFjdElkID0gbmV3T3BlcmF0aW9uLmFydGlmYWN0VVVJRDsKLSAgICAgICAgICAgICAgICB0aGlzLldvcmtmbG93U2VydmljZU5nMi5hc3NvY2lhdGVXb3JrZmxvd0FydGlmYWN0KHRoaXMuY29tcG9uZW50LCBvcGVyYXRpb25JZCwgd29ya2Zsb3dJZCwgdmVyc2lvbklkLCBhcnRpZmFjdElkKS5zdWJzY3JpYmUoKTsKKyAgICAgICAgICAgICAgICB0aGlzLldvcmtmbG93U2VydmljZU5nMi5hc3NvY2lhdGVXb3JrZmxvd0FydGlmYWN0KHRoaXMuY29tcG9uZW50LCBuZXdPcGVyYXRpb24pLnN1YnNjcmliZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAgICB9CmRpZmYgLS1naXQgYS9jYXRhbG9nLXVpL3NyYy9hcHAvbmcyL3BhZ2VzL2ludGVyZmFjZS1vcGVyYXRpb24vb3BlcmF0aW9uLWNyZWF0b3Ivb3BlcmF0aW9uLWNyZWF0b3IuY29tcG9uZW50Lmh0bWwgYi9jYXRhbG9nLXVpL3NyYy9hcHAvbmcyL3BhZ2VzL2ludGVyZmFjZS1vcGVyYXRpb24vb3BlcmF0aW9uLWNyZWF0b3Ivb3BlcmF0aW9uLWNyZWF0b3IuY29tcG9uZW50Lmh0bWwKaW5kZXggNDQxODc1Yi4uODFhMzNjNCAxMDA2NDQKLS0tIGEvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL29wZXJhdGlvbi1jcmVhdG9yL29wZXJhdGlvbi1jcmVhdG9yLmNvbXBvbmVudC5odG1sCisrKyBiL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9vcGVyYXRpb24tY3JlYXRvci9vcGVyYXRpb24tY3JlYXRvci5jb21wb25lbnQuaHRtbApAQCAtMjAsNjYgKzIwLDkyIEBACiAgICAgPGZvcm0gY2xhc3M9Inctc2RjLWZvcm0iPgogCiAgICAgICAgIDxkaXYgY2xhc3M9InNpZGUtYnktc2lkZSI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJpLXNkYy1mb3JtLWl0ZW0iPgotICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iaS1zZGMtZm9ybS1sYWJlbCIgW25nQ2xhc3NdPSJ7J3JlcXVpcmVkJzogIWlzRWRpdE1vZGV9Ij57eyAnT1BFUkFUSU9OX05BTUUnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD4KLSAgICAgICAgICAgICAgICA8aW5wdXQKLSAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKLSAgICAgICAgICAgICAgICAgICAgbmFtZT0idHlwZSIKLSAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0cy1pZD0ib3BlcmF0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09Im9wZXJhdGlvbi5vcGVyYXRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICBbYXR0ci5tYXhMZW5ndGhdPSIyMDAiCi0gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT0ieydkaXNhYmxlZCc6aXNFZGl0TW9kZX0iIC8+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0iPgorICAgICAgICAgICAgICAgIDxzZGMtZHJvcGRvd24KKyAgICAgICAgICAgICAgICAgICAgbGFiZWw9Int7ICdPUEVSQVRJT05fSU5URVJGQUNFX1RZUEUnIHwgdHJhbnNsYXRlIH19IgorICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPSJ0cnVlIgorICAgICAgICAgICAgICAgICAgICB0ZXN0SWQ9ImludGVyZmFjZS1uYW1lIgorICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE9wdGlvbj0ie3tvcGVyYXRpb24uaW50ZXJmYWNlVHlwZX19IgorICAgICAgICAgICAgICAgICAgICBwbGFjZUhvbGRlcj0iU2VsZWN0Li4uIgorICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJyZWFkb25seSIKKyAgICAgICAgICAgICAgICAgICAgKGNoYW5nZWQpPSJvblNlbGVjdEludGVyZmFjZSgkZXZlbnQpIgorICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109ImludGVyZmFjZU5hbWVzIj4KKyAgICAgICAgICAgICAgICA8L3NkYy1kcm9wZG93bj4KICAgICAgICAgICAgIDwvZGl2PgogCi0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJpLXNkYy1mb3JtLWl0ZW0iPgotICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iaS1zZGMtZm9ybS1sYWJlbCI+e3sgJ09QRVJBVElPTl9ERVNDUklQVElPTicgfCB0cmFuc2xhdGUgfX08L2xhYmVsPgotICAgICAgICAgICAgICAgIDxpbnB1dAotICAgICAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgotICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RzLWlkPSJvcGVyYXRpb25EZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT0ieydkaXNhYmxlZCc6IHJlYWRvbmx5fSIKLSAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09Im9wZXJhdGlvbi5kZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgW2F0dHIubWF4TGVuZ3RoXT0iMjAwIiAvPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIiAqbmdJZj0iIWlzSW50ZXJmYWNlT3RoZXIoKSI+CisgICAgICAgICAgICAgICAgPHNkYy1kcm9wZG93bgorICAgICAgICAgICAgICAgICAgICBsYWJlbD0ie3sgJ09QRVJBVElPTl9OQU1FJyB8IHRyYW5zbGF0ZSB9fSIKKyAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgdGVzdElkPSJvcGVyYXRpb24tbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb249Int7b3BlcmF0aW9uLm5hbWV9fSIKKyAgICAgICAgICAgICAgICAgICAgcGxhY2VIb2xkZXI9IlNlbGVjdC4uLiIKKyAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0icmVhZG9ubHkiCisgICAgICAgICAgICAgICAgICAgIChjaGFuZ2VkKT0ib25TZWxlY3RPcGVyYXRpb25OYW1lKCRldmVudCkiCisgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT0ib3BlcmF0aW9uTmFtZXMiPgorICAgICAgICAgICAgICAgIDwvc2RjLWRyb3Bkb3duPgogICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0iICpuZ0lmPSJpc0ludGVyZmFjZU90aGVyKCkiPgorICAgICAgICAgICAgICAgIDxzZGMtaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgbGFiZWw9Int7ICdPUEVSQVRJT05fTkFNRScgfCB0cmFuc2xhdGUgfX0iCisgICAgICAgICAgICAgICAgICAgIFsodmFsdWUpXT0ib3BlcmF0aW9uLm5hbWUiCisgICAgICAgICAgICAgICAgICAgIHRlc3RJZD0ib3BlcmF0aW9uTmFtZSI+CisgICAgICAgICAgICAgICAgPC9zZGMtaW5wdXQ+CisgICAgICAgICAgICA8L2Rpdj4KKwogICAgICAgICA8L2Rpdj4KIAotICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlLWJ5LXNpZGUgYXNzb2NpYXRpb24tb3B0aW9ucyI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJpLXNkYy1mb3JtLWl0ZW0iICpuZ0lmPSJlbmFibGVXb3JrZmxvd0Fzc29jaWF0aW9uIj4KLSAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Imktc2RjLWZvcm0tbGFiZWwiPnt7ICdPUEVSQVRJT05fV09SS0ZMT1dfQVNTSUdOTUVOVCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsPgotICAgICAgICAgICAgICAgIDx1aS1lbGVtZW50LWRyb3Bkb3duCi0gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdHMtaWQ9ImFzc29jaWF0aW9uLXR5cGUiCi0gICAgICAgICAgICAgICAgICAgIFsodmFsdWUpXT0ib3BlcmF0aW9uLndvcmtmbG93QXNzb2NpYXRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICBbdmFsdWVzXT0iYXNzb2NpYXRpb25PcHRpb25zIgotICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPSJ0b2dnbGVBc3NvY2lhdGVXb3JrZmxvdygpIgotICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPSJyZWFkb25seSI+Ci0gICAgICAgICAgICAgICAgPC91aS1lbGVtZW50LWRyb3Bkb3duPgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8ZGl2PjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJpLXNkYy1mb3JtLWl0ZW0gc2RjLWlucHV0Ij4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZGMtaW5wdXRfX2xhYmVsIj57eyAnT1BFUkFUSU9OX0RFU0NSSVBUSU9OJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj4KKyAgICAgICAgICAgIDx0ZXh0YXJlYQorICAgICAgICAgICAgICAgIGRhdGEtdGVzdHMtaWQ9Im9wZXJhdGlvbkRlc2NyaXB0aW9uIgorICAgICAgICAgICAgICAgIHJvd3M9IjIiCisgICAgICAgICAgICAgICAgbmFtZT0iZGVzY3JpcHRpb24iCisgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09ImRlc2NyaXB0aW9uVmFsdWUiCisgICAgICAgICAgICAgICAgW25nQ2xhc3NdPSJ7J2Rpc2FibGVkJzogcmVhZG9ubHl9Ij4KKyAgICAgICAgICAgIDwvdGV4dGFyZWE+CiAgICAgICAgIDwvZGl2PgogCi0gICAgICAgIDxkaXYgY2xhc3M9InNpZGUtYnktc2lkZSIgKm5nSWY9ImlzVXNpbmdFeGlzdGluZ1dGKCkiPgotICAgICAgICAgICAgPGRpdiBjbGFzcz0iaS1zZGMtZm9ybS1pdGVtIj4KLSAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Imktc2RjLWZvcm0tbGFiZWwgcmVxdWlyZWQiPnt7ICdPUEVSQVRJT05fV09SS0ZMT1cnIHwgdHJhbnNsYXRlIH19CisgICAgICAgIDxkaXYgY2xhc3M9InNpZGUtYnktc2lkZSIgKm5nSWY9ImVuYWJsZVdvcmtmbG93QXNzb2NpYXRpb24iPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIj4KKyAgICAgICAgICAgICAgICA8c2RjLWRyb3Bkb3duCisgICAgICAgICAgICAgICAgICAgIGxhYmVsPSJ7eyAnT1BFUkFUSU9OX1dPUktGTE9XX0FTU0lHTk1FTlQnIHwgdHJhbnNsYXRlIH19IgorICAgICAgICAgICAgICAgICAgICBwbGFjZUhvbGRlcj0iU2VsZWN0Li4uIgorICAgICAgICAgICAgICAgICAgICB0ZXN0SWQ9ImFzc29jaWF0aW9uLXR5cGUiCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uPSJ7e3dvcmtmbG93QXNzb2NpYXRpb25UeXBlfX0iCisgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT0iYXNzb2NpYXRpb25PcHRpb25zIgorICAgICAgICAgICAgICAgICAgICAoY2hhbmdlZCk9InRvZ2dsZUFzc29jaWF0ZVdvcmtmbG93KCRldmVudCkiCisgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09InJlYWRvbmx5Ij4KKyAgICAgICAgICAgICAgICA8L3NkYy1kcm9wZG93bj4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0iICpuZ0lmPSIhaXNVc2luZ0V4aXN0aW5nV0YoKSI+PC9kaXY+CisKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taXRlbSBzZGMtaW5wdXQiICpuZ0lmPSJpc1VzaW5nRXhpc3RpbmdXRigpIj4KKyAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InNkYy1pbnB1dF9fbGFiZWwgcmVxdWlyZWQiPnt7ICdPUEVSQVRJT05fV09SS0ZMT1cnIHwgdHJhbnNsYXRlIH19CiAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhcmNoaXZlLXdhcm5pbmciICpuZ0lmPSJhcmNoaXZlZFdvcmtmbG93SWQgPT09IG9wZXJhdGlvbi53b3JrZmxvd0lkIj4oe3sgJ09QRVJBVElPTl9XT1JLRkxPV19BUkNISVZFRCcgfCB0cmFuc2xhdGUgfX0pPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibm8td29ya2Zsb3ctd2FybmluZyIgKm5nSWY9IiF3b3JrZmxvd3MubGVuZ3RoIj57eyAnT1BFUkFUSU9OX05PX1dPUktGTE9XX0VSUk9SJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICA8L2xhYmVsPgotICAgICAgICAgICAgICAgIDx1aS1lbGVtZW50LWRyb3Bkb3duCi0gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdHMtaWQ9ImFzc29jaWF0ZWQtd29ya2Zsb3ciCi0gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09InJlYWRvbmx5IgotICAgICAgICAgICAgICAgICAgICBbdmFsdWVzXT0id29ya2Zsb3dzIgotICAgICAgICAgICAgICAgICAgICBbKHZhbHVlKV09Im9wZXJhdGlvbi53b3JrZmxvd0lkIgotICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPSJvblNlbGVjdFdvcmtmbG93KCkiPgotICAgICAgICAgICAgICAgIDwvdWktZWxlbWVudC1kcm9wZG93bj4KKyAgICAgICAgICAgICAgICA8c2RjLWRyb3Bkb3duCisgICAgICAgICAgICAgICAgICAgIHBsYWNlSG9sZGVyPSJTZWxlY3QuLi4iCisgICAgICAgICAgICAgICAgICAgIHRlc3RJZD0iYXNzb2NpYXRlZC13b3JrZmxvdyIKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb249Int7b3BlcmF0aW9uLndvcmtmbG93SWR9fSIKKyAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPSJ3b3JrZmxvd3MiCisgICAgICAgICAgICAgICAgICAgIChjaGFuZ2VkKT0ib25TZWxlY3RXb3JrZmxvdygkZXZlbnQpIgorICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJyZWFkb25seSB8fCAhd29ya2Zsb3dzLmxlbmd0aCI+CisgICAgICAgICAgICAgICAgPC9zZGMtZHJvcGRvd24+CiAgICAgICAgICAgICA8L2Rpdj4KIAotICAgICAgICAgICAgPGRpdiBjbGFzcz0iaS1zZGMtZm9ybS1pdGVtIj4KLSAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Imktc2RjLWZvcm0tbGFiZWwgcmVxdWlyZWQiPnt7ICdPUEVSQVRJT05fV09SS0ZMT1dfVkVSU0lPTicgfCB0cmFuc2xhdGUgfX08L2xhYmVsPgotICAgICAgICAgICAgICAgIDx1aS1lbGVtZW50LWRyb3Bkb3duCi0gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdHMtaWQ9ImFzc29jaWF0ZWQtd29ya2Zsb3ctdmVyc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIW9wZXJhdGlvbi53b3JrZmxvd0lkIHx8IGFyY2hpdmVkV29ya2Zsb3dJZCA9PT0gb3BlcmF0aW9uLndvcmtmbG93SWQgfHwgcmVhZG9ubHkiCi0gICAgICAgICAgICAgICAgICAgIFt2YWx1ZXNdPSJ3b3JrZmxvd1ZlcnNpb25zIgotICAgICAgICAgICAgICAgICAgICBbKHZhbHVlKV09Im9wZXJhdGlvbi53b3JrZmxvd1ZlcnNpb25JZCIKLSAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT0iY2hhbmdlV29ya2Zsb3dWZXJzaW9uKCkiPgotICAgICAgICAgICAgICAgIDwvdWktZWxlbWVudC1kcm9wZG93bj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taXRlbSBzZGMtaW5wdXQiICpuZ0lmPSJpc1VzaW5nRXhpc3RpbmdXRigpIj4KKyAgICAgICAgICAgICAgICA8c2RjLWRyb3Bkb3duCisgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZmxvd3MubGVuZ3RoIgorICAgICAgICAgICAgICAgICAgICBsYWJlbD0ie3sgJ09QRVJBVElPTl9XT1JLRkxPV19WRVJTSU9OJyB8IHRyYW5zbGF0ZSB9fSIKKyAgICAgICAgICAgICAgICAgICAgdGVzdElkPSJhc3NvY2lhdGVkLXdvcmtmbG93LXZlcnNpb24iCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uPSJ7e29wZXJhdGlvbi53b3JrZmxvd1ZlcnNpb25JZH19IgorICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109IndvcmtmbG93VmVyc2lvbnMiCisgICAgICAgICAgICAgICAgICAgIChjaGFuZ2VkKT0iY2hhbmdlV29ya2Zsb3dWZXJzaW9uKCRldmVudCkiCisgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09IiFvcGVyYXRpb24ud29ya2Zsb3dJZCB8fCBhcmNoaXZlZFdvcmtmbG93SWQgPT09IG9wZXJhdGlvbi53b3JrZmxvd0lkIHx8IHJlYWRvbmx5Ij4KKyAgICAgICAgICAgICAgICA8L3NkYy1kcm9wZG93bj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICA8L2Rpdj4KIApAQCAtOTMsNyArMTE5LDcgQEAKICAgICAgICAgICAgICAgICAqbmdJZj0iIWlzVXNpbmdFeGlzdGluZ1dGKCkgJiYgIXJlYWRvbmx5IgogICAgICAgICAgICAgICAgIGRhdGEtdGVzdHMtaWQ9ImFkZElucHV0UGFyYW1ldGVyIgogICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT0ieydkaXNhYmxlZCc6IWNhbkFkZCgpfSIKLSAgICAgICAgICAgICAgICAoY2xpY2spPSJhZGRQYXJhbSgpIj57eyAnT1BFUkFUSU9OX0FERF9QQVJBTVMnIHwgdHJhbnNsYXRlIH19PC9hPgorICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFBhcmFtKCkiPnt7IGN1cnJlbnRUYWIgPT09IFRZUEVfSU5QVVQgPyAnQWRkIElucHV0JyA6ICdBZGQgT3V0cHV0JyB9fTwvYT4KICAgICAgICAgPC9kaXY+CiAKICAgICAgICAgPGRpdiBjbGFzcz0iZ2VuZXJpYy10YWJsZSI+CkBAIC0xMjAsNyArMTQ2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJib2xkLW1lc3NhZ2UiPnt7ICdFTVBUWV9QQVJBTV9UQUJMRV9OT19TRUxFQ1RFRF9XT1JLRkxPV18xJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdFTVBUWV9QQVJBTV9UQUJMRV9OT19TRUxFQ1RFRF9XT1JLRkxPV18yJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9IiF3b3JrZmxvd3MubGVuZ3RoIiBbaW5uZXJIVE1MXT0iJ0VNUFRZX1BBUkFNX1RBQkxFX05PX1dPUktGTE9XUycgfCB0cmFuc2xhdGUiPjwvZGl2PgogICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPC9kaXY+CiAKQEAgLTEzMiw3ICsxNTcsOCBAQAogICAgICAgICAgICAgICAgIFtwYXJhbV09InBhcmFtIgogICAgICAgICAgICAgICAgIFtpbnB1dFByb3BzXT0iaW5wdXRQcm9wZXJ0aWVzIgogICAgICAgICAgICAgICAgIFtvblJlbW92ZVBhcmFtXT0ib25SZW1vdmVQYXJhbSIKLSAgICAgICAgICAgICAgICBbcmVhZG9ubHldPSJyZWFkb25seSI+CisgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0icmVhZG9ubHkiCisgICAgICAgICAgICAgICAgW3ZhbGlkaXR5Q2hhbmdlZF09InZhbGlkaXR5Q2hhbmdlZCI+CiAgICAgICAgICAgICA8L3BhcmFtLXJvdz4KICAgICAgICAgPC9kaXY+CiAKZGlmZiAtLWdpdCBhL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9vcGVyYXRpb24tY3JlYXRvci9vcGVyYXRpb24tY3JlYXRvci5jb21wb25lbnQubGVzcyBiL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9vcGVyYXRpb24tY3JlYXRvci9vcGVyYXRpb24tY3JlYXRvci5jb21wb25lbnQubGVzcwppbmRleCAxMDk3NmVmLi4xZDY1ZDk4IDEwMDY0NAotLS0gYS9jYXRhbG9nLXVpL3NyYy9hcHAvbmcyL3BhZ2VzL2ludGVyZmFjZS1vcGVyYXRpb24vb3BlcmF0aW9uLWNyZWF0b3Ivb3BlcmF0aW9uLWNyZWF0b3IuY29tcG9uZW50Lmxlc3MKKysrIGIvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL29wZXJhdGlvbi1jcmVhdG9yL29wZXJhdGlvbi1jcmVhdG9yLmNvbXBvbmVudC5sZXNzCkBAIC0xLDQgKzEsNSBAQAogQGltcG9ydCAnLi4vLi4vLi4vLi4vLi4vYXNzZXRzL3N0eWxlcy92YXJpYWJsZXMubGVzcyc7CitAaW1wb3J0ICcuLi8uLi8uLi8uLi8uLi9hc3NldHMvc3R5bGVzL292ZXJyaWRlLmxlc3MnOwogCiAub3BlcmF0aW9uLWNyZWF0b3IgewogICAgIGZvbnQtZmFtaWx5OiBAZm9udC1vcGVuc2Fucy1yZWd1bGFyOwpAQCAtMTAsMzIgKzExLDY2IEBACiAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICB9CiAKLSAgICAudy1zZGMtZm9ybSAuaS1zZGMtZm9ybS1pdGVtIHsKKyAgICAudy1zZGMtZm9ybSAuZm9ybS1pdGVtIHsKICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICB9CiAKKyAgICB0ZXh0YXJlYSB7CisgICAgICAgIG1pbi1oZWlnaHQ6IDc0cHg7CisgICAgICAgIG1hcmdpbi1ib3R0b206IDE4cHg7CisgICAgfQorCisgICAgL2RlZXAvIC5zZGMtZHJvcGRvd25fX2NvbXBvbmVudC1jb250YWluZXIgeworICAgICAgICAuc2RjLWRyb3Bkb3duX19oZWFkZXIgeworICAgICAgICAgICAgaGVpZ2h0OiAzOHB4OworICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDM1cHg7CisKKyAgICAgICAgICAgIHN2Zy1pY29uIHsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDEzcHggNnB4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgL2RlZXAvIC5zZGMtaW5wdXQgeworICAgICAgICBtYXJnaW4tYm90dG9tOiAwOworCisgICAgICAgIC5zZGMtaW5wdXRfX2lucHV0IHsKKyAgICAgICAgICAgIGhlaWdodDogMzhweDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC5zaWRlLWJ5LXNpZGUgewogICAgICAgICBkaXNwbGF5OiBmbGV4OwogCi0gICAgICAgICYuYXNzb2NpYXRpb24tb3B0aW9ucyB7Ci0gICAgICAgICAgICBtYXJnaW4tdG9wOiA1cHg7Ci0gICAgICAgIH0KLQotICAgICAgICAuaS1zZGMtZm9ybS1pdGVtIHsKLSAgICAgICAgICAgIGZsZXgtYmFzaXM6IDEwMCU7CisgICAgICAgIC5mb3JtLWl0ZW0geworICAgICAgICAgICAgZmxleDogMTsKIAogICAgICAgICAgICAgJjpmaXJzdC1jaGlsZCB7Ci0gICAgICAgICAgICAgICAgZmxleC1iYXNpczogNDAlOwotICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKKyAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDE0cHg7CisgICAgICAgICAgICAgICAgZmxleC1iYXNpczogMzclOworICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMDsKKyAgICAgICAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLmFyY2hpdmUtd2FybmluZyB7Ci0gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IEBmb250LW9wZW5zYW5zLWJvbGQ7Ci0gICAgICAgICAgICAgICAgY29sb3I6IEBtYWluX2NvbG9yX2k7CisgICAgICAgICAgICAmOm50aC1jaGlsZCgzKSB7CisgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDE0cHg7CisgICAgICAgICAgICAgICAgZmxleDogMC40OwogICAgICAgICAgICAgfQorCiAgICAgICAgIH0KICAgICB9CiAKKyAgICAuYXJjaGl2ZS13YXJuaW5nIHsKKyAgICAgICAgZm9udC1mYW1pbHk6IEBmb250LW9wZW5zYW5zLWJvbGQ7CisgICAgICAgIGNvbG9yOiBAbWFpbl9jb2xvcl9pOworICAgIH0KKworICAgIC5uby13b3JrZmxvdy13YXJuaW5nIHsKKyAgICAgICAgZm9udC1mYW1pbHk6IEBmb250LW9wZW5zYW5zLWJvbGQ7CisgICAgICAgIGNvbG9yOiBAc2RjdWlfY29sb3JfcmVkOworICAgICAgICBmbG9hdDogcmlnaHQ7CisgICAgfQorCiAgICAgLmlucHV0LXBhcmFtLXRpdGxlIHsKICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwpAQCAtNTEsMjQgKzg2LDMzIEBACiAgICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgLnRhYiB7CisgICAgICAgICAgICB3aWR0aDogODRweDsKKyAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC5nZW5lcmljLXRhYmxlIHsKLSAgICAgICAgbWF4LWhlaWdodDogMjMzcHg7CisgICAgICAgIG1heC1oZWlnaHQ6IDI0NHB4OwogICAgICAgICBtaW4taGVpZ2h0OiA5MXB4OwogICAgICAgICBiYWNrZ3JvdW5kOiBAbWFpbl9jb2xvcl9wOwogCiAgICAgICAgIC5oZWFkZXItcm93IC5oZWFkZXItY2VsbCB7Ci0gICAgICAgICAgICAmLnJlbW92ZSB7Ci0gICAgICAgICAgICAgICAgcGFkZGluZzogOHB4OwotICAgICAgICAgICAgfQogICAgICAgICAgICAgLmluZm8taWNvbiB7CiAgICAgICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0OworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAgICAgICAgICAgICB0b3A6IDJweDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC9kZWVwLyAudG9vbHRpcC1pbm5lciB7Ci0gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAyODBweDsKKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAycHg7CisgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAyNzBweDsKICAgICAgICAgICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAmLnJlbW92ZSB7CisgICAgICAgICAgICAgICAgcGFkZGluZzogMTBweDsKKyAgICAgICAgICAgICAgICBmb250LXNpemU6IDEwcHg7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAuZGF0YS1yb3cgewpkaWZmIC0tZ2l0IGEvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL29wZXJhdGlvbi1jcmVhdG9yL29wZXJhdGlvbi1jcmVhdG9yLmNvbXBvbmVudC50cyBiL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9vcGVyYXRpb24tY3JlYXRvci9vcGVyYXRpb24tY3JlYXRvci5jb21wb25lbnQudHMKaW5kZXggYTMwNGYxYS4uZTFiMmI0ZSAxMDA2NDQKLS0tIGEvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL29wZXJhdGlvbi1jcmVhdG9yL29wZXJhdGlvbi1jcmVhdG9yLmNvbXBvbmVudC50cworKysgYi9jYXRhbG9nLXVpL3NyYy9hcHAvbmcyL3BhZ2VzL2ludGVyZmFjZS1vcGVyYXRpb24vb3BlcmF0aW9uLWNyZWF0b3Ivb3BlcmF0aW9uLWNyZWF0b3IuY29tcG9uZW50LnRzCkBAIC03LDE1ICs3LDM3IEBACiBpbXBvcnQge1dvcmtmbG93U2VydmljZU5nMn0gZnJvbSAnYXBwL25nMi9zZXJ2aWNlcy93b3JrZmxvdy5zZXJ2aWNlJzsKIGltcG9ydCB7T3BlcmF0aW9uTW9kZWwsIE9wZXJhdGlvblBhcmFtZXRlciwgSW5wdXRCRU1vZGVsLCBSYWRpb0J1dHRvbk1vZGVsLCBXT1JLRkxPV19BU1NPQ0lBVElPTl9PUFRJT05TfSBmcm9tICdhcHAvbW9kZWxzJzsKIAoraW1wb3J0IHtJRHJvcERvd25PcHRpb259IGZyb20gInNkYy11aS9saWIvYW5ndWxhci9mb3JtLWVsZW1lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLW1vZGVscyI7CiBpbXBvcnQge1RhYnMsIFRhYn0gZnJvbSAiYXBwL25nMi9jb21wb25lbnRzL3VpL3RhYnMvdGFicy5jb21wb25lbnQiOwogaW1wb3J0IHtEcm9wZG93blZhbHVlfSBmcm9tICJhcHAvbmcyL2NvbXBvbmVudHMvdWkvZm9ybS1jb21wb25lbnRzL2Ryb3Bkb3duL3VpLWVsZW1lbnQtZHJvcGRvd24uY29tcG9uZW50IjsKIAorZXhwb3J0IGNsYXNzIERyb3BEb3duT3B0aW9uIGltcGxlbWVudHMgSURyb3BEb3duT3B0aW9uIHsKKyAgICB2YWx1ZTogc3RyaW5nOworICAgIGxhYmVsOiBzdHJpbmc7CisKKyAgICBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nLCBsYWJlbD86IHN0cmluZykgeworICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisgICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbCB8fCB2YWx1ZTsKKyAgICB9Cit9CisKK2NsYXNzIFR5cGVkRHJvcERvd25PcHRpb24gZXh0ZW5kcyBEcm9wRG93bk9wdGlvbiB7CisgICAgdHlwZTogbnVtYmVyOworCisgICAgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIHR5cGU/OiBudW1iZXIpIHsKKyAgICAgICAgc3VwZXIodmFsdWUsIGxhYmVsKTsKKyAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICB9Cit9CisKIGV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0aW9uQ3JlYXRvcklucHV0IHsKLSAgICBvcGVyYXRpb246IE9wZXJhdGlvbk1vZGVsLAorICAgIGlucHV0T3BlcmF0aW9uOiBPcGVyYXRpb25Nb2RlbCwKICAgICBpbnB1dFByb3BlcnRpZXM6IEFycmF5PElucHV0QkVNb2RlbD4sCiAgICAgZW5hYmxlV29ya2Zsb3dBc3NvY2lhdGlvbjogYm9vbGVhbiwKICAgICByZWFkb25seTogYm9vbGVhbiwKLSAgICBpc1NlcnZpY2U6IGJvb2xlYW4KKyAgICBpc1NlcnZpY2U6IGJvb2xlYW4sCisgICAgaW50ZXJmYWNlVHlwZXM6IHsgW2ludGVyZmFjZVR5cGU6IHN0cmluZ106IEFycmF5PHN0cmluZz4gfSwKKyAgICB2YWxpZGl0eUNoYW5nZWRDYWxsYmFjazogRnVuY3Rpb24KIH0KIAogQENvbXBvbmVudCh7CkBAIC0yOCw3ICs1MCwxMiBAQAogZXhwb3J0IGNsYXNzIE9wZXJhdGlvbkNyZWF0b3JDb21wb25lbnQgewogCiAgICAgaW5wdXQ6IE9wZXJhdGlvbkNyZWF0b3JJbnB1dDsKKyAgICBpbnB1dE9wZXJhdGlvbjogT3BlcmF0aW9uTW9kZWw7CiAgICAgb3BlcmF0aW9uOiBPcGVyYXRpb25Nb2RlbDsKKyAgICBpbnRlcmZhY2VOYW1lczogQXJyYXk8VHlwZWREcm9wRG93bk9wdGlvbj4gPSBbXTsKKyAgICBpbnRlcmZhY2VUeXBlczogeyBbaW50ZXJmYWNlVHlwZTogc3RyaW5nXTogQXJyYXk8c3RyaW5nPiB9OworICAgIG9wZXJhdGlvbk5hbWVzOiBBcnJheTxEcm9wRG93bk9wdGlvbj4gPSBbXTsKKyAgICB2YWxpZGl0eUNoYW5nZWRDYWxsYmFjazogRnVuY3Rpb247CiAKICAgICB3b3JrZmxvd3M6IEFycmF5PERyb3Bkb3duVmFsdWU+ID0gW107CiAgICAgd29ya2Zsb3dWZXJzaW9uczogQXJyYXk8RHJvcGRvd25WYWx1ZT4gPSBbXTsKQEAgLTQ1LDcgKzcyLDggQEAKIAogICAgIHRhYmxlUGFyYW1ldGVyczogQXJyYXk8T3BlcmF0aW9uUGFyYW1ldGVyPiA9IFtdOwogCi0gICAgYXNzb2NpYXRpb25PcHRpb25zOiBBcnJheTxEcm9wZG93blZhbHVlPjsKKyAgICBhc3NvY2lhdGlvbk9wdGlvbnM6IEFycmF5PERyb3Bkb3duVmFsdWU+ID0gW107CisgICAgd29ya2Zsb3dBc3NvY2lhdGlvblR5cGU6IHN0cmluZzsKIAogICAgIGVuYWJsZVdvcmtmbG93QXNzb2NpYXRpb246IGJvb2xlYW47CiAgICAgaXNFZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlOwpAQCAtNTcsNiArODUsOSBAQAogICAgIFRZUEVfSU5QVVQgPSAnSW5wdXRzJzsKICAgICBUWVBFX09VVFBVVCA9ICdPdXRwdXRzJzsKIAorICAgIElOVEVSRkFDRV9PVEhFUl9IRUFERVIgPSAnTG9jYWwgSW50ZXJmYWNlcyc7CisgICAgSU5URVJGQUNFX09USEVSID0gJ0xvY2FsJzsKKwogICAgIEBWaWV3Q2hpbGQoJ3Byb3BlcnR5SW5wdXRUYWJzJykgcHJvcGVydHlJbnB1dFRhYnM6IFRhYnM7CiAgICAgY3VycmVudFRhYjogU3RyaW5nOwogCkBAIC02NSwyNCArOTYsNDEgQEAKICAgICAgICAgICAgIHRoaXMucHJvcGVydHlUb29sdGlwVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoIk9QRVJBVElPTl9QUk9QRVJUWV9UT09MVElQX1RFWFQiKTsKIAogICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGlvbk9wdGlvbnMgPSBbCi0gICAgICAgICAgICAgICAgbmV3IERyb3Bkb3duVmFsdWUoV09SS0ZMT1dfQVNTT0NJQVRJT05fT1BUSU9OUy5OT05FLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCJOT19XT1JLRkxPV19BU1NPQ0lBVElPTiIpKSwKLSAgICAgICAgICAgICAgICBuZXcgRHJvcGRvd25WYWx1ZShXT1JLRkxPV19BU1NPQ0lBVElPTl9PUFRJT05TLkVYSVNUSU5HLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCJFWElTVElOR19XT1JLRkxPV19BU1NPQ0lBVElPTiIpKQorICAgICAgICAgICAgICAgIG5ldyBEcm9wRG93bk9wdGlvbihXT1JLRkxPV19BU1NPQ0lBVElPTl9PUFRJT05TLk5PTkUsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoIk5PX1dPUktGTE9XX0FTU09DSUFUSU9OIikpLAorICAgICAgICAgICAgICAgIG5ldyBEcm9wRG93bk9wdGlvbihXT1JLRkxPV19BU1NPQ0lBVElPTl9PUFRJT05TLkVYSVNUSU5HLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCJFWElTVElOR19XT1JLRkxPV19BU1NPQ0lBVElPTiIpKQogICAgICAgICAgICAgXTsKKworICAgICAgICAgICAgdGhpcy53b3JrZmxvd0Fzc29jaWF0aW9uVHlwZSA9IHRoaXMub3BlcmF0aW9uLndvcmtmbG93QXNzb2NpYXRpb25UeXBlIHx8IFdPUktGTE9XX0FTU09DSUFUSU9OX09QVElPTlMuTk9ORTsKICAgICAgICAgfSk7CiAKICAgICAgICAgdGhpcy5jdXJyZW50VGFiID0gdGhpcy5UWVBFX0lOUFVUOwogICAgIH0KIAotICAgIG5nT25Jbml0KCkgewotICAgICAgICB0aGlzLnJlYWRvbmx5ID0gdGhpcy5pbnB1dC5yZWFkb25seTsKLSAgICAgICAgdGhpcy5lbmFibGVXb3JrZmxvd0Fzc29jaWF0aW9uID0gdGhpcy5pbnB1dC5lbmFibGVXb3JrZmxvd0Fzc29jaWF0aW9uOwotICAgICAgICB0aGlzLmlucHV0UHJvcGVydGllcyA9IHRoaXMuaW5wdXQuaW5wdXRQcm9wZXJ0aWVzOwotCi0gICAgICAgIGNvbnN0IGlucHV0T3BlcmF0aW9uID0gdGhpcy5pbnB1dC5vcGVyYXRpb247Ci0gICAgICAgIHRoaXMub3BlcmF0aW9uID0gbmV3IE9wZXJhdGlvbk1vZGVsKGlucHV0T3BlcmF0aW9uIHx8IHt9KTsKLSAgICAgICAgaWYgKCFpbnB1dE9wZXJhdGlvbikgewotICAgICAgICAgICAgdGhpcy5vcGVyYXRpb24ud29ya2Zsb3dBc3NvY2lhdGlvblR5cGUgPSBXT1JLRkxPV19BU1NPQ0lBVElPTl9PUFRJT05TLk5PTkU7CisgICAgY3JlYXRlSW50ZXJmYWNlRHJvcGRvd24odHlwZTogc3RyaW5nKSB7CisgICAgICAgIGxldCBsYWJlbCA9IHR5cGU7CisgICAgICAgIGNvbnN0IGxhc3REb3QgPSBsYWJlbC5sYXN0SW5kZXhPZignLicpOworICAgICAgICBpZiAobGFzdERvdCA+IC0xKSB7CisgICAgICAgICAgICBsYWJlbCA9IGxhYmVsLnN1YnN0cihsYXN0RG90ICsgMSk7CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBUeXBlZERyb3BEb3duT3B0aW9uKHR5cGUsIGxhYmVsKTsKKyAgICB9CisKKyAgICBuZ09uSW5pdCgpIHsKKyAgICAgICAgdGhpcy5pbnRlcmZhY2VOYW1lcyA9IF8ubWFwKAorICAgICAgICAgICAgXy5rZXlzKHRoaXMuaW50ZXJmYWNlVHlwZXMpLAorICAgICAgICAgICAgdHlwZSA9PiB0aGlzLmNyZWF0ZUludGVyZmFjZURyb3Bkb3duKHR5cGUpCisgICAgICAgICk7CisgICAgICAgIHRoaXMuaW50ZXJmYWNlTmFtZXMudW5zaGlmdChuZXcgVHlwZWREcm9wRG93bk9wdGlvbignRXhpc3RpbmcgSW50ZXJmYWNlcycsICdFeGlzdGluZyBJbnRlcmZhY2VzJywgMSkpOworICAgICAgICB0aGlzLmludGVyZmFjZU5hbWVzID0gdGhpcy5pbnRlcmZhY2VOYW1lcy5jb25jYXQoWworICAgICAgICAgICAgbmV3IFR5cGVkRHJvcERvd25PcHRpb24oJyAnLCAnICcsIDMpLAorICAgICAgICAgICAgbmV3IFR5cGVkRHJvcERvd25PcHRpb24odGhpcy5JTlRFUkZBQ0VfT1RIRVJfSEVBREVSLCB0aGlzLklOVEVSRkFDRV9PVEhFUl9IRUFERVIsIDEpLAorICAgICAgICAgICAgbmV3IFR5cGVkRHJvcERvd25PcHRpb24odGhpcy5JTlRFUkZBQ0VfT1RIRVIpCisgICAgICAgIF0pOworCisgICAgICAgIGNvbnN0IGlucHV0T3BlcmF0aW9uID0gdGhpcy5pbnB1dE9wZXJhdGlvbjsKKyAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBuZXcgT3BlcmF0aW9uTW9kZWwoaW5wdXRPcGVyYXRpb24gfHwge30pOworICAgICAgICB0aGlzLm9uU2VsZWN0SW50ZXJmYWNlKG5ldyBEcm9wRG93bk9wdGlvbih0aGlzLm9wZXJhdGlvbi5pbnRlcmZhY2VUeXBlKSk7CisgICAgICAgIHRoaXMudmFsaWRpdHlDaGFuZ2VkKCk7CiAKICAgICAgICAgaWYgKHRoaXMuZW5hYmxlV29ya2Zsb3dBc3NvY2lhdGlvbikgewogICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlOwpAQCAtMTEzLDEzICsxNjEsMTYgQEAKICAgICB9CiAKICAgICByZWNvbnN0cnVjdE9wZXJhdGlvbiA9ICgpID0+IHsKLSAgICAgICAgY29uc3QgaW5wdXRPcGVyYXRpb24gPSB0aGlzLmlucHV0Lm9wZXJhdGlvbjsKKyAgICAgICAgY29uc3QgaW5wdXRPcGVyYXRpb24gPSB0aGlzLmlucHV0T3BlcmF0aW9uOwogICAgICAgICBpZiAoaW5wdXRPcGVyYXRpb24pIHsKICAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVdvcmtmbG93QXNzb2NpYXRpb24gJiYgaW5wdXRPcGVyYXRpb24ud29ya2Zsb3dWZXJzaW9uSWQgJiYgdGhpcy5pc1VzaW5nRXhpc3RpbmdXRihpbnB1dE9wZXJhdGlvbikpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0V29ya2Zsb3coaW5wdXRPcGVyYXRpb24ud29ya2Zsb3dWZXJzaW9uSWQpLmFkZCgoKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRQYXJhbXMoKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUYWJsZSgpOwotICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGNvbnN0IHN1YiA9IHRoaXMub25TZWxlY3RXb3JrZmxvdyhuZXcgRHJvcERvd25PcHRpb24oaW5wdXRPcGVyYXRpb24ud29ya2Zsb3dJZCksIGlucHV0T3BlcmF0aW9uLndvcmtmbG93VmVyc2lvbklkKTsKKyAgICAgICAgICAgICAgICBpZiAoc3ViKSB7CisgICAgICAgICAgICAgICAgICAgIHN1Yi5hZGQoKCkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZFBhcmFtcygpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUYWJsZSgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRQYXJhbWV0ZXJzID0gdGhpcy5ub0Fzc2lnbklucHV0UGFyYW1ldGVyczsKICAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFBhcmFtZXRlcnMgPSB0aGlzLm5vQXNzaWduT3V0cHV0UGFyYW1ldGVyczsKQEAgLTEzMiwxNCArMTgzLDE1IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgdGhpcy51cGRhdGVUYWJsZSgpOworICAgICAgICB0aGlzLnZhbGlkaXR5Q2hhbmdlZCgpOwogICAgIH0KIAogICAgIGJ1aWxkUGFyYW1zID0gKCkgPT4gewotICAgICAgICBpZiAodGhpcy5pbnB1dC5vcGVyYXRpb24ub3V0cHV0UGFyYW1zKSB7CisgICAgICAgIGlmICh0aGlzLmlucHV0T3BlcmF0aW9uLm91dHB1dHMpIHsKICAgICAgICAgICAgIHRoaXMuY3VycmVudFRhYiA9IHRoaXMuVFlQRV9PVVRQVVQ7CiAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7CiAgICAgICAgICAgICBfLmZvckVhY2goCi0gICAgICAgICAgICAgICAgWy4uLnRoaXMuaW5wdXQub3BlcmF0aW9uLm91dHB1dFBhcmFtcy5saXN0VG9zY2FEYXRhRGVmaW5pdGlvbl0uc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSksCisgICAgICAgICAgICAgICAgWy4uLnRoaXMuaW5wdXRPcGVyYXRpb24ub3V0cHV0cy5saXN0VG9zY2FEYXRhRGVmaW5pdGlvbl0uc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSksCiAgICAgICAgICAgICAgICAgKG91dHB1dDogT3BlcmF0aW9uUGFyYW1ldGVyKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkUGFyYW0ob3V0cHV0KTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNDcsOSArMTk5LDkgQEAKICAgICAgICAgfQogICAgICAgICB0aGlzLmN1cnJlbnRUYWIgPSB0aGlzLlRZUEVfSU5QVVQ7CiAgICAgICAgIHRoaXMudXBkYXRlVGFibGUoKTsKLSAgICAgICAgaWYgKHRoaXMuaW5wdXQub3BlcmF0aW9uLmlucHV0UGFyYW1zKSB7CisgICAgICAgIGlmICh0aGlzLmlucHV0T3BlcmF0aW9uLmlucHV0cykgewogICAgICAgICAgICAgXy5mb3JFYWNoKAotICAgICAgICAgICAgICAgIFsuLi50aGlzLmlucHV0Lm9wZXJhdGlvbi5pbnB1dFBhcmFtcy5saXN0VG9zY2FEYXRhRGVmaW5pdGlvbl0uc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSksCisgICAgICAgICAgICAgICAgWy4uLnRoaXMuaW5wdXRPcGVyYXRpb24uaW5wdXRzLmxpc3RUb3NjYURhdGFEZWZpbml0aW9uXS5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKSwKICAgICAgICAgICAgICAgICAoaW5wdXQ6IE9wZXJhdGlvblBhcmFtZXRlcikgPT4gewogICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFBhcmFtKGlucHV0KTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNTcsMTUgKzIwOSw1MyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgb25TZWxlY3RXb3JrZmxvdyhzZWxlY3RlZFZlcnNpb25JZD86IHN0cmluZyk6IFN1YnNjcmlwdGlvbiB7CisgICAgaXNJbnRlcmZhY2VPdGhlcigpOiBib29sZWFuIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uLmludGVyZmFjZVR5cGUgPT09IHRoaXMuSU5URVJGQUNFX09USEVSOworICAgIH0KIAotICAgICAgICB0aGlzLm9wZXJhdGlvbi53b3JrZmxvd1ZlcnNpb25JZCA9IHNlbGVjdGVkVmVyc2lvbklkIHx8IG51bGw7CisgICAgb25TZWxlY3RJbnRlcmZhY2UoaW50ZXJmOiBJRHJvcERvd25PcHRpb24pIHsKKyAgICAgICAgaWYgKGludGVyZiAmJiB0aGlzLm9wZXJhdGlvbi5pbnRlcmZhY2VUeXBlICE9PSBpbnRlcmYudmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uLm5hbWUgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5vcGVyYXRpb24uaW50ZXJmYWNlVHlwZSA9IGludGVyZiAmJiBpbnRlcmYudmFsdWU7CisgICAgICAgIHRoaXMub3BlcmF0aW9uTmFtZXMgPSAhdGhpcy5vcGVyYXRpb24uaW50ZXJmYWNlVHlwZSA/IFtdIDogKAorICAgICAgICAgICAgXy5tYXAoCisgICAgICAgICAgICAgICAgdGhpcy5pbnRlcmZhY2VUeXBlc1t0aGlzLm9wZXJhdGlvbi5pbnRlcmZhY2VUeXBlXSwKKyAgICAgICAgICAgICAgICBuYW1lID0+IG5ldyBEcm9wRG93bk9wdGlvbihuYW1lKQorICAgICAgICAgICAgKQorICAgICAgICApOworICAgICAgICB0aGlzLnZhbGlkaXR5Q2hhbmdlZCgpOworICAgIH0KKworICAgIG9uU2VsZWN0T3BlcmF0aW9uTmFtZShuYW1lOiBJRHJvcERvd25PcHRpb24pIHsKKyAgICAgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uLm5hbWUgPSBuYW1lLnZhbHVlOworICAgICAgICAgICAgdGhpcy52YWxpZGl0eUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdldCBkZXNjcmlwdGlvblZhbHVlKCkgeworICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRpb24uZGVzY3JpcHRpb247CisgICAgfQorCisgICAgc2V0IGRlc2NyaXB0aW9uVmFsdWUodikgeworICAgICAgICB0aGlzLm9wZXJhdGlvbi5kZXNjcmlwdGlvbiA9IHY7CisgICAgICAgIHRoaXMudmFsaWRpdHlDaGFuZ2VkKCk7CisgICAgfQorCisgICAgb25TZWxlY3RXb3JrZmxvdyh3b3JrZmxvd0lkOiBEcm9wRG93bk9wdGlvbiwgc2VsZWN0ZWRWZXJzaW9uSWQ/OiBzdHJpbmcpOiBTdWJzY3JpcHRpb24geworCisgICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHdvcmtmbG93SWQpIHx8IHdvcmtmbG93SWQudmFsdWUgPT09IHRoaXMub3BlcmF0aW9uLndvcmtmbG93SWQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm9wZXJhdGlvbi53b3JrZmxvd0lkID0gd29ya2Zsb3dJZC52YWx1ZTsKICAgICAgICAgaWYgKCF0aGlzLmFzc2lnbklucHV0UGFyYW1ldGVyc1t0aGlzLm9wZXJhdGlvbi53b3JrZmxvd0lkXSkgewogICAgICAgICAgICAgdGhpcy5hc3NpZ25JbnB1dFBhcmFtZXRlcnNbdGhpcy5vcGVyYXRpb24ud29ya2Zsb3dJZF0gPSB7fTsKICAgICAgICAgICAgIHRoaXMuYXNzaWduT3V0cHV0UGFyYW1ldGVyc1t0aGlzLm9wZXJhdGlvbi53b3JrZmxvd0lkXSA9IHt9OwogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlOworICAgICAgICB0aGlzLnZhbGlkaXR5Q2hhbmdlZCgpOwogICAgICAgICByZXR1cm4gdGhpcy53b3JrZmxvd1NlcnZpY2VOZzIuZ2V0V29ya2Zsb3dWZXJzaW9ucyh0aGlzLm9wZXJhdGlvbi53b3JrZmxvd0lkKS5zdWJzY3JpYmUoKHZlcnNpb25zOiBBcnJheTxhbnk+KSA9PiB7CiAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogCkBAIC0xOTcsMTggKzI4NywzNCBAQAogICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uLndvcmtmbG93VmVyc2lvbklkID0gXy5sYXN0KHRoaXMud29ya2Zsb3dWZXJzaW9ucykudmFsdWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHRoaXMuY2hhbmdlV29ya2Zsb3dWZXJzaW9uKCk7CisgICAgICAgICAgICB0aGlzLmNoYW5nZVdvcmtmbG93VmVyc2lvbihuZXcgRHJvcERvd25PcHRpb24odGhpcy5vcGVyYXRpb24ud29ya2Zsb3dWZXJzaW9uSWQpKTsKKyAgICAgICAgICAgIHRoaXMudmFsaWRpdHlDaGFuZ2VkKCk7CiAgICAgICAgIH0pOwogCiAgICAgfQogCi0gICAgY2hhbmdlV29ya2Zsb3dWZXJzaW9uKCkgeworICAgIGNoYW5nZVdvcmtmbG93VmVyc2lvbih2ZXJzaW9uSWQ6IERyb3BEb3duT3B0aW9uKSB7CisKKyAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQodmVyc2lvbklkKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5vcGVyYXRpb24ud29ya2Zsb3dWZXJzaW9uSWQgPSB2ZXJzaW9uSWQudmFsdWU7CiAgICAgICAgIHRoaXMuaW5wdXRQYXJhbWV0ZXJzID0gdGhpcy5hc3NpZ25JbnB1dFBhcmFtZXRlcnNbdGhpcy5vcGVyYXRpb24ud29ya2Zsb3dJZF1bdGhpcy5vcGVyYXRpb24ud29ya2Zsb3dWZXJzaW9uSWRdOwogICAgICAgICB0aGlzLm91dHB1dFBhcmFtZXRlcnMgPSB0aGlzLmFzc2lnbk91dHB1dFBhcmFtZXRlcnNbdGhpcy5vcGVyYXRpb24ud29ya2Zsb3dJZF1bdGhpcy5vcGVyYXRpb24ud29ya2Zsb3dWZXJzaW9uSWRdOwogICAgICAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7CisgICAgICAgIHRoaXMudmFsaWRpdHlDaGFuZ2VkKCk7CisKICAgICB9CiAKLSAgICB0b2dnbGVBc3NvY2lhdGVXb3JrZmxvdygpIHsKKyAgICB0b2dnbGVBc3NvY2lhdGVXb3JrZmxvdyh0eXBlOiBEcm9wRG93bk9wdGlvbikgeworCisgICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHR5cGUpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLm9wZXJhdGlvbi53b3JrZmxvd0Fzc29jaWF0aW9uVHlwZSA9IHR5cGUudmFsdWU7CisgICAgICAgIHRoaXMud29ya2Zsb3dBc3NvY2lhdGlvblR5cGUgPSB0aGlzLm9wZXJhdGlvbi53b3JrZmxvd0Fzc29jaWF0aW9uVHlwZTsKIAogICAgICAgICBpZiAoIXRoaXMuaXNVc2luZ0V4aXN0aW5nV0YoKSkgewogICAgICAgICAgICAgdGhpcy5pbnB1dFBhcmFtZXRlcnMgPSB0aGlzLm5vQXNzaWduSW5wdXRQYXJhbWV0ZXJzOwpAQCAtMjI0LDE1ICszMzAsMTkgQEAKICAgICAgICAgfQogCiAgICAgICAgIHRoaXMudXBkYXRlVGFibGUoKTsKKyAgICAgICAgdGhpcy52YWxpZGl0eUNoYW5nZWQoKTsKIAogICAgIH0KIAogICAgIHRhYkNoYW5nZWQgPSAoZXZlbnQpID0+IHsKKwogICAgICAgICB0aGlzLmN1cnJlbnRUYWIgPSBldmVudC50aXRsZTsKICAgICAgICAgdGhpcy51cGRhdGVUYWJsZSgpOworCiAgICAgfQogCiAgICAgdXBkYXRlVGFibGUoKSB7CisKICAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRUYWIpIHsKICAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFX0lOUFVUOgogICAgICAgICAgICAgICAgIHRoaXMudGFibGVQYXJhbWV0ZXJzID0gdGhpcy5pbnB1dFBhcmFtZXRlcnM7CkBAIC0yNDEsMTcgKzM1MSwyMCBAQAogICAgICAgICAgICAgICAgIHRoaXMudGFibGVQYXJhbWV0ZXJzID0gdGhpcy5vdXRwdXRQYXJhbWV0ZXJzOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKICAgICB9CiAKICAgICBhZGRQYXJhbShwYXJhbT86IE9wZXJhdGlvblBhcmFtZXRlcik6IHZvaWQgeworICAgICAgICB0aGlzLnZhbGlkaXR5Q2hhbmdlZCgpOwogICAgICAgICB0aGlzLnRhYmxlUGFyYW1ldGVycy5wdXNoKG5ldyBPcGVyYXRpb25QYXJhbWV0ZXIocGFyYW0pKTsKICAgICB9CiAKLSAgICBjYW5BZGQoKTogYm9vbGVhbiB7CisgICAgY2FuQWRkID0gKCk6IGJvb2xlYW4gPT4geworCiAgICAgICAgIGxldCB2YWxpZCA9IHRydWU7CiAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUYWIgPT09IHRoaXMuVFlQRV9JTlBVVCkgewogICAgICAgICAgICAgXy5mb3JFYWNoKHRoaXMuaW5wdXRQYXJhbWV0ZXJzLCBwYXJhbSA9PiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJhbS5uYW1lIHx8ICFwYXJhbS5wcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIGlmICghcGFyYW0ubmFtZSB8fCAhcGFyYW0uaW5wdXRJZCkgewogICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwpAQCAtMjYyLDEzICszNzUsMTYgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiB2YWxpZDsKKwogICAgIH0KIAotICAgIGlzUGFyYW1zVmFsaWQoKTogYm9vbGVhbiB7CisgICAgaXNQYXJhbXNWYWxpZCA9ICgpOiBib29sZWFuID0+IHsKKwogICAgICAgICBsZXQgdmFsaWQgPSB0cnVlOwogICAgICAgICBfLmZvckVhY2godGhpcy5pbnB1dFBhcmFtZXRlcnMsIHBhcmFtID0+IHsKLSAgICAgICAgICAgIGlmICghcGFyYW0ubmFtZSB8fCAhcGFyYW0ucHJvcGVydHkpIHsKKyAgICAgICAgICAgIGlmICghcGFyYW0ubmFtZSB8fCAhcGFyYW0uaW5wdXRJZCkgewogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwpAQCAtMjc3LDcgKzM5Myw5IEBACiAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CisKICAgICAgICAgcmV0dXJuIHZhbGlkOworCiAgICAgfQogCiAgICAgb25SZW1vdmVQYXJhbSA9IChwYXJhbTogT3BlcmF0aW9uUGFyYW1ldGVyKTogdm9pZCA9PiB7CkBAIC0yODUsOSArNDAzLDkgQEAKICAgICAgICAgdGhpcy50YWJsZVBhcmFtZXRlcnMuc3BsaWNlKGluZGV4LCAxKTsKICAgICB9CiAKLSAgICBjcmVhdGVQYXJhbUxpc3RzKCk6IHZvaWQgewotICAgICAgICB0aGlzLm9wZXJhdGlvbi5jcmVhdGVJbnB1dFBhcmFtc0xpc3QodGhpcy5pbnB1dFBhcmFtZXRlcnMpOwotICAgICAgICB0aGlzLm9wZXJhdGlvbi5jcmVhdGVPdXRwdXRQYXJhbXNMaXN0KHRoaXMub3V0cHV0UGFyYW1ldGVycyk7CisgICAgY3JlYXRlUGFyYW1MaXN0cyA9ICgpID0+IHsKKyAgICAgICAgdGhpcy5vcGVyYXRpb24uY3JlYXRlSW5wdXRzTGlzdCh0aGlzLmlucHV0UGFyYW1ldGVycyk7CisgICAgICAgIHRoaXMub3BlcmF0aW9uLmNyZWF0ZU91dHB1dHNMaXN0KHRoaXMub3V0cHV0UGFyYW1ldGVycyk7CiAgICAgfQogCiAgICAgaXNVc2luZ0V4aXN0aW5nV0YgPSAob3BlcmF0aW9uPzogT3BlcmF0aW9uTW9kZWwpOiBib29sZWFuID0+IHsKQEAgLTI5NSwxNSArNDEzLDIwIEBACiAgICAgICAgIHJldHVybiBvcGVyYXRpb24ud29ya2Zsb3dBc3NvY2lhdGlvblR5cGUgPT09IFdPUktGTE9XX0FTU09DSUFUSU9OX09QVElPTlMuRVhJU1RJTkc7CiAgICAgfQogCi0gICAgc2hvdWxkQ3JlYXRlV0Yob3BlcmF0aW9uPzogT3BlcmF0aW9uTW9kZWwpOiBib29sZWFuIHsKKyAgICBzaG91bGRDcmVhdGVXRiA9IChvcGVyYXRpb24/OiBPcGVyYXRpb25Nb2RlbCk6IGJvb2xlYW4gPT4gewogICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb24gfHwgdGhpcy5vcGVyYXRpb247CiAgICAgICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbi53b3JrZmxvd0Fzc29jaWF0aW9uVHlwZSA9PT0gV09SS0ZMT1dfQVNTT0NJQVRJT05fT1BUSU9OUy5ORVc7CiAgICAgfQogCi0gICAgY2hlY2tGb3JtVmFsaWRGb3JTdWJtaXQoKTogYm9vbGVhbiB7Ci0gICAgICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbi5vcGVyYXRpb25UeXBlICYmCisgICAgY2hlY2tGb3JtVmFsaWRGb3JTdWJtaXQgPSAoKTogYm9vbGVhbiA9PiB7CisgICAgICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbi5uYW1lICYmCiAgICAgICAgICAgICAoIXRoaXMuaXNVc2luZ0V4aXN0aW5nV0YoKSB8fCB0aGlzLm9wZXJhdGlvbi53b3JrZmxvd1ZlcnNpb25JZCkgJiYKICAgICAgICAgICAgIHRoaXMuaXNQYXJhbXNWYWxpZCgpOwogICAgIH0KIAorICAgIHZhbGlkaXR5Q2hhbmdlZCA9ICgpID0+IHsKKyAgICAgICAgbGV0IHZhbGlkU3RhdGUgPSB0aGlzLmNoZWNrRm9ybVZhbGlkRm9yU3VibWl0KCk7CisgICAgICAgIHRoaXMudmFsaWRpdHlDaGFuZ2VkQ2FsbGJhY2sodmFsaWRTdGF0ZSk7CisgICAgfQorCiB9CmRpZmYgLS1naXQgYS9jYXRhbG9nLXVpL3NyYy9hcHAvbmcyL3BhZ2VzL2ludGVyZmFjZS1vcGVyYXRpb24vb3BlcmF0aW9uLWNyZWF0b3Ivb3BlcmF0aW9uLWNyZWF0b3IubW9kdWxlLnRzIGIvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL29wZXJhdGlvbi1jcmVhdG9yL29wZXJhdGlvbi1jcmVhdG9yLm1vZHVsZS50cwppbmRleCA3ZDg4MTIzLi4wYjZmODMzIDEwMDY0NAotLS0gYS9jYXRhbG9nLXVpL3NyYy9hcHAvbmcyL3BhZ2VzL2ludGVyZmFjZS1vcGVyYXRpb24vb3BlcmF0aW9uLWNyZWF0b3Ivb3BlcmF0aW9uLWNyZWF0b3IubW9kdWxlLnRzCisrKyBiL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9vcGVyYXRpb24tY3JlYXRvci9vcGVyYXRpb24tY3JlYXRvci5tb2R1bGUudHMKQEAgLTMsOCArMyw5IEBACiAKIGltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gIkBhbmd1bGFyL2Zvcm1zIjsKIGltcG9ydCB7Rm9ybUVsZW1lbnRzTW9kdWxlfSBmcm9tICJhcHAvbmcyL2NvbXBvbmVudHMvdWkvZm9ybS1jb21wb25lbnRzL2Zvcm0tZWxlbWVudHMubW9kdWxlIjsKLWltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICJhcHAvbmcyL3NoYXJlZC90cmFuc2xhdG9yL3RyYW5zbGF0ZS5tb2R1bGUiOworaW1wb3J0IHtTZGNVaUNvbXBvbmVudHNNb2R1bGV9IGZyb20gInNkYy11aS9saWIvYW5ndWxhci9pbmRleCI7CiBpbXBvcnQge1VpRWxlbWVudHNNb2R1bGV9IGZyb20gImFwcC9uZzIvY29tcG9uZW50cy91aS91aS1lbGVtZW50cy5tb2R1bGUiOworaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGV9IGZyb20gImFwcC9uZzIvc2hhcmVkL3RyYW5zbGF0b3IvdHJhbnNsYXRlLm1vZHVsZSI7CiAKIGltcG9ydCB7T3BlcmF0aW9uQ3JlYXRvckNvbXBvbmVudH0gZnJvbSAiLi9vcGVyYXRpb24tY3JlYXRvci5jb21wb25lbnQiOwogaW1wb3J0IHtQYXJhbVJvd0NvbXBvbmVudH0gZnJvbSAnLi9wYXJhbS1yb3cvcGFyYW0tcm93LmNvbXBvbmVudCc7CkBAIC0xNiw2ICsxNyw3IEBACiAgICAgXSwKICAgICBpbXBvcnRzOiBbCiAgICAgICAgIENvbW1vbk1vZHVsZSwKKyAgICAgICAgU2RjVWlDb21wb25lbnRzTW9kdWxlLAogICAgICAgICBGb3Jtc01vZHVsZSwKICAgICAgICAgRm9ybUVsZW1lbnRzTW9kdWxlLAogICAgICAgICBUcmFuc2xhdGVNb2R1bGUsCmRpZmYgLS1naXQgYS9jYXRhbG9nLXVpL3NyYy9hcHAvbmcyL3BhZ2VzL2ludGVyZmFjZS1vcGVyYXRpb24vb3BlcmF0aW9uLWNyZWF0b3IvcGFyYW0tcm93L3BhcmFtLXJvdy5jb21wb25lbnQuaHRtbCBiL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9vcGVyYXRpb24tY3JlYXRvci9wYXJhbS1yb3cvcGFyYW0tcm93LmNvbXBvbmVudC5odG1sCmluZGV4IDlhNWMxMDEuLjExMjhkNjAgMTAwNjQ0Ci0tLSBhL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9vcGVyYXRpb24tY3JlYXRvci9wYXJhbS1yb3cvcGFyYW0tcm93LmNvbXBvbmVudC5odG1sCisrKyBiL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9vcGVyYXRpb24tY3JlYXRvci9wYXJhbS1yb3cvcGFyYW0tcm93LmNvbXBvbmVudC5odG1sCkBAIC0xOSw2ICsxOSw3IEBACiAgICAgICAgICpuZ0lmPSIhaXNBc3NvY2lhdGVXb3JrZmxvdyIKICAgICAgICAgZGF0YS10ZXN0cy1pZD0icGFyYW1OYW1lIgogICAgICAgICBbKHZhbHVlKV09InBhcmFtLm5hbWUiCisgICAgICAgICh2YWx1ZUNoYW5nZSk9Im9uQ2hhbmdlTmFtZSgpIgogICAgICAgICBbcmVhZG9ubHldPSJyZWFkb25seSI+CiAgICAgPC91aS1lbGVtZW50LWlucHV0PgogICAgIDxzcGFuICpuZ0lmPSJpc0Fzc29jaWF0ZVdvcmtmbG93Ij57e3BhcmFtLm5hbWV9fTwvc3Bhbj4KQEAgLTQxLDEzICs0MiwxNCBAQAogICAgICAgICAqbmdJZj0iZmlsdGVyZWRJbnB1dFByb3BzLmxlbmd0aCB8fCAhaXNBc3NvY2lhdGVXb3JrZmxvdyIKICAgICAgICAgZGF0YS10ZXN0cy1pZD0icGFyYW1Qcm9wZXJ0eSIKICAgICAgICAgW3ZhbHVlc109ImZpbHRlcmVkSW5wdXRQcm9wcyIKLSAgICAgICAgWyh2YWx1ZSldPSJwYXJhbS5wcm9wZXJ0eSIKKyAgICAgICAgdmFsdWU9InBhcmFtSWQiCisgICAgICAgICh2YWx1ZUNoYW5nZSk9Im9uQ2hhbmdlUHJvcGVydHkoJGV2ZW50KSIKICAgICAgICAgW3JlYWRvbmx5XT0icmVhZG9ubHkiPgogICAgIDwvdWktZWxlbWVudC1kcm9wZG93bj4KICAgICA8c3BhbgogICAgICAgICAqbmdJZj0iIWZpbHRlcmVkSW5wdXRQcm9wcy5sZW5ndGggJiYgaXNBc3NvY2lhdGVXb3JrZmxvdyIKICAgICAgICAgY2xhc3M9Im5vLXByb3BlcnRpZXMtZXJyb3IiPgotICAgICAgICBObyBhdmFpbGFibGUgcHJvcGVydGllcyBvZiB0aGlzIHR5cGUuCisgICAgICAgIHt7ICdQQVJBTV9OT05FX09GX1RZUEUnIHwgdHJhbnNsYXRlIH19CiAgICAgPC9zcGFuPgogPC9kaXY+CiAKQEAgLTU1LDE1ICs1NywxOCBAQAogICAgIDxjaGVja2JveAogICAgICAgICAqbmdJZj0iIWlzQXNzb2NpYXRlV29ya2Zsb3ciCiAgICAgICAgIGRhdGEtdGVzdHMtaWQ9InBhcmFtTWFuZGF0b3J5IgotICAgICAgICBbKGNoZWNrZWQpXT0icGFyYW0ubWFuZGF0b3J5IgorICAgICAgICBbKGNoZWNrZWQpXT0icGFyYW0ucmVxdWlyZWQiCiAgICAgICAgIFtuZ0NsYXNzXT0ieydkaXNhYmxlZCc6cmVhZG9ubHl9Ij4KICAgICA8L2NoZWNrYm94PgogPC9kaXY+CiAKIDxkaXYgY2xhc3M9ImNlbGwgcmVtb3ZlIiAqbmdJZj0iIWlzQXNzb2NpYXRlV29ya2Zsb3cgJiYgIXJlYWRvbmx5Ij4KLSAgICA8c3BhbgotICAgICAgICBjbGFzcz0ic3ByaXRlLW5ldyBkZWxldGUtaXRlbS1pY29uIgotICAgICAgICBkYXRhLXRlc3RzLWlkPSJyZW1vdmVJbnB1dFBhcmFtIgotICAgICAgICAoY2xpY2spPSJvblJlbW92ZVBhcmFtKHBhcmFtKSI+Ci0gICAgPC9zcGFuPgorICAgIDxzdmctaWNvbgorICAgICAgbmFtZT0idHJhc2gtbyIKKyAgICAgIG1vZGU9ImluZm8iCisgICAgICBzaXplPSJzbWFsbCIKKyAgICAgIHRlc3RJZD0icmVtb3ZlSW5wdXRQYXJhbSIKKyAgICAgIChjbGljayk9Im9uUmVtb3ZlUGFyYW0ocGFyYW0pIgorICAgICAgW2NsaWNrYWJsZV09InRydWUiPgorICA8L3N2Zy1pY29uPgogPC9kaXY+CmRpZmYgLS1naXQgYS9jYXRhbG9nLXVpL3NyYy9hcHAvbmcyL3BhZ2VzL2ludGVyZmFjZS1vcGVyYXRpb24vb3BlcmF0aW9uLWNyZWF0b3IvcGFyYW0tcm93L3BhcmFtLXJvdy5jb21wb25lbnQubGVzcyBiL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9vcGVyYXRpb24tY3JlYXRvci9wYXJhbS1yb3cvcGFyYW0tcm93LmNvbXBvbmVudC5sZXNzCmluZGV4IDJjMjYyNWQuLjk5YTU0YmIgMTAwNjQ0Ci0tLSBhL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9vcGVyYXRpb24tY3JlYXRvci9wYXJhbS1yb3cvcGFyYW0tcm93LmNvbXBvbmVudC5sZXNzCisrKyBiL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9vcGVyYXRpb24tY3JlYXRvci9wYXJhbS1yb3cvcGFyYW0tcm93LmNvbXBvbmVudC5sZXNzCkBAIC01LDcgKzUsMTAgQEAKICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogCi0gICAgLmRlbGV0ZS1pdGVtLWljb24geworICAgIHN2Zy1pY29uIHsKKyAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgICAgICByaWdodDogLTNweDsKKwogICAgICAgICAmOmhvdmVyIHsKICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL29wZXJhdGlvbi1jcmVhdG9yL3BhcmFtLXJvdy9wYXJhbS1yb3cuY29tcG9uZW50LnRzIGIvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9wYWdlcy9pbnRlcmZhY2Utb3BlcmF0aW9uL29wZXJhdGlvbi1jcmVhdG9yL3BhcmFtLXJvdy9wYXJhbS1yb3cuY29tcG9uZW50LnRzCmluZGV4IGExMjQyNWQuLjg4MzdhMTcgMTAwNjQ0Ci0tLSBhL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvcGFnZXMvaW50ZXJmYWNlLW9wZXJhdGlvbi9vcGVyYXRpb24tY3JlYXRvci9wYXJhbS1yb3cvcGFyYW0tcm93LmNvbXBvbmVudC50cworKysgYi9jYXRhbG9nLXVpL3NyYy9hcHAvbmcyL3BhZ2VzL2ludGVyZmFjZS1vcGVyYXRpb24vb3BlcmF0aW9uLWNyZWF0b3IvcGFyYW0tcm93L3BhcmFtLXJvdy5jb21wb25lbnQudHMKQEAgLTEsNiArMSw3IEBACiBpbXBvcnQge0NvbXBvbmVudCwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOwogaW1wb3J0IHtEYXRhVHlwZVNlcnZpY2V9IGZyb20gImFwcC9uZzIvc2VydmljZXMvZGF0YS10eXBlLnNlcnZpY2UiOwogaW1wb3J0IHtPcGVyYXRpb25QYXJhbWV0ZXIsIElucHV0QkVNb2RlbH0gZnJvbSAnYXBwL21vZGVscyc7CitpbXBvcnQge0Ryb3BEb3duT3B0aW9ufSBmcm9tICIuLi9vcGVyYXRpb24tY3JlYXRvci5jb21wb25lbnQiOwogaW1wb3J0IHtEcm9wZG93blZhbHVlfSBmcm9tICJhcHAvbmcyL2NvbXBvbmVudHMvdWkvZm9ybS1jb21wb25lbnRzL2Ryb3Bkb3duL3VpLWVsZW1lbnQtZHJvcGRvd24uY29tcG9uZW50IjsKIAogQENvbXBvbmVudCh7CkBAIC0xNiw4ICsxNywxMCBAQAogICAgIEBJbnB1dCgpIGlzQXNzb2NpYXRlV29ya2Zsb3c6IGJvb2xlYW47CiAgICAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW47CiAgICAgQElucHV0KCkgaXNJbnB1dFBhcmFtOiBib29sZWFuOworICAgIEBJbnB1dCgpIHZhbGlkaXR5Q2hhbmdlZDogRnVuY3Rpb247CiAKLSAgICBwcm9wVHlwZUVudW06IEFycmF5PFN0cmluZz4gPSBbXTsKKyAgICBwYXJhbUlkOiBzdHJpbmc7CisgICAgcHJvcFR5cGVFbnVtOiBBcnJheTxEcm9wRG93bk9wdGlvbj4gPSBbXTsKICAgICBmaWx0ZXJlZElucHV0UHJvcHM6IEFycmF5PERyb3Bkb3duVmFsdWU+ID0gW107CiAKICAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGFUeXBlU2VydmljZTogRGF0YVR5cGVTZXJ2aWNlKSB7fQpAQCAtMjYsMjAgKzI5LDQ4IEBACiAgICAgICAgIHRoaXMucHJvcFR5cGVFbnVtID0gXy51bmlxKAogICAgICAgICAgICAgXy5tYXAoCiAgICAgICAgICAgICAgICAgdGhpcy5nZXRQcmltaXRpdmVTdWJ0eXBlcygpLAotICAgICAgICAgICAgICAgIHByb3AgPT4gcHJvcC50eXBlCisgICAgICAgICAgICAgICAgcHJvcCA9PiBuZXcgRHJvcERvd25PcHRpb24ocHJvcC50eXBlKQogICAgICAgICAgICAgKQogICAgICAgICApOwogICAgICAgICB0aGlzLm9uQ2hhbmdlVHlwZSgpOworICAgICAgICB0aGlzLnZhbGlkaXR5Q2hhbmdlZCgpOwogICAgIH0KIAotICAgIG9uQ2hhbmdlVHlwZSgpIHsKKyAgICBvbkNoYW5nZU5hbWUoKSB7CisgICAgICAgIHRoaXMudmFsaWRpdHlDaGFuZ2VkKCk7CisgICAgfQorCisgICAgb25DaGFuZ2VUeXBlKHBhcmFtSWQ/OiBzdHJpbmcpIHsKICAgICAgICAgdGhpcy5maWx0ZXJlZElucHV0UHJvcHMgPSBfLm1hcCgKICAgICAgICAgICAgIF8uZmlsdGVyKAogICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJpbWl0aXZlU3VidHlwZXMoKSwKLSAgICAgICAgICAgICAgICBwcm9wID0+IHByb3AudHlwZSA9PT0gdGhpcy5wYXJhbS50eXBlCisgICAgICAgICAgICAgICAgcHJvcCA9PiAhdGhpcy5wYXJhbS50eXBlIHx8IHByb3AudHlwZSA9PT0gdGhpcy5wYXJhbS50eXBlCiAgICAgICAgICAgICApLAogICAgICAgICAgICAgcHJvcCA9PiBuZXcgRHJvcGRvd25WYWx1ZShwcm9wLnVuaXF1ZUlkLCBwcm9wLm5hbWUpCiAgICAgICAgICk7CisgICAgICAgIGlmIChwYXJhbUlkKSB7CisgICAgICAgICAgICB0aGlzLnBhcmFtSWQgPSBwYXJhbUlkOworICAgICAgICB9CisgICAgfQorCisgICAgb25DaGFuZ2VQcm9wZXJ0eShwYXJhbUlkOiBzdHJpbmcpIHsKKyAgICAgICAgdGhpcy5wYXJhbS5pbnB1dElkID0gcGFyYW1JZDsKKyAgICAgICAgY29uc3QgbmV3UHJvcCA9IF8uZmluZCgKKyAgICAgICAgICAgIHRoaXMuZ2V0UHJpbWl0aXZlU3VidHlwZXMoKSwKKyAgICAgICAgICAgIHByb3AgPT4gdGhpcy5wYXJhbS5pbnB1dElkID09PSBwcm9wLnVuaXF1ZUlkCisgICAgICAgICk7CisKKyAgICAgICAgaWYgKCF0aGlzLnBhcmFtLnR5cGUpIHsKKyAgICAgICAgICAgIHRoaXMucGFyYW0udHlwZSA9IG5ld1Byb3AudHlwZTsKKyAgICAgICAgICAgIHRoaXMub25DaGFuZ2VUeXBlKHBhcmFtSWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5wYXJhbUlkID0gcGFyYW1JZDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGhpcy5wYXJhbS5uYW1lKSB7CisgICAgICAgICAgICB0aGlzLnBhcmFtLm5hbWUgPSBuZXdQcm9wLm5hbWU7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy52YWxpZGl0eUNoYW5nZWQoKTsKICAgICB9CiAKICAgICBnZXRQcmltaXRpdmVTdWJ0eXBlcygpOiBBcnJheTxJbnB1dEJFTW9kZWw+IHsKZGlmZiAtLWdpdCBhL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvc2VydmljZXMvY29tcG9uZW50LXNlcnZpY2VzL2NvbXBvbmVudC5zZXJ2aWNlLnRzIGIvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9zZXJ2aWNlcy9jb21wb25lbnQtc2VydmljZXMvY29tcG9uZW50LnNlcnZpY2UudHMKaW5kZXggMjZiMDI5MS4uOTdlNjJkYSAxMDA2NDQKLS0tIGEvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9zZXJ2aWNlcy9jb21wb25lbnQtc2VydmljZXMvY29tcG9uZW50LnNlcnZpY2UudHMKKysrIGIvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9zZXJ2aWNlcy9jb21wb25lbnQtc2VydmljZXMvY29tcG9uZW50LnNlcnZpY2UudHMKQEAgLTI0LDkgKzI0LDkgQEAKIGltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvbWFwJzsKIGltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvdG9Qcm9taXNlJzsKIGltcG9ydCB7UmVzcG9uc2UsIFVSTFNlYXJjaFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvaHR0cCc7Ci1pbXBvcnQgeyBDb21wb25lbnQsIElucHV0QkVNb2RlbCwgSW5zdGFuY2VQcm9wZXJ0aWVzQVBJTWFwLCBGaWx0ZXJQcm9wZXJ0aWVzQXNzaWdubWVudERhdGEsIE9wZXJhdGlvbk1vZGVsLCBDcmVhdGVPcGVyYXRpb25SZXNwb25zZX0gZnJvbSAiYXBwL21vZGVscyI7CitpbXBvcnQgeyBDb21wb25lbnQsIElucHV0QkVNb2RlbCwgSW5zdGFuY2VQcm9wZXJ0aWVzQVBJTWFwLCBGaWx0ZXJQcm9wZXJ0aWVzQXNzaWdubWVudERhdGEsIE9wZXJhdGlvbk1vZGVsLCBCRU9wZXJhdGlvbk1vZGVsLCBDcmVhdGVPcGVyYXRpb25SZXNwb25zZX0gZnJvbSAiYXBwL21vZGVscyI7CiBpbXBvcnQge2Rvd25ncmFkZUluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL3VwZ3JhZGUvc3RhdGljJzsKLWltcG9ydCB7Q09NUE9ORU5UX0ZJRUxEU30gZnJvbSAiYXBwL3V0aWxzIjsKK2ltcG9ydCB7Q09NUE9ORU5UX0ZJRUxEUywgQ29tbW9uVXRpbHN9IGZyb20gImFwcC91dGlscyI7CiBpbXBvcnQge0NvbXBvbmVudEdlbmVyaWNSZXNwb25zZX0gZnJvbSAiLi4vcmVzcG9uc2VzL2NvbXBvbmVudC1nZW5lcmljLXJlc3BvbnNlIjsKIGltcG9ydCB7SW5zdGFuY2VCZVByb3BlcnRpZXNNYXB9IGZyb20gIi4uLy4uLy4uL21vZGVscy9wcm9wZXJ0aWVzLWlucHV0cy9wcm9wZXJ0eS1mZS1tYXAiOwogaW1wb3J0IHtBUElfUVVFUllfUEFSQU1TfSBmcm9tICJhcHAvdXRpbHMiOwpAQCAtMTIyLDM4ICsxMjIsNzkgQEAKICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50RGF0YUJ5RmllbGRzTmFtZShjb21wb25lbnQuY29tcG9uZW50VHlwZSwgY29tcG9uZW50LnVuaXF1ZUlkLCBbQ09NUE9ORU5UX0ZJRUxEUy5DT01QT05FTlRfUFJPUEVSVElFU10pOwogICAgIH0KIAotICAgIGdldEludGVyZmFjZU9wZXJhdGlvbnMoY29tcG9uZW50OkNvbXBvbmVudCk6T2JzZXJ2YWJsZTxDb21wb25lbnRHZW5lcmljUmVzcG9uc2U+IHsKKyAgICBnZXRJbnRlcmZhY2VzKGNvbXBvbmVudDpDb21wb25lbnQpOk9ic2VydmFibGU8Q29tcG9uZW50R2VuZXJpY1Jlc3BvbnNlPiB7CiAgICAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudERhdGFCeUZpZWxkc05hbWUoY29tcG9uZW50LmNvbXBvbmVudFR5cGUsIGNvbXBvbmVudC51bmlxdWVJZCwgW0NPTVBPTkVOVF9GSUVMRFMuQ09NUE9ORU5UX0lOVEVSRkFDRV9PUEVSQVRJT05TXSk7CiAgICAgfQogCiAgICAgZ2V0SW50ZXJmYWNlT3BlcmF0aW9uKGNvbXBvbmVudDpDb21wb25lbnQsIG9wZXJhdGlvbjpPcGVyYXRpb25Nb2RlbCk6T2JzZXJ2YWJsZTxPcGVyYXRpb25Nb2RlbD4gewotICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmJhc2VVcmwgKyBjb21wb25lbnQuZ2V0VHlwZVVybCgpICsgY29tcG9uZW50LnVuaXF1ZUlkICsgJy9pbnRlcmZhY2VPcGVyYXRpb25zLycgKyBvcGVyYXRpb24udW5pcXVlSWQpCi0gICAgICAgICAgICAubWFwKChyZXM6UmVzcG9uc2UpID0+IHJlcy5qc29uKCkpOworICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmJhc2VVcmwgKyBjb21wb25lbnQuZ2V0VHlwZVVybCgpICsgY29tcG9uZW50LnVuaXF1ZUlkICsgJy9pbnRlcmZhY2VzLycgKyBvcGVyYXRpb24uaW50ZXJmYWNlSWQgKyAnL29wZXJhdGlvbnMvJyArIG9wZXJhdGlvbi51bmlxdWVJZCkKKyAgICAgICAgICAgIC5tYXAoKHJlczpSZXNwb25zZSkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiByZXMuanNvbigpOworICAgICAgICAgICAgfSk7CiAgICAgfQogCiAgICAgY3JlYXRlSW50ZXJmYWNlT3BlcmF0aW9uKGNvbXBvbmVudDpDb21wb25lbnQsIG9wZXJhdGlvbjpPcGVyYXRpb25Nb2RlbCk6T2JzZXJ2YWJsZTxDcmVhdGVPcGVyYXRpb25SZXNwb25zZT4gewogICAgICAgICBjb25zdCBvcGVyYXRpb25MaXN0ID0gewotICAgICAgICAgICAgJ2ludGVyZmFjZU9wZXJhdGlvbnMnOiB7Ci0gICAgICAgICAgICAgICAgW29wZXJhdGlvbi5vcGVyYXRpb25UeXBlXTogb3BlcmF0aW9uCisgICAgICAgICAgICAnaW50ZXJmYWNlcyc6IHsKKyAgICAgICAgICAgICAgICBbb3BlcmF0aW9uLmludGVyZmFjZVR5cGVdOiB7CisgICAgICAgICAgICAgICAgICAgICd0eXBlJzogb3BlcmF0aW9uLmludGVyZmFjZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICdvcGVyYXRpb25zJzogeworICAgICAgICAgICAgICAgICAgICAgICAgW29wZXJhdGlvbi5uYW1lXTogbmV3IEJFT3BlcmF0aW9uTW9kZWwob3BlcmF0aW9uKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9OwogICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5iYXNlVXJsICsgY29tcG9uZW50LmdldFR5cGVVcmwoKSArIGNvbXBvbmVudC51bmlxdWVJZCArICcvaW50ZXJmYWNlT3BlcmF0aW9ucycsIG9wZXJhdGlvbkxpc3QpCi0gICAgICAgICAgICAubWFwKChyZXM6UmVzcG9uc2UpID0+IHJlcy5qc29uKCkpOworICAgICAgICAgICAgLm1hcCgocmVzOlJlc3BvbnNlKSA9PiB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJmID0gXy5maW5kKHJlcy5qc29uKCkuaW50ZXJmYWNlcywgKGludGVyZjogYW55KSA9PiBpbnRlcmYudHlwZSA9PT0gb3BlcmF0aW9uLmludGVyZmFjZVR5cGUpOworICAgICAgICAgICAgICAgIGNvbnN0IG5ld09wZXJhdGlvbiA9IF8uZmluZChpbnRlcmYub3BlcmF0aW9ucywgKG9wOk9wZXJhdGlvbk1vZGVsKSA9PiBvcC5uYW1lID09PSBvcGVyYXRpb24ubmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVPcGVyYXRpb25SZXNwb25zZSh7CisgICAgICAgICAgICAgICAgICAgIC4uLm5ld09wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlVHlwZTogaW50ZXJmLnR5cGUsCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZUlkOiBpbnRlcmYudW5pcXVlSWQKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOwogICAgIH0KIAogICAgIHVwZGF0ZUludGVyZmFjZU9wZXJhdGlvbihjb21wb25lbnQ6Q29tcG9uZW50LCBvcGVyYXRpb246T3BlcmF0aW9uTW9kZWwpOk9ic2VydmFibGU8Q3JlYXRlT3BlcmF0aW9uUmVzcG9uc2U+IHsKICAgICAgICAgY29uc3Qgb3BlcmF0aW9uTGlzdCA9IHsKLSAgICAgICAgICAgICdpbnRlcmZhY2VPcGVyYXRpb25zJzogewotICAgICAgICAgICAgICAgIFtvcGVyYXRpb24ub3BlcmF0aW9uVHlwZV06IG9wZXJhdGlvbgorICAgICAgICAgICAgJ2ludGVyZmFjZXMnOiB7CisgICAgICAgICAgICAgICAgW29wZXJhdGlvbi5pbnRlcmZhY2VUeXBlXTogeworICAgICAgICAgICAgICAgICAgICAndHlwZSc6IG9wZXJhdGlvbi5pbnRlcmZhY2VUeXBlLAorICAgICAgICAgICAgICAgICAgICAnb3BlcmF0aW9ucyc6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVyYXRpb24ubmFtZV06IG5ldyBCRU9wZXJhdGlvbk1vZGVsKG9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfTsKICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5iYXNlVXJsICsgY29tcG9uZW50LmdldFR5cGVVcmwoKSArIGNvbXBvbmVudC51bmlxdWVJZCArICcvaW50ZXJmYWNlT3BlcmF0aW9ucycsIG9wZXJhdGlvbkxpc3QpCi0gICAgICAgICAgICAubWFwKChyZXM6UmVzcG9uc2UpID0+IHJlcy5qc29uKCkpOworICAgICAgICAgICAgLm1hcCgocmVzOlJlc3BvbnNlKSA9PiB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJmID0gXy5maW5kKHJlcy5qc29uKCkuaW50ZXJmYWNlcywgKGludGVyZjogYW55KSA9PiBpbnRlcmYudHlwZSA9PT0gb3BlcmF0aW9uLmludGVyZmFjZVR5cGUpOworICAgICAgICAgICAgICAgIGNvbnN0IG5ld09wZXJhdGlvbiA9IF8uZmluZChpbnRlcmYub3BlcmF0aW9ucywgKG9wOk9wZXJhdGlvbk1vZGVsKSA9PiBvcC5uYW1lID09PSBvcGVyYXRpb24ubmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVPcGVyYXRpb25SZXNwb25zZSh7CisgICAgICAgICAgICAgICAgICAgIC4uLm5ld09wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlVHlwZTogaW50ZXJmLnR5cGUsCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZUlkOiBpbnRlcmYudW5pcXVlSWQKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOwogICAgIH0KIAogICAgIGRlbGV0ZUludGVyZmFjZU9wZXJhdGlvbihjb21wb25lbnQ6Q29tcG9uZW50LCBvcGVyYXRpb246T3BlcmF0aW9uTW9kZWwpOk9ic2VydmFibGU8T3BlcmF0aW9uTW9kZWw+IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUodGhpcy5iYXNlVXJsICsgY29tcG9uZW50LmdldFR5cGVVcmwoKSArIGNvbXBvbmVudC51bmlxdWVJZCArICcvaW50ZXJmYWNlT3BlcmF0aW9ucy8nICsgb3BlcmF0aW9uLnVuaXF1ZUlkKQotICAgICAgICAgICAgLm1hcCgocmVzOlJlc3BvbnNlKSA9PiByZXMuanNvbigpKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUodGhpcy5iYXNlVXJsICsgY29tcG9uZW50LmdldFR5cGVVcmwoKSArIGNvbXBvbmVudC51bmlxdWVJZCArICcvaW50ZXJmYWNlcy8nICsgb3BlcmF0aW9uLmludGVyZmFjZUlkICsgJy9vcGVyYXRpb25zLycgKyBvcGVyYXRpb24udW5pcXVlSWQpCisgICAgICAgICAgICAubWFwKChyZXM6UmVzcG9uc2UpID0+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzLmpzb24oKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIGdldEludGVyZmFjZVR5cGVzKGNvbXBvbmVudDpDb21wb25lbnQpOk9ic2VydmFibGU8e1tpZDpzdHJpbmddOiBBcnJheTxzdHJpbmc+fT4geworICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmJhc2VVcmwgKyAnaW50ZXJmYWNlTGlmZWN5Y2xlVHlwZXMnKQorICAgICAgICAgICAgLm1hcCgocmVzOlJlc3BvbnNlKSA9PiB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJmYWNlTWFwID0ge307CisgICAgICAgICAgICAgICAgXy5mb3JFYWNoKHJlcy5qc29uKCksIChpbnRlcmY6YW55KSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1hcFtpbnRlcmYudG9zY2FQcmVzZW50YXRpb24udHlwZV0gPSBfLmtleXMoaW50ZXJmLnRvc2NhUHJlc2VudGF0aW9uLm9wZXJhdGlvbnMpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcmZhY2VNYXA7CisgICAgICAgICAgICB9KTsKICAgICB9CiAKICAgICBnZXRDYXBhYmlsaXRpZXNBbmRSZXF1aXJlbWVudHMoY29tcG9uZW50VHlwZTogc3RyaW5nLCBjb21wb25lbnRJZDpzdHJpbmcpOk9ic2VydmFibGU8Q29tcG9uZW50R2VuZXJpY1Jlc3BvbnNlPiB7CmRpZmYgLS1naXQgYS9jYXRhbG9nLXVpL3NyYy9hcHAvbmcyL3NlcnZpY2VzL3Jlc3BvbnNlcy9jb21wb25lbnQtZ2VuZXJpYy1yZXNwb25zZS50cyBiL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvc2VydmljZXMvcmVzcG9uc2VzL2NvbXBvbmVudC1nZW5lcmljLXJlc3BvbnNlLnRzCmluZGV4IGE3NzEzM2UuLjY0N2NjOTIgMTAwNjQ0Ci0tLSBhL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvc2VydmljZXMvcmVzcG9uc2VzL2NvbXBvbmVudC1nZW5lcmljLXJlc3BvbnNlLnRzCisrKyBiL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvc2VydmljZXMvcmVzcG9uc2VzL2NvbXBvbmVudC1nZW5lcmljLXJlc3BvbnNlLnRzCkBAIC05Miw2ICs5Miw3IEBACiAgICAgICAgICAgICB0aGlzLnRvc2NhQXJ0aWZhY3RzID0gbmV3IEFydGlmYWN0R3JvdXBNb2RlbChyZXNwb25zZS50b3NjYUFydGlmYWN0cyk7CiAgICAgICAgIH0KICAgICAgICAgaWYocmVzcG9uc2UuaW50ZXJmYWNlcykgeworICAgICAgICAgICAgdGhpcy5pbnRlcmZhY2VzID0gQ29tbW9uVXRpbHMuaW5pdEludGVyZmFjZXMocmVzcG9uc2UuaW50ZXJmYWNlcyk7CiAgICAgICAgICAgICB0aGlzLmludGVyZmFjZU9wZXJhdGlvbnMgPSBDb21tb25VdGlscy5pbml0SW50ZXJmYWNlT3BlcmF0aW9ucyhyZXNwb25zZS5pbnRlcmZhY2VzKTsKICAgICAgICAgfQogICAgICAgICBpZihyZXNwb25zZS5tZXRhZGF0YSkgewpkaWZmIC0tZ2l0IGEvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9zZXJ2aWNlcy93b3JrZmxvdy5zZXJ2aWNlLnRzIGIvY2F0YWxvZy11aS9zcmMvYXBwL25nMi9zZXJ2aWNlcy93b3JrZmxvdy5zZXJ2aWNlLnRzCmluZGV4IDFmYzVjNzguLjM2ZDU2ZDYgMTAwNjQ0Ci0tLSBhL2NhdGFsb2ctdWkvc3JjL2FwcC9uZzIvc2VydmljZXMvd29ya2Zsb3cuc2VydmljZS50cworKysgYi9jYXRhbG9nLXVpL3NyYy9hcHAvbmcyL3NlcnZpY2VzL3dvcmtmbG93LnNlcnZpY2UudHMKQEAgLTMsNyArMywxNyBAQAogaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gInJ4anMvT2JzZXJ2YWJsZSI7CiBpbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gIi4vaHR0cC5zZXJ2aWNlIjsKIGltcG9ydCB7IFNkY0NvbmZpZ1Rva2VuLCBJU2RjQ29uZmlnIH0gZnJvbSAiLi4vY29uZmlnL3NkYy1jb25maWcuY29uZmlnIjsKLWltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gImFwcC9tb2RlbHMiOworaW1wb3J0IHsgQ29tcG9uZW50LCBDcmVhdGVPcGVyYXRpb25SZXNwb25zZSB9IGZyb20gImFwcC9tb2RlbHMiOworCitpbnRlcmZhY2UgV29ya2Zsb3dPdXRwdXRQYXJhbWV0ZXIgeworICAgIG5hbWU6IHN0cmluZywKKyAgICB0eXBlOiBzdHJpbmcsCisgICAgbWFuZGF0b3J5OiBib29sZWFuCit9CisKK2ludGVyZmFjZSBXb3JrZmxvd0lucHV0UGFyYW1ldGVyIGV4dGVuZHMgV29ya2Zsb3dPdXRwdXRQYXJhbWV0ZXIgeworICAgIHByb3BlcnR5OiBzdHJpbmc7Cit9CiAKIEBJbmplY3RhYmxlKCkKIGV4cG9ydCBjbGFzcyBXb3JrZmxvd1NlcnZpY2VOZzIgewpAQCAtMjAsOSArMzAsOSBAQAogICAgICAgICB0aGlzLmNhdGFsb2dCYXNlVXJsID0gc2RjQ29uZmlnLmFwaS5QT1NUX3dvcmtmbG93X2FydGlmYWN0OwogICAgIH0KIAotICAgIHB1YmxpYyBhc3NvY2lhdGVXb3JrZmxvd0FydGlmYWN0KGNvbXBvbmVudDogQ29tcG9uZW50LCBvcGVyYXRpb25JZDogc3RyaW5nLCB3b3JrZmxvd0lkOiBzdHJpbmcsIHdvcmtmbG93VmVyc2lvbklkOiBzdHJpbmcsIGFydGlmYWN0VXVpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuYmFzZVVybCArICcvd29ya2Zsb3dzLycgKyB3b3JrZmxvd0lkICsgJy92ZXJzaW9ucy8nICsgd29ya2Zsb3dWZXJzaW9uSWQgKyAnL2FydGlmYWN0LWRlbGl2ZXJpZXMnLCB7Ci0gICAgICAgICAgICAgICAgZW5kcG9pbnQ6IHRoaXMuY2F0YWxvZ0Jhc2VVcmwgKyAnLycgKyBjb21wb25lbnQuZ2V0VHlwZVVybCgpICsgY29tcG9uZW50LnV1aWQgKyAnL2ludGVyZmFjZXMvJyArIG9wZXJhdGlvbklkICsgJy9hcnRpZmFjdHMvJyArIGFydGlmYWN0VXVpZCwKKyAgICBwdWJsaWMgYXNzb2NpYXRlV29ya2Zsb3dBcnRpZmFjdChjb21wb25lbnQ6IENvbXBvbmVudCwgb3BlcmF0aW9uOiBDcmVhdGVPcGVyYXRpb25SZXNwb25zZSk6IE9ic2VydmFibGU8YW55PiB7CisgICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLmJhc2VVcmwgKyAnL3dvcmtmbG93cy8nICsgb3BlcmF0aW9uLndvcmtmbG93SWQgKyAnL3ZlcnNpb25zLycgKyBvcGVyYXRpb24ud29ya2Zsb3dWZXJzaW9uSWQgKyAnL2FydGlmYWN0LWRlbGl2ZXJpZXMnLCB7CisgICAgICAgICAgICAgICAgZW5kcG9pbnQ6IHRoaXMuY2F0YWxvZ0Jhc2VVcmwgKyAnLycgKyBjb21wb25lbnQuZ2V0VHlwZVVybCgpICsgY29tcG9uZW50LnV1aWQgKyAnL2ludGVyZmFjZXMvJyArIG9wZXJhdGlvbi5pbnRlcmZhY2VJZCArICcvb3BlcmF0aW9ucy8nICsgb3BlcmF0aW9uLnVuaXF1ZUlkICsgJy9hcnRpZmFjdHMvJyArIG9wZXJhdGlvbi5hcnRpZmFjdFVVSUQsCiAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcKICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAubWFwKChyZXM6UmVzcG9uc2UpID0+IHsKQEAgLTQwLDcgKzUwLDcgQEAKICAgICBwdWJsaWMgZ2V0V29ya2Zsb3dWZXJzaW9ucyh3b3JrZmxvd0lkOiBzdHJpbmcsIGZpbHRlckNlcnRpZmllZDogYm9vbGVhbiA9IHRydWUpOiBPYnNlcnZhYmxlPGFueT4gewogICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmJhc2VVcmwgKyAnL3dvcmtmbG93cy8nICsgd29ya2Zsb3dJZCArICcvdmVyc2lvbnMnICsgKGZpbHRlckNlcnRpZmllZCA/ICc/c3RhdGU9JyArIHRoaXMuVkVSU0lPTl9TVEFURV9DRVJUSUZJRUQgOiAnJykpCiAgICAgICAgICAgICAubWFwKChyZXM6UmVzcG9uc2UpID0+IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzLmpzb24oKS5pdGVtczsKKyAgICAgICAgICAgICAgICByZXR1cm4gXy5tYXAocmVzLmpzb24oKS5pdGVtcywgdmVyc2lvbiA9PiB2ZXJzaW9uKTsKICAgICAgICAgICAgIH0pOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY2F0YWxvZy11aS9zcmMvYXBwL3V0aWxzL2NvbW1vbi11dGlscy50cyBiL2NhdGFsb2ctdWkvc3JjL2FwcC91dGlscy9jb21tb24tdXRpbHMudHMKaW5kZXggN2JhNTBmZC4uYzUyNTlmMCAxMDA2NDQKLS0tIGEvY2F0YWxvZy11aS9zcmMvYXBwL3V0aWxzL2NvbW1vbi11dGlscy50cworKysgYi9jYXRhbG9nLXVpL3NyYy9hcHAvdXRpbHMvY29tbW9uLXV0aWxzLnRzCkBAIC0xOSw5ICsxOSw5IEBACiAgKi8KIAogaW1wb3J0ICogYXMgXyBmcm9tICJsb2Rhc2giOwotaW1wb3J0IHtNb2R1bGUsIEF0dHJpYnV0ZU1vZGVsLCBSZXNvdXJjZUluc3RhbmNlLCBQcm9wZXJ0eU1vZGVsLCBJbnB1dEZFTW9kZWwsIE9wZXJhdGlvbk1vZGVsfSBmcm9tICIuLi9tb2RlbHMiOwotaW1wb3J0IHtDb21wb25lbnRJbnN0YW5jZUZhY3Rvcnl9IGZyb20gIi4vY29tcG9uZW50LWluc3RhbmNlLWZhY3RvcnkiOwotaW1wb3J0IHtJbnB1dEJFTW9kZWwsIFByb3BlcnR5QkVNb2RlbCwgUmVsYXRpb25zaGlwTW9kZWx9IGZyb20gImFwcC9tb2RlbHMiOworaW1wb3J0IHsgQ29tcG9uZW50SW5zdGFuY2VGYWN0b3J5IH0gZnJvbSAiLi9jb21wb25lbnQtaW5zdGFuY2UtZmFjdG9yeSI7CitpbXBvcnQgeyBNb2R1bGUsIEF0dHJpYnV0ZU1vZGVsLCBSZXNvdXJjZUluc3RhbmNlLCBQcm9wZXJ0eU1vZGVsLCBJbnB1dEZFTW9kZWwsIEludGVyZmFjZU1vZGVsLCBPcGVyYXRpb25Nb2RlbCB9IGZyb20gIi4uL21vZGVscyI7CitpbXBvcnQgeyBJbnB1dEJFTW9kZWwsIFByb3BlcnR5QkVNb2RlbCwgUmVsYXRpb25zaGlwTW9kZWwgfSBmcm9tICJhcHAvbW9kZWxzIjsKIGltcG9ydCB7IFBvbGljeUluc3RhbmNlIH0gZnJvbSAiYXBwL21vZGVscy9ncmFwaC96b25lcy9wb2xpY3ktaW5zdGFuY2UiOwogaW1wb3J0IHsgR3JvdXBJbnN0YW5jZSB9IGZyb20gIi4uL21vZGVscy9ncmFwaC96b25lcy9ncm91cC1pbnN0YW5jZSI7CiAKQEAgLTEzOSw0NCArMTM5LDU1IEBACiAgICAgICAgIHJldHVybiBncm91cHM7CiAgICAgfQogCi0gICAgc3RhdGljIGluaXRJbnRlcmZhY2VPcGVyYXRpb25zKGludGVyZmFjZXM6IGFueSk6IEFycmF5PE9wZXJhdGlvbk1vZGVsPiB7CisgICAgc3RhdGljIGluaXRJbnRlcmZhY2VzKGludGVyZmFjZXM6IEFycmF5PEludGVyZmFjZU1vZGVsPik6IEFycmF5PEludGVyZmFjZU1vZGVsPiB7CiAKLSAgICAgICAgcmV0dXJuIF8ucmVkdWNlKGludGVyZmFjZXMsIChhY2MsIGludGVyZjogYW55KSA9PiB7CisgICAgICAgIHJldHVybiBfLm1hcChpbnRlcmZhY2VzLCAoaW50ZXJmOiBJbnRlcmZhY2VNb2RlbCkgPT4geworCisgICAgICAgICAgICByZXR1cm4gbmV3IEludGVyZmFjZU1vZGVsKHsKKyAgICAgICAgICAgICAgICB0eXBlOiBpbnRlcmYudHlwZSwKKyAgICAgICAgICAgICAgICB1bmlxdWVJZDogaW50ZXJmLnVuaXF1ZUlkLAorICAgICAgICAgICAgICAgIG9wZXJhdGlvbnM6IF8ubWFwKGludGVyZi5vcGVyYXRpb25zLAorICAgICAgICAgICAgICAgICAgICAob3BlcmF0aW9uOiBPcGVyYXRpb25Nb2RlbCkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3T3BlcmF0aW9uID0gbmV3IE9wZXJhdGlvbk1vZGVsKG9wZXJhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdPcGVyYXRpb24uaW50ZXJmYWNlVHlwZSA9IGludGVyZi50eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3T3BlcmF0aW9uLmludGVyZmFjZUlkID0gaW50ZXJmLnVuaXF1ZUlkOworCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7aW5wdXRzLCBvdXRwdXRzfSA9IG9wZXJhdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdPcGVyYXRpb24uY3JlYXRlSW5wdXRzTGlzdChpbnB1dHMubGlzdFRvc2NhRGF0YURlZmluaXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG91dHB1dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdPcGVyYXRpb24uY3JlYXRlT3V0cHV0c0xpc3Qob3V0cHV0cy5saXN0VG9zY2FEYXRhRGVmaW5pdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdPcGVyYXRpb247CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICB9KTsKKworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW5pdEludGVyZmFjZU9wZXJhdGlvbnMoaW50ZXJmYWNlczogQXJyYXk8SW50ZXJmYWNlTW9kZWw+KTogQXJyYXk8T3BlcmF0aW9uTW9kZWw+IHsKKworICAgICAgICByZXR1cm4gXy5yZWR1Y2UoaW50ZXJmYWNlcywgKGFjYywgaW50ZXJmOiBJbnRlcmZhY2VNb2RlbCkgPT4gewogCiAgICAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdCgKICAgICAgICAgICAgICAgICBfLm1hcChpbnRlcmYub3BlcmF0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgKHtkZXNjcmlwdGlvbiwgbmFtZSwgdW5pcXVlSWQsIGlucHV0cywgb3V0cHV0cywgd29ya2Zsb3dJZCwgd29ya2Zsb3dWZXJzaW9uSWQsIHdvcmtmbG93QXNzb2NpYXRpb25UeXBlfSkgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW9uID0gbmV3IE9wZXJhdGlvbk1vZGVsKHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25UeXBlOiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtmbG93QXNzb2NpYXRpb25UeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtmbG93SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Zsb3dWZXJzaW9uSWQKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAob3BlcmF0aW9uOiBPcGVyYXRpb25Nb2RlbCkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3T3BlcmF0aW9uID0gbmV3IE9wZXJhdGlvbk1vZGVsKG9wZXJhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdPcGVyYXRpb24uaW50ZXJmYWNlVHlwZSA9IGludGVyZi50eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3T3BlcmF0aW9uLmludGVyZmFjZUlkID0gaW50ZXJmLnVuaXF1ZUlkOworCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7aW5wdXRzLCBvdXRwdXRzfSA9IG9wZXJhdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFBhcmFtcyA9IF8ubWFwKGlucHV0cy5saXN0VG9zY2FEYXRhRGVmaW5pdGlvbiwgKGlucHV0OmFueSkgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaW5wdXQubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBpbnB1dC5pbnB1dElkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogaW5wdXQudHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmRhdG9yeTogaW5wdXQubWFuZGF0b3J5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLmNyZWF0ZUlucHV0UGFyYW1zTGlzdChpbnB1dFBhcmFtcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3T3BlcmF0aW9uLmNyZWF0ZUlucHV0c0xpc3QoaW5wdXRzLmxpc3RUb3NjYURhdGFEZWZpbml0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdXRwdXRzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0UGFyYW1zID0gXy5tYXAob3V0cHV0cy5saXN0VG9zY2FEYXRhRGVmaW5pdGlvbiwgKG91dHB1dDphbnkpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG91dHB1dC5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG91dHB1dC5pbnB1dElkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogb3V0cHV0LnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRvcnk6IG91dHB1dC5tYW5kYXRvcnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uY3JlYXRlT3V0cHV0UGFyYW1zTGlzdChvdXRwdXRQYXJhbXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld09wZXJhdGlvbi5jcmVhdGVPdXRwdXRzTGlzdChvdXRwdXRzLmxpc3RUb3NjYURhdGFEZWZpbml0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb247CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdPcGVyYXRpb247CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICApOwpkaWZmIC0tZ2l0IGEvY2F0YWxvZy11aS9zcmMvYXNzZXRzL2xhbmd1YWdlcy9lbl9VUy5qc29uIGIvY2F0YWxvZy11aS9zcmMvYXNzZXRzL2xhbmd1YWdlcy9lbl9VUy5qc29uCmluZGV4IDAyYmM1OGYuLjhlNDNmMTggMTAwNjQ0Ci0tLSBhL2NhdGFsb2ctdWkvc3JjL2Fzc2V0cy9sYW5ndWFnZXMvZW5fVVMuanNvbgorKysgYi9jYXRhbG9nLXVpL3NyYy9hc3NldHMvbGFuZ3VhZ2VzL2VuX1VTLmpzb24KQEAgLTQ1MSw2ICs0NTEsMjMgQEAKICAgICAiU0VSVklDRV9QQVRIX1NFTEVDVE9SX0hJREVfQUxMX1ZBTFVFIiA6ICLimoogSGlkZSBhbGwg4pqKIiwKICAgICAiU0VSVklDRV9QQVRIX1NFTEVDVE9SX1NIT1dfQUxMX1ZBTFVFIiA6ICLimoogU2hvdyBhbGwg4pqKIiwKIAorICAgICI9PT09PT09PT09PSBJTlRFUkZBQ0UgT1BFUkFUSU9OID09PT09PT09PT0iOiAiIiwKKyAgICAiSU5URVJGQUNFX0FERF9PUEVSQVRJT04iOiAiQWRkIE9wZXJhdGlvbiIsCisgICAgIklOVEVSRkFDRV9FWFBBTkRfQUxMIjogIkV4cGFuZCBBbGwiLAorICAgICJJTlRFUkZBQ0VfQ09MTEFQU0VfQUxMIjogIkNvbGxhcHNlIEFsbCIsCisgICAgIklOVEVSRkFDRV9IRUFERVJfTkFNRSI6ICJOYW1lIiwKKyAgICAiSU5URVJGQUNFX0hFQURFUl9ERVNDUklQVElPTiI6ICJEZXNjcmlwdGlvbiIsCisKKyAgICAiPT09PT09PT09PT0gSU5URVJGQUNFIE9QRVJBVElPTiBNT0RBTCBBVFRSSUJVVEVTID09PT09PT09PSI6ICIiLAorICAgICJJTlRFUkZBQ0VfQ1JFQVRFX1RJVExFIjogIkNyZWF0ZSBOZXcgT3BlcmF0aW9uIiwKKyAgICAiSU5URVJGQUNFX0VESVRfVElUTEUiOiAiRWRpdCBPcGVyYXRpb24iLAorICAgICJJTlRFUkZBQ0VfREVMRVRFX1RJVExFIjogIkRlbGV0ZSBPcGVyYXRpb24iLAorICAgICJJTlRFUkZBQ0VfQ0FOQ0VMX0JVVFRPTiI6ICJDYW5jZWwiLAorICAgICJJTlRFUkZBQ0VfU0FWRV9CVVRUT04iOiAiU2F2ZSIsCisgICAgIklOVEVSRkFDRV9DUkVBVEVfQlVUVE9OIjogIkNyZWF0ZSIsCisgICAgIklOVEVSRkFDRV9ERUxFVEVfQlVUVE9OIjogIkRlbGV0ZSIsCisgICAgIklOVEVSRkFDRV9ERUxFVEVfVEVYVCI6ICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHt7b3BlcmF0aW9uTmFtZX19PyIsCisKICAgICAiPT09PT09PT09PT0gT1BFUkFUSU9OIENSRUFUT1IgPT09PT09PT09PT09IjogIiIsCiAgICAgIk9QRVJBVElPTl9QUk9QRVJUWV9UT09MVElQX1RFWFQiOiAiVk5GIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgYnkgdGhlIGlucHV0IHBhcmFtZXRlciB0eXBlLiBJbiBjYXNlIHlvdSBjYW4ndCBmaW5kIGEgY2VydGFpbiBwYXJhbWV0ZXIsIGl0IG1pZ2h0IGJlIGR1ZSB0byBhIHdyb25nIHR5cGUgc2VsZWN0aW9uLiIsCiAgICAgIlNFUlZJQ0VfT1BFUkFUSU9OX1BST1BFUlRZX1RPT0xUSVBfVEVYVCI6ICJTZXJ2aWNlIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgYnkgdGhlIGlucHV0IHBhcmFtZXRlciB0eXBlLiBJbiBjYXNlIHlvdSBjYW4ndCBmaW5kIGEgY2VydGFpbiBwYXJhbWV0ZXIsIGl0IG1pZ2h0IGJlIGR1ZSB0byBhIHdyb25nIHR5cGUgc2VsZWN0aW9uLiIsCkBAIC00NTgsMTAgKzQ3NSwxMiBAQAogICAgICJORVdfV09SS0ZMT1dfQVNTT0NJQVRJT04iOiAiTmV3IFdvcmtmbG93IiwKICAgICAiRVhJU1RJTkdfV09SS0ZMT1dfQVNTT0NJQVRJT04iOiAiRXhpc3RpbmcgV29ya2Zsb3ciLAogCisgICAgIk9QRVJBVElPTl9JTlRFUkZBQ0VfVFlQRSI6ICJJbnRlcmZhY2UgTmFtZSIsCiAgICAgIk9QRVJBVElPTl9OQU1FIjogIk9wZXJhdGlvbiBOYW1lIiwKICAgICAiT1BFUkFUSU9OX0RFU0NSSVBUSU9OIjogIkRlc2NyaXB0aW9uIiwKICAgICAiT1BFUkFUSU9OX1dPUktGTE9XX0FTU0lHTk1FTlQiOiAiV29ya2Zsb3cgQXNzaWdubWVudCIsCiAgICAgIk9QRVJBVElPTl9XT1JLRkxPVyI6ICJXb3JrZmxvdyIsCisgICAgIk9QRVJBVElPTl9OT19XT1JLRkxPV19FUlJPUiI6ICJObyBDZXJ0aWZpZWQgVmVyc2lvbnMgQXZhaWxhYmxlIiwKICAgICAiT1BFUkFUSU9OX1dPUktGTE9XX0FSQ0hJVkVEIjogIkFyY2hpdmVkIiwKICAgICAiT1BFUkFUSU9OX1dPUktGTE9XX1ZFUlNJT04iOiAiV29ya2Zsb3cgVmVyc2lvbiIsCiAgICAgIk9QRVJBVElPTl9BRERfUEFSQU1TIjogIkFkZCBQYXJhbWF0ZXJzIiwKQEAgLTQ2OSwxMSArNDg4LDE0IEBACiAgICAgIk9QRVJBVElPTl9QQVJBTV9UWVBFIjogIlR5cGUiLAogICAgICJPUEVSQVRJT05fUEFSQU1fUFJPUEVSVFkiOiAiUHJvcGVydHkiLAogICAgICJPUEVSQVRJT05fUEFSQU1fTUFOREFUT1JZIjogIk1hbmRhdG9yeSIsCisKICAgICAiRU1QVFlfUEFSQU1fVEFCTEVfSEVBREVSIjogIk5PIFBBUkFNRVRFUlMgVE8gU0hPVyIsCiAgICAgIkVNUFRZX1BBUkFNX1RBQkxFX05PX1NFTEVDVEVEX1dPUktGTE9XXzEiOiAiU2VsZWN0IFdvcmtmbG93IGFuZCBXb3JrZmxvdyBWZXJzaW9uIGFib3ZlIiwKICAgICAiRU1QVFlfUEFSQU1fVEFCTEVfTk9fU0VMRUNURURfV09SS0ZMT1dfMiI6ICJpbiBvcmRlciB0byBzZWUgdGhlIHBhcmFtZXRlcnMiLAogICAgICJFTVBUWV9QQVJBTV9UQUJMRV9OT19XT1JLRkxPV1MiOiAiT25seSA8Yj5jZXJ0aWZpZWQ8L2I+IHdvcmtmbG93IHZlcnNpb25zIGNhbiBiZSBhc3NpZ25lZCB0byBhbiBvcGVyYXRpb24iLAogCisgICAgIlBBUkFNX05PTkVfT0ZfVFlQRSI6ICJObyBhdmFpbGFibGUgcHJvcGVydGllcyBvZiB0aGlzIHR5cGUuIiwKKwogCiAgICAgIj09PT09PT09PT09IFBMVUdJTiBOT1QgQ09OTkVDVEVEID09PT09PT09PT09IjogIiIsCiAgICAgIlBMVUdJTl9OT1RfQ09OTkVDVEVEX0VSUk9SX01BSU4iOiAiVGhlIFwie3twbHVnaW5OYW1lfX1cIiBwbHVnaW4gaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlLiIsCg==