1778692639
441d63ebbc39eba359c9061ece8482bd-phpdoc%3Ac87a915cea198464679d3f446c68bdd6-ba6752d0f2dae0c73befc634078d060c
s:13328:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxNDp7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjIxOiJSZWRpczYzUHJveHlUcmFpdC5waHAiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YToxOntzOjMxOiJcU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcVHJhaXRzIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MzE6IlxTeW1mb255XENvbXBvbmVudFxDYWNoZVxUcmFpdHMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJUcmFpdHMiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MTp7czo0OToiXFN5bWZvbnlcQ29tcG9uZW50XENhY2hlXFRyYWl0c1xSZWRpczYzUHJveHlUcmFpdCI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxUcmFpdF8iOjEwOntzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxUcmFpdF8AcHJvcGVydGllcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAG1ldGhvZHMiO2E6MDp7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFRyYWl0XwB1c2VkVHJhaXRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxUcmFpdF8AbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE1OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxUcmFpdF8AZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE2MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxUcmFpdF8AY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxUcmFpdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0OToiXFN5bWZvbnlcQ29tcG9uZW50XENhY2hlXFRyYWl0c1xSZWRpczYzUHJveHlUcmFpdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE3OiJSZWRpczYzUHJveHlUcmFpdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFRyYWl0XwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czozMDoiU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcVHJhaXRzIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAG1ldGFkYXRhIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxUcmFpdF8AYXR0cmlidXRlcyI7YTowOnt9fX1zOjQwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGVudW1zIjthOjA6e31zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGhhc2giO3M6MzI6ImJhNjc1MmQwZjJkYWUwYzczYmVmYzYzNDA3OGQwNjBjIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6NDk6InZlbmRvci9zeW1mb255L2NhY2hlL1RyYWl0cy9SZWRpczYzUHJveHlUcmFpdC5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjY2NjA6Ijw/cGhwCgovKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgU3ltZm9ueSBwYWNrYWdlLgogKgogKiAoYykgRmFiaWVuIFBvdGVuY2llciA8ZmFiaWVuQHN5bWZvbnkuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcVHJhaXRzOwoKaWYgKHZlcnNpb25fY29tcGFyZShwaHB2ZXJzaW9uKCdyZWRpcycpLCAnNi4zLjAnLCAnPj0nKSkgewogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgdHJhaXQgUmVkaXM2M1Byb3h5VHJhaXQKICAgIHsKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZGVsaWZlcSgka2V5LCAkdmFsdWUpOiBcUmVkaXN8aW50fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+ZGVsaWZlcSguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBoZXhwaXJlKCRrZXksICR0dGwsICRmaWVsZHMsICRtb2RlID0gbnVsbCk6IFxSZWRpc3xhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmhleHBpcmUoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaGV4cGlyZWF0KCRrZXksICR0aW1lLCAkZmllbGRzLCAkbW9kZSA9IG51bGwpOiBcUmVkaXN8YXJyYXl8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5oZXhwaXJlYXQoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaGV4cGlyZXRpbWUoJGtleSwgJGZpZWxkcyk6IFxSZWRpc3xhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmhleHBpcmV0aW1lKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGhnZXRkZWwoJGtleSwgJGZpZWxkcyk6IFxSZWRpc3xhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmhnZXRkZWwoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaGdldGV4KCRrZXksICRmaWVsZHMsICRleHBpcnkgPSBudWxsKTogXFJlZGlzfGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+aGdldGV4KC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGhHZXRXaXRoTWV0YSgka2V5LCAkbWVtYmVyKTogbWl4ZWQKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5oR2V0V2l0aE1ldGEoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaHBlcnNpc3QoJGtleSwgJGZpZWxkcyk6IFxSZWRpc3xhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmhwZXJzaXN0KC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGhwZXhwaXJlKCRrZXksICR0dGwsICRmaWVsZHMsICRtb2RlID0gbnVsbCk6IFxSZWRpc3xhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmhwZXhwaXJlKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGhwZXhwaXJlYXQoJGtleSwgJG1zdGltZSwgJGZpZWxkcywgJG1vZGUgPSBudWxsKTogXFJlZGlzfGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+aHBleHBpcmVhdCguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBocGV4cGlyZXRpbWUoJGtleSwgJGZpZWxkcyk6IFxSZWRpc3xhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmhwZXhwaXJldGltZSguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBocHR0bCgka2V5LCAkZmllbGRzKTogXFJlZGlzfGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+aHB0dGwoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaHNldGV4KCRrZXksICRmaWVsZHMsICRleHBpcnkgPSBudWxsKTogXFJlZGlzfGludHxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmhzZXRleCguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBodHRsKCRrZXksICRmaWVsZHMpOiBcUmVkaXN8YXJyYXl8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5odHRsKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZhZGQoJGtleSwgJHZhbHVlcywgJGVsZW1lbnQsICRvcHRpb25zID0gbnVsbCk6IFxSZWRpc3xpbnR8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT52YWRkKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZjYXJkKCRrZXkpOiBcUmVkaXN8aW50fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+dmNhcmQoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdmRpbSgka2V5KTogXFJlZGlzfGludHxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPnZkaW0oLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdmVtYigka2V5LCAkbWVtYmVyLCAkcmF3ID0gZmFsc2UpOiBcUmVkaXN8YXJyYXl8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT52ZW1iKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZnZXRhdHRyKCRrZXksICRtZW1iZXIsICRkZWNvZGUgPSB0cnVlKTogXFJlZGlzfGFycmF5fHN0cmluZ3xmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPnZnZXRhdHRyKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZpbmZvKCRrZXkpOiBcUmVkaXN8YXJyYXl8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT52aW5mbyguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiB2aXNtZW1iZXIoJGtleSwgJG1lbWJlcik6IFxSZWRpc3xib29sCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+dmlzbWVtYmVyKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZsaW5rcygka2V5LCAkbWVtYmVyLCAkd2l0aHNjb3JlcyA9IGZhbHNlKTogXFJlZGlzfGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+dmxpbmtzKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZyYW5kbWVtYmVyKCRrZXksICRjb3VudCA9IDApOiBcUmVkaXN8YXJyYXl8c3RyaW5nfGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+dnJhbmRtZW1iZXIoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdnJhbmdlKCRrZXksICRtaW4sICRtYXgsICRjb3VudCA9IC0xKTogXFJlZGlzfGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+dnJhbmdlKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZyZW0oJGtleSwgJG1lbWJlcik6IFxSZWRpc3xpbnR8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT52cmVtKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZzZXRhdHRyKCRrZXksICRtZW1iZXIsICRhdHRyaWJ1dGVzKTogXFJlZGlzfGludHxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPnZzZXRhdHRyKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZzaW0oJGtleSwgJG1lbWJlciwgJG9wdGlvbnMgPSBudWxsKTogXFJlZGlzfGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+dnNpbSguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CiAgICB9Cn0gZWxzZSB7CiAgICAvKioKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICB0cmFpdCBSZWRpczYzUHJveHlUcmFpdAogICAgewogICAgfQp9CiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG1ldGFkYXRhIjthOjA6e319";