1778692648
441d63ebbc39eba359c9061ece8482bd-phpdoc%3Abdf3506833ed587016bd466f936ccc46-6cf933f09a80f078166a1c60035ebc39
s:23532:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxNDp7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjM0OiJSZWdpc3RlclNlcnZpY2VTdWJzY3JpYmVyc1Bhc3MucGhwIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czo0NzoiXFN5bWZvbnlcQ29tcG9uZW50XERlcGVuZGVuY3lJbmplY3Rpb25cQ29tcGlsZXIiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NzoiXFN5bWZvbnlcQ29tcG9uZW50XERlcGVuZGVuY3lJbmplY3Rpb25cQ29tcGlsZXIiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJDb21waWxlciI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGluY2x1ZGVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGZ1bmN0aW9ucyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjb25zdGFudHMiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY2xhc3NlcyI7YToxOntzOjc4OiJcU3ltZm9ueVxDb21wb25lbnRcRGVwZW5kZW5jeUluamVjdGlvblxDb21waWxlclxSZWdpc3RlclNlcnZpY2VTdWJzY3JpYmVyc1Bhc3MiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfIjoxNTp7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGltcGxlbWVudHMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBjb25zdGFudHMiO2E6MDp7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwcm9wZXJ0aWVzIjthOjE6e3M6OTI6IlxTeW1mb255XENvbXBvbmVudFxEZXBlbmRlbmN5SW5qZWN0aW9uXENvbXBpbGVyXFJlZ2lzdGVyU2VydmljZVN1YnNjcmliZXJzUGFzczo6JHNraXBTY2FsYXJzIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5IjoxNDp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozNTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBlbmRMb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo5MjoiXFN5bWZvbnlcQ29tcG9uZW50XERlcGVuZGVuY3lJbmplY3Rpb25cQ29tcGlsZXJcUmVnaXN0ZXJTZXJ2aWNlU3Vic2NyaWJlcnNQYXNzOjokc2tpcFNjYWxhcnMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMToic2tpcFNjYWxhcnMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEV4cHJlc3Npb24iOjI6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEV4cHJlc3Npb24AZXhwcmVzc2lvbiI7czo0OiJ0cnVlIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxFeHByZXNzaW9uAHBhcnRzIjthOjA6e319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEJvb2xlYW4iOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQByZWFkT25seSI7YjowO3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGhvb2tzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXJ0dWFsIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbWV0YWRhdGEiO2E6MDp7fXM6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGF0dHJpYnV0ZXMiO2E6MDp7fX19czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAG1ldGhvZHMiO2E6MTp7czo5NDoiXFN5bWZvbnlcQ29tcG9uZW50XERlcGVuZGVuY3lJbmplY3Rpb25cQ29tcGlsZXJcUmVnaXN0ZXJTZXJ2aWNlU3Vic2NyaWJlcnNQYXNzOjpwcm9jZXNzVmFsdWUoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjEzOntzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjI6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo1OiJ2YWx1ZSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToxO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xCb29sZWFuIjowOnt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo2OiJpc1Jvb3QiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRXhwcmVzc2lvbiI6Mjp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRXhwcmVzc2lvbgBleHByZXNzaW9uIjtzOjQ0OiJ7eyBQSFBET0M2ODkzNGEzZTk0NTVmYTcyNDIwMjM3ZWIwNTkwMjMyNyB9fSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRXhwcmVzc2lvbgBwYXJ0cyI7YToxOntzOjQ0OiJ7eyBQSFBET0M2ODkzNGEzZTk0NTVmYTcyNDIwMjM3ZWIwNTkwMjMyNyB9fSI7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBzZXVkb1R5cGVzXEZhbHNlXyI6MDp7fX19czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM3O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjEzNDA7fXM6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABlbmRMb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTQ5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjc2MTY7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6OTQ6IlxTeW1mb255XENvbXBvbmVudFxEZXBlbmRlbmN5SW5qZWN0aW9uXENvbXBpbGVyXFJlZ2lzdGVyU2VydmljZVN1YnNjcmliZXJzUGFzczo6cHJvY2Vzc1ZhbHVlKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMjoicHJvY2Vzc1ZhbHVlIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjk6InByb3RlY3RlZCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGhhc1JldHVybkJ5UmVmZXJlbmNlIjtiOjA7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAG1ldGFkYXRhIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXR0cmlidXRlcyI7YTowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE1MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo3ODoiXFN5bWZvbnlcQ29tcG9uZW50XERlcGVuZGVuY3lJbmplY3Rpb25cQ29tcGlsZXJcUmVnaXN0ZXJTZXJ2aWNlU3Vic2NyaWJlcnNQYXNzIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MzA6IlJlZ2lzdGVyU2VydmljZVN1YnNjcmliZXJzUGFzcyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NzM6IkNvbXBpbGVyIHBhc3MgdG8gcmVnaXN0ZXIgdGFnZ2VkIHNlcnZpY2VzIHRoYXQgcmVxdWlyZSBhIHNlcnZpY2UgbG9jYXRvci4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvciI6NDp7czo3OiIAKgBuYW1lIjtzOjY6ImF1dGhvciI7czoxNDoiACoAZGVzY3JpcHRpb24iO047czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JOYW1lIjtzOjE0OiJOaWNvbGFzIEdyZWthcyI7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JFbWFpbCI7czoxMzoicEB0Y2h3b3JrLmNvbSI7fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjQ2OiJTeW1mb255XENvbXBvbmVudFxEZXBlbmRlbmN5SW5qZWN0aW9uXENvbXBpbGVyIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YToxMzp7czoyMToiUHNyQ29udGFpbmVySW50ZXJmYWNlIjtzOjMyOiJQc3JcQ29udGFpbmVyXENvbnRhaW5lckludGVyZmFjZSI7czoxODoiQWJzdHJhY3RDb250cm9sbGVyIjtzOjYwOiJTeW1mb255XEJ1bmRsZVxGcmFtZXdvcmtCdW5kbGVcQ29udHJvbGxlclxBYnN0cmFjdENvbnRyb2xsZXIiO3M6MTM6IkJvdW5kQXJndW1lbnQiO3M6NjA6IlN5bWZvbnlcQ29tcG9uZW50XERlcGVuZGVuY3lJbmplY3Rpb25cQXJndW1lbnRcQm91bmRBcmd1bWVudCI7czo4OiJBdXRvd2lyZSI7czo1NjoiU3ltZm9ueVxDb21wb25lbnRcRGVwZW5kZW5jeUluamVjdGlvblxBdHRyaWJ1dGVcQXV0b3dpcmUiO3M6MTg6IkNvbnRhaW5lckludGVyZmFjZSI7czo1NjoiU3ltZm9ueVxDb21wb25lbnRcRGVwZW5kZW5jeUluamVjdGlvblxDb250YWluZXJJbnRlcmZhY2UiO3M6MTA6IkRlZmluaXRpb24iO3M6NDg6IlN5bWZvbnlcQ29tcG9uZW50XERlcGVuZGVuY3lJbmplY3Rpb25cRGVmaW5pdGlvbiI7czoyNDoiSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIjtzOjcyOiJTeW1mb255XENvbXBvbmVudFxEZXBlbmRlbmN5SW5qZWN0aW9uXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24iO3M6OToiUmVmZXJlbmNlIjtzOjQ3OiJTeW1mb255XENvbXBvbmVudFxEZXBlbmRlbmN5SW5qZWN0aW9uXFJlZmVyZW5jZSI7czoxNDoiVHlwZWRSZWZlcmVuY2UiO3M6NTI6IlN5bWZvbnlcQ29tcG9uZW50XERlcGVuZGVuY3lJbmplY3Rpb25cVHlwZWRSZWZlcmVuY2UiO3M6MTY6IlNlc3Npb25JbnRlcmZhY2UiO3M6NTc6IlN5bWZvbnlcQ29tcG9uZW50XEh0dHBGb3VuZGF0aW9uXFNlc3Npb25cU2Vzc2lvbkludGVyZmFjZSI7czoxNzoiU3Vic2NyaWJlZFNlcnZpY2UiO3M6NTM6IlN5bWZvbnlcQ29udHJhY3RzXFNlcnZpY2VcQXR0cmlidXRlXFN1YnNjcmliZWRTZXJ2aWNlIjtzOjI0OiJTZXJ2aWNlUHJvdmlkZXJJbnRlcmZhY2UiO3M6NTA6IlN5bWZvbnlcQ29udHJhY3RzXFNlcnZpY2VcU2VydmljZVByb3ZpZGVySW50ZXJmYWNlIjtzOjI2OiJTZXJ2aWNlU3Vic2NyaWJlckludGVyZmFjZSI7czo1MjoiU3ltZm9ueVxDb250cmFjdHNcU2VydmljZVxTZXJ2aWNlU3Vic2NyaWJlckludGVyZmFjZSI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwYXJlbnQiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo2OToiXFN5bWZvbnlcQ29tcG9uZW50XERlcGVuZGVuY3lJbmplY3Rpb25cQ29tcGlsZXJcQWJzdHJhY3RSZWN1cnNpdmVQYXNzIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MjE6IkFic3RyYWN0UmVjdXJzaXZlUGFzcyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmaW5hbCI7YjowO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwByZWFkT25seSI7YjowO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRhZGF0YSI7YTowOnt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGF0dHJpYnV0ZXMiO2E6MDp7fX19czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbnRlcmZhY2VzIjthOjA6e31zOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHRyYWl0cyI7YTowOnt9czo0MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBlbnVtcyI7YTowOnt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiI2Y2Y5MzNmMDlhODBmMDc4MTY2YTFjNjAwMzVlYmMzOSI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjc5OiJ2ZW5kb3Ivc3ltZm9ueS9kZXBlbmRlbmN5LWluamVjdGlvbi9Db21waWxlci9SZWdpc3RlclNlcnZpY2VTdWJzY3JpYmVyc1Bhc3MucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czo3NjIwOiI8P3BocAoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFN5bWZvbnkgcGFja2FnZS4KICoKICogKGMpIEZhYmllbiBQb3RlbmNpZXIgPGZhYmllbkBzeW1mb255LmNvbT4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0UKICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XERlcGVuZGVuY3lJbmplY3Rpb25cQ29tcGlsZXI7Cgp1c2UgUHNyXENvbnRhaW5lclxDb250YWluZXJJbnRlcmZhY2UgYXMgUHNyQ29udGFpbmVySW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxCdW5kbGVcRnJhbWV3b3JrQnVuZGxlXENvbnRyb2xsZXJcQWJzdHJhY3RDb250cm9sbGVyOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcRGVwZW5kZW5jeUluamVjdGlvblxBcmd1bWVudFxCb3VuZEFyZ3VtZW50Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcRGVwZW5kZW5jeUluamVjdGlvblxBdHRyaWJ1dGVcQXV0b3dpcmU7CnVzZSBTeW1mb255XENvbXBvbmVudFxEZXBlbmRlbmN5SW5qZWN0aW9uXENvbnRhaW5lckludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XERlcGVuZGVuY3lJbmplY3Rpb25cRGVmaW5pdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XERlcGVuZGVuY3lJbmplY3Rpb25cRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XERlcGVuZGVuY3lJbmplY3Rpb25cUmVmZXJlbmNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcRGVwZW5kZW5jeUluamVjdGlvblxUeXBlZFJlZmVyZW5jZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XEh0dHBGb3VuZGF0aW9uXFNlc3Npb25cU2Vzc2lvbkludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29udHJhY3RzXFNlcnZpY2VcQXR0cmlidXRlXFN1YnNjcmliZWRTZXJ2aWNlOwp1c2UgU3ltZm9ueVxDb250cmFjdHNcU2VydmljZVxTZXJ2aWNlUHJvdmlkZXJJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbnRyYWN0c1xTZXJ2aWNlXFNlcnZpY2VTdWJzY3JpYmVySW50ZXJmYWNlOwoKLyoqCiAqIENvbXBpbGVyIHBhc3MgdG8gcmVnaXN0ZXIgdGFnZ2VkIHNlcnZpY2VzIHRoYXQgcmVxdWlyZSBhIHNlcnZpY2UgbG9jYXRvci4KICoKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICovCmNsYXNzIFJlZ2lzdGVyU2VydmljZVN1YnNjcmliZXJzUGFzcyBleHRlbmRzIEFic3RyYWN0UmVjdXJzaXZlUGFzcwp7CiAgICBwcm90ZWN0ZWQgYm9vbCAkc2tpcFNjYWxhcnMgPSB0cnVlOwoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBwcm9jZXNzVmFsdWUobWl4ZWQgJHZhbHVlLCBib29sICRpc1Jvb3QgPSBmYWxzZSk6IG1peGVkCiAgICB7CiAgICAgICAgaWYgKCEkdmFsdWUgaW5zdGFuY2VvZiBEZWZpbml0aW9uIHx8ICR2YWx1ZS0+aXNBYnN0cmFjdCgpIHx8ICR2YWx1ZS0+aXNTeW50aGV0aWMoKSB8fCAhJHZhbHVlLT5oYXNUYWcoJ2NvbnRhaW5lci5zZXJ2aWNlX3N1YnNjcmliZXInKSkgewogICAgICAgICAgICByZXR1cm4gcGFyZW50Ojpwcm9jZXNzVmFsdWUoJHZhbHVlLCAkaXNSb290KTsKICAgICAgICB9CgogICAgICAgICRzZXJ2aWNlTWFwID0gW107CiAgICAgICAgJGF1dG93aXJlID0gJHZhbHVlLT5pc0F1dG93aXJlZCgpOwoKICAgICAgICBmb3JlYWNoICgkdmFsdWUtPmdldFRhZygnY29udGFpbmVyLnNlcnZpY2Vfc3Vic2NyaWJlcicpIGFzICRhdHRyaWJ1dGVzKSB7CiAgICAgICAgICAgIGlmICghJGF0dHJpYnV0ZXMpIHsKICAgICAgICAgICAgICAgICRhdXRvd2lyZSA9IHRydWU7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBrc29ydCgkYXR0cmlidXRlcyk7CiAgICAgICAgICAgIGlmIChbXSAhPT0gYXJyYXlfZGlmZihhcnJheV9rZXlzKCRhdHRyaWJ1dGVzKSwgWydpZCcsICdrZXknXSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oXHNwcmludGYoJ1RoZSAiY29udGFpbmVyLnNlcnZpY2Vfc3Vic2NyaWJlciIgdGFnIGFjY2VwdHMgb25seSB0aGUgImtleSIgYW5kICJpZCIgYXR0cmlidXRlcywgIiVzIiBnaXZlbiBmb3Igc2VydmljZSAiJXMiLicsIGltcGxvZGUoJyIsICInLCBhcnJheV9rZXlzKCRhdHRyaWJ1dGVzKSksICR0aGlzLT5jdXJyZW50SWQpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIVxhcnJheV9rZXlfZXhpc3RzKCdpZCcsICRhdHRyaWJ1dGVzKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignTWlzc2luZyAiaWQiIGF0dHJpYnV0ZSBvbiAiY29udGFpbmVyLnNlcnZpY2Vfc3Vic2NyaWJlciIgdGFnIHdpdGgga2V5PSIlcyIgZm9yIHNlcnZpY2UgIiVzIi4nLCAkYXR0cmlidXRlc1sna2V5J10sICR0aGlzLT5jdXJyZW50SWQpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIVxhcnJheV9rZXlfZXhpc3RzKCdrZXknLCAkYXR0cmlidXRlcykpIHsKICAgICAgICAgICAgICAgICRhdHRyaWJ1dGVzWydrZXknXSA9ICRhdHRyaWJ1dGVzWydpZCddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc3NldCgkc2VydmljZU1hcFskYXR0cmlidXRlc1sna2V5J11dKSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHNlcnZpY2VNYXBbJGF0dHJpYnV0ZXNbJ2tleSddXSA9IG5ldyBSZWZlcmVuY2UoJGF0dHJpYnV0ZXNbJ2lkJ10pOwogICAgICAgIH0KICAgICAgICAkY2xhc3MgPSAkdmFsdWUtPmdldENsYXNzKCk7CgogICAgICAgIGlmICghJHIgPSAkdGhpcy0+Y29udGFpbmVyLT5nZXRSZWZsZWN0aW9uQ2xhc3MoJGNsYXNzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCdDbGFzcyAiJXMiIHVzZWQgZm9yIHNlcnZpY2UgIiVzIiBjYW5ub3QgYmUgZm91bmQuJywgJGNsYXNzLCAkdGhpcy0+Y3VycmVudElkKSk7CiAgICAgICAgfQogICAgICAgIGlmICghJHItPmlzU3ViY2xhc3NPZihTZXJ2aWNlU3Vic2NyaWJlckludGVyZmFjZTo6Y2xhc3MpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oXHNwcmludGYoJ1NlcnZpY2UgIiVzIiBtdXN0IGltcGxlbWVudCBpbnRlcmZhY2UgIiVzIi4nLCAkdGhpcy0+Y3VycmVudElkLCBTZXJ2aWNlU3Vic2NyaWJlckludGVyZmFjZTo6Y2xhc3MpKTsKICAgICAgICB9CiAgICAgICAgJGNsYXNzID0gJHItPm5hbWU7CiAgICAgICAgLy8gdG8gcmVtb3ZlIHdoZW4gc3ltZm9ueS9kZXBlbmRlbmN5LWluamVjdGlvbiB3aWxsIHN0b3AgYmVpbmcgY29tcGF0aWJsZSB3aXRoIHN5bWZvbnkvZnJhbWV3b3JrLWJ1bmRsZTw2LjAKICAgICAgICAkcmVwbGFjZURlcHJlY2F0ZWRTZXNzaW9uID0gJHRoaXMtPmNvbnRhaW5lci0+aGFzKCcuc2Vzc2lvbi5kZXByZWNhdGVkJykgJiYgJHItPmlzU3ViY2xhc3NPZihBYnN0cmFjdENvbnRyb2xsZXI6OmNsYXNzKTsKICAgICAgICAkc3Vic2NyaWJlck1hcCA9IFtdOwoKICAgICAgICBmb3JlYWNoICgkY2xhc3M6OmdldFN1YnNjcmliZWRTZXJ2aWNlcygpIGFzICRrZXkgPT4gJHR5cGUpIHsKICAgICAgICAgICAgJGF0dHJpYnV0ZXMgPSBbXTsKCiAgICAgICAgICAgIGlmICghaXNzZXQoJHNlcnZpY2VNYXBbJGtleV0pICYmICR0eXBlIGluc3RhbmNlb2YgQXV0b3dpcmUpIHsKICAgICAgICAgICAgICAgICRzdWJzY3JpYmVyTWFwWyRrZXldID0gJHR5cGU7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCR0eXBlIGluc3RhbmNlb2YgU3Vic2NyaWJlZFNlcnZpY2UpIHsKICAgICAgICAgICAgICAgICRrZXkgPSAkdHlwZS0+a2V5ID8/ICRrZXk7CiAgICAgICAgICAgICAgICAkYXR0cmlidXRlcyA9ICR0eXBlLT5hdHRyaWJ1dGVzOwogICAgICAgICAgICAgICAgJHR5cGUgPSAoJHR5cGUtPm51bGxhYmxlID8gJz8nIDogJycpLigkdHlwZS0+dHlwZSA/PyB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCdXaGVuICIlczo6Z2V0U3Vic2NyaWJlZFNlcnZpY2VzKCkiIHJldHVybnMgIiVzIiwgYSB0eXBlIG11c3QgYmUgc2V0LicsICRjbGFzcywgU3Vic2NyaWJlZFNlcnZpY2U6OmNsYXNzKSkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIVxpc19zdHJpbmcoJHR5cGUpIHx8ICFwcmVnX21hdGNoKCcvKD8oREVGSU5FKSg/PGNuPlthLXpBLVpfXHg3Zi1ceGZmXVthLXpBLVowLTlfXHg3Zi1ceGZmXSorKSkoPyhERUZJTkUpKD88ZnFjbj4oPyZjbikoPzpcXFxcKD8mY24pKSorKSleXD8/KD8mZnFjbikoPzooPzpcfCg/JmZxY24pKSorfCg/OiYoPyZmcWNuKSkqKykkLycsICR0eXBlKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignIiVzOjpnZXRTdWJzY3JpYmVkU2VydmljZXMoKSIgbXVzdCByZXR1cm4gdmFsaWQgUEhQIHR5cGVzIGZvciBzZXJ2aWNlICIlcyIga2V5ICIlcyIsICIlcyIgcmV0dXJuZWQuJywgJGNsYXNzLCAkdGhpcy0+Y3VycmVudElkLCAka2V5LCBcaXNfc3RyaW5nKCR0eXBlKSA/ICR0eXBlIDogZ2V0X2RlYnVnX3R5cGUoJHR5cGUpKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG9wdGlvbmFsQmVoYXZpb3IgPSBDb250YWluZXJJbnRlcmZhY2U6OkVYQ0VQVElPTl9PTl9JTlZBTElEX1JFRkVSRU5DRTsKICAgICAgICAgICAgaWYgKCc/JyA9PT0gJHR5cGVbMF0pIHsKICAgICAgICAgICAgICAgICR0eXBlID0gc3Vic3RyKCR0eXBlLCAxKTsKICAgICAgICAgICAgICAgICRvcHRpb25hbEJlaGF2aW9yID0gQ29udGFpbmVySW50ZXJmYWNlOjpJR05PUkVfT05fSU5WQUxJRF9SRUZFUkVOQ0U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKFxpc19pbnQoJG5hbWUgPSAka2V5KSkgewogICAgICAgICAgICAgICAgJGtleSA9ICR0eXBlOwogICAgICAgICAgICAgICAgJG5hbWUgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghaXNzZXQoJHNlcnZpY2VNYXBbJGtleV0pKSB7CiAgICAgICAgICAgICAgICBpZiAoISRhdXRvd2lyZSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oXHNwcmludGYoJ1NlcnZpY2UgIiVzIiBtaXNzZXMgYSAiY29udGFpbmVyLnNlcnZpY2Vfc3Vic2NyaWJlciIgdGFnIHdpdGggImtleSIvImlkIiBhdHRyaWJ1dGVzIGNvcnJlc3BvbmRpbmcgdG8gZW50cnkgIiVzIiBhcyByZXR1cm5lZCBieSAiJXM6OmdldFN1YnNjcmliZWRTZXJ2aWNlcygpIi4nLCAkdGhpcy0+Y3VycmVudElkLCAka2V5LCAkY2xhc3MpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkcmVwbGFjZURlcHJlY2F0ZWRTZXNzaW9uICYmIFNlc3Npb25JbnRlcmZhY2U6OmNsYXNzID09PSAkdHlwZSkgewogICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdHJpZ2dlcmluZyB0aGUgZGVwcmVjYXRpb24gd2hlbiBidWlsZGluZyB0aGUgY29udGFpbmVyCiAgICAgICAgICAgICAgICAgICAgLy8gdG8gcmVtb3ZlIHdoZW4gc3ltZm9ueS9kZXBlbmRlbmN5LWluamVjdGlvbiB3aWxsIHN0b3AgYmVpbmcgY29tcGF0aWJsZSB3aXRoIHN5bWZvbnkvZnJhbWV3b3JrLWJ1bmRsZTw2LjAKICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICcuc2Vzc2lvbi5kZXByZWNhdGVkJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRzZXJ2aWNlTWFwWyRrZXldID0gbmV3IFJlZmVyZW5jZSgkdHlwZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkbmFtZSkgewogICAgICAgICAgICAgICAgaWYgKGZhbHNlICE9PSAkaSA9IHN0cnBvcygkbmFtZSwgJzo6Z2V0JykpIHsKICAgICAgICAgICAgICAgICAgICAkbmFtZSA9IGxjZmlyc3Qoc3Vic3RyKCRuYW1lLCA1ICsgJGkpKTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmIChzdHJfY29udGFpbnMoJG5hbWUsICc6OicpKSB7CiAgICAgICAgICAgICAgICAgICAgJG5hbWUgPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobnVsbCAhPT0gJG5hbWUgJiYgISR0aGlzLT5jb250YWluZXItPmhhcygkbmFtZSkgJiYgISR0aGlzLT5jb250YWluZXItPmhhcygkdHlwZS4nICQnLiRuYW1lKSkgewogICAgICAgICAgICAgICAgJGNhbWVsQ2FzZU5hbWUgPSBsY2ZpcnN0KHN0cl9yZXBsYWNlKCcgJywgJycsIHVjd29yZHMocHJlZ19yZXBsYWNlKCcvW15hLXpBLVowLTlceDdmLVx4ZmZdKysvJywgJyAnLCAkbmFtZSkpKSk7CiAgICAgICAgICAgICAgICAkbmFtZSA9ICR0aGlzLT5jb250YWluZXItPmhhcygkdHlwZS4nICQnLiRjYW1lbENhc2VOYW1lKSA/ICRjYW1lbENhc2VOYW1lIDogJG5hbWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRzdWJzY3JpYmVyTWFwWyRrZXldID0gbmV3IFR5cGVkUmVmZXJlbmNlKChzdHJpbmcpICRzZXJ2aWNlTWFwWyRrZXldLCAkdHlwZSwgJG9wdGlvbmFsQmVoYXZpb3IsICRuYW1lLCAkYXR0cmlidXRlcyk7CiAgICAgICAgICAgIHVuc2V0KCRzZXJ2aWNlTWFwWyRrZXldKTsKICAgICAgICB9CgogICAgICAgIGlmICgkc2VydmljZU1hcCA9IGFycmF5X2tleXMoJHNlcnZpY2VNYXApKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoMSA8IFxjb3VudCgkc2VydmljZU1hcCkgPyAna2V5cyAiJXMiIGRvJyA6ICdrZXkgIiVzIiBkb2VzJywgc3RyX3JlcGxhY2UoJyUnLCAnJSUnLCBpbXBsb2RlKCciLCAiJywgJHNlcnZpY2VNYXApKSk7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oXHNwcmludGYoJ1NlcnZpY2UgJXMgbm90IGV4aXN0IGluIHRoZSBtYXAgcmV0dXJuZWQgYnkgIiVzOjpnZXRTdWJzY3JpYmVkU2VydmljZXMoKSIgZm9yIHNlcnZpY2UgIiVzIi4nLCAkbWVzc2FnZSwgJGNsYXNzLCAkdGhpcy0+Y3VycmVudElkKSk7CiAgICAgICAgfQoKICAgICAgICAkbG9jYXRvclJlZiA9IFNlcnZpY2VMb2NhdG9yVGFnUGFzczo6cmVnaXN0ZXIoJHRoaXMtPmNvbnRhaW5lciwgJHN1YnNjcmliZXJNYXAsICR0aGlzLT5jdXJyZW50SWQpOwoKICAgICAgICAkdmFsdWUtPmFkZFRhZygnY29udGFpbmVyLnNlcnZpY2Vfc3Vic2NyaWJlci5sb2NhdG9yJywgWydpZCcgPT4gKHN0cmluZykgJGxvY2F0b3JSZWZdKTsKCiAgICAgICAgJHZhbHVlLT5zZXRCaW5kaW5ncyhbCiAgICAgICAgICAgIFBzckNvbnRhaW5lckludGVyZmFjZTo6Y2xhc3MgPT4gbmV3IEJvdW5kQXJndW1lbnQoJGxvY2F0b3JSZWYsIGZhbHNlKSwKICAgICAgICAgICAgU2VydmljZVByb3ZpZGVySW50ZXJmYWNlOjpjbGFzcyA9PiBuZXcgQm91bmRBcmd1bWVudCgkbG9jYXRvclJlZiwgZmFsc2UpLAogICAgICAgIF0gKyAkdmFsdWUtPmdldEJpbmRpbmdzKCkpOwoKICAgICAgICByZXR1cm4gcGFyZW50Ojpwcm9jZXNzVmFsdWUoJHZhbHVlKTsKICAgIH0KfQoiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZG9jQmxvY2siO047czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBtZXRhZGF0YSI7YTowOnt9fQ==";