// Auto-generated by tsbundle - do not edit export const files: { path: string; contentBase64: string }[] = [ { "path": "bundle.js", "contentBase64": "dmFyIEpPPU9iamVjdC5jcmVhdGU7dmFyIGV1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgS089T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgWE89T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIFpPPU9iamVjdC5nZXRQcm90b3R5cGVPZixlST1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBvPSh0LGUpPT5ldSh0LCJuYW1lIix7dmFsdWU6ZSxjb25maWd1cmFibGU6ITB9KTt2YXIgaHI9KHQsZSk9PigpPT57dHJ5e3JldHVybiBlfHx0KChlPXtleHBvcnRzOnt9fSkuZXhwb3J0cyxlKSxlLmV4cG9ydHN9Y2F0Y2gocil7dGhyb3cgZT0wLHJ9fSxzZT0odCxlKT0+e2Zvcih2YXIgciBpbiBlKWV1KHQscix7Z2V0OmVbcl0sZW51bWVyYWJsZTohMH0pfSx0ST0odCxlLHIsbik9PntpZihlJiZ0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKWZvcihsZXQgaSBvZiBYTyhlKSkhZUkuY2FsbCh0LGkpJiZpIT09ciYmZXUodCxpLHtnZXQ6KCk9PmVbaV0sZW51bWVyYWJsZTohKG49S08oZSxpKSl8fG4uZW51bWVyYWJsZX0pO3JldHVybiB0fTt2YXIgZHI9KHQsZSxyKT0+KHI9dCE9bnVsbD9KTyhaTyh0KSk6e30sdEkoZXx8IXR8fCF0Ll9fZXNNb2R1bGU/ZXUociwiZGVmYXVsdCIse3ZhbHVlOnQsZW51bWVyYWJsZTohMH0pOnIsdCkpO3ZhciB0bD1ocihmdT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZnUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1LnVuaT12b2lkIDA7dmFyIG1JPW8oKHQ9InVuaSIpPT5gJHt0fV8keyJ4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgiLnJlcGxhY2UoL1t4eV0vZyxlPT57bGV0IHI9TWF0aC5yYW5kb20oKSoxNnwwO3JldHVybihlPT09IngiP3I6ciYzfDgpLnRvU3RyaW5nKDE2KX0pfWAsInVuaSIpO2Z1LnVuaT1tSX0pO3ZhciBzMT1ocigodmcsa2cpPT57KGZ1bmN0aW9uKHQsZSl7dHlwZW9mIHZnPT0ib2JqZWN0IiYmdHlwZW9mIGtnPCJ1Ij9rZy5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0fHxzZWxmKS5kYXlqcz1lKCl9KSh2ZywoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9MWUzLGU9NmU0LHI9MzZlNSxuPSJtaWxsaXNlY29uZCIsaT0ic2Vjb25kIixzPSJtaW51dGUiLGE9ImhvdXIiLGw9ImRheSIsYz0id2VlayIsdT0ibW9udGgiLGY9InF1YXJ0ZXIiLHA9InllYXIiLGg9ImRhdGUiLGQ9IkludmFsaWQgRGF0ZSIsbT0vXihcZHs0fSlbLS9dPyhcZHsxLDJ9KT9bLS9dPyhcZHswLDJ9KVtUdFxzXSooXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Wy46XT8oXGQrKT8kLyxnPS9cWyhbXlxdXSspXXxZWVlZfFlZfE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLHk9e25hbWU6ImVuIix3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksbW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG9yZGluYWw6byhmdW5jdGlvbih6KXt2YXIgST1bInRoIiwic3QiLCJuZCIsInJkIl0sTD16JTEwMDtyZXR1cm4iWyIreisoSVsoTC0yMCklMTBdfHxJW0xdfHxJWzBdKSsiXSJ9LCJvcmRpbmFsIil9LHg9byhmdW5jdGlvbih6LEksTCl7dmFyIEg9U3RyaW5nKHopO3JldHVybiFIfHxILmxlbmd0aD49ST96OiIiK0FycmF5KEkrMS1ILmxlbmd0aCkuam9pbihMKSt6fSwibSIpLGs9e3M6eCx6Om8oZnVuY3Rpb24oeil7dmFyIEk9LXoudXRjT2Zmc2V0KCksTD1NYXRoLmFicyhJKSxIPU1hdGguZmxvb3IoTC82MCksVz1MJTYwO3JldHVybihJPD0wPyIrIjoiLSIpK3goSCwyLCIwIikrIjoiK3goVywyLCIwIil9LCJ6IiksbTpvKGZ1bmN0aW9uIHooSSxMKXtpZihJLmRhdGUoKTxMLmRhdGUoKSlyZXR1cm4teihMLEkpO3ZhciBIPTEyKihMLnllYXIoKS1JLnllYXIoKSkrKEwubW9udGgoKS1JLm1vbnRoKCkpLFc9SS5jbG9uZSgpLmFkZChILHUpLEc9TC1XPDAsWD1JLmNsb25lKCkuYWRkKEgrKEc/LTE6MSksdSk7cmV0dXJuKygtKEgrKEwtVykvKEc/Vy1YOlgtVykpfHwwKX0sInQiKSxhOm8oZnVuY3Rpb24oeil7cmV0dXJuIHo8MD9NYXRoLmNlaWwoeil8fDA6TWF0aC5mbG9vcih6KX0sImEiKSxwOm8oZnVuY3Rpb24oeil7cmV0dXJue006dSx5OnAsdzpjLGQ6bCxEOmgsaDphLG06cyxzOmksbXM6bixROmZ9W3pdfHxTdHJpbmcoenx8IiIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvcyQvLCIiKX0sInAiKSx1Om8oZnVuY3Rpb24oeil7cmV0dXJuIHo9PT12b2lkIDB9LCJ1Iil9LFQ9ImVuIixSPXt9O1JbVF09eTt2YXIgXz0iJGlzRGF5anNPYmplY3QiLEU9byhmdW5jdGlvbih6KXtyZXR1cm4geiBpbnN0YW5jZW9mIE18fCEoIXp8fCF6W19dKX0sIlMiKSxBPW8oZnVuY3Rpb24geihJLEwsSCl7dmFyIFc7aWYoIUkpcmV0dXJuIFQ7aWYodHlwZW9mIEk9PSJzdHJpbmciKXt2YXIgRz1JLnRvTG93ZXJDYXNlKCk7UltHXSYmKFc9RyksTCYmKFJbR109TCxXPUcpO3ZhciBYPUkuc3BsaXQoIi0iKTtpZighVyYmWC5sZW5ndGg+MSlyZXR1cm4geihYWzBdKX1lbHNle3ZhciB1ZT1JLm5hbWU7Ult1ZV09SSxXPXVlfXJldHVybiFIJiZXJiYoVD1XKSxXfHwhSCYmVH0sInQiKSxGPW8oZnVuY3Rpb24oeixJKXtpZihFKHopKXJldHVybiB6LmNsb25lKCk7dmFyIEw9dHlwZW9mIEk9PSJvYmplY3QiP0k6e307cmV0dXJuIEwuZGF0ZT16LEwuYXJncz1hcmd1bWVudHMsbmV3IE0oTCl9LCJPIiksVT1rO1UubD1BLFUuaT1FLFUudz1mdW5jdGlvbih6LEkpe3JldHVybiBGKHose2xvY2FsZTpJLiRMLHV0YzpJLiR1LHg6SS4keCwkb2Zmc2V0OkkuJG9mZnNldH0pfTt2YXIgTT0oZnVuY3Rpb24oKXtmdW5jdGlvbiB6KEwpe3RoaXMuJEw9QShMLmxvY2FsZSxudWxsLCEwKSx0aGlzLnBhcnNlKEwpLHRoaXMuJHg9dGhpcy4keHx8TC54fHx7fSx0aGlzW19dPSEwfW8oeiwiTSIpO3ZhciBJPXoucHJvdG90eXBlO3JldHVybiBJLnBhcnNlPWZ1bmN0aW9uKEwpe3RoaXMuJGQ9KGZ1bmN0aW9uKEgpe3ZhciBXPUguZGF0ZSxHPUgudXRjO2lmKFc9PT1udWxsKXJldHVybiBuZXcgRGF0ZShOYU4pO2lmKFUudShXKSlyZXR1cm4gbmV3IERhdGU7aWYoVyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKFcpO2lmKHR5cGVvZiBXPT0ic3RyaW5nIiYmIS9aJC9pLnRlc3QoVykpe3ZhciBYPVcubWF0Y2gobSk7aWYoWCl7dmFyIHVlPVhbMl0tMXx8MCx3PShYWzddfHwiMCIpLnN1YnN0cmluZygwLDMpO3JldHVybiBHP25ldyBEYXRlKERhdGUuVVRDKFhbMV0sdWUsWFszXXx8MSxYWzRdfHwwLFhbNV18fDAsWFs2XXx8MCx3KSk6bmV3IERhdGUoWFsxXSx1ZSxYWzNdfHwxLFhbNF18fDAsWFs1XXx8MCxYWzZdfHwwLHcpfX1yZXR1cm4gbmV3IERhdGUoVyl9KShMKSx0aGlzLmluaXQoKX0sSS5pbml0PWZ1bmN0aW9uKCl7dmFyIEw9dGhpcy4kZDt0aGlzLiR5PUwuZ2V0RnVsbFllYXIoKSx0aGlzLiRNPUwuZ2V0TW9udGgoKSx0aGlzLiREPUwuZ2V0RGF0ZSgpLHRoaXMuJFc9TC5nZXREYXkoKSx0aGlzLiRIPUwuZ2V0SG91cnMoKSx0aGlzLiRtPUwuZ2V0TWludXRlcygpLHRoaXMuJHM9TC5nZXRTZWNvbmRzKCksdGhpcy4kbXM9TC5nZXRNaWxsaXNlY29uZHMoKX0sSS4kdXRpbHM9ZnVuY3Rpb24oKXtyZXR1cm4gVX0sSS5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9TdHJpbmcoKSE9PWR9LEkuaXNTYW1lPWZ1bmN0aW9uKEwsSCl7dmFyIFc9RihMKTtyZXR1cm4gdGhpcy5zdGFydE9mKEgpPD1XJiZXPD10aGlzLmVuZE9mKEgpfSxJLmlzQWZ0ZXI9ZnVuY3Rpb24oTCxIKXtyZXR1cm4gRihMKTx0aGlzLnN0YXJ0T2YoSCl9LEkuaXNCZWZvcmU9ZnVuY3Rpb24oTCxIKXtyZXR1cm4gdGhpcy5lbmRPZihIKTxGKEwpfSxJLiRnPWZ1bmN0aW9uKEwsSCxXKXtyZXR1cm4gVS51KEwpP3RoaXNbSF06dGhpcy5zZXQoVyxMKX0sSS51bml4PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0sSS52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQuZ2V0VGltZSgpfSxJLnN0YXJ0T2Y9ZnVuY3Rpb24oTCxIKXt2YXIgVz10aGlzLEc9ISFVLnUoSCl8fEgsWD1VLnAoTCksdWU9byhmdW5jdGlvbihELHYpe3ZhciBDPVUudyhXLiR1P0RhdGUuVVRDKFcuJHksdixEKTpuZXcgRGF0ZShXLiR5LHYsRCksVyk7cmV0dXJuIEc/QzpDLmVuZE9mKGwpfSwibCIpLHc9byhmdW5jdGlvbihELHYpe3JldHVybiBVLncoVy50b0RhdGUoKVtEXS5hcHBseShXLnRvRGF0ZSgicyIpLChHP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UodikpLFcpfSwiJCIpLHdlPXRoaXMuJFcsRWU9dGhpcy4kTSxTPXRoaXMuJEQsQmU9InNldCIrKHRoaXMuJHU/IlVUQyI6IiIpO3N3aXRjaChYKXtjYXNlIHA6cmV0dXJuIEc/dWUoMSwwKTp1ZSgzMSwxMSk7Y2FzZSB1OnJldHVybiBHP3VlKDEsRWUpOnVlKDAsRWUrMSk7Y2FzZSBjOnZhciBldD10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsS3Q9KHdlPGV0P3dlKzc6d2UpLWV0O3JldHVybiB1ZShHP1MtS3Q6UysoNi1LdCksRWUpO2Nhc2UgbDpjYXNlIGg6cmV0dXJuIHcoQmUrIkhvdXJzIiwwKTtjYXNlIGE6cmV0dXJuIHcoQmUrIk1pbnV0ZXMiLDEpO2Nhc2UgczpyZXR1cm4gdyhCZSsiU2Vjb25kcyIsMik7Y2FzZSBpOnJldHVybiB3KEJlKyJNaWxsaXNlY29uZHMiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LEkuZW5kT2Y9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuc3RhcnRPZihMLCExKX0sSS4kc2V0PWZ1bmN0aW9uKEwsSCl7dmFyIFcsRz1VLnAoTCksWD0ic2V0IisodGhpcy4kdT8iVVRDIjoiIiksdWU9KFc9e30sV1tsXT1YKyJEYXRlIixXW2hdPVgrIkRhdGUiLFdbdV09WCsiTW9udGgiLFdbcF09WCsiRnVsbFllYXIiLFdbYV09WCsiSG91cnMiLFdbc109WCsiTWludXRlcyIsV1tpXT1YKyJTZWNvbmRzIixXW25dPVgrIk1pbGxpc2Vjb25kcyIsVylbR10sdz1HPT09bD90aGlzLiREKyhILXRoaXMuJFcpOkg7aWYoRz09PXV8fEc9PT1wKXt2YXIgd2U9dGhpcy5jbG9uZSgpLnNldChoLDEpO3dlLiRkW3VlXSh3KSx3ZS5pbml0KCksdGhpcy4kZD13ZS5zZXQoaCxNYXRoLm1pbih0aGlzLiRELHdlLmRheXNJbk1vbnRoKCkpKS4kZH1lbHNlIHVlJiZ0aGlzLiRkW3VlXSh3KTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sSS5zZXQ9ZnVuY3Rpb24oTCxIKXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQoTCxIKX0sSS5nZXQ9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXNbVS5wKEwpXSgpfSxJLmFkZD1mdW5jdGlvbihMLEgpe3ZhciBXLEc9dGhpcztMPU51bWJlcihMKTt2YXIgWD1VLnAoSCksdWU9byhmdW5jdGlvbihFZSl7dmFyIFM9RihHKTtyZXR1cm4gVS53KFMuZGF0ZShTLmRhdGUoKStNYXRoLnJvdW5kKEVlKkwpKSxHKX0sInkiKTtpZihYPT09dSlyZXR1cm4gdGhpcy5zZXQodSx0aGlzLiRNK0wpO2lmKFg9PT1wKXJldHVybiB0aGlzLnNldChwLHRoaXMuJHkrTCk7aWYoWD09PWwpcmV0dXJuIHVlKDEpO2lmKFg9PT1jKXJldHVybiB1ZSg3KTt2YXIgdz0oVz17fSxXW3NdPWUsV1thXT1yLFdbaV09dCxXKVtYXXx8MSx3ZT10aGlzLiRkLmdldFRpbWUoKStMKnc7cmV0dXJuIFUudyh3ZSx0aGlzKX0sSS5zdWJ0cmFjdD1mdW5jdGlvbihMLEgpe3JldHVybiB0aGlzLmFkZCgtMSpMLEgpfSxJLmZvcm1hdD1mdW5jdGlvbihMKXt2YXIgSD10aGlzLFc9dGhpcy4kbG9jYWxlKCk7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBXLmludmFsaWREYXRlfHxkO3ZhciBHPUx8fCJZWVlZLU1NLUREVEhIOm1tOnNzWiIsWD1VLnoodGhpcyksdWU9dGhpcy4kSCx3PXRoaXMuJG0sd2U9dGhpcy4kTSxFZT1XLndlZWtkYXlzLFM9Vy5tb250aHMsQmU9Vy5tZXJpZGllbSxldD1vKGZ1bmN0aW9uKHYsQyxPLEIpe3JldHVybiB2JiYodltDXXx8dihILEcpKXx8T1tDXS5zbGljZSgwLEIpfSwiaCIpLEt0PW8oZnVuY3Rpb24odil7cmV0dXJuIFUucyh1ZSUxMnx8MTIsdiwiMCIpfSwiZCIpLEQ9QmV8fGZ1bmN0aW9uKHYsQyxPKXt2YXIgQj12PDEyPyJBTSI6IlBNIjtyZXR1cm4gTz9CLnRvTG93ZXJDYXNlKCk6Qn07cmV0dXJuIEcucmVwbGFjZShnLChmdW5jdGlvbih2LEMpe3JldHVybiBDfHwoZnVuY3Rpb24oTyl7c3dpdGNoKE8pe2Nhc2UiWVkiOnJldHVybiBTdHJpbmcoSC4keSkuc2xpY2UoLTIpO2Nhc2UiWVlZWSI6cmV0dXJuIFUucyhILiR5LDQsIjAiKTtjYXNlIk0iOnJldHVybiB3ZSsxO2Nhc2UiTU0iOnJldHVybiBVLnMod2UrMSwyLCIwIik7Y2FzZSJNTU0iOnJldHVybiBldChXLm1vbnRoc1Nob3J0LHdlLFMsMyk7Y2FzZSJNTU1NIjpyZXR1cm4gZXQoUyx3ZSk7Y2FzZSJEIjpyZXR1cm4gSC4kRDtjYXNlIkREIjpyZXR1cm4gVS5zKEguJEQsMiwiMCIpO2Nhc2UiZCI6cmV0dXJuIFN0cmluZyhILiRXKTtjYXNlImRkIjpyZXR1cm4gZXQoVy53ZWVrZGF5c01pbixILiRXLEVlLDIpO2Nhc2UiZGRkIjpyZXR1cm4gZXQoVy53ZWVrZGF5c1Nob3J0LEguJFcsRWUsMyk7Y2FzZSJkZGRkIjpyZXR1cm4gRWVbSC4kV107Y2FzZSJIIjpyZXR1cm4gU3RyaW5nKHVlKTtjYXNlIkhIIjpyZXR1cm4gVS5zKHVlLDIsIjAiKTtjYXNlImgiOnJldHVybiBLdCgxKTtjYXNlImhoIjpyZXR1cm4gS3QoMik7Y2FzZSJhIjpyZXR1cm4gRCh1ZSx3LCEwKTtjYXNlIkEiOnJldHVybiBEKHVlLHcsITEpO2Nhc2UibSI6cmV0dXJuIFN0cmluZyh3KTtjYXNlIm1tIjpyZXR1cm4gVS5zKHcsMiwiMCIpO2Nhc2UicyI6cmV0dXJuIFN0cmluZyhILiRzKTtjYXNlInNzIjpyZXR1cm4gVS5zKEguJHMsMiwiMCIpO2Nhc2UiU1NTIjpyZXR1cm4gVS5zKEguJG1zLDMsIjAiKTtjYXNlIloiOnJldHVybiBYfXJldHVybiBudWxsfSkodil8fFgucmVwbGFjZSgiOiIsIiIpfSkpfSxJLnV0Y09mZnNldD1mdW5jdGlvbigpe3JldHVybiAxNSotTWF0aC5yb3VuZCh0aGlzLiRkLmdldFRpbWV6b25lT2Zmc2V0KCkvMTUpfSxJLmRpZmY9ZnVuY3Rpb24oTCxILFcpe3ZhciBHLFg9dGhpcyx1ZT1VLnAoSCksdz1GKEwpLHdlPSh3LnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsRWU9dGhpcy13LFM9byhmdW5jdGlvbigpe3JldHVybiBVLm0oWCx3KX0sIkQiKTtzd2l0Y2godWUpe2Nhc2UgcDpHPVMoKS8xMjticmVhaztjYXNlIHU6Rz1TKCk7YnJlYWs7Y2FzZSBmOkc9UygpLzM7YnJlYWs7Y2FzZSBjOkc9KEVlLXdlKS82MDQ4ZTU7YnJlYWs7Y2FzZSBsOkc9KEVlLXdlKS84NjRlNTticmVhaztjYXNlIGE6Rz1FZS9yO2JyZWFrO2Nhc2UgczpHPUVlL2U7YnJlYWs7Y2FzZSBpOkc9RWUvdDticmVhaztkZWZhdWx0Okc9RWV9cmV0dXJuIFc/RzpVLmEoRyl9LEkuZGF5c0luTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmRPZih1KS4kRH0sSS4kbG9jYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIFJbdGhpcy4kTF19LEkubG9jYWxlPWZ1bmN0aW9uKEwsSCl7aWYoIUwpcmV0dXJuIHRoaXMuJEw7dmFyIFc9dGhpcy5jbG9uZSgpLEc9QShMLEgsITApO3JldHVybiBHJiYoVy4kTD1HKSxXfSxJLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIFUudyh0aGlzLiRkLHRoaXMpfSxJLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LEkudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSxJLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9JU09TdHJpbmcoKX0sSS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvVVRDU3RyaW5nKCl9LHp9KSgpLGJlPU0ucHJvdG90eXBlO3JldHVybiBGLnByb3RvdHlwZT1iZSxbWyIkbXMiLG5dLFsiJHMiLGldLFsiJG0iLHNdLFsiJEgiLGFdLFsiJFciLGxdLFsiJE0iLHVdLFsiJHkiLHBdLFsiJEQiLGhdXS5mb3JFYWNoKChmdW5jdGlvbih6KXtiZVt6WzFdXT1mdW5jdGlvbihJKXtyZXR1cm4gdGhpcy4kZyhJLHpbMF0selsxXSl9fSkpLEYuZXh0ZW5kPWZ1bmN0aW9uKHosSSl7cmV0dXJuIHouJGl8fCh6KEksTSxGKSx6LiRpPSEwKSxGfSxGLmxvY2FsZT1BLEYuaXNEYXlqcz1FLEYudW5peD1mdW5jdGlvbih6KXtyZXR1cm4gRigxZTMqeil9LEYuZW49UltUXSxGLkxzPVIsRi5wPXt9LEZ9KSl9KTt2YXIgYTE9aHIoKFNnLFRnKT0+eyhmdW5jdGlvbih0LGUpe3R5cGVvZiBTZz09Im9iamVjdCImJnR5cGVvZiBUZzwidSI/VGcuZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anNfcGx1Z2luX2lzVG9kYXk9ZSgpfSkoU2csKGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3JldHVybiBmdW5jdGlvbih0LGUscil7ZS5wcm90b3R5cGUuaXNUb2RheT1mdW5jdGlvbigpe3ZhciBuPSJZWVlZLU1NLUREIixpPXIoKTtyZXR1cm4gdGhpcy5mb3JtYXQobik9PT1pLmZvcm1hdChuKX19fSkpfSk7dmFyIGYxPWhyKChIRGUsdTEpPT57InVzZSBzdHJpY3QiO3UxLmV4cG9ydHM9Y2xhc3N7c3RhdGlje28odGhpcywiU3ltYm9sVHJlZU5vZGUiKX1jb25zdHJ1Y3Rvcigpe3RoaXMucGFyZW50PW51bGwsdGhpcy5wcmV2aW91c1NpYmxpbmc9bnVsbCx0aGlzLm5leHRTaWJsaW5nPW51bGwsdGhpcy5maXJzdENoaWxkPW51bGwsdGhpcy5sYXN0Q2hpbGQ9bnVsbCx0aGlzLmNoaWxkcmVuVmVyc2lvbj0wLHRoaXMuY2hpbGRJbmRleENhY2hlZFVwVG89bnVsbCx0aGlzLmNhY2hlZEluZGV4PS0xLHRoaXMuY2FjaGVkSW5kZXhWZXJzaW9uPU5hTn1nZXQgaXNBdHRhY2hlZCgpe3JldHVybiEhKHRoaXMucGFyZW50fHx0aGlzLnByZXZpb3VzU2libGluZ3x8dGhpcy5uZXh0U2libGluZyl9Z2V0IGhhc0NoaWxkcmVuKCl7cmV0dXJuISF0aGlzLmZpcnN0Q2hpbGR9Y2hpbGRyZW5DaGFuZ2VkKCl7dGhpcy5jaGlsZHJlblZlcnNpb249dGhpcy5jaGlsZHJlblZlcnNpb24rMSY0Mjk0OTY3Mjk1LHRoaXMuY2hpbGRJbmRleENhY2hlZFVwVG89bnVsbH1nZXRDYWNoZWRJbmRleChlKXtyZXR1cm4gdGhpcy5jYWNoZWRJbmRleFZlcnNpb24hPT1lLmNoaWxkcmVuVmVyc2lvbj8odGhpcy5jYWNoZWRJbmRleFZlcnNpb249TmFOLC0xKTp0aGlzLmNhY2hlZEluZGV4fXNldENhY2hlZEluZGV4KGUscil7dGhpcy5jYWNoZWRJbmRleFZlcnNpb249ZS5jaGlsZHJlblZlcnNpb24sdGhpcy5jYWNoZWRJbmRleD1yfX19KTt2YXIgaDE9aHIoKFdEZSxwMSk9PnsidXNlIHN0cmljdCI7cDEuZXhwb3J0cz1PYmplY3QuZnJlZXplKHtESVNDT05ORUNURUQ6MSxQUkVDRURJTkc6MixGT0xMT1dJTkc6NCxDT05UQUlOUzo4LENPTlRBSU5FRF9CWToxNn0pfSk7dmFyIHgxPWhyKChxRGUseTEpPT57InVzZSBzdHJpY3QiO3ZhciBkMT1TeW1ib2woKSxtMT1TeW1ib2woKSx4aT1TeW1ib2woKSxnMT1TeW1ib2woKSxMcj1jbGFzc3tzdGF0aWN7byh0aGlzLCJUcmVlSXRlcmF0b3IiKX1jb25zdHJ1Y3RvcihlLHIsbixpKXt0aGlzW2QxXT1lLHRoaXNbbTFdPXIsdGhpc1t4aV09bix0aGlzW2cxXT1pfW5leHQoKXtsZXQgZT10aGlzW2QxXSxyPXRoaXNbZzFdLG49dGhpc1ttMV07aWYoIXRoaXNbeGldKXJldHVybntkb25lOiEwLHZhbHVlOm59O2xldCBpPXRoaXNbeGldO3JldHVybiByPT09MT90aGlzW3hpXT1lLl9ub2RlKGkpLnByZXZpb3VzU2libGluZzpyPT09Mj90aGlzW3hpXT1lLl9ub2RlKGkpLm5leHRTaWJsaW5nOnI9PT0zP3RoaXNbeGldPWUuX25vZGUoaSkucGFyZW50OnI9PT00P3RoaXNbeGldPWUucHJlY2VkaW5nKGkse3Jvb3Q6bn0pOnRoaXNbeGldPWUuZm9sbG93aW5nKGkse3Jvb3Q6bn0pLHtkb25lOiExLHZhbHVlOml9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KExyLnByb3RvdHlwZSxTeW1ib2wuaXRlcmF0b3Ise3ZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sInZhbHVlIiksd3JpdGFibGU6ITF9KSxMci5QUkVWPTEsTHIuTkVYVD0yLExyLlBBUkVOVD0zLExyLlBSRUNFRElORz00LExyLkZPTExPV0lORz01LE9iamVjdC5mcmVlemUoTHIpLE9iamVjdC5mcmVlemUoTHIucHJvdG90eXBlKSx5MS5leHBvcnRzPUxyfSk7dmFyIHcxPWhyKChWRGUsYjEpPT57InVzZSBzdHJpY3QiO3ZhciBqUj1mMSgpLGJpPWgxKCkseHI9eDEoKTtmdW5jdGlvbiBQZygpe3JldHVybiEwfW8oUGcsInJldHVyblRydWUiKTtmdW5jdGlvbiAkcyh0LGUpe3JldHVybiB0W3QubGVuZ3RoLTEtZV19bygkcywicmV2ZXJzZUFycmF5SW5kZXgiKTt2YXIgSXA9Y2xhc3N7c3RhdGlje28odGhpcywiU3ltYm9sVHJlZSIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuc3ltYm9sPVN5bWJvbChlfHwiU3ltYm9sVHJlZSBkYXRhIil9aW5pdGlhbGl6ZShlKXtyZXR1cm4gdGhpcy5fbm9kZShlKSxlfV9ub2RlKGUpe2lmKCFlKXJldHVybiBudWxsO2xldCByPWVbdGhpcy5zeW1ib2xdO3JldHVybiByfHwoZVt0aGlzLnN5bWJvbF09bmV3IGpSKX1oYXNDaGlsZHJlbihlKXtyZXR1cm4gdGhpcy5fbm9kZShlKS5oYXNDaGlsZHJlbn1maXJzdENoaWxkKGUpe3JldHVybiB0aGlzLl9ub2RlKGUpLmZpcnN0Q2hpbGR9bGFzdENoaWxkKGUpe3JldHVybiB0aGlzLl9ub2RlKGUpLmxhc3RDaGlsZH1wcmV2aW91c1NpYmxpbmcoZSl7cmV0dXJuIHRoaXMuX25vZGUoZSkucHJldmlvdXNTaWJsaW5nfW5leHRTaWJsaW5nKGUpe3JldHVybiB0aGlzLl9ub2RlKGUpLm5leHRTaWJsaW5nfXBhcmVudChlKXtyZXR1cm4gdGhpcy5fbm9kZShlKS5wYXJlbnR9bGFzdEluY2x1c2l2ZURlc2NlbmRhbnQoZSl7bGV0IHIsbj1lO2Zvcig7cj10aGlzLl9ub2RlKG4pLmxhc3RDaGlsZDspbj1yO3JldHVybiBufXByZWNlZGluZyhlLHIpe2xldCBuPXImJnIucm9vdDtpZihlPT09bilyZXR1cm4gbnVsbDtsZXQgaT10aGlzLl9ub2RlKGUpLnByZXZpb3VzU2libGluZztyZXR1cm4gaT90aGlzLmxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KGkpOnRoaXMuX25vZGUoZSkucGFyZW50fWZvbGxvd2luZyhlLHIpe2xldCBuPXImJnIucm9vdCxzPSEociYmci5za2lwQ2hpbGRyZW4pJiZ0aGlzLl9ub2RlKGUpLmZpcnN0Q2hpbGQ7aWYocylyZXR1cm4gcztsZXQgYT1lO2Rve2lmKGE9PT1uKXJldHVybiBudWxsO2xldCBsPXRoaXMuX25vZGUoYSkubmV4dFNpYmxpbmc7aWYobClyZXR1cm4gbDthPXRoaXMuX25vZGUoYSkucGFyZW50fXdoaWxlKGEpO3JldHVybiBudWxsfWNoaWxkcmVuVG9BcnJheShlLHIpe2xldCBuPXImJnIuYXJyYXl8fFtdLGk9ciYmci5maWx0ZXJ8fFBnLHM9ciYmci50aGlzQXJnfHx2b2lkIDAsYT10aGlzLl9ub2RlKGUpLGw9YS5maXJzdENoaWxkLGM9MDtmb3IoO2w7KXtsZXQgdT10aGlzLl9ub2RlKGwpO3Uuc2V0Q2FjaGVkSW5kZXgoYSxjKSxpLmNhbGwocyxsKSYmbi5wdXNoKGwpLGw9dS5uZXh0U2libGluZywrK2N9cmV0dXJuIG59YW5jZXN0b3JzVG9BcnJheShlLHIpe2xldCBuPXImJnIuYXJyYXl8fFtdLGk9ciYmci5maWx0ZXJ8fFBnLHM9ciYmci50aGlzQXJnfHx2b2lkIDAsYT1lO2Zvcig7YTspaS5jYWxsKHMsYSkmJm4ucHVzaChhKSxhPXRoaXMuX25vZGUoYSkucGFyZW50O3JldHVybiBufXRyZWVUb0FycmF5KGUscil7bGV0IG49ciYmci5hcnJheXx8W10saT1yJiZyLmZpbHRlcnx8UGcscz1yJiZyLnRoaXNBcmd8fHZvaWQgMCxhPWU7Zm9yKDthOylpLmNhbGwocyxhKSYmbi5wdXNoKGEpLGE9dGhpcy5mb2xsb3dpbmcoYSx7cm9vdDplfSk7cmV0dXJuIG59Y2hpbGRyZW5JdGVyYXRvcihlLHIpe2xldCBuPXImJnIucmV2ZXJzZSxpPXRoaXMuX25vZGUoZSk7cmV0dXJuIG5ldyB4cih0aGlzLGUsbj9pLmxhc3RDaGlsZDppLmZpcnN0Q2hpbGQsbj94ci5QUkVWOnhyLk5FWFQpfXByZXZpb3VzU2libGluZ3NJdGVyYXRvcihlKXtyZXR1cm4gbmV3IHhyKHRoaXMsZSx0aGlzLl9ub2RlKGUpLnByZXZpb3VzU2libGluZyx4ci5QUkVWKX1uZXh0U2libGluZ3NJdGVyYXRvcihlKXtyZXR1cm4gbmV3IHhyKHRoaXMsZSx0aGlzLl9ub2RlKGUpLm5leHRTaWJsaW5nLHhyLk5FWFQpfWFuY2VzdG9yc0l0ZXJhdG9yKGUpe3JldHVybiBuZXcgeHIodGhpcyxlLGUseHIuUEFSRU5UKX10cmVlSXRlcmF0b3IoZSxyKXtsZXQgbj1yJiZyLnJldmVyc2U7cmV0dXJuIG5ldyB4cih0aGlzLGUsbj90aGlzLmxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KGUpOmUsbj94ci5QUkVDRURJTkc6eHIuRk9MTE9XSU5HKX1pbmRleChlKXtsZXQgcj10aGlzLl9ub2RlKGUpLG49dGhpcy5fbm9kZShyLnBhcmVudCk7aWYoIW4pcmV0dXJuLTE7bGV0IGk9ci5nZXRDYWNoZWRJbmRleChuKTtpZihpPj0wKXJldHVybiBpO2k9MDtsZXQgcz1uLmZpcnN0Q2hpbGQ7aWYobi5jaGlsZEluZGV4Q2FjaGVkVXBUbyl7bGV0IGE9dGhpcy5fbm9kZShuLmNoaWxkSW5kZXhDYWNoZWRVcFRvKTtzPWEubmV4dFNpYmxpbmcsaT1hLmdldENhY2hlZEluZGV4KG4pKzF9Zm9yKDtzOyl7bGV0IGE9dGhpcy5fbm9kZShzKTtpZihhLnNldENhY2hlZEluZGV4KG4saSkscz09PWUpYnJlYWs7KytpLHM9YS5uZXh0U2libGluZ31yZXR1cm4gbi5jaGlsZEluZGV4Q2FjaGVkVXBUbz1lLGl9Y2hpbGRyZW5Db3VudChlKXtsZXQgcj10aGlzLl9ub2RlKGUpO3JldHVybiByLmxhc3RDaGlsZD90aGlzLmluZGV4KHIubGFzdENoaWxkKSsxOjB9Y29tcGFyZVRyZWVQb3NpdGlvbihlLHIpe2lmKGU9PT1yKXJldHVybiAwO2xldCBuPVtdO3tsZXQgZj1lO2Zvcig7Zjspe2lmKGY9PT1yKXJldHVybiBiaS5DT05UQUlOU3xiaS5QUkVDRURJTkc7bi5wdXNoKGYpLGY9dGhpcy5wYXJlbnQoZil9fWxldCBpPVtdO3tsZXQgZj1yO2Zvcig7Zjspe2lmKGY9PT1lKXJldHVybiBiaS5DT05UQUlORURfQll8YmkuRk9MTE9XSU5HO2kucHVzaChmKSxmPXRoaXMucGFyZW50KGYpfX1sZXQgcz0kcyhuLDApO2lmKCFzfHxzIT09JHMoaSwwKSlyZXR1cm4gYmkuRElTQ09OTkVDVEVEO2xldCBhPTAsbD1NYXRoLm1pbihuLmxlbmd0aCxpLmxlbmd0aCk7Zm9yKGxldCBmPTA7ZjxsOysrZil7bGV0IHA9JHMobixmKSxoPSRzKGksZik7aWYocCE9PWgpYnJlYWs7YT1mfWxldCBjPXRoaXMuaW5kZXgoJHMobixhKzEpKTtyZXR1cm4gdGhpcy5pbmRleCgkcyhpLGErMSkpPGM/YmkuUFJFQ0VESU5HOmJpLkZPTExPV0lOR31yZW1vdmUoZSl7bGV0IHI9dGhpcy5fbm9kZShlKSxuPXRoaXMuX25vZGUoci5wYXJlbnQpLGk9dGhpcy5fbm9kZShyLnByZXZpb3VzU2libGluZykscz10aGlzLl9ub2RlKHIubmV4dFNpYmxpbmcpO3JldHVybiBuJiYobi5maXJzdENoaWxkPT09ZSYmKG4uZmlyc3RDaGlsZD1yLm5leHRTaWJsaW5nKSxuLmxhc3RDaGlsZD09PWUmJihuLmxhc3RDaGlsZD1yLnByZXZpb3VzU2libGluZykpLGkmJihpLm5leHRTaWJsaW5nPXIubmV4dFNpYmxpbmcpLHMmJihzLnByZXZpb3VzU2libGluZz1yLnByZXZpb3VzU2libGluZyksci5wYXJlbnQ9bnVsbCxyLnByZXZpb3VzU2libGluZz1udWxsLHIubmV4dFNpYmxpbmc9bnVsbCxyLmNhY2hlZEluZGV4PS0xLHIuY2FjaGVkSW5kZXhWZXJzaW9uPU5hTixuJiZuLmNoaWxkcmVuQ2hhbmdlZCgpLGV9aW5zZXJ0QmVmb3JlKGUscil7bGV0IG49dGhpcy5fbm9kZShlKSxpPXRoaXMuX25vZGUobi5wcmV2aW91c1NpYmxpbmcpLHM9dGhpcy5fbm9kZShyKSxhPXRoaXMuX25vZGUobi5wYXJlbnQpO2lmKHMuaXNBdHRhY2hlZCl0aHJvdyBFcnJvcigiR2l2ZW4gb2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUsIHJlbW92ZSBpdCBmaXJzdCIpO3JldHVybiBzLnBhcmVudD1uLnBhcmVudCxzLnByZXZpb3VzU2libGluZz1uLnByZXZpb3VzU2libGluZyxzLm5leHRTaWJsaW5nPWUsbi5wcmV2aW91c1NpYmxpbmc9cixpJiYoaS5uZXh0U2libGluZz1yKSxhJiZhLmZpcnN0Q2hpbGQ9PT1lJiYoYS5maXJzdENoaWxkPXIpLGEmJmEuY2hpbGRyZW5DaGFuZ2VkKCkscn1pbnNlcnRBZnRlcihlLHIpe2xldCBuPXRoaXMuX25vZGUoZSksaT10aGlzLl9ub2RlKG4ubmV4dFNpYmxpbmcpLHM9dGhpcy5fbm9kZShyKSxhPXRoaXMuX25vZGUobi5wYXJlbnQpO2lmKHMuaXNBdHRhY2hlZCl0aHJvdyBFcnJvcigiR2l2ZW4gb2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUsIHJlbW92ZSBpdCBmaXJzdCIpO3JldHVybiBzLnBhcmVudD1uLnBhcmVudCxzLnByZXZpb3VzU2libGluZz1lLHMubmV4dFNpYmxpbmc9bi5uZXh0U2libGluZyxuLm5leHRTaWJsaW5nPXIsaSYmKGkucHJldmlvdXNTaWJsaW5nPXIpLGEmJmEubGFzdENoaWxkPT09ZSYmKGEubGFzdENoaWxkPXIpLGEmJmEuY2hpbGRyZW5DaGFuZ2VkKCkscn1wcmVwZW5kQ2hpbGQoZSxyKXtsZXQgbj10aGlzLl9ub2RlKGUpLGk9dGhpcy5fbm9kZShyKTtpZihpLmlzQXR0YWNoZWQpdGhyb3cgRXJyb3IoIkdpdmVuIG9iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlLCByZW1vdmUgaXQgZmlyc3QiKTtyZXR1cm4gbi5oYXNDaGlsZHJlbj90aGlzLmluc2VydEJlZm9yZShuLmZpcnN0Q2hpbGQscik6KGkucGFyZW50PWUsbi5maXJzdENoaWxkPXIsbi5sYXN0Q2hpbGQ9cixuLmNoaWxkcmVuQ2hhbmdlZCgpKSxyfWFwcGVuZENoaWxkKGUscil7bGV0IG49dGhpcy5fbm9kZShlKSxpPXRoaXMuX25vZGUocik7aWYoaS5pc0F0dGFjaGVkKXRocm93IEVycm9yKCJHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Iik7cmV0dXJuIG4uaGFzQ2hpbGRyZW4/dGhpcy5pbnNlcnRBZnRlcihuLmxhc3RDaGlsZCxyKTooaS5wYXJlbnQ9ZSxuLmZpcnN0Q2hpbGQ9cixuLmxhc3RDaGlsZD1yLG4uY2hpbGRyZW5DaGFuZ2VkKCkpLHJ9fTtiMS5leHBvcnRzPUlwLElwLlRyZWVQb3NpdGlvbj1iaX0pO3ZhciBMMT1ocigoSU1lLFIxKT0+eyJ1c2Ugc3RyaWN0IjtSMS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9e30pLHR5cGVvZiBlPT0iZnVuY3Rpb24iJiYoZT17Y21wOmV9KTt2YXIgcj10eXBlb2YgZS5jeWNsZXM9PSJib29sZWFuIj9lLmN5Y2xlczohMSxuPWUuY21wJiYoZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihsLGMpe3ZhciB1PXtrZXk6bCx2YWx1ZTphW2xdfSxmPXtrZXk6Yyx2YWx1ZTphW2NdfTtyZXR1cm4gcyh1LGYpfX19KShlLmNtcCksaT1bXTtyZXR1cm4gbygoZnVuY3Rpb24gcyhhKXtpZihhJiZhLnRvSlNPTiYmdHlwZW9mIGEudG9KU09OPT0iZnVuY3Rpb24iJiYoYT1hLnRvSlNPTigpKSxhIT09dm9pZCAwKXtpZih0eXBlb2YgYT09Im51bWJlciIpcmV0dXJuIGlzRmluaXRlKGEpPyIiK2E6Im51bGwiO2lmKHR5cGVvZiBhIT0ib2JqZWN0IilyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSk7dmFyIGwsYztpZihBcnJheS5pc0FycmF5KGEpKXtmb3IoYz0iWyIsbD0wO2w8YS5sZW5ndGg7bCsrKWwmJihjKz0iLCIpLGMrPXMoYVtsXSl8fCJudWxsIjtyZXR1cm4gYysiXSJ9aWYoYT09PW51bGwpcmV0dXJuIm51bGwiO2lmKGkuaW5kZXhPZihhKSE9PS0xKXtpZihyKXJldHVybiBKU09OLnN0cmluZ2lmeSgiX19jeWNsZV9fIik7dGhyb3cgbmV3IFR5cGVFcnJvcigiQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTiIpfXZhciB1PWkucHVzaChhKS0xLGY9T2JqZWN0LmtleXMoYSkuc29ydChuJiZuKGEpKTtmb3IoYz0iIixsPTA7bDxmLmxlbmd0aDtsKyspe3ZhciBwPWZbbF0saD1zKGFbcF0pO2gmJihjJiYoYys9IiwiKSxjKz1KU09OLnN0cmluZ2lmeShwKSsiOiIraCl9cmV0dXJuIGkuc3BsaWNlKHUsMSksInsiK2MrIn0ifX0pLCJzdHJpbmdpZnkiKSh0KX19KTt2YXIgV0M9aHIoKHZVZSxqQyk9PnsidXNlIHN0cmljdCI7dmFyIENkPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksTEM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxGQz1PYmplY3QuZGVmaW5lUHJvcGVydHksQUM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciwkQz1vKGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgQXJyYXkuaXNBcnJheT09ImZ1bmN0aW9uIj9BcnJheS5pc0FycmF5KGUpOkxDLmNhbGwoZSk9PT0iW29iamVjdCBBcnJheV0ifSwiaXNBcnJheSIpLEJDPW8oZnVuY3Rpb24oZSl7aWYoIWV8fExDLmNhbGwoZSkhPT0iW29iamVjdCBPYmplY3RdIilyZXR1cm4hMTt2YXIgcj1DZC5jYWxsKGUsImNvbnN0cnVjdG9yIiksbj1lLmNvbnN0cnVjdG9yJiZlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSYmQ2QuY2FsbChlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpO2lmKGUuY29uc3RydWN0b3ImJiFyJiYhbilyZXR1cm4hMTt2YXIgaTtmb3IoaSBpbiBlKTtyZXR1cm4gdHlwZW9mIGk+InUifHxDZC5jYWxsKGUsaSl9LCJpc1BsYWluT2JqZWN0IiksekM9byhmdW5jdGlvbihlLHIpe0ZDJiZyLm5hbWU9PT0iX19wcm90b19fIj9GQyhlLHIubmFtZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsdmFsdWU6ci5uZXdWYWx1ZSx3cml0YWJsZTohMH0pOmVbci5uYW1lXT1yLm5ld1ZhbHVlfSwic2V0UHJvcGVydHkiKSxIQz1vKGZ1bmN0aW9uKGUscil7aWYocj09PSJfX3Byb3RvX18iKWlmKENkLmNhbGwoZSxyKSl7aWYoQUMpcmV0dXJuIEFDKGUscikudmFsdWV9ZWxzZSByZXR1cm47cmV0dXJuIGVbcl19LCJnZXRQcm9wZXJ0eSIpO2pDLmV4cG9ydHM9byhmdW5jdGlvbiB0KCl7dmFyIGUscixuLGkscyxhLGw9YXJndW1lbnRzWzBdLGM9MSx1PWFyZ3VtZW50cy5sZW5ndGgsZj0hMTtmb3IodHlwZW9mIGw9PSJib29sZWFuIiYmKGY9bCxsPWFyZ3VtZW50c1sxXXx8e30sYz0yKSwobD09bnVsbHx8dHlwZW9mIGwhPSJvYmplY3QiJiZ0eXBlb2YgbCE9ImZ1bmN0aW9uIikmJihsPXt9KTtjPHU7KytjKWlmKGU9YXJndW1lbnRzW2NdLGUhPW51bGwpZm9yKHIgaW4gZSluPUhDKGwsciksaT1IQyhlLHIpLGwhPT1pJiYoZiYmaSYmKEJDKGkpfHwocz0kQyhpKSkpPyhzPyhzPSExLGE9biYmJEMobik/bjpbXSk6YT1uJiZCQyhuKT9uOnt9LHpDKGwse25hbWU6cixuZXdWYWx1ZTp0KGYsYSxpKX0pKTp0eXBlb2YgaTwidSImJnpDKGwse25hbWU6cixuZXdWYWx1ZTppfSkpO3JldHVybiBsfSwiZXh0ZW5kIil9KTt2YXIgek09aHIoKFY3ZSxudyk9PnsoZnVuY3Rpb24oKXt2YXIgdDt0eXBlb2Ygbnc8InUiP3Q9bncuZXhwb3J0cz1uOnQ9KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN8fCgwLGV2YWwpKCJ0aGlzIil9KSgpLHQuZm9ybWF0PW4sdC52c3ByaW50Zj1yLHR5cGVvZiBjb25zb2xlPCJ1IiYmdHlwZW9mIGNvbnNvbGUubG9nPT0iZnVuY3Rpb24iJiYodC5wcmludGY9ZSk7ZnVuY3Rpb24gZSgpe2NvbnNvbGUubG9nKG4uYXBwbHkobnVsbCxhcmd1bWVudHMpKX1vKGUsInByaW50ZiIpO2Z1bmN0aW9uIHIoaSxzKXtyZXR1cm4gbi5hcHBseShudWxsLFtpXS5jb25jYXQocykpfW8ociwidnNwcmludGYiKTtmdW5jdGlvbiBuKGkpe2Zvcih2YXIgcz0xLGE9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLGw9MCxjPWkubGVuZ3RoLHU9IiIsZixwPSExLGgsZCxtPSExLGcseT1vKGZ1bmN0aW9uKCl7cmV0dXJuIGFbcysrXX0sIm5leHRBcmciKSx4PW8oZnVuY3Rpb24oKXtmb3IodmFyIGs9IiI7L1xkLy50ZXN0KGlbbF0pOylrKz1pW2wrK10sZj1pW2xdO3JldHVybiBrLmxlbmd0aD4wP3BhcnNlSW50KGspOm51bGx9LCJzbHVycE51bWJlciIpO2w8YzsrK2wpaWYoZj1pW2xdLHApc3dpdGNoKHA9ITEsZj09Ii4iPyhtPSExLGY9aVsrK2xdKTpmPT0iMCImJmlbbCsxXT09Ii4iPyhtPSEwLGwrPTIsZj1pW2xdKTptPSEwLGc9eCgpLGYpe2Nhc2UiYiI6dSs9cGFyc2VJbnQoeSgpLDEwKS50b1N0cmluZygyKTticmVhaztjYXNlImMiOmg9eSgpLHR5cGVvZiBoPT0ic3RyaW5nInx8aCBpbnN0YW5jZW9mIFN0cmluZz91Kz1oOnUrPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoaCwxMCkpO2JyZWFrO2Nhc2UiZCI6dSs9cGFyc2VJbnQoeSgpLDEwKTticmVhaztjYXNlImYiOmQ9U3RyaW5nKHBhcnNlRmxvYXQoeSgpKS50b0ZpeGVkKGd8fDYpKSx1Kz1tP2Q6ZC5yZXBsYWNlKC9eMC8sIiIpO2JyZWFrO2Nhc2UiaiI6dSs9SlNPTi5zdHJpbmdpZnkoeSgpKTticmVhaztjYXNlIm8iOnUrPSIwIitwYXJzZUludCh5KCksMTApLnRvU3RyaW5nKDgpO2JyZWFrO2Nhc2UicyI6dSs9eSgpO2JyZWFrO2Nhc2UieCI6dSs9IjB4IitwYXJzZUludCh5KCksMTApLnRvU3RyaW5nKDE2KTticmVhaztjYXNlIlgiOnUrPSIweCIrcGFyc2VJbnQoeSgpLDEwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTticmVhaztkZWZhdWx0OnUrPWY7YnJlYWt9ZWxzZSBmPT09IiUiP3A9ITA6dSs9ZjtyZXR1cm4gdX1vKG4sImZvcm1hdCIpfSkoKX0pO3ZhciBzTz1ocihWcj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVnIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFZyLlBhdGhFcnJvcj1Wci5Ub2tlbkRhdGE9dm9pZCAwLFZyLnBhcnNlPWR3LFZyLmNvbXBpbGU9bWosVnIubWF0Y2g9eWosVnIucGF0aFRvUmVnZXhwPW5PLFZyLnN0cmluZ2lmeT1iajt2YXIgcHc9Ii8iLGh3PW8odD0+dCwiTk9PUF9WQUxVRSIpLHBqPS9eWyRfXHB7SURfU3RhcnR9XSQvdSx0Tz0vXlskXHUyMDBjXHUyMDBkXHB7SURfQ29udGludWV9XSQvdSxoaj0vXlskX1xwe0lEX1N0YXJ0fV1bJFx1MjAwY1x1MjAwZFxwe0lEX0NvbnRpbnVlfV0qJC91O2Z1bmN0aW9uIGRqKHQpe3JldHVybiB0LnJlcGxhY2UoL1t7fSgpXFtcXSs/IToqXFxdL2csIlxcJCYiKX1vKGRqLCJlc2NhcGVUZXh0Iik7ZnVuY3Rpb24gZWkodCl7cmV0dXJuIHQucmVwbGFjZSgvWy4rKj9eJHt9KClbXF18L1xcXS9nLCJcXCQmIil9byhlaSwiZXNjYXBlIik7dmFyIFVkPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRva2VuRGF0YSIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy50b2tlbnM9ZSx0aGlzLm9yaWdpbmFsUGF0aD1yfX07VnIuVG9rZW5EYXRhPVVkO3ZhciBDbj1jbGFzcyBleHRlbmRzIFR5cGVFcnJvcntzdGF0aWN7byh0aGlzLCJQYXRoRXJyb3IiKX1jb25zdHJ1Y3RvcihlLHIpe2xldCBuPWU7ciYmKG4rPWA6ICR7cn1gKSxuKz0iOyB2aXNpdCBodHRwczovL2dpdC5uZXcvcGF0aFRvUmVnZXhwRXJyb3IgZm9yIGluZm8iLHN1cGVyKG4pLHRoaXMub3JpZ2luYWxQYXRoPXJ9fTtWci5QYXRoRXJyb3I9Q247ZnVuY3Rpb24gZHcodCxlPXt9KXtsZXR7ZW5jb2RlUGF0aDpyPWh3fT1lLG49Wy4uLnRdLGk9MDtmdW5jdGlvbiBzKGEpe2xldCBsPVtdLGM9IiI7ZnVuY3Rpb24gdSgpe2MmJihsLnB1c2goe3R5cGU6InRleHQiLHZhbHVlOnIoYyl9KSxjPSIiKX1mb3Iobyh1LCJ3cml0ZVBhdGgiKTtpPG4ubGVuZ3RoOyl7bGV0IGY9bltpKytdO2lmKGY9PT1hKXJldHVybiB1KCksbDtpZihmPT09IlxcIil7aWYoaT09PW4ubGVuZ3RoKXRocm93IG5ldyBDbihgVW5leHBlY3RlZCBlbmQgYWZ0ZXIgXFwgYXQgaW5kZXggJHtpfWAsdCk7Yys9bltpKytdO2NvbnRpbnVlfWlmKGY9PT0iOiJ8fGY9PT0iKiIpe2xldCBwPWY9PT0iOiI/InBhcmFtIjoid2lsZGNhcmQiLGg9IiI7aWYocGoudGVzdChuW2ldKSlkbyBoKz1uW2krK107d2hpbGUodE8udGVzdChuW2ldKSk7ZWxzZSBpZihuW2ldPT09JyInKXtsZXQgZD1pO2Zvcig7aTxuLmxlbmd0aDspe2lmKG5bKytpXT09PSciJyl7aSsrLGQ9MDticmVha31uW2ldPT09IlxcIiYmaSsrLGgrPW5baV19aWYoZCl0aHJvdyBuZXcgQ24oYFVudGVybWluYXRlZCBxdW90ZSBhdCBpbmRleCAke2R9YCx0KX1pZighaCl0aHJvdyBuZXcgQ24oYE1pc3NpbmcgcGFyYW1ldGVyIG5hbWUgYXQgaW5kZXggJHtpfWAsdCk7dSgpLGwucHVzaCh7dHlwZTpwLG5hbWU6aH0pO2NvbnRpbnVlfWlmKGY9PT0ieyIpe3UoKSxsLnB1c2goe3R5cGU6Imdyb3VwIix0b2tlbnM6cygifSIpfSk7Y29udGludWV9aWYoZj09PSJ9Inx8Zj09PSIoInx8Zj09PSIpInx8Zj09PSJbInx8Zj09PSJdInx8Zj09PSIrInx8Zj09PSI/Inx8Zj09PSIhIil0aHJvdyBuZXcgQ24oYFVuZXhwZWN0ZWQgJHtmfSBhdCBpbmRleCAke2ktMX1gLHQpO2MrPWZ9aWYoYSl0aHJvdyBuZXcgQ24oYFVuZXhwZWN0ZWQgZW5kIGF0IGluZGV4ICR7aX0sIGV4cGVjdGVkICR7YX1gLHQpO3JldHVybiB1KCksbH1yZXR1cm4gbyhzLCJjb25zdW1lVW50aWwiKSxuZXcgVWQocygiIiksdCl9byhkdywicGFyc2UiKTtmdW5jdGlvbiBtaih0LGU9e30pe2xldHtlbmNvZGU6cj1lbmNvZGVVUklDb21wb25lbnQsZGVsaW1pdGVyOm49cHd9PWUsaT10eXBlb2YgdD09Im9iamVjdCI/dDpkdyh0LGUpLHM9ck8oaS50b2tlbnMsbixyKTtyZXR1cm4gbyhmdW5jdGlvbihsPXt9KXtsZXQgYz1bXSx1PXMobCxjKTtpZihjLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKGBNaXNzaW5nIHBhcmFtZXRlcnM6ICR7Yy5qb2luKCIsICIpfWApO3JldHVybiB1fSwicGF0aCIpfW8obWosImNvbXBpbGUiKTtmdW5jdGlvbiByTyh0LGUscil7bGV0IG49dC5tYXAoaT0+Z2ooaSxlLHIpKTtyZXR1cm4oaSxzKT0+e2xldCBhPSIiO2ZvcihsZXQgbCBvZiBuKWErPWwoaSxzKTtyZXR1cm4gYX19byhyTywidG9rZW5zVG9GdW5jdGlvbiIpO2Z1bmN0aW9uIGdqKHQsZSxyKXtpZih0LnR5cGU9PT0idGV4dCIpcmV0dXJuKCk9PnQudmFsdWU7aWYodC50eXBlPT09Imdyb3VwIil7bGV0IGk9ck8odC50b2tlbnMsZSxyKTtyZXR1cm4ocyxhKT0+e2xldCBsPWEubGVuZ3RoLGM9aShzLGEpO3JldHVybiBhLmxlbmd0aD09PWw/YzooYS5sZW5ndGg9bCwiIil9fWxldCBuPXJ8fGh3O3JldHVybiB0LnR5cGU9PT0id2lsZGNhcmQiJiZyIT09ITE/KGkscyk9PntsZXQgYT1pW3QubmFtZV07aWYoYT09bnVsbClyZXR1cm4gcy5wdXNoKHQubmFtZSksIiI7aWYoIUFycmF5LmlzQXJyYXkoYSl8fGEubGVuZ3RoPT09MCl0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAiJHt0Lm5hbWV9IiB0byBiZSBhIG5vbi1lbXB0eSBhcnJheWApO2xldCBsPSIiO2ZvcihsZXQgYz0wO2M8YS5sZW5ndGg7YysrKXtpZih0eXBlb2YgYVtjXSE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgIiR7dC5uYW1lfS8ke2N9IiB0byBiZSBhIHN0cmluZ2ApO2M+MCYmKGwrPWUpLGwrPW4oYVtjXSl9cmV0dXJuIGx9OihpLHMpPT57bGV0IGE9aVt0Lm5hbWVdO2lmKGE9PW51bGwpcmV0dXJuIHMucHVzaCh0Lm5hbWUpLCIiO2lmKHR5cGVvZiBhIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAiJHt0Lm5hbWV9IiB0byBiZSBhIHN0cmluZ2ApO3JldHVybiBuKGEpfX1vKGdqLCJ0b2tlblRvRnVuY3Rpb24iKTtmdW5jdGlvbiB5aih0LGU9e30pe2xldHtkZWNvZGU6cj1kZWNvZGVVUklDb21wb25lbnQsZGVsaW1pdGVyOm49cHd9PWUse3JlZ2V4cDppLGtleXM6c309bk8odCxlKSxhPXMubWFwKGw9PnI9PT0hMT9odzpsLnR5cGU9PT0icGFyYW0iP3I6Yz0+Yy5zcGxpdChuKS5tYXAocikpO3JldHVybiBvKGZ1bmN0aW9uKGMpe2xldCB1PWkuZXhlYyhjKTtpZighdSlyZXR1cm4hMTtsZXQgZj11WzBdLHA9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IGg9MTtoPHUubGVuZ3RoO2grKyl7aWYodVtoXT09PXZvaWQgMCljb250aW51ZTtsZXQgZD1zW2gtMV0sbT1hW2gtMV07cFtkLm5hbWVdPW0odVtoXSl9cmV0dXJue3BhdGg6ZixwYXJhbXM6cH19LCJtYXRjaCIpfW8oeWosIm1hdGNoIik7ZnVuY3Rpb24gbk8odCxlPXt9KXtsZXR7ZGVsaW1pdGVyOnI9cHcsZW5kOm49ITAsc2Vuc2l0aXZlOmk9ITEsdHJhaWxpbmc6cz0hMH09ZSxhPVtdLGw9IiIsYz0wO2Z1bmN0aW9uIHUocCl7aWYoQXJyYXkuaXNBcnJheShwKSl7Zm9yKGxldCBkIG9mIHApdShkKTtyZXR1cm59bGV0IGg9dHlwZW9mIHA9PSJvYmplY3QiP3A6ZHcocCxlKTttdyhoLnRva2VucywwLFtdLGQ9PntpZihjPj0yNTYpdGhyb3cgbmV3IENuKCJUb28gbWFueSBwYXRoIGNvbWJpbmF0aW9ucyIsaC5vcmlnaW5hbFBhdGgpO2M+MCYmKGwrPSJ8IiksbCs9eGooZCxyLGEsaC5vcmlnaW5hbFBhdGgpLGMrK30pfW8odSwicHJvY2VzcyIpLHUodCk7bGV0IGY9YF4oPzoke2x9KWA7cmV0dXJuIHMmJihmKz0iKD86IitlaShyKSsiJCk/IiksZis9bj8iJCI6Iig/PSIrZWkocikrInwkKSIse3JlZ2V4cDpuZXcgUmVnRXhwKGYsaT8iIjoiaSIpLGtleXM6YX19byhuTywicGF0aFRvUmVnZXhwIik7ZnVuY3Rpb24gbXcodCxlLHIsbil7Zm9yKDtlPHQubGVuZ3RoOyl7bGV0IGk9dFtlKytdO2lmKGkudHlwZT09PSJncm91cCIpe2xldCBzPXIubGVuZ3RoO213KGkudG9rZW5zLDAscixhPT5tdyh0LGUsYSxuKSksci5sZW5ndGg9cztjb250aW51ZX1yLnB1c2goaSl9bihyKX1vKG13LCJmbGF0dGVuIik7ZnVuY3Rpb24geGoodCxlLHIsbil7bGV0IGk9IiIscz0iIixhPSIiLGw9MCxjPTAsdT0wO2Z1bmN0aW9uIGYoaCxkKXtmb3IoO2g8dC5sZW5ndGg7KXtsZXQgbT10W2grK107aWYobS50eXBlPT09ZClyZXR1cm4hMDtpZihtLnR5cGU9PT0idGV4dCImJm0udmFsdWUuaW5jbHVkZXMoZSkpYnJlYWt9cmV0dXJuITF9byhmLCJoYXNJblNlZ21lbnQiKTtmdW5jdGlvbiBwKGgpe2xldCBkPSIiO2Zvcig7aDx0Lmxlbmd0aDspe2xldCBtPXRbaCsrXTtpZihtLnR5cGUhPT0idGV4dCIpYnJlYWs7ZCs9bS52YWx1ZX1yZXR1cm4gZH1mb3IobyhwLCJwZWVrVGV4dCIpO3U8dC5sZW5ndGg7KXtsZXQgaD10W3UrK107aWYoaC50eXBlPT09InRleHQiKXtpKz1laShoLnZhbHVlKSxzKz1oLnZhbHVlLGw9PT0yJiYoYSs9aC52YWx1ZSksaC52YWx1ZS5pbmNsdWRlcyhlKSYmKGM9MCk7Y29udGludWV9aWYoaC50eXBlPT09InBhcmFtInx8aC50eXBlPT09IndpbGRjYXJkIil7aWYobCYmIXMpdGhyb3cgbmV3IENuKGBNaXNzaW5nIHRleHQgYmVmb3JlICIke2gubmFtZX0iICR7aC50eXBlfWAsbik7aC50eXBlPT09InBhcmFtIj8oaSs9YyYyP2AoJHtIaShlLHMpfSspYDpmKHUsIndpbGRjYXJkIik/YCgke0hpKGUscCh1KSl9KylgOmMmMT9gKCR7SGkoZSxzKX0rfCR7ZWkocyl9KWA6YCgke0hpKGUsIiIpfSspYCxjfD1sPTEpOihpKz1jJjI/YCgke0hpKHMsIiIpfSspYDphP2AoJHtIaShhLCIiKX0rfCR7SGkoZSwiIil9KylgOiIoW15dKykiLGE9IiIsY3w9bD0yKSxyLnB1c2goaCkscz0iIjtjb250aW51ZX10aHJvdyBuZXcgVHlwZUVycm9yKGBVbmtub3duIHRva2VuIHR5cGU6ICR7aC50eXBlfWApfXJldHVybiBpfW8oeGosInRvUmVnRXhwU291cmNlIik7ZnVuY3Rpb24gSGkodCxlKXtyZXR1cm4gZS5sZW5ndGg+dC5sZW5ndGg/SGkoZSx0KToodD09PWUmJihlPSIiKSxlLmxlbmd0aD4xP2AoPzooPyEke2VpKHQpfXwke2VpKGUpfSlbXl0pYDp0Lmxlbmd0aD4xP2AoPzooPyEke2VpKHQpfSlbXiR7ZWkoZSl9XSlgOmBbXiR7ZWkodCtlKX1dYCl9byhIaSwibmVnYXRlIik7ZnVuY3Rpb24gaU8odCxlKXtsZXQgcj0iIjtmb3IoO2U8dC5sZW5ndGg7KXtsZXQgbj10W2UrK107aWYobi50eXBlPT09InRleHQiKXtyKz1kaihuLnZhbHVlKTtjb250aW51ZX1pZihuLnR5cGU9PT0iZ3JvdXAiKXtyKz0ieyIraU8obi50b2tlbnMsMCkrIn0iO2NvbnRpbnVlfWlmKG4udHlwZT09PSJwYXJhbSIpe3IrPSI6IitvTyhuLm5hbWUsdFtlXSk7Y29udGludWV9aWYobi50eXBlPT09IndpbGRjYXJkIil7cis9IioiK29PKG4ubmFtZSx0W2VdKTtjb250aW51ZX10aHJvdyBuZXcgVHlwZUVycm9yKGBVbmtub3duIHRva2VuIHR5cGU6ICR7bi50eXBlfWApfXJldHVybiByfW8oaU8sInN0cmluZ2lmeVRva2VucyIpO2Z1bmN0aW9uIGJqKHQpe3JldHVybiBpTyh0LnRva2VucywwKX1vKGJqLCJzdHJpbmdpZnkiKTtmdW5jdGlvbiBvTyh0LGUpe3JldHVybiFoai50ZXN0KHQpfHxlPy50eXBlPT09InRleHQiJiZ0Ty50ZXN0KGUudmFsdWVbMF0pP0pTT04uc3RyaW5naWZ5KHQpOnR9byhvTywic3RyaW5naWZ5TmFtZSIpfSk7dmFyIG1PPWhyKCgkdyxCdyk9PnsoZnVuY3Rpb24odCxlKXt0eXBlb2YgJHc9PSJvYmplY3QiJiZ0eXBlb2YgQnc8InUiP0J3LmV4cG9ydHM9ZSgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PXR8fHNlbGYsdC5Td2VldFNjcm9sbD1lKCkpfSkoJHcsZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9byhmdW5jdGlvbigpe3JldHVybiB0PU9iamVjdC5hc3NpZ258fG8oZnVuY3Rpb24odil7Zm9yKHZhciBDLE89MSxCPWFyZ3VtZW50cy5sZW5ndGg7TzxCO08rKyl7Qz1hcmd1bWVudHNbT107Zm9yKHZhciByZSBpbiBDKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChDLHJlKSYmKHZbcmVdPUNbcmVdKX1yZXR1cm4gdn0sIl9fYXNzaWduIiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LCJfX2Fzc2lnbiIpLGU9ISEodHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5kb2N1bWVudCYmd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpLHI9ZT93aW5kb3cuaGlzdG9yeSYmInB1c2hTdGF0ZSJpbiB3aW5kb3cuaGlzdG9yeSYmd2luZG93LmxvY2F0aW9uLnByb3RvY29sIT09ImZpbGU6IjohMSxuPShmdW5jdGlvbigpe3ZhciBEPSExO2lmKCFlKXJldHVybiBEO3RyeXt2YXIgdj13aW5kb3csQz1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6byhmdW5jdGlvbigpe0Q9ITB9LCJnZXQiKX0pO3YuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxDKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsQyl9Y2F0Y2h7fXJldHVybiBEfSkoKSxpPW8oZnVuY3Rpb24oRCl7cmV0dXJuIHR5cGVvZiBEPT0ic3RyaW5nIn0sImlzU3RyaW5nIikscz1vKGZ1bmN0aW9uKEQpe3JldHVybiB0eXBlb2YgRD09ImZ1bmN0aW9uIn0sImlzRnVuY3Rpb24iKSxhPW8oZnVuY3Rpb24oRCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoRCl9LCJpc0FycmF5IiksbD1vKGZ1bmN0aW9uKEQpe3JldHVybiFhKEQpJiZELXBhcnNlRmxvYXQoRCkrMT49MH0sImlzTnVtZXJpYyIpLGM9byhmdW5jdGlvbihELHYpe3JldHVybiBEJiZELmhhc093blByb3BlcnR5KHYpfSwiaGFzUHJvcCIpLHU9ZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpudWxsLGY9ZT93aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOm51bGwscD1NYXRoLmNvcyxoPU1hdGguc2luLGQ9TWF0aC5wb3csbT1NYXRoLnNxcnQsZz1NYXRoLlBJLHk9e2xpbmVhcjpvKGZ1bmN0aW9uKEQpe3JldHVybiBEfSwibGluZWFyIiksZWFzZUluUXVhZDpvKGZ1bmN0aW9uKEQsdixDLE8sQil7cmV0dXJuIE8qKHYvPUIpKnYrQ30sImVhc2VJblF1YWQiKSxlYXNlT3V0UXVhZDpvKGZ1bmN0aW9uKEQsdixDLE8sQil7cmV0dXJuLU8qKHYvPUIpKih2LTIpK0N9LCJlYXNlT3V0UXVhZCIpLGVhc2VJbk91dFF1YWQ6byhmdW5jdGlvbihELHYsQyxPLEIpe3JldHVybih2Lz1CLzIpPDE/Ty8yKnYqditDOi1PLzIqKC0tdioodi0yKS0xKStDfSwiZWFzZUluT3V0UXVhZCIpLGVhc2VJbkN1YmljOm8oZnVuY3Rpb24oRCx2LEMsTyxCKXtyZXR1cm4gTyoodi89Qikqdip2K0N9LCJlYXNlSW5DdWJpYyIpLGVhc2VPdXRDdWJpYzpvKGZ1bmN0aW9uKEQsdixDLE8sQil7cmV0dXJuIE8qKCh2PXYvQi0xKSp2KnYrMSkrQ30sImVhc2VPdXRDdWJpYyIpLGVhc2VJbk91dEN1YmljOm8oZnVuY3Rpb24oRCx2LEMsTyxCKXtyZXR1cm4odi89Qi8yKTwxP08vMip2KnYqditDOk8vMiooKHYtPTIpKnYqdisyKStDfSwiZWFzZUluT3V0Q3ViaWMiKSxlYXNlSW5RdWFydDpvKGZ1bmN0aW9uKEQsdixDLE8sQil7cmV0dXJuIE8qKHYvPUIpKnYqdip2K0N9LCJlYXNlSW5RdWFydCIpLGVhc2VPdXRRdWFydDpvKGZ1bmN0aW9uKEQsdixDLE8sQil7cmV0dXJuLU8qKCh2PXYvQi0xKSp2KnYqdi0xKStDfSwiZWFzZU91dFF1YXJ0IiksZWFzZUluT3V0UXVhcnQ6byhmdW5jdGlvbihELHYsQyxPLEIpe3JldHVybih2Lz1CLzIpPDE/Ty8yKnYqdip2KnYrQzotTy8yKigodi09Mikqdip2KnYtMikrQ30sImVhc2VJbk91dFF1YXJ0IiksZWFzZUluUXVpbnQ6byhmdW5jdGlvbihELHYsQyxPLEIpe3JldHVybiBPKih2Lz1CKSp2KnYqdip2K0N9LCJlYXNlSW5RdWludCIpLGVhc2VPdXRRdWludDpvKGZ1bmN0aW9uKEQsdixDLE8sQil7cmV0dXJuIE8qKCh2PXYvQi0xKSp2KnYqdip2KzEpK0N9LCJlYXNlT3V0UXVpbnQiKSxlYXNlSW5PdXRRdWludDpvKGZ1bmN0aW9uKEQsdixDLE8sQil7cmV0dXJuKHYvPUIvMik8MT9PLzIqdip2KnYqdip2K0M6Ty8yKigodi09Mikqdip2KnYqdisyKStDfSwiZWFzZUluT3V0UXVpbnQiKSxlYXNlSW5TaW5lOm8oZnVuY3Rpb24oRCx2LEMsTyxCKXtyZXR1cm4tTypwKHYvQiooZy8yKSkrTytDfSwiZWFzZUluU2luZSIpLGVhc2VPdXRTaW5lOm8oZnVuY3Rpb24oRCx2LEMsTyxCKXtyZXR1cm4gTypoKHYvQiooZy8yKSkrQ30sImVhc2VPdXRTaW5lIiksZWFzZUluT3V0U2luZTpvKGZ1bmN0aW9uKEQsdixDLE8sQil7cmV0dXJuLU8vMioocChnKnYvQiktMSkrQ30sImVhc2VJbk91dFNpbmUiKSxlYXNlSW5FeHBvOm8oZnVuY3Rpb24oRCx2LEMsTyxCKXtyZXR1cm4gdj09PTA/QzpPKmQoMiwxMCoodi9CLTEpKStDfSwiZWFzZUluRXhwbyIpLGVhc2VPdXRFeHBvOm8oZnVuY3Rpb24oRCx2LEMsTyxCKXtyZXR1cm4gdj09PUI/QytPOk8qKC1kKDIsLTEwKnYvQikrMSkrQ30sImVhc2VPdXRFeHBvIiksZWFzZUluT3V0RXhwbzpvKGZ1bmN0aW9uKEQsdixDLE8sQil7cmV0dXJuIHY9PT0wP0M6dj09PUI/QytPOih2Lz1CLzIpPDE/Ty8yKmQoMiwxMCoodi0xKSkrQzpPLzIqKC1kKDIsLTEwKi0tdikrMikrQ30sImVhc2VJbk91dEV4cG8iKSxlYXNlSW5DaXJjOm8oZnVuY3Rpb24oRCx2LEMsTyxCKXtyZXR1cm4tTyoobSgxLSh2Lz1CKSp2KS0xKStDfSwiZWFzZUluQ2lyYyIpLGVhc2VPdXRDaXJjOm8oZnVuY3Rpb24oRCx2LEMsTyxCKXtyZXR1cm4gTyptKDEtKHY9di9CLTEpKnYpK0N9LCJlYXNlT3V0Q2lyYyIpLGVhc2VJbk91dENpcmM6byhmdW5jdGlvbihELHYsQyxPLEIpe3JldHVybih2Lz1CLzIpPDE/LU8vMioobSgxLXYqdiktMSkrQzpPLzIqKG0oMS0odi09MikqdikrMSkrQ30sImVhc2VJbk91dENpcmMiKX0seD1vKGZ1bmN0aW9uKEQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChEP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoRCk6W10pfSwiJCQiKSxrPW8oZnVuY3Rpb24oRCl7cmV0dXJuIHgoRCkuc2hpZnQoKXx8bnVsbH0sIiQiKSxUPW8oZnVuY3Rpb24oRCl7cmV0dXJuIEQgaW5zdGFuY2VvZiBFbGVtZW50fSwiaXNFbGVtZW50IiksUj1vKGZ1bmN0aW9uKEQpe3JldHVybiBEPT09d2luZG93fSwiaXNXaW5kb3ciKSxfPW8oZnVuY3Rpb24oRCl7cmV0dXJuIEQ9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fEQ9PT1kb2N1bWVudC5ib2R5fSwiaXNSb290Q29udGFpbmVyIiksRT1vKGZ1bmN0aW9uKEQsdil7aWYoVCh2KSlyZXR1cm4gRD09PXY7Zm9yKHZhciBDPXgodiksTz1DLmxlbmd0aDstLU8+PTAmJkNbT10hPT1EOyk7cmV0dXJuIE8+LTF9LCJtYXRjaGVzIiksQT1vKGZ1bmN0aW9uKEQpe3JldHVybiBNYXRoLm1heChELnNjcm9sbEhlaWdodCxELmNsaWVudEhlaWdodCxELm9mZnNldEhlaWdodCl9LCJnZXRIZWlnaHQiKSxGPW8oZnVuY3Rpb24oRCl7cmV0dXJuIE1hdGgubWF4KEQuc2Nyb2xsV2lkdGgsRC5jbGllbnRXaWR0aCxELm9mZnNldFdpZHRoKX0sImdldFdpZHRoIiksVT1vKGZ1bmN0aW9uKEQpe3JldHVybnt3aWR0aDpGKEQpLGhlaWdodDpBKEQpfX0sImdldFNpemUiKSxNPW8oZnVuY3Rpb24oRCl7dmFyIHY9UihEKXx8XyhEKTtyZXR1cm57dmlld3BvcnQ6e3dpZHRoOnY/TWF0aC5taW4od2luZG93LmlubmVyV2lkdGgsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKTpELmNsaWVudFdpZHRoLGhlaWdodDp2P3dpbmRvdy5pbm5lckhlaWdodDpELmNsaWVudEhlaWdodH0sc2l6ZTp2P3t3aWR0aDpNYXRoLm1heChGKGRvY3VtZW50LmJvZHkpLEYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSksaGVpZ2h0Ok1hdGgubWF4KEEoZG9jdW1lbnQuYm9keSksQShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX06VShEKX19LCJnZXRWaWV3cG9ydEFuZEVsZW1lbnRTaXplcyIpLGJlPXt5OiJzY3JvbGxUb3AiLHg6InNjcm9sbExlZnQifSx6PXt5OiJwYWdlWU9mZnNldCIseDoicGFnZVhPZmZzZXQifSxJPW8oZnVuY3Rpb24oRCx2KXtyZXR1cm4gUihEKT9EW3pbdl1dOkRbYmVbdl1dfSwiZ2V0U2Nyb2xsIiksTD1vKGZ1bmN0aW9uKEQsdixDKXtpZihSKEQpKXt2YXIgTz1DPT09InkiO0Quc2Nyb2xsVG8oTz9ELnBhZ2VYT2Zmc2V0OnYsTz92OkQucGFnZVlPZmZzZXQpfWVsc2UgRFtiZVtDXV09dn0sInNldFNjcm9sbCIpLEg9byhmdW5jdGlvbihELHYpe3ZhciBDPUQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoQy53aWR0aHx8Qy5oZWlnaHQpe3ZhciBPPXt0b3A6MCxsZWZ0OjB9LEI9dm9pZCAwO2lmKFIodil8fF8odikpQj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsTy50b3A9d2luZG93W3oueV0sTy5sZWZ0PXdpbmRvd1t6LnhdO2Vsc2V7Qj12O3ZhciByZT1CLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO08udG9wPXJlLnRvcCotMStCW2JlLnldLE8ubGVmdD1yZS5sZWZ0Ki0xK0JbYmUueF19cmV0dXJue3RvcDpDLnRvcCtPLnRvcC1CLmNsaWVudFRvcCxsZWZ0OkMubGVmdCtPLmxlZnQtQi5jbGllbnRMZWZ0fX1yZXR1cm4gQ30sImdldE9mZnNldCIpLFc9KGZ1bmN0aW9uKCl7cmV0dXJuIGU/Im9ud2hlZWwiaW4gZG9jdW1lbnQ/IndoZWVsIjoibW91c2V3aGVlbCI6IndoZWVsIn0pKCksRz1vKGZ1bmN0aW9uKEQpe3JldHVybiBEPT09IndoZWVsIj9XOkR9LCJldmVudE5hbWUiKSxYPW8oZnVuY3Rpb24oRCx2LEMsTyxCKXtDLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihyZSl7RFt2XShHKHJlKSxPLG4/e3Bhc3NpdmU6Qn06ITEpfSl9LCJhcHBseSIpLHVlPW8oZnVuY3Rpb24oRCx2LEMsTyl7cmV0dXJuIFgoRCwiYWRkRXZlbnRMaXN0ZW5lciIsdixDLE8pfSwiYWRkRXZlbnQiKSx3PW8oZnVuY3Rpb24oRCx2LEMsTyl7cmV0dXJuIFgoRCwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsdixDLE8pfSwicmVtb3ZlRXZlbnQiKSx3ZT0vXihcK3wtKT0oXGQrKD86XC5cZCspPykkLyxFZT1vKGZ1bmN0aW9uKEQsdil7dmFyIEM9e3RvcDowLGxlZnQ6MCxyZWxhdGl2ZTohMX07aWYoYyhELCJ0b3AiKXx8YyhELCJsZWZ0IikpQz10KHt9LEMsRCk7ZWxzZSBpZihhKEQpKWlmKEQubGVuZ3RoPjEpQy50b3A9RFswXSxDLmxlZnQ9RFsxXTtlbHNlIGlmKEQubGVuZ3RoPT09MSlDLnRvcD12P0RbMF06MCxDLmxlZnQ9dj8wOkRbMF07ZWxzZSByZXR1cm4gbnVsbDtlbHNlIGlmKGwoRCkpdj9DLnRvcD1EOkMubGVmdD1EO2Vsc2UgaWYoaShEKSl7dmFyIE89RC50cmltKCkubWF0Y2god2UpO2lmKCFPKXJldHVybiBudWxsO3ZhciBCPU9bMV0scmU9cGFyc2VJbnQoT1syXSwxMCk7Qj09PSIrIj8oQy50b3A9dj9yZTowLEMubGVmdD12PzA6cmUpOihDLnRvcD12Py1yZTowLEMubGVmdD12PzA6LXJlKSxDLnJlbGF0aXZlPSEwfWVsc2UgcmV0dXJuIG51bGw7cmV0dXJuIEN9LCJwYXJzZUNvb3JkaW5hdGUiKSxTPXt0cmlnZ2VyOiJbZGF0YS1zY3JvbGxdIixoZWFkZXI6IltkYXRhLXNjcm9sbC1oZWFkZXJdIixkdXJhdGlvbjoxZTMsZWFzaW5nOiJlYXNlT3V0UXVpbnQiLG9mZnNldDowLHZlcnRpY2FsOiEwLGhvcml6b250YWw6ITEsY2FuY2VsbGFibGU6ITAsdXBkYXRlVVJMOiExLHByZXZlbnREZWZhdWx0OiEwLHN0b3BQcm9wYWdhdGlvbjohMCxiZWZvcmU6bnVsbCxhZnRlcjpudWxsLGNhbmNlbDpudWxsLGNvbXBsZXRlOm51bGwsc3RlcDpudWxsfSxCZT0iY2xpY2siLGV0PSJ3aGVlbCB0b3VjaHN0YXJ0IHRvdWNobW92ZSIsS3Q9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRCh2LEMpe3ZhciBPPXRoaXM7dGhpcy4kZWw9bnVsbCx0aGlzLmN0eD17JHRyaWdnZXI6bnVsbCxvcHRzOm51bGwscHJvZ3Jlc3M6ITEscG9zOm51bGwsc3RhcnRQb3M6bnVsbCxlYXNpbmc6bnVsbCxzdGFydDowLGlkOjAsY2FuY2VsOiExLGhhc2g6bnVsbH0sdGhpcy5sb29wPWZ1bmN0aW9uKHJlKXt2YXIgJGU9TyxMZT0kZS4kZWwsRGU9JGUuY3R4O2lmKERlLnN0YXJ0fHwoRGUuc3RhcnQ9cmUpLCFEZS5wcm9ncmVzc3x8IUxlKXtPLnN0b3AoKTtyZXR1cm59dmFyICR0PURlLm9wdHMsZnQ9RGUucG9zLE50PURlLnN0YXJ0LF9yPURlLnN0YXJ0UG9zLFFyPURlLmVhc2luZyxYdD0kdC5kdXJhdGlvbixmcj17dG9wOiJ5IixsZWZ0OiJ4In0sQnQ9cmUtTnQsWWU9TWF0aC5taW4oMSxNYXRoLm1heChCdC9YdCwwKSk7T2JqZWN0LmtleXMoZnQpLmZvckVhY2goZnVuY3Rpb24oSnIpe3ZhciBOPWZ0W0pyXSxxPV9yW0pyXSxvZT1OLXE7aWYob2UhPT0wKXt2YXIgZmU9UXIoWWUsWHQqWWUsMCwxLFh0KTtMKExlLE1hdGgucm91bmQocStvZSpmZSksZnJbSnJdKX19KSxCdDw9WHQ/KE8uaG9vaygkdCwic3RlcCIsWWUpLERlLmlkPUQucmFmKE8ubG9vcCkpOk8uc3RvcCghMCl9LHRoaXMuaGFuZGxlQ2xpY2s9ZnVuY3Rpb24ocmUpe2Zvcih2YXIgJGU9Ty5vcHRzLExlPXJlLnRhcmdldDtMZSYmTGUhPT1kb2N1bWVudDtMZT1MZS5wYXJlbnROb2RlKWlmKEUoTGUsJGUudHJpZ2dlcikpe3ZhciBEZT1KU09OLnBhcnNlKExlLmdldEF0dHJpYnV0ZSgiZGF0YS1zY3JvbGwtb3B0aW9ucyIpfHwie30iKSwkdD1MZS5nZXRBdHRyaWJ1dGUoImRhdGEtc2Nyb2xsIiksZnQ9JHR8fExlLmdldEF0dHJpYnV0ZSgiaHJlZiIpLE50PXQoe30sJGUsRGUpLF9yPU50LnByZXZlbnREZWZhdWx0LFFyPU50LnN0b3BQcm9wYWdhdGlvbixYdD1OdC52ZXJ0aWNhbCxmcj1OdC5ob3Jpem9udGFsO19yJiZyZS5wcmV2ZW50RGVmYXVsdCgpLFFyJiZyZS5zdG9wUHJvcGFnYXRpb24oKSxPLmN0eC4kdHJpZ2dlcj1MZSxmciYmWHQ/Ty50byhmdCxOdCk6WHQ/Ty50b1RvcChmdCxOdCk6ZnImJk8udG9MZWZ0KGZ0LE50KTticmVha319LHRoaXMuaGFuZGxlU3RvcD1mdW5jdGlvbihyZSl7dmFyICRlPU8uY3R4LExlPSRlLm9wdHM7TGUmJkxlLmNhbmNlbGxhYmxlPygkZS5jYW5jZWw9ITAsTy5zdG9wKCkpOnJlLnByZXZlbnREZWZhdWx0KCl9LHRoaXMub3B0cz10KHt9LFMsdnx8e30pO3ZhciBCPW51bGw7ZSYmKHR5cGVvZiBDPT0ic3RyaW5nIj9CPWsoQyk6QyE9bnVsbD9CPUM6Qj13aW5kb3cpLHRoaXMuJGVsPUIsQiYmdGhpcy5iaW5kKCEwLCExKX1yZXR1cm4gbyhELCJTd2VldFNjcm9sbCIpLEQuY3JlYXRlPWZ1bmN0aW9uKHYsQyl7cmV0dXJuIG5ldyBEKHYsQyl9LEQucHJvdG90eXBlLnRvPWZ1bmN0aW9uKHYsQyl7aWYoZSl7dmFyIE89dGhpcyxCPU8uJGVsLHJlPU8uY3R4LCRlPU8ub3B0cyxMZT1yZS4kdHJpZ2dlcixEZT10KHt9LCRlLEN8fHt9KSwkdD1EZS5vZmZzZXQsZnQ9RGUudmVydGljYWwsTnQ9RGUuaG9yaXpvbnRhbCxfcj1UKERlLmhlYWRlcik/RGUuaGVhZGVyOmsoRGUuaGVhZGVyKSxRcj0vXiMvLFh0PWkodikmJlFyLnRlc3Qodik/djpudWxsO2lmKHJlLm9wdHM9RGUscmUuY2FuY2VsPSExLHJlLmhhc2g9WHQsdGhpcy5zdG9wKCksISFCKXt2YXIgZnI9RWUoJHQsZnQpLEJ0PUVlKHYsZnQpLFllPXt0b3A6MCxsZWZ0OjB9O2lmKEJ0KWlmKEJ0LnJlbGF0aXZlKXt2YXIgSnI9SShCLGZ0PyJ5IjoieCIpO1llLnRvcD1mdD9KcitCdC50b3A6QnQudG9wLFllLmxlZnQ9ZnQ/QnQubGVmdDpKcitCdC5sZWZ0fWVsc2UgWWU9QnQ7ZWxzZSBpZihpKHYpJiZ2IT09IiMiKXt2YXIgTj1rKHYpO2lmKCFOKXJldHVybjtZZT1IKE4sQil9ZnImJihZZS50b3ArPWZyLnRvcCxZZS5sZWZ0Kz1mci5sZWZ0KSxfciYmKFllLnRvcD1NYXRoLm1heCgwLFllLnRvcC1VKF9yKS5oZWlnaHQpKTt2YXIgcT1NKEIpLG9lPXEudmlld3BvcnQsZmU9cS5zaXplO2lmKFllLnRvcD1mdD9NYXRoLm1heCgwLE1hdGgubWluKGZlLmhlaWdodC1vZS5oZWlnaHQsWWUudG9wKSk6SShCLCJ5IiksWWUubGVmdD1OdD9NYXRoLm1heCgwLE1hdGgubWluKGZlLndpZHRoLW9lLndpZHRoLFllLmxlZnQpKTpJKEIsIngiKSx0aGlzLmhvb2soRGUsImJlZm9yZSIsWWUsTGUpPT09ITEpe3JlLm9wdHM9bnVsbDtyZXR1cm59cmUucG9zPVllLHRoaXMuc3RhcnQoRGUpLHRoaXMuYmluZCghMSwhMCl9fX0sRC5wcm90b3R5cGUudG9Ub3A9ZnVuY3Rpb24odixDKXt0aGlzLnRvKHYsdCh7fSxDfHx7fSx7dmVydGljYWw6ITAsaG9yaXpvbnRhbDohMX0pKX0sRC5wcm90b3R5cGUudG9MZWZ0PWZ1bmN0aW9uKHYsQyl7dGhpcy50byh2LHQoe30sQ3x8e30se3ZlcnRpY2FsOiExLGhvcml6b250YWw6ITB9KSl9LEQucHJvdG90eXBlLnRvRWxlbWVudD1mdW5jdGlvbih2LEMpe3ZhciBPPXRoaXMuJGVsOyFlfHwhT3x8dGhpcy50byhIKHYsTyksQ3x8e30pfSxELnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKHYpe3Y9PT12b2lkIDAmJih2PSExKTt2YXIgQz10aGlzLE89Qy4kZWwsQj1DLmN0eCxyZT1CLnBvczshT3x8IUIucHJvZ3Jlc3N8fChELmNhZihCLmlkKSxCLnByb2dyZXNzPSExLEIuc3RhcnQ9MCxCLmlkPTAsdiYmcmUmJihMKE8scmUubGVmdCwieCIpLEwoTyxyZS50b3AsInkiKSksdGhpcy5jb21wbGV0ZSgpKX0sRC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHYpe2lmKHRoaXMuJGVsKXt2YXIgQz10KHt9LHRoaXMub3B0cyx2KTt0aGlzLnN0b3AoKSx0aGlzLnVuYmluZCghMCwhMCksdGhpcy5vcHRzPUMsdGhpcy5iaW5kKCEwLCExKX19LEQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLiRlbCYmKHRoaXMuc3RvcCgpLHRoaXMudW5iaW5kKCEwLCEwKSx0aGlzLiRlbD1udWxsKX0sRC5wcm90b3R5cGUub25CZWZvcmU9ZnVuY3Rpb24odixDKXtyZXR1cm4hMH0sRC5wcm90b3R5cGUub25TdGVwPWZ1bmN0aW9uKHYpe30sRC5wcm90b3R5cGUub25BZnRlcj1mdW5jdGlvbih2LEMpe30sRC5wcm90b3R5cGUub25DYW5jZWw9ZnVuY3Rpb24oKXt9LEQucHJvdG90eXBlLm9uQ29tcGxldGU9ZnVuY3Rpb24odil7fSxELnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbih2KXt2YXIgQz10aGlzLmN0eDtDLm9wdHM9dixDLnByb2dyZXNzPSEwLEMuZWFzaW5nPXModi5lYXNpbmcpP3YuZWFzaW5nOnlbdi5lYXNpbmddO3ZhciBPPXRoaXMuJGVsLEI9e3RvcDpJKE8sInkiKSxsZWZ0OkkoTywieCIpfTtDLnN0YXJ0UG9zPUIsQy5pZD1ELnJhZih0aGlzLmxvb3ApfSxELnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciB2PXRoaXMsQz12LiRlbCxPPXYuY3R4LEI9Ty5oYXNoLHJlPU8uY2FuY2VsLCRlPU8ub3B0cyxMZT1PLnBvcyxEZT1PLiR0cmlnZ2VyO2lmKCEoIUN8fCEkZSkpe2lmKEIhPW51bGwmJkIhPT13aW5kb3cubG9jYXRpb24uaGFzaCl7dmFyICR0PSRlLnVwZGF0ZVVSTDtlJiZyJiYkdCE9PSExJiZ3aW5kb3cuaGlzdG9yeVskdD09PSJyZXBsYWNlIj8icmVwbGFjZVN0YXRlIjoicHVzaFN0YXRlIl0obnVsbCwiIixCKX10aGlzLnVuYmluZCghMSwhMCksTy5vcHRzPW51bGwsTy4kdHJpZ2dlcj1udWxsLHJlP3RoaXMuaG9vaygkZSwiY2FuY2VsIik6dGhpcy5ob29rKCRlLCJhZnRlciIsTGUsRGUpLHRoaXMuaG9vaygkZSwiY29tcGxldGUiLHJlKX19LEQucHJvdG90eXBlLmhvb2s9ZnVuY3Rpb24odixDKXtmb3IodmFyIE89W10sQj0yO0I8YXJndW1lbnRzLmxlbmd0aDtCKyspT1tCLTJdPWFyZ3VtZW50c1tCXTt2YXIgcmUsJGU9dltDXSxMZSxEZTtyZXR1cm4gcygkZSkmJihMZT0kZS5hcHBseSh0aGlzLE8uY29uY2F0KFt0aGlzXSkpKSxEZT0ocmU9dGhpcylbIm9uIisoQ1swXS50b1VwcGVyQ2FzZSgpK0Muc2xpY2UoMSkpXS5hcHBseShyZSxPKSxMZSE9PXZvaWQgMD9MZTpEZX0sRC5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih2LEMpe3ZhciBPPXRoaXMsQj1PLiRlbCxyZT1PLmN0eC5vcHRzO0ImJih2JiZ1ZShCLEJlLHRoaXMuaGFuZGxlQ2xpY2ssITEpLEMmJnVlKEIsZXQsdGhpcy5oYW5kbGVTdG9wLHJlP3JlLmNhbmNlbGxhYmxlOiEwKSl9LEQucHJvdG90eXBlLnVuYmluZD1mdW5jdGlvbih2LEMpe3ZhciBPPXRoaXMsQj1PLiRlbCxyZT1PLmN0eC5vcHRzO0ImJih2JiZ3KEIsQmUsdGhpcy5oYW5kbGVDbGljaywhMSksQyYmdyhCLGV0LHRoaXMuaGFuZGxlU3RvcCxyZT9yZS5jYW5jZWxsYWJsZTohMCkpfSxELnJhZj11LEQuY2FmPWYsRH0pKCk7cmV0dXJuIEt0fSl9KTt2YXIgdHU9Z2xvYmFsVGhpcyxZYT10dS5TaGFkb3dSb290JiYodHUuU2hhZHlDU1M9PT12b2lkIDB8fHR1LlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdykmJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZSJpbiBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZSxPbT1TeW1ib2woKSx1MD1uZXcgV2Vha01hcCxlcz1jbGFzc3tzdGF0aWN7byh0aGlzLCJuIil9Y29uc3RydWN0b3IoZSxyLG4pe2lmKHRoaXMuXyRjc3NSZXN1bHQkPSEwLG4hPT1PbSl0aHJvdyBFcnJvcigiQ1NTUmVzdWx0IGlzIG5vdCBjb25zdHJ1Y3RhYmxlLiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AgaW5zdGVhZC4iKTt0aGlzLmNzc1RleHQ9ZSx0aGlzLnQ9cn1nZXQgc3R5bGVTaGVldCgpe2xldCBlPXRoaXMubyxyPXRoaXMudDtpZihZYSYmZT09PXZvaWQgMCl7bGV0IG49ciE9PXZvaWQgMCYmci5sZW5ndGg9PT0xO24mJihlPXUwLmdldChyKSksZT09PXZvaWQgMCYmKCh0aGlzLm89ZT1uZXcgQ1NTU3R5bGVTaGVldCkucmVwbGFjZVN5bmModGhpcy5jc3NUZXh0KSxuJiZ1MC5zZXQocixlKSl9cmV0dXJuIGV9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5jc3NUZXh0fX0sUmU9byh0PT5uZXcgZXModHlwZW9mIHQ9PSJzdHJpbmciP3Q6dCsiIix2b2lkIDAsT20pLCJyIikscHQ9bygodCwuLi5lKT0+e2xldCByPXQubGVuZ3RoPT09MT90WzBdOmUucmVkdWNlKChuLGkscyk9Pm4rKGE9PntpZihhLl8kY3NzUmVzdWx0JD09PSEwKXJldHVybiBhLmNzc1RleHQ7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhO3Rocm93IEVycm9yKCJWYWx1ZSBwYXNzZWQgdG8gJ2NzcycgZnVuY3Rpb24gbXVzdCBiZSBhICdjc3MnIGZ1bmN0aW9uIHJlc3VsdDogIithKyIuIFVzZSAndW5zYWZlQ1NTJyB0byBwYXNzIG5vbi1saXRlcmFsIHZhbHVlcywgYnV0IHRha2UgY2FyZSB0byBlbnN1cmUgcGFnZSBzZWN1cml0eS4iKX0pKGkpK3RbcysxXSx0WzBdKTtyZXR1cm4gbmV3IGVzKHIsdCxPbSl9LCJpIikscnU9bygodCxlKT0+e2lmKFlhKXQuYWRvcHRlZFN0eWxlU2hlZXRzPWUubWFwKHI9PnIgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0P3I6ci5zdHlsZVNoZWV0KTtlbHNlIGZvcihsZXQgciBvZiBlKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLGk9dHUubGl0Tm9uY2U7aSE9PXZvaWQgMCYmbi5zZXRBdHRyaWJ1dGUoIm5vbmNlIixpKSxuLnRleHRDb250ZW50PXIuY3NzVGV4dCx0LmFwcGVuZENoaWxkKG4pfX0sIlMiKSxHYT1ZYT90PT50OnQ9PnQgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0PyhlPT57bGV0IHI9IiI7Zm9yKGxldCBuIG9mIGUuY3NzUnVsZXMpcis9bi5jc3NUZXh0O3JldHVybiBSZShyKX0pKHQpOnQ7dmFye2lzOnJJLGRlZmluZVByb3BlcnR5Om5JLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjppSSxnZXRPd25Qcm9wZXJ0eU5hbWVzOm9JLGdldE93blByb3BlcnR5U3ltYm9sczpzSSxnZXRQcm90b3R5cGVPZjphSX09T2JqZWN0LG51PWdsb2JhbFRoaXMsZjA9bnUudHJ1c3RlZFR5cGVzLGxJPWYwP2YwLmVtcHR5U2NyaXB0OiIiLGNJPW51LnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCxRYT1vKCh0LGUpPT50LCJkIiksdHM9e3RvQXR0cmlidXRlKHQsZSl7c3dpdGNoKGUpe2Nhc2UgQm9vbGVhbjp0PXQ/bEk6bnVsbDticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnQ9dD09bnVsbD90OkpTT04uc3RyaW5naWZ5KHQpfXJldHVybiB0fSxmcm9tQXR0cmlidXRlKHQsZSl7bGV0IHI9dDtzd2l0Y2goZSl7Y2FzZSBCb29sZWFuOnI9dCE9PW51bGw7YnJlYWs7Y2FzZSBOdW1iZXI6cj10PT09bnVsbD9udWxsOk51bWJlcih0KTticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnRyeXtyPUpTT04ucGFyc2UodCl9Y2F0Y2h7cj1udWxsfX1yZXR1cm4gcn19LEphPW8oKHQsZSk9PiFySSh0LGUpLCJmIikscDA9e2F0dHJpYnV0ZTohMCx0eXBlOlN0cmluZyxjb252ZXJ0ZXI6dHMscmVmbGVjdDohMSx1c2VEZWZhdWx0OiExLGhhc0NoYW5nZWQ6SmF9O1N5bWJvbC5tZXRhZGF0YT8/PVN5bWJvbCgibWV0YWRhdGEiKSxudS5saXRQcm9wZXJ0eU1ldGFkYXRhPz89bmV3IFdlYWtNYXA7dmFyIGVuPWNsYXNzIGV4dGVuZHMgSFRNTEVsZW1lbnR7c3RhdGlje28odGhpcywieSIpfXN0YXRpYyBhZGRJbml0aWFsaXplcihlKXt0aGlzLl8kRWkoKSwodGhpcy5sPz89W10pLnB1c2goZSl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm4gdGhpcy5maW5hbGl6ZSgpLHRoaXMuXyRFaCYmWy4uLnRoaXMuXyRFaC5rZXlzKCldfXN0YXRpYyBjcmVhdGVQcm9wZXJ0eShlLHI9cDApe2lmKHIuc3RhdGUmJihyLmF0dHJpYnV0ZT0hMSksdGhpcy5fJEVpKCksdGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoZSkmJigocj1PYmplY3QuY3JlYXRlKHIpKS53cmFwcGVkPSEwKSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldChlLHIpLCFyLm5vQWNjZXNzb3Ipe2xldCBuPVN5bWJvbCgpLGk9dGhpcy5nZXRQcm9wZXJ0eURlc2NyaXB0b3IoZSxuLHIpO2khPT12b2lkIDAmJm5JKHRoaXMucHJvdG90eXBlLGUsaSl9fXN0YXRpYyBnZXRQcm9wZXJ0eURlc2NyaXB0b3IoZSxyLG4pe2xldHtnZXQ6aSxzZXQ6c309aUkodGhpcy5wcm90b3R5cGUsZSk/P3tnZXQoKXtyZXR1cm4gdGhpc1tyXX0sc2V0KGEpe3RoaXNbcl09YX19O3JldHVybntnZXQ6aSxzZXQoYSl7bGV0IGw9aT8uY2FsbCh0aGlzKTtzPy5jYWxsKHRoaXMsYSksdGhpcy5yZXF1ZXN0VXBkYXRlKGUsbCxuKX0sY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9fXN0YXRpYyBnZXRQcm9wZXJ0eU9wdGlvbnMoZSl7cmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZ2V0KGUpPz9wMH1zdGF0aWMgXyRFaSgpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoUWEoImVsZW1lbnRQcm9wZXJ0aWVzIikpKXJldHVybjtsZXQgZT1hSSh0aGlzKTtlLmZpbmFsaXplKCksZS5sIT09dm9pZCAwJiYodGhpcy5sPVsuLi5lLmxdKSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAoZS5lbGVtZW50UHJvcGVydGllcyl9c3RhdGljIGZpbmFsaXplKCl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShRYSgiZmluYWxpemVkIikpKXJldHVybjtpZih0aGlzLmZpbmFsaXplZD0hMCx0aGlzLl8kRWkoKSx0aGlzLmhhc093blByb3BlcnR5KFFhKCJwcm9wZXJ0aWVzIikpKXtsZXQgcj10aGlzLnByb3BlcnRpZXMsbj1bLi4ub0kociksLi4uc0kocildO2ZvcihsZXQgaSBvZiBuKXRoaXMuY3JlYXRlUHJvcGVydHkoaSxyW2ldKX1sZXQgZT10aGlzW1N5bWJvbC5tZXRhZGF0YV07aWYoZSE9PW51bGwpe2xldCByPWxpdFByb3BlcnR5TWV0YWRhdGEuZ2V0KGUpO2lmKHIhPT12b2lkIDApZm9yKGxldFtuLGldb2Ygcil0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldChuLGkpfXRoaXMuXyRFaD1uZXcgTWFwO2ZvcihsZXRbcixuXW9mIHRoaXMuZWxlbWVudFByb3BlcnRpZXMpe2xldCBpPXRoaXMuXyRFdShyLG4pO2khPT12b2lkIDAmJnRoaXMuXyRFaC5zZXQoaSxyKX10aGlzLmVsZW1lbnRTdHlsZXM9dGhpcy5maW5hbGl6ZVN0eWxlcyh0aGlzLnN0eWxlcyl9c3RhdGljIGZpbmFsaXplU3R5bGVzKGUpe2xldCByPVtdO2lmKEFycmF5LmlzQXJyYXkoZSkpe2xldCBuPW5ldyBTZXQoZS5mbGF0KDEvMCkucmV2ZXJzZSgpKTtmb3IobGV0IGkgb2YgbilyLnVuc2hpZnQoR2EoaSkpfWVsc2UgZSE9PXZvaWQgMCYmci5wdXNoKEdhKGUpKTtyZXR1cm4gcn1zdGF0aWMgXyRFdShlLHIpe2xldCBuPXIuYXR0cmlidXRlO3JldHVybiBuPT09ITE/dm9pZCAwOnR5cGVvZiBuPT0ic3RyaW5nIj9uOnR5cGVvZiBlPT0ic3RyaW5nIj9lLnRvTG93ZXJDYXNlKCk6dm9pZCAwfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl8kRXA9dm9pZCAwLHRoaXMuaXNVcGRhdGVQZW5kaW5nPSExLHRoaXMuaGFzVXBkYXRlZD0hMSx0aGlzLl8kRW09bnVsbCx0aGlzLl8kRXYoKX1fJEV2KCl7dGhpcy5fJEVTPW5ldyBQcm9taXNlKGU9PnRoaXMuZW5hYmxlVXBkYXRpbmc9ZSksdGhpcy5fJEFMPW5ldyBNYXAsdGhpcy5fJEVfKCksdGhpcy5yZXF1ZXN0VXBkYXRlKCksdGhpcy5jb25zdHJ1Y3Rvci5sPy5mb3JFYWNoKGU9PmUodGhpcykpfWFkZENvbnRyb2xsZXIoZSl7KHRoaXMuXyRFTz8/PW5ldyBTZXQpLmFkZChlKSx0aGlzLnJlbmRlclJvb3QhPT12b2lkIDAmJnRoaXMuaXNDb25uZWN0ZWQmJmUuaG9zdENvbm5lY3RlZD8uKCl9cmVtb3ZlQ29udHJvbGxlcihlKXt0aGlzLl8kRU8/LmRlbGV0ZShlKX1fJEVfKCl7bGV0IGU9bmV3IE1hcCxyPXRoaXMuY29uc3RydWN0b3IuZWxlbWVudFByb3BlcnRpZXM7Zm9yKGxldCBuIG9mIHIua2V5cygpKXRoaXMuaGFzT3duUHJvcGVydHkobikmJihlLnNldChuLHRoaXNbbl0pLGRlbGV0ZSB0aGlzW25dKTtlLnNpemU+MCYmKHRoaXMuXyRFcD1lKX1jcmVhdGVSZW5kZXJSb290KCl7bGV0IGU9dGhpcy5zaGFkb3dSb290Pz90aGlzLmF0dGFjaFNoYWRvdyh0aGlzLmNvbnN0cnVjdG9yLnNoYWRvd1Jvb3RPcHRpb25zKTtyZXR1cm4gcnUoZSx0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRTdHlsZXMpLGV9Y29ubmVjdGVkQ2FsbGJhY2soKXt0aGlzLnJlbmRlclJvb3Q/Pz10aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSx0aGlzLmVuYWJsZVVwZGF0aW5nKCEwKSx0aGlzLl8kRU8/LmZvckVhY2goZT0+ZS5ob3N0Q29ubmVjdGVkPy4oKSl9ZW5hYmxlVXBkYXRpbmcoZSl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fJEVPPy5mb3JFYWNoKGU9PmUuaG9zdERpc2Nvbm5lY3RlZD8uKCkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhlLHIsbil7dGhpcy5fJEFLKGUsbil9XyRFVChlLHIpe2xldCBuPXRoaXMuY29uc3RydWN0b3IuZWxlbWVudFByb3BlcnRpZXMuZ2V0KGUpLGk9dGhpcy5jb25zdHJ1Y3Rvci5fJEV1KGUsbik7aWYoaSE9PXZvaWQgMCYmbi5yZWZsZWN0PT09ITApe2xldCBzPShuLmNvbnZlcnRlcj8udG9BdHRyaWJ1dGUhPT12b2lkIDA/bi5jb252ZXJ0ZXI6dHMpLnRvQXR0cmlidXRlKHIsbi50eXBlKTt0aGlzLl8kRW09ZSxzPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpOnRoaXMuc2V0QXR0cmlidXRlKGkscyksdGhpcy5fJEVtPW51bGx9fV8kQUsoZSxyKXtsZXQgbj10aGlzLmNvbnN0cnVjdG9yLGk9bi5fJEVoLmdldChlKTtpZihpIT09dm9pZCAwJiZ0aGlzLl8kRW0hPT1pKXtsZXQgcz1uLmdldFByb3BlcnR5T3B0aW9ucyhpKSxhPXR5cGVvZiBzLmNvbnZlcnRlcj09ImZ1bmN0aW9uIj97ZnJvbUF0dHJpYnV0ZTpzLmNvbnZlcnRlcn06cy5jb252ZXJ0ZXI/LmZyb21BdHRyaWJ1dGUhPT12b2lkIDA/cy5jb252ZXJ0ZXI6dHM7dGhpcy5fJEVtPWk7bGV0IGw9YS5mcm9tQXR0cmlidXRlKHIscy50eXBlKTt0aGlzW2ldPWw/P3RoaXMuXyRFaj8uZ2V0KGkpPz9sLHRoaXMuXyRFbT1udWxsfX1yZXF1ZXN0VXBkYXRlKGUscixuLGk9ITEscyl7aWYoZSE9PXZvaWQgMCl7bGV0IGE9dGhpcy5jb25zdHJ1Y3RvcjtpZihpPT09ITEmJihzPXRoaXNbZV0pLG4/Pz1hLmdldFByb3BlcnR5T3B0aW9ucyhlKSwhKChuLmhhc0NoYW5nZWQ/P0phKShzLHIpfHxuLnVzZURlZmF1bHQmJm4ucmVmbGVjdCYmcz09PXRoaXMuXyRFaj8uZ2V0KGUpJiYhdGhpcy5oYXNBdHRyaWJ1dGUoYS5fJEV1KGUsbikpKSlyZXR1cm47dGhpcy5DKGUscixuKX10aGlzLmlzVXBkYXRlUGVuZGluZz09PSExJiYodGhpcy5fJEVTPXRoaXMuXyRFUCgpKX1DKGUscix7dXNlRGVmYXVsdDpuLHJlZmxlY3Q6aSx3cmFwcGVkOnN9LGEpe24mJiEodGhpcy5fJEVqPz89bmV3IE1hcCkuaGFzKGUpJiYodGhpcy5fJEVqLnNldChlLGE/P3I/P3RoaXNbZV0pLHMhPT0hMHx8YSE9PXZvaWQgMCl8fCh0aGlzLl8kQUwuaGFzKGUpfHwodGhpcy5oYXNVcGRhdGVkfHxufHwocj12b2lkIDApLHRoaXMuXyRBTC5zZXQoZSxyKSksaT09PSEwJiZ0aGlzLl8kRW0hPT1lJiYodGhpcy5fJEVxPz89bmV3IFNldCkuYWRkKGUpKX1hc3luYyBfJEVQKCl7dGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITA7dHJ5e2F3YWl0IHRoaXMuXyRFU31jYXRjaChyKXtQcm9taXNlLnJlamVjdChyKX1sZXQgZT10aGlzLnNjaGVkdWxlVXBkYXRlKCk7cmV0dXJuIGUhPW51bGwmJmF3YWl0IGUsIXRoaXMuaXNVcGRhdGVQZW5kaW5nfXNjaGVkdWxlVXBkYXRlKCl7cmV0dXJuIHRoaXMucGVyZm9ybVVwZGF0ZSgpfXBlcmZvcm1VcGRhdGUoKXtpZighdGhpcy5pc1VwZGF0ZVBlbmRpbmcpcmV0dXJuO2lmKCF0aGlzLmhhc1VwZGF0ZWQpe2lmKHRoaXMucmVuZGVyUm9vdD8/PXRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpLHRoaXMuXyRFcCl7Zm9yKGxldFtpLHNdb2YgdGhpcy5fJEVwKXRoaXNbaV09czt0aGlzLl8kRXA9dm9pZCAwfWxldCBuPXRoaXMuY29uc3RydWN0b3IuZWxlbWVudFByb3BlcnRpZXM7aWYobi5zaXplPjApZm9yKGxldFtpLHNdb2Ygbil7bGV0e3dyYXBwZWQ6YX09cyxsPXRoaXNbaV07YSE9PSEwfHx0aGlzLl8kQUwuaGFzKGkpfHxsPT09dm9pZCAwfHx0aGlzLkMoaSx2b2lkIDAscyxsKX19bGV0IGU9ITEscj10aGlzLl8kQUw7dHJ5e2U9dGhpcy5zaG91bGRVcGRhdGUociksZT8odGhpcy53aWxsVXBkYXRlKHIpLHRoaXMuXyRFTz8uZm9yRWFjaChuPT5uLmhvc3RVcGRhdGU/LigpKSx0aGlzLnVwZGF0ZShyKSk6dGhpcy5fJEVNKCl9Y2F0Y2gobil7dGhyb3cgZT0hMSx0aGlzLl8kRU0oKSxufWUmJnRoaXMuXyRBRShyKX13aWxsVXBkYXRlKGUpe31fJEFFKGUpe3RoaXMuXyRFTz8uZm9yRWFjaChyPT5yLmhvc3RVcGRhdGVkPy4oKSksdGhpcy5oYXNVcGRhdGVkfHwodGhpcy5oYXNVcGRhdGVkPSEwLHRoaXMuZmlyc3RVcGRhdGVkKGUpKSx0aGlzLnVwZGF0ZWQoZSl9XyRFTSgpe3RoaXMuXyRBTD1uZXcgTWFwLHRoaXMuaXNVcGRhdGVQZW5kaW5nPSExfWdldCB1cGRhdGVDb21wbGV0ZSgpe3JldHVybiB0aGlzLmdldFVwZGF0ZUNvbXBsZXRlKCl9Z2V0VXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5fJEVTfXNob3VsZFVwZGF0ZShlKXtyZXR1cm4hMH11cGRhdGUoZSl7dGhpcy5fJEVxJiY9dGhpcy5fJEVxLmZvckVhY2gocj0+dGhpcy5fJEVUKHIsdGhpc1tyXSkpLHRoaXMuXyRFTSgpfXVwZGF0ZWQoZSl7fWZpcnN0VXBkYXRlZChlKXt9fTtlbi5lbGVtZW50U3R5bGVzPVtdLGVuLnNoYWRvd1Jvb3RPcHRpb25zPXttb2RlOiJvcGVuIn0sZW5bUWEoImVsZW1lbnRQcm9wZXJ0aWVzIildPW5ldyBNYXAsZW5bUWEoImZpbmFsaXplZCIpXT1uZXcgTWFwLGNJPy4oe1JlYWN0aXZlRWxlbWVudDplbn0pLChudS5yZWFjdGl2ZUVsZW1lbnRWZXJzaW9ucz8/PVtdKS5wdXNoKCIyLjEuMiIpO3ZhciBJbT1nbG9iYWxUaGlzLGgwPW8odD0+dCwiaSIpLGl1PUltLnRydXN0ZWRUeXBlcyxkMD1pdT9pdS5jcmVhdGVQb2xpY3koImxpdC1odG1sIix7Y3JlYXRlSFRNTDpvKHQ9PnQsImNyZWF0ZUhUTUwiKX0pOnZvaWQgMCxfbT0iJGxpdCQiLFBuPWBsaXQkJHtNYXRoLnJhbmRvbSgpLnRvRml4ZWQoOSkuc2xpY2UoMil9JGAsUG09Ij8iK1BuLHVJPWA8JHtQbX0+YCxZaT1kb2N1bWVudCxLYT1vKCgpPT5ZaS5jcmVhdGVDb21tZW50KCIiKSwiYyIpLFhhPW8odD0+dD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IiYmdHlwZW9mIHQhPSJmdW5jdGlvbiIsImEiKSxObT1BcnJheS5pc0FycmF5LG0wPW8odD0+Tm0odCl8fHR5cGVvZiB0Py5bU3ltYm9sLml0ZXJhdG9yXT09ImZ1bmN0aW9uIiwiZCIpLFJtPWBbIAkKXGZccl1gLFphPS88KD86KCEtLXxcL1teYS16QS1aXSl8KFwvP1thLXpBLVpdW14+XHNdKil8KFwvPyQpKS9nLGcwPS8tLT4vZyx5MD0vPi9nLEdpPVJlZ0V4cChgPnwke1JtfSg/OihbXlxccyInPj0vXSspKCR7Um19Kj0ke1JtfSooPzpbXiAJClxmXHIiJ1xgPD49XXwoInwnKXwpKXwkKWAsImciKSx4MD0vJy9nLGIwPS8iL2csdzA9L14oPzpzY3JpcHR8c3R5bGV8dGV4dGFyZWF8dGl0bGUpJC9pLExtPW8odD0+KGUsLi4ucik9Pih7XyRsaXRUeXBlJDp0LHN0cmluZ3M6ZSx2YWx1ZXM6cn0pLCJ4IiksbWU9TG0oMSksRm09TG0oMiksQW09TG0oMyksemU9U3ltYm9sLmZvcigibGl0LW5vQ2hhbmdlIiksV2U9U3ltYm9sLmZvcigibGl0LW5vdGhpbmciKSx2MD1uZXcgV2Vha01hcCxRaT1ZaS5jcmVhdGVUcmVlV2Fsa2VyKFlpLDEyOSk7ZnVuY3Rpb24gazAodCxlKXtpZighTm0odCl8fCF0Lmhhc093blByb3BlcnR5KCJyYXciKSl0aHJvdyBFcnJvcigiaW52YWxpZCB0ZW1wbGF0ZSBzdHJpbmdzIGFycmF5Iik7cmV0dXJuIGQwIT09dm9pZCAwP2QwLmNyZWF0ZUhUTUwoZSk6ZX1vKGswLCJWIik7dmFyIFMwPW8oKHQsZSk9PntsZXQgcj10Lmxlbmd0aC0xLG49W10saSxzPWU9PT0yPyI8c3ZnPiI6ZT09PTM/IjxtYXRoPiI6IiIsYT1aYTtmb3IobGV0IGw9MDtsPHI7bCsrKXtsZXQgYz10W2xdLHUsZixwPS0xLGg9MDtmb3IoO2g8Yy5sZW5ndGgmJihhLmxhc3RJbmRleD1oLGY9YS5leGVjKGMpLGYhPT1udWxsKTspaD1hLmxhc3RJbmRleCxhPT09WmE/ZlsxXT09PSIhLS0iP2E9ZzA6ZlsxXSE9PXZvaWQgMD9hPXkwOmZbMl0hPT12b2lkIDA/KHcwLnRlc3QoZlsyXSkmJihpPVJlZ0V4cCgiPC8iK2ZbMl0sImciKSksYT1HaSk6ZlszXSE9PXZvaWQgMCYmKGE9R2kpOmE9PT1HaT9mWzBdPT09Ij4iPyhhPWk/P1phLHA9LTEpOmZbMV09PT12b2lkIDA/cD0tMjoocD1hLmxhc3RJbmRleC1mWzJdLmxlbmd0aCx1PWZbMV0sYT1mWzNdPT09dm9pZCAwP0dpOmZbM109PT0nIic/YjA6eDApOmE9PT1iMHx8YT09PXgwP2E9R2k6YT09PWcwfHxhPT09eTA/YT1aYTooYT1HaSxpPXZvaWQgMCk7bGV0IGQ9YT09PUdpJiZ0W2wrMV0uc3RhcnRzV2l0aCgiLz4iKT8iICI6IiI7cys9YT09PVphP2MrdUk6cD49MD8obi5wdXNoKHUpLGMuc2xpY2UoMCxwKStfbStjLnNsaWNlKHApK1BuK2QpOmMrUG4rKHA9PT0tMj9sOmQpfXJldHVybltrMCh0LHMrKHRbcl18fCI8Pz4iKSsoZT09PTI/Ijwvc3ZnPiI6ZT09PTM/IjwvbWF0aD4iOiIiKSksbl19LCJOIiksZWw9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJTIil9Y29uc3RydWN0b3Ioe3N0cmluZ3M6ZSxfJGxpdFR5cGUkOnJ9LG4pe2xldCBpO3RoaXMucGFydHM9W107bGV0IHM9MCxhPTAsbD1lLmxlbmd0aC0xLGM9dGhpcy5wYXJ0cyxbdSxmXT1TMChlLHIpO2lmKHRoaXMuZWw9dC5jcmVhdGVFbGVtZW50KHUsbiksUWkuY3VycmVudE5vZGU9dGhpcy5lbC5jb250ZW50LHI9PT0yfHxyPT09Myl7bGV0IHA9dGhpcy5lbC5jb250ZW50LmZpcnN0Q2hpbGQ7cC5yZXBsYWNlV2l0aCguLi5wLmNoaWxkTm9kZXMpfWZvcig7KGk9UWkubmV4dE5vZGUoKSkhPT1udWxsJiZjLmxlbmd0aDxsOyl7aWYoaS5ub2RlVHlwZT09PTEpe2lmKGkuaGFzQXR0cmlidXRlcygpKWZvcihsZXQgcCBvZiBpLmdldEF0dHJpYnV0ZU5hbWVzKCkpaWYocC5lbmRzV2l0aChfbSkpe2xldCBoPWZbYSsrXSxkPWkuZ2V0QXR0cmlidXRlKHApLnNwbGl0KFBuKSxtPS8oWy4/QF0pPyguKikvLmV4ZWMoaCk7Yy5wdXNoKHt0eXBlOjEsaW5kZXg6cyxuYW1lOm1bMl0sc3RyaW5nczpkLGN0b3I6bVsxXT09PSIuIj9zdTptWzFdPT09Ij8iP2F1Om1bMV09PT0iQCI/bHU6S2l9KSxpLnJlbW92ZUF0dHJpYnV0ZShwKX1lbHNlIHAuc3RhcnRzV2l0aChQbikmJihjLnB1c2goe3R5cGU6NixpbmRleDpzfSksaS5yZW1vdmVBdHRyaWJ1dGUocCkpO2lmKHcwLnRlc3QoaS50YWdOYW1lKSl7bGV0IHA9aS50ZXh0Q29udGVudC5zcGxpdChQbiksaD1wLmxlbmd0aC0xO2lmKGg+MCl7aS50ZXh0Q29udGVudD1pdT9pdS5lbXB0eVNjcmlwdDoiIjtmb3IobGV0IGQ9MDtkPGg7ZCsrKWkuYXBwZW5kKHBbZF0sS2EoKSksUWkubmV4dE5vZGUoKSxjLnB1c2goe3R5cGU6MixpbmRleDorK3N9KTtpLmFwcGVuZChwW2hdLEthKCkpfX19ZWxzZSBpZihpLm5vZGVUeXBlPT09OClpZihpLmRhdGE9PT1QbSljLnB1c2goe3R5cGU6MixpbmRleDpzfSk7ZWxzZXtsZXQgcD0tMTtmb3IoOyhwPWkuZGF0YS5pbmRleE9mKFBuLHArMSkpIT09LTE7KWMucHVzaCh7dHlwZTo3LGluZGV4OnN9KSxwKz1Qbi5sZW5ndGgtMX1zKyt9fXN0YXRpYyBjcmVhdGVFbGVtZW50KGUscil7bGV0IG49WWkuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gbi5pbm5lckhUTUw9ZSxufX07ZnVuY3Rpb24gSmkodCxlLHI9dCxuKXtpZihlPT09emUpcmV0dXJuIGU7bGV0IGk9biE9PXZvaWQgMD9yLl8kQ28/LltuXTpyLl8kQ2wscz1YYShlKT92b2lkIDA6ZS5fJGxpdERpcmVjdGl2ZSQ7cmV0dXJuIGk/LmNvbnN0cnVjdG9yIT09cyYmKGk/Ll8kQU8/LighMSkscz09PXZvaWQgMD9pPXZvaWQgMDooaT1uZXcgcyh0KSxpLl8kQVQodCxyLG4pKSxuIT09dm9pZCAwPyhyLl8kQ28/Pz1bXSlbbl09aTpyLl8kQ2w9aSksaSE9PXZvaWQgMCYmKGU9SmkodCxpLl8kQVModCxlLnZhbHVlcyksaSxuKSksZX1vKEppLCJNIik7dmFyIG91PWNsYXNze3N0YXRpY3tvKHRoaXMsIlIiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuXyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD1lLHRoaXMuXyRBTT1yfWdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBTS5wYXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfXUoZSl7bGV0e2VsOntjb250ZW50OnJ9LHBhcnRzOm59PXRoaXMuXyRBRCxpPShlPy5jcmVhdGlvblNjb3BlPz9ZaSkuaW1wb3J0Tm9kZShyLCEwKTtRaS5jdXJyZW50Tm9kZT1pO2xldCBzPVFpLm5leHROb2RlKCksYT0wLGw9MCxjPW5bMF07Zm9yKDtjIT09dm9pZCAwOyl7aWYoYT09PWMuaW5kZXgpe2xldCB1O2MudHlwZT09PTI/dT1uZXcgcnMocyxzLm5leHRTaWJsaW5nLHRoaXMsZSk6Yy50eXBlPT09MT91PW5ldyBjLmN0b3IocyxjLm5hbWUsYy5zdHJpbmdzLHRoaXMsZSk6Yy50eXBlPT09NiYmKHU9bmV3IGN1KHMsdGhpcyxlKSksdGhpcy5fJEFWLnB1c2godSksYz1uWysrbF19YSE9PWM/LmluZGV4JiYocz1RaS5uZXh0Tm9kZSgpLGErKyl9cmV0dXJuIFFpLmN1cnJlbnROb2RlPVlpLGl9cChlKXtsZXQgcj0wO2ZvcihsZXQgbiBvZiB0aGlzLl8kQVYpbiE9PXZvaWQgMCYmKG4uc3RyaW5ncyE9PXZvaWQgMD8obi5fJEFJKGUsbixyKSxyKz1uLnN0cmluZ3MubGVuZ3RoLTIpOm4uXyRBSShlW3JdKSkscisrfX0scnM9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJrIil9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNPy5fJEFVPz90aGlzLl8kQ3Z9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy50eXBlPTIsdGhpcy5fJEFIPVdlLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFBPWUsdGhpcy5fJEFCPXIsdGhpcy5fJEFNPW4sdGhpcy5vcHRpb25zPWksdGhpcy5fJEN2PWk/LmlzQ29ubmVjdGVkPz8hMH1nZXQgcGFyZW50Tm9kZSgpe2xldCBlPXRoaXMuXyRBQS5wYXJlbnROb2RlLHI9dGhpcy5fJEFNO3JldHVybiByIT09dm9pZCAwJiZlPy5ub2RlVHlwZT09PTExJiYoZT1yLnBhcmVudE5vZGUpLGV9Z2V0IHN0YXJ0Tm9kZSgpe3JldHVybiB0aGlzLl8kQUF9Z2V0IGVuZE5vZGUoKXtyZXR1cm4gdGhpcy5fJEFCfV8kQUkoZSxyPXRoaXMpe2U9SmkodGhpcyxlLHIpLFhhKGUpP2U9PT1XZXx8ZT09bnVsbHx8ZT09PSIiPyh0aGlzLl8kQUghPT1XZSYmdGhpcy5fJEFSKCksdGhpcy5fJEFIPVdlKTplIT09dGhpcy5fJEFIJiZlIT09emUmJnRoaXMuXyhlKTplLl8kbGl0VHlwZSQhPT12b2lkIDA/dGhpcy4kKGUpOmUubm9kZVR5cGUhPT12b2lkIDA/dGhpcy5UKGUpOm0wKGUpP3RoaXMuayhlKTp0aGlzLl8oZSl9TyhlKXtyZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5fJEFCKX1UKGUpe3RoaXMuXyRBSCE9PWUmJih0aGlzLl8kQVIoKSx0aGlzLl8kQUg9dGhpcy5PKGUpKX1fKGUpe3RoaXMuXyRBSCE9PVdlJiZYYSh0aGlzLl8kQUgpP3RoaXMuXyRBQS5uZXh0U2libGluZy5kYXRhPWU6dGhpcy5UKFlpLmNyZWF0ZVRleHROb2RlKGUpKSx0aGlzLl8kQUg9ZX0kKGUpe2xldHt2YWx1ZXM6cixfJGxpdFR5cGUkOm59PWUsaT10eXBlb2Ygbj09Im51bWJlciI/dGhpcy5fJEFDKGUpOihuLmVsPT09dm9pZCAwJiYobi5lbD1lbC5jcmVhdGVFbGVtZW50KGswKG4uaCxuLmhbMF0pLHRoaXMub3B0aW9ucykpLG4pO2lmKHRoaXMuXyRBSD8uXyRBRD09PWkpdGhpcy5fJEFILnAocik7ZWxzZXtsZXQgcz1uZXcgb3UoaSx0aGlzKSxhPXMudSh0aGlzLm9wdGlvbnMpO3MucChyKSx0aGlzLlQoYSksdGhpcy5fJEFIPXN9fV8kQUMoZSl7bGV0IHI9djAuZ2V0KGUuc3RyaW5ncyk7cmV0dXJuIHI9PT12b2lkIDAmJnYwLnNldChlLnN0cmluZ3Mscj1uZXcgZWwoZSkpLHJ9ayhlKXtObSh0aGlzLl8kQUgpfHwodGhpcy5fJEFIPVtdLHRoaXMuXyRBUigpKTtsZXQgcj10aGlzLl8kQUgsbixpPTA7Zm9yKGxldCBzIG9mIGUpaT09PXIubGVuZ3RoP3IucHVzaChuPW5ldyB0KHRoaXMuTyhLYSgpKSx0aGlzLk8oS2EoKSksdGhpcyx0aGlzLm9wdGlvbnMpKTpuPXJbaV0sbi5fJEFJKHMpLGkrKztpPHIubGVuZ3RoJiYodGhpcy5fJEFSKG4mJm4uXyRBQi5uZXh0U2libGluZyxpKSxyLmxlbmd0aD1pKX1fJEFSKGU9dGhpcy5fJEFBLm5leHRTaWJsaW5nLHIpe2Zvcih0aGlzLl8kQVA/LighMSwhMCxyKTtlIT09dGhpcy5fJEFCOyl7bGV0IG49aDAoZSkubmV4dFNpYmxpbmc7aDAoZSkucmVtb3ZlKCksZT1ufX1zZXRDb25uZWN0ZWQoZSl7dGhpcy5fJEFNPT09dm9pZCAwJiYodGhpcy5fJEN2PWUsdGhpcy5fJEFQPy4oZSkpfX0sS2k9Y2xhc3N7c3RhdGlje28odGhpcywiSCIpfWdldCB0YWdOYW1lKCl7cmV0dXJuIHRoaXMuZWxlbWVudC50YWdOYW1lfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfWNvbnN0cnVjdG9yKGUscixuLGkscyl7dGhpcy50eXBlPTEsdGhpcy5fJEFIPVdlLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5lbGVtZW50PWUsdGhpcy5uYW1lPXIsdGhpcy5fJEFNPWksdGhpcy5vcHRpb25zPXMsbi5sZW5ndGg+Mnx8blswXSE9PSIifHxuWzFdIT09IiI/KHRoaXMuXyRBSD1BcnJheShuLmxlbmd0aC0xKS5maWxsKG5ldyBTdHJpbmcpLHRoaXMuc3RyaW5ncz1uKTp0aGlzLl8kQUg9V2V9XyRBSShlLHI9dGhpcyxuLGkpe2xldCBzPXRoaXMuc3RyaW5ncyxhPSExO2lmKHM9PT12b2lkIDApZT1KaSh0aGlzLGUsciwwKSxhPSFYYShlKXx8ZSE9PXRoaXMuXyRBSCYmZSE9PXplLGEmJih0aGlzLl8kQUg9ZSk7ZWxzZXtsZXQgbD1lLGMsdTtmb3IoZT1zWzBdLGM9MDtjPHMubGVuZ3RoLTE7YysrKXU9SmkodGhpcyxsW24rY10scixjKSx1PT09emUmJih1PXRoaXMuXyRBSFtjXSksYXx8PSFYYSh1KXx8dSE9PXRoaXMuXyRBSFtjXSx1PT09V2U/ZT1XZTplIT09V2UmJihlKz0odT8/IiIpK3NbYysxXSksdGhpcy5fJEFIW2NdPXV9YSYmIWkmJnRoaXMuaihlKX1qKGUpe2U9PT1XZT90aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMubmFtZSk6dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsZT8/IiIpfX0sc3U9Y2xhc3MgZXh0ZW5kcyBLaXtzdGF0aWN7byh0aGlzLCJJIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT0zfWooZSl7dGhpcy5lbGVtZW50W3RoaXMubmFtZV09ZT09PVdlP3ZvaWQgMDplfX0sYXU9Y2xhc3MgZXh0ZW5kcyBLaXtzdGF0aWN7byh0aGlzLCJMIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT00fWooZSl7dGhpcy5lbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSh0aGlzLm5hbWUsISFlJiZlIT09V2UpfX0sbHU9Y2xhc3MgZXh0ZW5kcyBLaXtzdGF0aWN7byh0aGlzLCJ6Iil9Y29uc3RydWN0b3IoZSxyLG4saSxzKXtzdXBlcihlLHIsbixpLHMpLHRoaXMudHlwZT01fV8kQUkoZSxyPXRoaXMpe2lmKChlPUppKHRoaXMsZSxyLDApPz9XZSk9PT16ZSlyZXR1cm47bGV0IG49dGhpcy5fJEFILGk9ZT09PVdlJiZuIT09V2V8fGUuY2FwdHVyZSE9PW4uY2FwdHVyZXx8ZS5vbmNlIT09bi5vbmNlfHxlLnBhc3NpdmUhPT1uLnBhc3NpdmUscz1lIT09V2UmJihuPT09V2V8fGkpO2kmJnRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLG4pLHMmJnRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLGUpLHRoaXMuXyRBSD1lfWhhbmRsZUV2ZW50KGUpe3R5cGVvZiB0aGlzLl8kQUg9PSJmdW5jdGlvbiI/dGhpcy5fJEFILmNhbGwodGhpcy5vcHRpb25zPy5ob3N0Pz90aGlzLmVsZW1lbnQsZSk6dGhpcy5fJEFILmhhbmRsZUV2ZW50KGUpfX0sY3U9Y2xhc3N7c3RhdGlje28odGhpcywiWiIpfWNvbnN0cnVjdG9yKGUscixuKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLnR5cGU9Nix0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBTT1yLHRoaXMub3B0aW9ucz1ufWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUkoZSl7SmkodGhpcyxlKX19LCRtPXtNOl9tLFA6UG4sQTpQbSxDOjEsTDpTMCxSOm91LEQ6bTAsVjpKaSxJOnJzLEg6S2ksTjphdSxVOmx1LEI6c3UsRjpjdX0sZkk9SW0ubGl0SHRtbFBvbHlmaWxsU3VwcG9ydDtmST8uKGVsLHJzKSwoSW0ubGl0SHRtbFZlcnNpb25zPz89W10pLnB1c2goIjMuMy4zIik7dmFyIHV1PW8oKHQsZSxyKT0+e2xldCBuPXI/LnJlbmRlckJlZm9yZT8/ZSxpPW4uXyRsaXRQYXJ0JDtpZihpPT09dm9pZCAwKXtsZXQgcz1yPy5yZW5kZXJCZWZvcmU/P251bGw7bi5fJGxpdFBhcnQkPWk9bmV3IHJzKGUuaW5zZXJ0QmVmb3JlKEthKCkscykscyx2b2lkIDAscj8/e30pfXJldHVybiBpLl8kQUkodCksaX0sIkQiKTt2YXIgQm09Z2xvYmFsVGhpcyxObj1jbGFzcyBleHRlbmRzIGVue3N0YXRpY3tvKHRoaXMsImkiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZW5kZXJPcHRpb25zPXtob3N0OnRoaXN9LHRoaXMuXyREbz12b2lkIDB9Y3JlYXRlUmVuZGVyUm9vdCgpe2xldCBlPXN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTtyZXR1cm4gdGhpcy5yZW5kZXJPcHRpb25zLnJlbmRlckJlZm9yZT8/PWUuZmlyc3RDaGlsZCxlfXVwZGF0ZShlKXtsZXQgcj10aGlzLnJlbmRlcigpO3RoaXMuaGFzVXBkYXRlZHx8KHRoaXMucmVuZGVyT3B0aW9ucy5pc0Nvbm5lY3RlZD10aGlzLmlzQ29ubmVjdGVkKSxzdXBlci51cGRhdGUoZSksdGhpcy5fJERvPXV1KHIsdGhpcy5yZW5kZXJSb290LHRoaXMucmVuZGVyT3B0aW9ucyl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuXyREbz8uc2V0Q29ubmVjdGVkKCEwKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fJERvPy5zZXRDb25uZWN0ZWQoITEpfXJlbmRlcigpe3JldHVybiB6ZX19O05uLl8kbGl0RWxlbWVudCQ9ITAsTm4uZmluYWxpemVkPSEwLEJtLmxpdEVsZW1lbnRIeWRyYXRlU3VwcG9ydD8uKHtMaXRFbGVtZW50Ok5ufSk7dmFyIHBJPUJtLmxpdEVsZW1lbnRQb2x5ZmlsbFN1cHBvcnQ7cEk/Lih7TGl0RWxlbWVudDpObn0pO3ZhciBoST17XyRBSzpvKCh0LGUscik9Pnt0Ll8kQUsoZSxyKX0sIl8kQUsiKSxfJEFMOm8odD0+dC5fJEFMLCJfJEFMIil9OyhCbS5saXRFbGVtZW50VmVyc2lvbnM/Pz1bXSkucHVzaCgiNC4yLjIiKTt2YXIgZEk9ITE7dmFyIEllPXt9O3NlKEllLHtPYnNlcnZhYmxlSW50YWtlOigpPT51ZyxPYnNlcnZhYmxlbWFwOigpPT5jZyxmcm9tU3RyZWFtV2l0aEJhY2twcmVzc3VyZTooKT0+bk4scnhqczooKT0+cHN9KTt2YXIgWj17fTtzZShaLHtDdW11bGF0aXZlRGVmZXJyZWQ6KCk9Pmh1LERlZmVycmVkOigpPT5wdSxjdW11bGF0aXZlRGVmZXI6KCk9PmdJLGRlZmVyOigpPT5uaSxmcm9tQ2FsbGJhY2s6KCk9PmtJLGdldEZpcnN0VHJ1ZU9yRmFsc2U6KCk9PnZJLG1hcDooKT0+YkkscmVqZWN0ZWRQcm9taXNlOigpPT54SSxyZXNvbHZlZFByb21pc2U6KCk9PnlJLHRpbWVvdXRBbmRDb250aW51ZTooKT0+d0ksdGltZW91dFdyYXA6KCk9PlQwfSk7dmFyIHB1PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmVycmVkIil9Y2xhaW0oKXtpZih0aGlzLmNsYWltZWQpdGhyb3cgbmV3IEVycm9yKCJEZWZlcnJlZCBhbHJlYWR5IGNsYWltZWQiKTt0aGlzLmNsYWltZWQ9ITB9Z2V0IGR1cmF0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcHBlZEF0P3RoaXMuc3RvcHBlZEF0LXRoaXMuc3RhcnRlZEF0OkRhdGUubm93KCktdGhpcy5zdGFydGVkQXR9Y29uc3RydWN0b3IoKXt0aGlzLmNsYWltZWQ9ITEsdGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChlLHIpPT57dGhpcy5yZXNvbHZlPW49Pnt0aGlzLnN0YXR1cz0iZnVsZmlsbGVkIix0aGlzLnN0b3BwZWRBdD1EYXRlLm5vdygpLGUobil9LHRoaXMucmVqZWN0PW49Pnt0aGlzLnN0YXR1cz0icmVqZWN0ZWQiLHRoaXMuc3RvcHBlZEF0PURhdGUubm93KCkscihuKX0sdGhpcy5zdGFydGVkQXQ9RGF0ZS5ub3coKSx0aGlzLnN0YXR1cz0icGVuZGluZyJ9KX19LG5pPW8oKCk9Pm5ldyBwdSwiZGVmZXIiKTt2YXIgaHU9Y2xhc3N7c3RhdGlje28odGhpcywiQ3VtdWxhdGl2ZURlZmVycmVkIil9Y29uc3RydWN0b3IoKXt0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXM9W10sdGhpcy5kZWZlcnJlZD1uaSgpLHRoaXMucHJvbWlzZT10aGlzLmRlZmVycmVkLnByb21pc2Usc2V0VGltZW91dChhc3luYygpPT57Zm9yKDt0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMubGVuZ3RoPjA7KWF3YWl0IHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5zaGlmdCgpO3RoaXMuZGVmZXJyZWQucmVzb2x2ZSgpfSwwKX1zdWJEZWZlcigpe2xldCBlPW5pKCk7cmV0dXJuIHRoaXMuYWRkUHJvbWlzZShlLnByb21pc2UpLGV9YWRkUHJvbWlzZShlKXt0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMucHVzaChlKX19LGdJPW8oKCk9Pm5ldyBodSwiY3VtdWxhdGl2ZURlZmVyIik7ZnVuY3Rpb24geUkodCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KX1vKHlJLCJyZXNvbHZlZFByb21pc2UiKTt2YXIgeEk9byh0PT5Qcm9taXNlLnJlamVjdCh0KSwicmVqZWN0ZWRQcm9taXNlIiksYkk9byhhc3luYyh0LGUpPT5Qcm9taXNlLmFsbCh0Lm1hcChlKSksIm1hcCIpLFQwPW8oYXN5bmModCxlLHI9ITApPT5uZXcgUHJvbWlzZSgobixpKT0+e2xldCBzLGE9bygoKT0+e3MhPT12b2lkIDAmJihjbGVhclRpbWVvdXQocykscz12b2lkIDApfSwicmVsZWFzZVRpbWVvdXQiKTtzPXNldFRpbWVvdXQoKCk9PntzPXZvaWQgMCxyP2kobmV3IEVycm9yKCJ0aW1lb3V0IikpOm4obnVsbCl9LGUpLHQudGhlbihsPT57YSgpLG4obCl9LGw9PnthKCksaShsKX0pfSksInRpbWVvdXRXcmFwIiksd0k9byhhc3luYyh0LGU9NmU0KT0+VDAodCxlLCExKSwidGltZW91dEFuZENvbnRpbnVlIiksdkk9byhhc3luYyB0PT57bGV0IGU9bmkoKTtmb3IobGV0IHIgb2YgdClyLnRoZW4obj0+e249PT0hMCYmZS5yZXNvbHZlKCEwKX0pO3JldHVybiBQcm9taXNlLmFsbCh0KS50aGVuKCgpPT57ZS5yZXNvbHZlKCExKX0pLGUucHJvbWlzZX0sImdldEZpcnN0VHJ1ZU9yRmFsc2UiKSxrST1vKHQ9Pm5ldyBQcm9taXNlKChlLHIpPT57dCgobixpKT0+e24/cihuKTplKGkpfSl9KSwiZnJvbUNhbGxiYWNrIik7dmFyIHBzPXt9O3NlKHBzLHtPYnNlcnZhYmxlOigpPT5rZSxSZXBsYXlTdWJqZWN0OigpPT5zcyxTdWJqZWN0OigpPT5qdCxTdWJzY3JpcHRpb246KCk9Pkh0LGZyb206KCk9PnNuLGZyb21FdmVudDooKT0+cm8sb2Y6KCk9PmFsLG9wczooKT0+ck59KTt2YXIgem09byhmdW5jdGlvbih0LGUpe3JldHVybiB6bT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24ocixuKXtyLl9fcHJvdG9fXz1ufXx8ZnVuY3Rpb24ocixuKXtmb3IodmFyIGkgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixpKSYmKHJbaV09bltpXSl9LHptKHQsZSl9LCJleHRlbmRTdGF0aWNzIik7ZnVuY3Rpb24gb3QodCxlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmZSE9PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhlKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTt6bSh0LGUpO2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9byhyLCJfXyIpLHQucHJvdG90eXBlPWU9PT1udWxsP09iamVjdC5jcmVhdGUoZSk6KHIucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyByKX1vKG90LCJfX2V4dGVuZHMiKTt2YXIgSG09byhmdW5jdGlvbigpe3JldHVybiBIbT1PYmplY3QuYXNzaWdufHxvKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspe3I9YXJndW1lbnRzW25dO2Zvcih2YXIgcyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLHMpJiYoZVtzXT1yW3NdKX1yZXR1cm4gZX0sIl9fYXNzaWduIiksSG0uYXBwbHkodGhpcyxhcmd1bWVudHMpfSwiX19hc3NpZ24iKTtmdW5jdGlvbiBUSSh0LGUpe3ZhciByPXt9O2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiZlLmluZGV4T2Yobik8MCYmKHJbbl09dFtuXSk7aWYodCE9bnVsbCYmdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM9PSJmdW5jdGlvbiIpZm9yKHZhciBpPTAsbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2k8bi5sZW5ndGg7aSsrKWUuaW5kZXhPZihuW2ldKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodCxuW2ldKSYmKHJbbltpXV09dFtuW2ldXSk7cmV0dXJuIHJ9byhUSSwiX19yZXN0Iik7ZnVuY3Rpb24gRUkodCxlLHIsbil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aCxzPWk8Mz9lOm49PT1udWxsP249T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpOm4sYTtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0LmRlY29yYXRlPT0iZnVuY3Rpb24iKXM9UmVmbGVjdC5kZWNvcmF0ZSh0LGUscixuKTtlbHNlIGZvcih2YXIgbD10Lmxlbmd0aC0xO2w+PTA7bC0tKShhPXRbbF0pJiYocz0oaTwzP2Eocyk6aT4zP2EoZSxyLHMpOmEoZSxyKSl8fHMpO3JldHVybiBpPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIscyksc31vKEVJLCJfX2RlY29yYXRlIik7ZnVuY3Rpb24gREkodCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuKXtlKHIsbix0KX19byhESSwiX19wYXJhbSIpO2Z1bmN0aW9uIENJKHQsZSxyLG4saSxzKXtmdW5jdGlvbiBhKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9byhhLCJhY2NlcHQiKTtmb3IodmFyIGw9bi5raW5kLGM9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLHU9IWUmJnQ/bi5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLGY9ZXx8KHU/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih1LG4ubmFtZSk6e30pLHAsaD0hMSxkPXIubGVuZ3RoLTE7ZD49MDtkLS0pe3ZhciBtPXt9O2Zvcih2YXIgZyBpbiBuKW1bZ109Zz09PSJhY2Nlc3MiP3t9Om5bZ107Zm9yKHZhciBnIGluIG4uYWNjZXNzKW0uYWNjZXNzW2ddPW4uYWNjZXNzW2ddO20uYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2goYSh4fHxudWxsKSl9O3ZhciB5PSgwLHJbZF0pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6Zi5nZXQsc2V0OmYuc2V0fTpmW2NdLG0pO2lmKGw9PT0iYWNjZXNzb3IiKXtpZih5PT09dm9pZCAwKWNvbnRpbnVlO2lmKHk9PT1udWxsfHx0eXBlb2YgeSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KHA9YSh5LmdldCkpJiYoZi5nZXQ9cCksKHA9YSh5LnNldCkpJiYoZi5zZXQ9cCksKHA9YSh5LmluaXQpKSYmaS51bnNoaWZ0KHApfWVsc2UocD1hKHkpKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChwKTpmW2NdPXApfXUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LG4ubmFtZSxmKSxoPSEwfW8oQ0ksIl9fZXNEZWNvcmF0ZSIpO2Z1bmN0aW9uIE1JKHQsZSxyKXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aD4yLGk9MDtpPGUubGVuZ3RoO2krKylyPW4/ZVtpXS5jYWxsKHQscik6ZVtpXS5jYWxsKHQpO3JldHVybiBuP3I6dm9pZCAwfW8oTUksIl9fcnVuSW5pdGlhbGl6ZXJzIik7ZnVuY3Rpb24gT0kodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3ltYm9sIj90OiIiLmNvbmNhdCh0KX1vKE9JLCJfX3Byb3BLZXkiKTtmdW5jdGlvbiBJSSh0LGUscil7cmV0dXJuIHR5cGVvZiBlPT0ic3ltYm9sIiYmKGU9ZS5kZXNjcmlwdGlvbj8iWyIuY29uY2F0KGUuZGVzY3JpcHRpb24sIl0iKToiIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm5hbWUiLHtjb25maWd1cmFibGU6ITAsdmFsdWU6cj8iIi5jb25jYXQociwiICIsZSk6ZX0pfW8oSUksIl9fc2V0RnVuY3Rpb25OYW1lIik7ZnVuY3Rpb24gX0kodCxlKXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKHQsZSl9byhfSSwiX19tZXRhZGF0YSIpO2Z1bmN0aW9uIHFtKHQsZSxyLG4pe2Z1bmN0aW9uIGkocyl7cmV0dXJuIHMgaW5zdGFuY2VvZiByP3M6bmV3IHIoZnVuY3Rpb24oYSl7YShzKX0pfXJldHVybiBvKGksImFkb3B0IiksbmV3KHJ8fChyPVByb21pc2UpKShmdW5jdGlvbihzLGEpe2Z1bmN0aW9uIGwoZil7dHJ5e3Uobi5uZXh0KGYpKX1jYXRjaChwKXthKHApfX1vKGwsImZ1bGZpbGxlZCIpO2Z1bmN0aW9uIGMoZil7dHJ5e3Uobi50aHJvdyhmKSl9Y2F0Y2gocCl7YShwKX19byhjLCJyZWplY3RlZCIpO2Z1bmN0aW9uIHUoZil7Zi5kb25lP3MoZi52YWx1ZSk6aShmLnZhbHVlKS50aGVuKGwsYyl9byh1LCJzdGVwIiksdSgobj1uLmFwcGx5KHQsZXx8W10pKS5uZXh0KCkpfSl9byhxbSwiX19hd2FpdGVyIik7ZnVuY3Rpb24gcmwodCxlKXt2YXIgcj17bGFiZWw6MCxzZW50Om8oZnVuY3Rpb24oKXtpZihzWzBdJjEpdGhyb3cgc1sxXTtyZXR1cm4gc1sxXX0sInNlbnQiKSx0cnlzOltdLG9wczpbXX0sbixpLHMsYT1PYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3I9PSJmdW5jdGlvbiI/SXRlcmF0b3I6T2JqZWN0KS5wcm90b3R5cGUpO3JldHVybiBhLm5leHQ9bCgwKSxhLnRocm93PWwoMSksYS5yZXR1cm49bCgyKSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoYVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhO2Z1bmN0aW9uIGwodSl7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBjKFt1LGZdKX19ZnVuY3Rpb24gYyh1KXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2EmJihhPTAsdVswXSYmKHI9MCkpLHI7KXRyeXtpZihuPTEsaSYmKHM9dVswXSYyP2kucmV0dXJuOnVbMF0/aS50aHJvd3x8KChzPWkucmV0dXJuKSYmcy5jYWxsKGkpLDApOmkubmV4dCkmJiEocz1zLmNhbGwoaSx1WzFdKSkuZG9uZSlyZXR1cm4gcztzd2l0Y2goaT0wLHMmJih1PVt1WzBdJjIscy52YWx1ZV0pLHVbMF0pe2Nhc2UgMDpjYXNlIDE6cz11O2JyZWFrO2Nhc2UgNDpyZXR1cm4gci5sYWJlbCsrLHt2YWx1ZTp1WzFdLGRvbmU6ITF9O2Nhc2UgNTpyLmxhYmVsKyssaT11WzFdLHU9WzBdO2NvbnRpbnVlO2Nhc2UgNzp1PXIub3BzLnBvcCgpLHIudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKHM9ci50cnlzLCEocz1zLmxlbmd0aD4wJiZzW3MubGVuZ3RoLTFdKSYmKHVbMF09PT02fHx1WzBdPT09Mikpe3I9MDtjb250aW51ZX1pZih1WzBdPT09MyYmKCFzfHx1WzFdPnNbMF0mJnVbMV08c1szXSkpe3IubGFiZWw9dVsxXTticmVha31pZih1WzBdPT09NiYmci5sYWJlbDxzWzFdKXtyLmxhYmVsPXNbMV0scz11O2JyZWFrfWlmKHMmJnIubGFiZWw8c1syXSl7ci5sYWJlbD1zWzJdLHIub3BzLnB1c2godSk7YnJlYWt9c1syXSYmci5vcHMucG9wKCksci50cnlzLnBvcCgpO2NvbnRpbnVlfXU9ZS5jYWxsKHQscil9Y2F0Y2goZil7dT1bNixmXSxpPTB9ZmluYWxseXtuPXM9MH1pZih1WzBdJjUpdGhyb3cgdVsxXTtyZXR1cm57dmFsdWU6dVswXT91WzFdOnZvaWQgMCxkb25lOiEwfX19byhybCwiX19nZW5lcmF0b3IiKTt2YXIgam09T2JqZWN0LmNyZWF0ZT8oZnVuY3Rpb24odCxlLHIsbil7bj09PXZvaWQgMCYmKG49cik7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpOyghaXx8KCJnZXQiaW4gaT8hZS5fX2VzTW9kdWxlOmkud3JpdGFibGV8fGkuY29uZmlndXJhYmxlKSkmJihpPXtlbnVtZXJhYmxlOiEwLGdldDpvKGZ1bmN0aW9uKCl7cmV0dXJuIGVbcl19LCJnZXQiKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4saSl9KTooZnVuY3Rpb24odCxlLHIsbil7bj09PXZvaWQgMCYmKG49ciksdFtuXT1lW3JdfSk7ZnVuY3Rpb24gUEkodCxlKXtmb3IodmFyIHIgaW4gdClyIT09ImRlZmF1bHQiJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJmptKGUsdCxyKX1vKFBJLCJfX2V4cG9ydFN0YXIiKTtmdW5jdGlvbiBTdCh0KXt2YXIgZT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wuaXRlcmF0b3Iscj1lJiZ0W2VdLG49MDtpZihyKXJldHVybiByLmNhbGwodCk7aWYodCYmdHlwZW9mIHQubGVuZ3RoPT0ibnVtYmVyIilyZXR1cm57bmV4dDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHQmJm4+PXQubGVuZ3RoJiYodD12b2lkIDApLHt2YWx1ZTp0JiZ0W24rK10sZG9uZTohdH19LCJuZXh0Iil9O3Rocm93IG5ldyBUeXBlRXJyb3IoZT8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9byhTdCwiX192YWx1ZXMiKTtmdW5jdGlvbiB4dCh0LGUpe3ZhciByPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnRbU3ltYm9sLml0ZXJhdG9yXTtpZighcilyZXR1cm4gdDt2YXIgbj1yLmNhbGwodCksaSxzPVtdLGE7dHJ5e2Zvcig7KGU9PT12b2lkIDB8fGUtLSA+MCkmJiEoaT1uLm5leHQoKSkuZG9uZTspcy5wdXNoKGkudmFsdWUpfWNhdGNoKGwpe2E9e2Vycm9yOmx9fWZpbmFsbHl7dHJ5e2kmJiFpLmRvbmUmJihyPW4ucmV0dXJuKSYmci5jYWxsKG4pfWZpbmFsbHl7aWYoYSl0aHJvdyBhLmVycm9yfX1yZXR1cm4gc31vKHh0LCJfX3JlYWQiKTtmdW5jdGlvbiBOSSgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0PXQuY29uY2F0KHh0KGFyZ3VtZW50c1tlXSkpO3JldHVybiB0fW8oTkksIl9fc3ByZWFkIik7ZnVuY3Rpb24gUkkoKXtmb3IodmFyIHQ9MCxlPTAscj1hcmd1bWVudHMubGVuZ3RoO2U8cjtlKyspdCs9YXJndW1lbnRzW2VdLmxlbmd0aDtmb3IodmFyIG49QXJyYXkodCksaT0wLGU9MDtlPHI7ZSsrKWZvcih2YXIgcz1hcmd1bWVudHNbZV0sYT0wLGw9cy5sZW5ndGg7YTxsO2ErKyxpKyspbltpXT1zW2FdO3JldHVybiBufW8oUkksIl9fc3ByZWFkQXJyYXlzIik7ZnVuY3Rpb24genQodCxlLHIpe2lmKHJ8fGFyZ3VtZW50cy5sZW5ndGg9PT0yKWZvcih2YXIgbj0wLGk9ZS5sZW5ndGgscztuPGk7bisrKShzfHwhKG4gaW4gZSkpJiYoc3x8KHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSwwLG4pKSxzW25dPWVbbl0pO3JldHVybiB0LmNvbmNhdChzfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKSl9byh6dCwiX19zcHJlYWRBcnJheSIpO2Z1bmN0aW9uIFJuKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgUm4/KHRoaXMudj10LHRoaXMpOm5ldyBSbih0KX1vKFJuLCJfX2F3YWl0Iik7ZnVuY3Rpb24gVW0odCxlLHIpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgbj1yLmFwcGx5KHQsZXx8W10pLGkscz1bXTtyZXR1cm4gaT1PYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvcj09ImZ1bmN0aW9uIj9Bc3luY0l0ZXJhdG9yOk9iamVjdCkucHJvdG90eXBlKSxsKCJuZXh0IiksbCgidGhyb3ciKSxsKCJyZXR1cm4iLGEpLGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGk7ZnVuY3Rpb24gYShkKXtyZXR1cm4gZnVuY3Rpb24obSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShtKS50aGVuKGQscCl9fWZ1bmN0aW9uIGwoZCxtKXtuW2RdJiYoaVtkXT1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oeSx4KXtzLnB1c2goW2QsZyx5LHhdKT4xfHxjKGQsZyl9KX0sbSYmKGlbZF09bShpW2RdKSkpfWZ1bmN0aW9uIGMoZCxtKXt0cnl7dShuW2RdKG0pKX1jYXRjaChnKXtoKHNbMF1bM10sZyl9fWZ1bmN0aW9uIHUoZCl7ZC52YWx1ZSBpbnN0YW5jZW9mIFJuP1Byb21pc2UucmVzb2x2ZShkLnZhbHVlLnYpLnRoZW4oZixwKTpoKHNbMF1bMl0sZCl9ZnVuY3Rpb24gZihkKXtjKCJuZXh0IixkKX1mdW5jdGlvbiBwKGQpe2MoInRocm93IixkKX1mdW5jdGlvbiBoKGQsbSl7ZChtKSxzLnNoaWZ0KCkscy5sZW5ndGgmJmMoc1swXVswXSxzWzBdWzFdKX19byhVbSwiX19hc3luY0dlbmVyYXRvciIpO2Z1bmN0aW9uIExJKHQpe3ZhciBlLHI7cmV0dXJuIGU9e30sbigibmV4dCIpLG4oInRocm93IixmdW5jdGlvbihpKXt0aHJvdyBpfSksbigicmV0dXJuIiksZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGU7ZnVuY3Rpb24gbihpLHMpe2VbaV09dFtpXT9mdW5jdGlvbihhKXtyZXR1cm4ocj0hcik/e3ZhbHVlOlJuKHRbaV0oYSkpLGRvbmU6ITF9OnM/cyhhKTphfTpzfX1vKExJLCJfX2FzeW5jRGVsZWdhdG9yIik7ZnVuY3Rpb24gVm0odCl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBlPXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLHI7cmV0dXJuIGU/ZS5jYWxsKHQpOih0PXR5cGVvZiBTdD09ImZ1bmN0aW9uIj9TdCh0KTp0W1N5bWJvbC5pdGVyYXRvcl0oKSxyPXt9LG4oIm5leHQiKSxuKCJ0aHJvdyIpLG4oInJldHVybiIpLHJbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHIpO2Z1bmN0aW9uIG4ocyl7cltzXT10W3NdJiZmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obCxjKXthPXRbc10oYSksaShsLGMsYS5kb25lLGEudmFsdWUpfSl9fWZ1bmN0aW9uIGkocyxhLGwsYyl7UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4oZnVuY3Rpb24odSl7cyh7dmFsdWU6dSxkb25lOmx9KX0sYSl9fW8oVm0sIl9fYXN5bmNWYWx1ZXMiKTtmdW5jdGlvbiBGSSh0LGUpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJhdyIse3ZhbHVlOmV9KTp0LnJhdz1lLHR9byhGSSwiX19tYWtlVGVtcGxhdGVPYmplY3QiKTt2YXIgQUk9T2JqZWN0LmNyZWF0ZT8oZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pfSk6ZnVuY3Rpb24odCxlKXt0LmRlZmF1bHQ9ZX0sV209byhmdW5jdGlvbih0KXtyZXR1cm4gV209T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3ZhciByPVtdO2Zvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYocltyLmxlbmd0aF09bik7cmV0dXJuIHJ9LFdtKHQpfSwib3duS2V5cyIpO2Z1bmN0aW9uICRJKHQpe2lmKHQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgZT17fTtpZih0IT1udWxsKWZvcih2YXIgcj1XbSh0KSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXSE9PSJkZWZhdWx0IiYmam0oZSx0LHJbbl0pO3JldHVybiBBSShlLHQpLGV9bygkSSwiX19pbXBvcnRTdGFyIik7ZnVuY3Rpb24gQkkodCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9fW8oQkksIl9faW1wb3J0RGVmYXVsdCIpO2Z1bmN0aW9uIHpJKHQsZSxyLG4pe2lmKHI9PT0iYSImJiFuKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iP3QhPT1lfHwhbjohZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIHI9PT0ibSI/bjpyPT09ImEiP24uY2FsbCh0KTpuP24udmFsdWU6ZS5nZXQodCl9byh6SSwiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIpO2Z1bmN0aW9uIEhJKHQsZSxyLG4saSl7aWYobj09PSJtIil0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGUiKTtpZihuPT09ImEiJiYhaSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIj90IT09ZXx8IWk6IWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIG49PT0iYSI/aS5jYWxsKHQscik6aT9pLnZhbHVlPXI6ZS5zZXQodCxyKSxyfW8oSEksIl9fY2xhc3NQcml2YXRlRmllbGRTZXQiKTtmdW5jdGlvbiBqSSh0LGUpe2lmKGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCImJnR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0Iik7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP2U9PT10OnQuaGFzKGUpfW8oakksIl9fY2xhc3NQcml2YXRlRmllbGRJbiIpO2Z1bmN0aW9uIFdJKHQsZSxyKXtpZihlIT1udWxsKXtpZih0eXBlb2YgZSE9Im9iamVjdCImJnR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZC4iKTt2YXIgbixpO2lmKHIpe2lmKCFTeW1ib2wuYXN5bmNEaXNwb3NlKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuIik7bj1lW1N5bWJvbC5hc3luY0Rpc3Bvc2VdfWlmKG49PT12b2lkIDApe2lmKCFTeW1ib2wuZGlzcG9zZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC4iKTtuPWVbU3ltYm9sLmRpc3Bvc2VdLHImJihpPW4pfWlmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBub3QgZGlzcG9zYWJsZS4iKTtpJiYobj1vKGZ1bmN0aW9uKCl7dHJ5e2kuY2FsbCh0aGlzKX1jYXRjaChzKXtyZXR1cm4gUHJvbWlzZS5yZWplY3Qocyl9fSwiZGlzcG9zZSIpKSx0LnN0YWNrLnB1c2goe3ZhbHVlOmUsZGlzcG9zZTpuLGFzeW5jOnJ9KX1lbHNlIHImJnQuc3RhY2sucHVzaCh7YXN5bmM6ITB9KTtyZXR1cm4gZX1vKFdJLCJfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSIpO3ZhciBxST10eXBlb2YgU3VwcHJlc3NlZEVycm9yPT0iZnVuY3Rpb24iP1N1cHByZXNzZWRFcnJvcjpmdW5jdGlvbih0LGUscil7dmFyIG49bmV3IEVycm9yKHIpO3JldHVybiBuLm5hbWU9IlN1cHByZXNzZWRFcnJvciIsbi5lcnJvcj10LG4uc3VwcHJlc3NlZD1lLG59O2Z1bmN0aW9uIFVJKHQpe2Z1bmN0aW9uIGUocyl7dC5lcnJvcj10Lmhhc0Vycm9yP25ldyBxSShzLHQuZXJyb3IsIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC4iKTpzLHQuaGFzRXJyb3I9ITB9byhlLCJmYWlsIik7dmFyIHIsbj0wO2Z1bmN0aW9uIGkoKXtmb3IoO3I9dC5zdGFjay5wb3AoKTspdHJ5e2lmKCFyLmFzeW5jJiZuPT09MSlyZXR1cm4gbj0wLHQuc3RhY2sucHVzaChyKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKGkpO2lmKHIuZGlzcG9zZSl7dmFyIHM9ci5kaXNwb3NlLmNhbGwoci52YWx1ZSk7aWYoci5hc3luYylyZXR1cm4gbnw9MixQcm9taXNlLnJlc29sdmUocykudGhlbihpLGZ1bmN0aW9uKGEpe3JldHVybiBlKGEpLGkoKX0pfWVsc2Ugbnw9MX1jYXRjaChhKXtlKGEpfWlmKG49PT0xKXJldHVybiB0Lmhhc0Vycm9yP1Byb21pc2UucmVqZWN0KHQuZXJyb3IpOlByb21pc2UucmVzb2x2ZSgpO2lmKHQuaGFzRXJyb3IpdGhyb3cgdC5lcnJvcn1yZXR1cm4gbyhpLCJuZXh0IiksaSgpfW8oVUksIl9fZGlzcG9zZVJlc291cmNlcyIpO2Z1bmN0aW9uIFZJKHQsZSl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIiYmL15cLlwuP1wvLy50ZXN0KHQpP3QucmVwbGFjZSgvXC4odHN4KSR8KCg/OlwuZCk/KSgoPzpcLlteLi9dKz8pPylcLihbY21dPyl0cyQvaSxmdW5jdGlvbihyLG4saSxzLGEpe3JldHVybiBuP2U/Ii5qc3giOiIuanMiOmkmJighc3x8IWEpP3I6aStzKyIuIithLnRvTG93ZXJDYXNlKCkrImpzIn0pOnR9byhWSSwiX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24iKTt2YXIgczY9e19fZXh0ZW5kczpvdCxfX2Fzc2lnbjpIbSxfX3Jlc3Q6VEksX19kZWNvcmF0ZTpFSSxfX3BhcmFtOkRJLF9fZXNEZWNvcmF0ZTpDSSxfX3J1bkluaXRpYWxpemVyczpNSSxfX3Byb3BLZXk6T0ksX19zZXRGdW5jdGlvbk5hbWU6SUksX19tZXRhZGF0YTpfSSxfX2F3YWl0ZXI6cW0sX19nZW5lcmF0b3I6cmwsX19jcmVhdGVCaW5kaW5nOmptLF9fZXhwb3J0U3RhcjpQSSxfX3ZhbHVlczpTdCxfX3JlYWQ6eHQsX19zcHJlYWQ6TkksX19zcHJlYWRBcnJheXM6UkksX19zcHJlYWRBcnJheTp6dCxfX2F3YWl0OlJuLF9fYXN5bmNHZW5lcmF0b3I6VW0sX19hc3luY0RlbGVnYXRvcjpMSSxfX2FzeW5jVmFsdWVzOlZtLF9fbWFrZVRlbXBsYXRlT2JqZWN0OkZJLF9faW1wb3J0U3RhcjokSSxfX2ltcG9ydERlZmF1bHQ6QkksX19jbGFzc1ByaXZhdGVGaWVsZEdldDp6SSxfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0OkhJLF9fY2xhc3NQcml2YXRlRmllbGRJbjpqSSxfX2FkZERpc3Bvc2FibGVSZXNvdXJjZTpXSSxfX2Rpc3Bvc2VSZXNvdXJjZXM6VUksX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb246Vkl9O2Z1bmN0aW9uIHBlKHQpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIn1vKHBlLCJpc0Z1bmN0aW9uIik7ZnVuY3Rpb24gZHUodCl7dmFyIGU9byhmdW5jdGlvbihuKXtFcnJvci5jYWxsKG4pLG4uc3RhY2s9bmV3IEVycm9yKCkuc3RhY2t9LCJfc3VwZXIiKSxyPXQoZSk7cmV0dXJuIHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHJ9byhkdSwiY3JlYXRlRXJyb3JDbGFzcyIpO3ZhciBubD1kdShmdW5jdGlvbih0KXtyZXR1cm4gbyhmdW5jdGlvbihyKXt0KHRoaXMpLHRoaXMubWVzc2FnZT1yP3IubGVuZ3RoK2AgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjoKYCtyLm1hcChmdW5jdGlvbihuLGkpe3JldHVybiBpKzErIikgIituLnRvU3RyaW5nKCl9KS5qb2luKGAKICBgKToiIix0aGlzLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLHRoaXMuZXJyb3JzPXJ9LCJVbnN1YnNjcmlwdGlvbkVycm9ySW1wbCIpfSk7ZnVuY3Rpb24gUnIodCxlKXtpZih0KXt2YXIgcj10LmluZGV4T2YoZSk7MDw9ciYmdC5zcGxpY2UociwxKX19byhSciwiYXJyUmVtb3ZlIik7dmFyIEh0PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dGhpcy5pbml0aWFsVGVhcmRvd249ZSx0aGlzLmNsb3NlZD0hMSx0aGlzLl9wYXJlbnRhZ2U9bnVsbCx0aGlzLl9maW5hbGl6ZXJzPW51bGx9cmV0dXJuIG8odCwiU3Vic2NyaXB0aW9uIiksdC5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxzO2lmKCF0aGlzLmNsb3NlZCl7dGhpcy5jbG9zZWQ9ITA7dmFyIGE9dGhpcy5fcGFyZW50YWdlO2lmKGEpaWYodGhpcy5fcGFyZW50YWdlPW51bGwsQXJyYXkuaXNBcnJheShhKSl0cnl7Zm9yKHZhciBsPVN0KGEpLGM9bC5uZXh0KCk7IWMuZG9uZTtjPWwubmV4dCgpKXt2YXIgdT1jLnZhbHVlO3UucmVtb3ZlKHRoaXMpfX1jYXRjaChnKXtlPXtlcnJvcjpnfX1maW5hbGx5e3RyeXtjJiYhYy5kb25lJiYocj1sLnJldHVybikmJnIuY2FsbChsKX1maW5hbGx5e2lmKGUpdGhyb3cgZS5lcnJvcn19ZWxzZSBhLnJlbW92ZSh0aGlzKTt2YXIgZj10aGlzLmluaXRpYWxUZWFyZG93bjtpZihwZShmKSl0cnl7ZigpfWNhdGNoKGcpe3M9ZyBpbnN0YW5jZW9mIG5sP2cuZXJyb3JzOltnXX12YXIgcD10aGlzLl9maW5hbGl6ZXJzO2lmKHApe3RoaXMuX2ZpbmFsaXplcnM9bnVsbDt0cnl7Zm9yKHZhciBoPVN0KHApLGQ9aC5uZXh0KCk7IWQuZG9uZTtkPWgubmV4dCgpKXt2YXIgbT1kLnZhbHVlO3RyeXtFMChtKX1jYXRjaChnKXtzPXM/P1tdLGcgaW5zdGFuY2VvZiBubD9zPXp0KHp0KFtdLHh0KHMpKSx4dChnLmVycm9ycykpOnMucHVzaChnKX19fWNhdGNoKGcpe249e2Vycm9yOmd9fWZpbmFsbHl7dHJ5e2QmJiFkLmRvbmUmJihpPWgucmV0dXJuKSYmaS5jYWxsKGgpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX19aWYocyl0aHJvdyBuZXcgbmwocyl9fSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHI7aWYoZSYmZSE9PXRoaXMpaWYodGhpcy5jbG9zZWQpRTAoZSk7ZWxzZXtpZihlIGluc3RhbmNlb2YgdCl7aWYoZS5jbG9zZWR8fGUuX2hhc1BhcmVudCh0aGlzKSlyZXR1cm47ZS5fYWRkUGFyZW50KHRoaXMpfSh0aGlzLl9maW5hbGl6ZXJzPShyPXRoaXMuX2ZpbmFsaXplcnMpIT09bnVsbCYmciE9PXZvaWQgMD9yOltdKS5wdXNoKGUpfX0sdC5wcm90b3R5cGUuX2hhc1BhcmVudD1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wYXJlbnRhZ2U7cmV0dXJuIHI9PT1lfHxBcnJheS5pc0FycmF5KHIpJiZyLmluY2x1ZGVzKGUpfSx0LnByb3RvdHlwZS5fYWRkUGFyZW50PWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3BhcmVudGFnZTt0aGlzLl9wYXJlbnRhZ2U9QXJyYXkuaXNBcnJheShyKT8oci5wdXNoKGUpLHIpOnI/W3IsZV06ZX0sdC5wcm90b3R5cGUuX3JlbW92ZVBhcmVudD1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wYXJlbnRhZ2U7cj09PWU/dGhpcy5fcGFyZW50YWdlPW51bGw6QXJyYXkuaXNBcnJheShyKSYmUnIocixlKX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX2ZpbmFsaXplcnM7ciYmUnIocixlKSxlIGluc3RhbmNlb2YgdCYmZS5fcmVtb3ZlUGFyZW50KHRoaXMpfSx0LkVNUFRZPShmdW5jdGlvbigpe3ZhciBlPW5ldyB0O3JldHVybiBlLmNsb3NlZD0hMCxlfSkoKSx0fSkoKSxZbT1IdC5FTVBUWTtmdW5jdGlvbiBtdSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEh0fHx0JiYiY2xvc2VkImluIHQmJnBlKHQucmVtb3ZlKSYmcGUodC5hZGQpJiZwZSh0LnVuc3Vic2NyaWJlKX1vKG11LCJpc1N1YnNjcmlwdGlvbiIpO2Z1bmN0aW9uIEUwKHQpe3BlKHQpP3QoKTp0LnVuc3Vic2NyaWJlKCl9byhFMCwiZXhlY0ZpbmFsaXplciIpO3ZhciBtcj17b25VbmhhbmRsZWRFcnJvcjpudWxsLG9uU3RvcHBlZE5vdGlmaWNhdGlvbjpudWxsLFByb21pc2U6dm9pZCAwLHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ITEsdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiExfTt2YXIgbnM9e3NldFRpbWVvdXQ6byhmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTI7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMl09YXJndW1lbnRzW25dO3ZhciBpPW5zLmRlbGVnYXRlO3JldHVybiBpPy5zZXRUaW1lb3V0P2kuc2V0VGltZW91dC5hcHBseShpLHp0KFt0LGVdLHh0KHIpKSk6c2V0VGltZW91dC5hcHBseSh2b2lkIDAsenQoW3QsZV0seHQocikpKX0sInNldFRpbWVvdXQiKSxjbGVhclRpbWVvdXQ6byhmdW5jdGlvbih0KXt2YXIgZT1ucy5kZWxlZ2F0ZTtyZXR1cm4oZT8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQpKHQpfSwiY2xlYXJUaW1lb3V0IiksZGVsZWdhdGU6dm9pZCAwfTtmdW5jdGlvbiBndSh0KXtucy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGU9bXIub25VbmhhbmRsZWRFcnJvcjtpZihlKWUodCk7ZWxzZSB0aHJvdyB0fSl9byhndSwicmVwb3J0VW5oYW5kbGVkRXJyb3IiKTtmdW5jdGlvbiB0bigpe31vKHRuLCJub29wIik7dmFyIEQwPShmdW5jdGlvbigpe3JldHVybiBHbSgiQyIsdm9pZCAwLHZvaWQgMCl9KSgpO2Z1bmN0aW9uIEMwKHQpe3JldHVybiBHbSgiRSIsdm9pZCAwLHQpfW8oQzAsImVycm9yTm90aWZpY2F0aW9uIik7ZnVuY3Rpb24gTTAodCl7cmV0dXJuIEdtKCJOIix0LHZvaWQgMCl9byhNMCwibmV4dE5vdGlmaWNhdGlvbiIpO2Z1bmN0aW9uIEdtKHQsZSxyKXtyZXR1cm57a2luZDp0LHZhbHVlOmUsZXJyb3I6cn19byhHbSwiY3JlYXRlTm90aWZpY2F0aW9uIik7dmFyIFhpPW51bGw7ZnVuY3Rpb24gaXModCl7aWYobXIudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl7dmFyIGU9IVhpO2lmKGUmJihYaT17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLHQoKSxlKXt2YXIgcj1YaSxuPXIuZXJyb3JUaHJvd24saT1yLmVycm9yO2lmKFhpPW51bGwsbil0aHJvdyBpfX1lbHNlIHQoKX1vKGlzLCJlcnJvckNvbnRleHQiKTtmdW5jdGlvbiBPMCh0KXttci51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZYaSYmKFhpLmVycm9yVGhyb3duPSEwLFhpLmVycm9yPXQpfW8oTzAsImNhcHR1cmVFcnJvciIpO3ZhciBaaT0oZnVuY3Rpb24odCl7b3QoZSx0KTtmdW5jdGlvbiBlKHIpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5pc1N0b3BwZWQ9ITEscj8obi5kZXN0aW5hdGlvbj1yLG11KHIpJiZyLmFkZChuKSk6bi5kZXN0aW5hdGlvbj1KSSxufXJldHVybiBvKGUsIlN1YnNjcmliZXIiKSxlLmNyZWF0ZT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIG5ldyBpaShyLG4saSl9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24ocil7dGhpcy5pc1N0b3BwZWQ/Sm0oTTAociksdGhpcyk6dGhpcy5fbmV4dChyKX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24ocil7dGhpcy5pc1N0b3BwZWQ/Sm0oQzAociksdGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2Vycm9yKHIpKX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmlzU3RvcHBlZD9KbShEMCx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fY29tcGxldGUoKSl9LGUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCx0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLHRoaXMuZGVzdGluYXRpb249bnVsbCl9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHIpe3RoaXMuZGVzdGluYXRpb24ubmV4dChyKX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHIpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHIpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19LGV9KShIdCksWUk9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7ZnVuY3Rpb24gUW0odCxlKXtyZXR1cm4gWUkuY2FsbCh0LGUpfW8oUW0sImJpbmQiKTt2YXIgR0k9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt0aGlzLnBhcnRpYWxPYnNlcnZlcj1lfXJldHVybiBvKHQsIkNvbnN1bWVyT2JzZXJ2ZXIiKSx0LnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMucGFydGlhbE9ic2VydmVyO2lmKHIubmV4dCl0cnl7ci5uZXh0KGUpfWNhdGNoKG4pe3l1KG4pfX0sdC5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7aWYoci5lcnJvcil0cnl7ci5lcnJvcihlKX1jYXRjaChuKXt5dShuKX1lbHNlIHl1KGUpfSx0LnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucGFydGlhbE9ic2VydmVyO2lmKGUuY29tcGxldGUpdHJ5e2UuY29tcGxldGUoKX1jYXRjaChyKXt5dShyKX19LHR9KSgpLGlpPShmdW5jdGlvbih0KXtvdChlLHQpO2Z1bmN0aW9uIGUocixuLGkpe3ZhciBzPXQuY2FsbCh0aGlzKXx8dGhpcyxhO2lmKHBlKHIpfHwhcilhPXtuZXh0OnI/P3ZvaWQgMCxlcnJvcjpuPz92b2lkIDAsY29tcGxldGU6aT8/dm9pZCAwfTtlbHNle3ZhciBsO3MmJm1yLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dD8obD1PYmplY3QuY3JlYXRlKHIpLGwudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXtyZXR1cm4gcy51bnN1YnNjcmliZSgpfSxhPXtuZXh0OnIubmV4dCYmUW0oci5uZXh0LGwpLGVycm9yOnIuZXJyb3ImJlFtKHIuZXJyb3IsbCksY29tcGxldGU6ci5jb21wbGV0ZSYmUW0oci5jb21wbGV0ZSxsKX0pOmE9cn1yZXR1cm4gcy5kZXN0aW5hdGlvbj1uZXcgR0koYSksc31yZXR1cm4gbyhlLCJTYWZlU3Vic2NyaWJlciIpLGV9KShaaSk7ZnVuY3Rpb24geXUodCl7bXIudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZz9PMCh0KTpndSh0KX1vKHl1LCJoYW5kbGVVbmhhbmRsZWRFcnJvciIpO2Z1bmN0aW9uIFFJKHQpe3Rocm93IHR9byhRSSwiZGVmYXVsdEVycm9ySGFuZGxlciIpO2Z1bmN0aW9uIEptKHQsZSl7dmFyIHI9bXIub25TdG9wcGVkTm90aWZpY2F0aW9uO3ImJm5zLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gcih0LGUpfSl9byhKbSwiaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbiIpO3ZhciBKST17Y2xvc2VkOiEwLG5leHQ6dG4sZXJyb3I6UUksY29tcGxldGU6dG59O3ZhciBlbz0oZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm9ic2VydmFibGV8fCJAQG9ic2VydmFibGUifSkoKTtmdW5jdGlvbiBybih0KXtyZXR1cm4gdH1vKHJuLCJpZGVudGl0eSIpO2Z1bmN0aW9uIEtJKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiBLbSh0KX1vKEtJLCJwaXBlIik7ZnVuY3Rpb24gS20odCl7cmV0dXJuIHQubGVuZ3RoPT09MD9ybjp0Lmxlbmd0aD09PTE/dFswXTpvKGZ1bmN0aW9uKHIpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBpKG4pfSxyKX0sInBpcGVkIil9byhLbSwicGlwZUZyb21BcnJheSIpO3ZhciBrZT0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2UmJih0aGlzLl9zdWJzY3JpYmU9ZSl9cmV0dXJuIG8odCwiT2JzZXJ2YWJsZSIpLHQucHJvdG90eXBlLmxpZnQ9ZnVuY3Rpb24oZSl7dmFyIHI9bmV3IHQ7cmV0dXJuIHIuc291cmNlPXRoaXMsci5vcGVyYXRvcj1lLHJ9LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcyxzPVpJKGUpP2U6bmV3IGlpKGUscixuKTtyZXR1cm4gaXMoZnVuY3Rpb24oKXt2YXIgYT1pLGw9YS5vcGVyYXRvcixjPWEuc291cmNlO3MuYWRkKGw/bC5jYWxsKHMsYyk6Yz9pLl9zdWJzY3JpYmUocyk6aS5fdHJ5U3Vic2NyaWJlKHMpKX0pLHN9LHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUoZSl9Y2F0Y2gocil7ZS5lcnJvcihyKX19LHQucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3JldHVybiByPUkwKHIpLG5ldyByKGZ1bmN0aW9uKGkscyl7dmFyIGE9bmV3IGlpKHtuZXh0Om8oZnVuY3Rpb24obCl7dHJ5e2UobCl9Y2F0Y2goYyl7cyhjKSxhLnVuc3Vic2NyaWJlKCl9fSwibmV4dCIpLGVycm9yOnMsY29tcGxldGU6aX0pO24uc3Vic2NyaWJlKGEpfSl9LHQucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuKHI9dGhpcy5zb3VyY2UpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5zdWJzY3JpYmUoZSl9LHQucHJvdG90eXBlW2VvXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbcl09YXJndW1lbnRzW3JdO3JldHVybiBLbShlKSh0aGlzKX0sdC5wcm90b3R5cGUudG9Qcm9taXNlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7cmV0dXJuIGU9STAoZSksbmV3IGUoZnVuY3Rpb24obixpKXt2YXIgcztyLnN1YnNjcmliZShmdW5jdGlvbihhKXtyZXR1cm4gcz1hfSxmdW5jdGlvbihhKXtyZXR1cm4gaShhKX0sZnVuY3Rpb24oKXtyZXR1cm4gbihzKX0pfSl9LHQuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdChlKX0sdH0pKCk7ZnVuY3Rpb24gSTAodCl7dmFyIGU7cmV0dXJuKGU9dD8/bXIuUHJvbWlzZSkhPT1udWxsJiZlIT09dm9pZCAwP2U6UHJvbWlzZX1vKEkwLCJnZXRQcm9taXNlQ3RvciIpO2Z1bmN0aW9uIFhJKHQpe3JldHVybiB0JiZwZSh0Lm5leHQpJiZwZSh0LmVycm9yKSYmcGUodC5jb21wbGV0ZSl9byhYSSwiaXNPYnNlcnZlciIpO2Z1bmN0aW9uIFpJKHQpe3JldHVybiB0JiZ0IGluc3RhbmNlb2YgWml8fFhJKHQpJiZtdSh0KX1vKFpJLCJpc1N1YnNjcmliZXIiKTtmdW5jdGlvbiBlXyh0KXtyZXR1cm4gcGUodD8ubGlmdCl9byhlXywiaGFzTGlmdCIpO2Z1bmN0aW9uIE1lKHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihlXyhlKSlyZXR1cm4gZS5saWZ0KGZ1bmN0aW9uKHIpe3RyeXtyZXR1cm4gdChyLHRoaXMpfWNhdGNoKG4pe3RoaXMuZXJyb3Iobil9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19byhNZSwib3BlcmF0ZSIpO2Z1bmN0aW9uIE9lKHQsZSxyLG4saSl7cmV0dXJuIG5ldyBfMCh0LGUscixuLGkpfW8oT2UsImNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciIpO3ZhciBfMD0oZnVuY3Rpb24odCl7b3QoZSx0KTtmdW5jdGlvbiBlKHIsbixpLHMsYSxsKXt2YXIgYz10LmNhbGwodGhpcyxyKXx8dGhpcztyZXR1cm4gYy5vbkZpbmFsaXplPWEsYy5zaG91bGRVbnN1YnNjcmliZT1sLGMuX25leHQ9bj9mdW5jdGlvbih1KXt0cnl7bih1KX1jYXRjaChmKXtyLmVycm9yKGYpfX06dC5wcm90b3R5cGUuX25leHQsYy5fZXJyb3I9cz9mdW5jdGlvbih1KXt0cnl7cyh1KX1jYXRjaChmKXtyLmVycm9yKGYpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06dC5wcm90b3R5cGUuX2Vycm9yLGMuX2NvbXBsZXRlPWk/ZnVuY3Rpb24oKXt0cnl7aSgpfWNhdGNoKHUpe3IuZXJyb3IodSl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTp0LnByb3RvdHlwZS5fY29tcGxldGUsY31yZXR1cm4gbyhlLCJPcGVyYXRvclN1YnNjcmliZXIiKSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciByO2lmKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlfHx0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpe3ZhciBuPXRoaXMuY2xvc2VkO3QucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIW4mJigocj10aGlzLm9uRmluYWxpemUpPT09bnVsbHx8cj09PXZvaWQgMHx8ci5jYWxsKHRoaXMpKX19LGV9KShaaSk7dmFyIFhtPWR1KGZ1bmN0aW9uKHQpe3JldHVybiBvKGZ1bmN0aW9uKCl7dCh0aGlzKSx0aGlzLm5hbWU9Ik9iamVjdFVuc3Vic2NyaWJlZEVycm9yIix0aGlzLm1lc3NhZ2U9Im9iamVjdCB1bnN1YnNjcmliZWQifSwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsIil9KTt2YXIganQ9KGZ1bmN0aW9uKHQpe290KGUsdCk7ZnVuY3Rpb24gZSgpe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5jbG9zZWQ9ITEsci5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsci5vYnNlcnZlcnM9W10sci5pc1N0b3BwZWQ9ITEsci5oYXNFcnJvcj0hMSxyLnRocm93bkVycm9yPW51bGwscn1yZXR1cm4gbyhlLCJTdWJqZWN0IiksZS5wcm90b3R5cGUubGlmdD1mdW5jdGlvbihyKXt2YXIgbj1uZXcgWm0odGhpcyx0aGlzKTtyZXR1cm4gbi5vcGVyYXRvcj1yLG59LGUucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkPWZ1bmN0aW9uKCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IFhtfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aXMoZnVuY3Rpb24oKXt2YXIgaSxzO2lmKG4uX3Rocm93SWZDbG9zZWQoKSwhbi5pc1N0b3BwZWQpe24uY3VycmVudE9ic2VydmVyc3x8KG4uY3VycmVudE9ic2VydmVycz1BcnJheS5mcm9tKG4ub2JzZXJ2ZXJzKSk7dHJ5e2Zvcih2YXIgYT1TdChuLmN1cnJlbnRPYnNlcnZlcnMpLGw9YS5uZXh0KCk7IWwuZG9uZTtsPWEubmV4dCgpKXt2YXIgYz1sLnZhbHVlO2MubmV4dChyKX19Y2F0Y2godSl7aT17ZXJyb3I6dX19ZmluYWxseXt0cnl7bCYmIWwuZG9uZSYmKHM9YS5yZXR1cm4pJiZzLmNhbGwoYSl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fX19KX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpcyhmdW5jdGlvbigpe2lmKG4uX3Rocm93SWZDbG9zZWQoKSwhbi5pc1N0b3BwZWQpe24uaGFzRXJyb3I9bi5pc1N0b3BwZWQ9ITAsbi50aHJvd25FcnJvcj1yO2Zvcih2YXIgaT1uLm9ic2VydmVycztpLmxlbmd0aDspaS5zaGlmdCgpLmVycm9yKHIpfX0pfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciByPXRoaXM7aXMoZnVuY3Rpb24oKXtpZihyLl90aHJvd0lmQ2xvc2VkKCksIXIuaXNTdG9wcGVkKXtyLmlzU3RvcHBlZD0hMDtmb3IodmFyIG49ci5vYnNlcnZlcnM7bi5sZW5ndGg7KW4uc2hpZnQoKS5jb21wbGV0ZSgpfX0pfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMuaXNTdG9wcGVkPXRoaXMuY2xvc2VkPSEwLHRoaXMub2JzZXJ2ZXJzPXRoaXMuY3VycmVudE9ic2VydmVycz1udWxsfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm9ic2VydmVkIix7Z2V0Om8oZnVuY3Rpb24oKXt2YXIgcjtyZXR1cm4oKHI9dGhpcy5vYnNlcnZlcnMpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5sZW5ndGgpPjB9LCJnZXQiKSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSx0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcyxyKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMociksdGhpcy5faW5uZXJTdWJzY3JpYmUocil9LGUucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9dGhpcyxzPWkuaGFzRXJyb3IsYT1pLmlzU3RvcHBlZCxsPWkub2JzZXJ2ZXJzO3JldHVybiBzfHxhP1ltOih0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCxsLnB1c2gociksbmV3IEh0KGZ1bmN0aW9uKCl7bi5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsUnIobCxyKX0pKX0sZS5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPW4uaGFzRXJyb3Iscz1uLnRocm93bkVycm9yLGE9bi5pc1N0b3BwZWQ7aT9yLmVycm9yKHMpOmEmJnIuY29tcGxldGUoKX0sZS5wcm90b3R5cGUuYXNPYnNlcnZhYmxlPWZ1bmN0aW9uKCl7dmFyIHI9bmV3IGtlO3JldHVybiByLnNvdXJjZT10aGlzLHJ9LGUuY3JlYXRlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIG5ldyBabShyLG4pfSxlfSkoa2UpLFptPShmdW5jdGlvbih0KXtvdChlLHQpO2Z1bmN0aW9uIGUocixuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuZGVzdGluYXRpb249cixpLnNvdXJjZT1uLGl9cmV0dXJuIG8oZSwiQW5vbnltb3VzU3ViamVjdCIpLGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24ocil7dmFyIG4saTsoaT0obj10aGlzLmRlc3RpbmF0aW9uKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4ubmV4dCk9PT1udWxsfHxpPT09dm9pZCAwfHxpLmNhbGwobixyKX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24ocil7dmFyIG4saTsoaT0obj10aGlzLmRlc3RpbmF0aW9uKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4uZXJyb3IpPT09bnVsbHx8aT09PXZvaWQgMHx8aS5jYWxsKG4scil9LGUucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHIsbjsobj0ocj10aGlzLmRlc3RpbmF0aW9uKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuY29tcGxldGUpPT09bnVsbHx8bj09PXZvaWQgMHx8bi5jYWxsKHIpfSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHIpe3ZhciBuLGk7cmV0dXJuKGk9KG49dGhpcy5zb3VyY2UpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5zdWJzY3JpYmUocikpIT09bnVsbCYmaSE9PXZvaWQgMD9pOlltfSxlfSkoanQpO3ZhciBvcz0oZnVuY3Rpb24odCl7b3QoZSx0KTtmdW5jdGlvbiBlKHIpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fdmFsdWU9cixufXJldHVybiBvKGUsIkJlaGF2aW9yU3ViamVjdCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmFsdWUiLHtnZXQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9LCJnZXQiKSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24ocil7dmFyIG49dC5wcm90b3R5cGUuX3N1YnNjcmliZS5jYWxsKHRoaXMscik7cmV0dXJuIW4uY2xvc2VkJiZyLm5leHQodGhpcy5fdmFsdWUpLG59LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXIuaGFzRXJyb3IsaT1yLnRocm93bkVycm9yLHM9ci5fdmFsdWU7aWYobil0aHJvdyBpO3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksc30sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihyKXt0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyx0aGlzLl92YWx1ZT1yKX0sZX0pKGp0KTt2YXIgaWw9e25vdzpvKGZ1bmN0aW9uKCl7cmV0dXJuKGlsLmRlbGVnYXRlfHxEYXRlKS5ub3coKX0sIm5vdyIpLGRlbGVnYXRlOnZvaWQgMH07dmFyIHNzPShmdW5jdGlvbih0KXtvdChlLHQpO2Z1bmN0aW9uIGUocixuLGkpe3I9PT12b2lkIDAmJihyPTEvMCksbj09PXZvaWQgMCYmKG49MS8wKSxpPT09dm9pZCAwJiYoaT1pbCk7dmFyIHM9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBzLl9idWZmZXJTaXplPXIscy5fd2luZG93VGltZT1uLHMuX3RpbWVzdGFtcFByb3ZpZGVyPWkscy5fYnVmZmVyPVtdLHMuX2luZmluaXRlVGltZVdpbmRvdz0hMCxzLl9pbmZpbml0ZVRpbWVXaW5kb3c9bj09PTEvMCxzLl9idWZmZXJTaXplPU1hdGgubWF4KDEscikscy5fd2luZG93VGltZT1NYXRoLm1heCgxLG4pLHN9cmV0dXJuIG8oZSwiUmVwbGF5U3ViamVjdCIpLGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPW4uaXNTdG9wcGVkLHM9bi5fYnVmZmVyLGE9bi5faW5maW5pdGVUaW1lV2luZG93LGw9bi5fdGltZXN0YW1wUHJvdmlkZXIsYz1uLl93aW5kb3dUaW1lO2l8fChzLnB1c2gociksIWEmJnMucHVzaChsLm5vdygpK2MpKSx0aGlzLl90cmltQnVmZmVyKCksdC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMscil9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24ocil7dGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX3RyaW1CdWZmZXIoKTtmb3IodmFyIG49dGhpcy5faW5uZXJTdWJzY3JpYmUociksaT10aGlzLHM9aS5faW5maW5pdGVUaW1lV2luZG93LGE9aS5fYnVmZmVyLGw9YS5zbGljZSgpLGM9MDtjPGwubGVuZ3RoJiYhci5jbG9zZWQ7Yys9cz8xOjIpci5uZXh0KGxbY10pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHIpLG59LGUucHJvdG90eXBlLl90cmltQnVmZmVyPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXIuX2J1ZmZlclNpemUsaT1yLl90aW1lc3RhbXBQcm92aWRlcixzPXIuX2J1ZmZlcixhPXIuX2luZmluaXRlVGltZVdpbmRvdyxsPShhPzE6MikqbjtpZihuPDEvMCYmbDxzLmxlbmd0aCYmcy5zcGxpY2UoMCxzLmxlbmd0aC1sKSwhYSl7Zm9yKHZhciBjPWkubm93KCksdT0wLGY9MTtmPHMubGVuZ3RoJiZzW2ZdPD1jO2YrPTIpdT1mO3UmJnMuc3BsaWNlKDAsdSsxKX19LGV9KShqdCk7dmFyIGVnPShmdW5jdGlvbih0KXtvdChlLHQpO2Z1bmN0aW9uIGUocixuKXtyZXR1cm4gdC5jYWxsKHRoaXMpfHx0aGlzfXJldHVybiBvKGUsIkFjdGlvbiIpLGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PT12b2lkIDAmJihuPTApLHRoaXN9LGV9KShIdCk7dmFyIG9sPXtzZXRJbnRlcnZhbDpvKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MjtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0yXT1hcmd1bWVudHNbbl07dmFyIGk9b2wuZGVsZWdhdGU7cmV0dXJuIGk/LnNldEludGVydmFsP2kuc2V0SW50ZXJ2YWwuYXBwbHkoaSx6dChbdCxlXSx4dChyKSkpOnNldEludGVydmFsLmFwcGx5KHZvaWQgMCx6dChbdCxlXSx4dChyKSkpfSwic2V0SW50ZXJ2YWwiKSxjbGVhckludGVydmFsOm8oZnVuY3Rpb24odCl7dmFyIGU9b2wuZGVsZWdhdGU7cmV0dXJuKGU/LmNsZWFySW50ZXJ2YWx8fGNsZWFySW50ZXJ2YWwpKHQpfSwiY2xlYXJJbnRlcnZhbCIpLGRlbGVnYXRlOnZvaWQgMH07dmFyIHRnPShmdW5jdGlvbih0KXtvdChlLHQpO2Z1bmN0aW9uIGUocixuKXt2YXIgaT10LmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLnNjaGVkdWxlcj1yLGkud29yaz1uLGkucGVuZGluZz0hMSxpfXJldHVybiBvKGUsIkFzeW5jQWN0aW9uIiksZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24ocixuKXt2YXIgaTtpZihuPT09dm9pZCAwJiYobj0wKSx0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPXI7dmFyIHM9dGhpcy5pZCxhPXRoaXMuc2NoZWR1bGVyO3JldHVybiBzIT1udWxsJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGEscyxuKSksdGhpcy5wZW5kaW5nPSEwLHRoaXMuZGVsYXk9bix0aGlzLmlkPShpPXRoaXMuaWQpIT09bnVsbCYmaSE9PXZvaWQgMD9pOnRoaXMucmVxdWVzdEFzeW5jSWQoYSx0aGlzLmlkLG4pLHRoaXN9LGUucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkPWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gaT09PXZvaWQgMCYmKGk9MCksb2wuc2V0SW50ZXJ2YWwoci5mbHVzaC5iaW5kKHIsdGhpcyksaSl9LGUucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkPWZ1bmN0aW9uKHIsbixpKXtpZihpPT09dm9pZCAwJiYoaT0wKSxpIT1udWxsJiZ0aGlzLmRlbGF5PT09aSYmdGhpcy5wZW5kaW5nPT09ITEpcmV0dXJuIG47biE9bnVsbCYmb2wuY2xlYXJJbnRlcnZhbChuKX0sZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihyLG4pe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7dmFyIGk9dGhpcy5fZXhlY3V0ZShyLG4pO2lmKGkpcmV0dXJuIGk7dGhpcy5wZW5kaW5nPT09ITEmJnRoaXMuaWQhPW51bGwmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxudWxsKSl9LGUucHJvdG90eXBlLl9leGVjdXRlPWZ1bmN0aW9uKHIsbil7dmFyIGk9ITEsczt0cnl7dGhpcy53b3JrKHIpfWNhdGNoKGEpe2k9ITAscz1hfHxuZXcgRXJyb3IoIlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3IiKX1pZihpKXJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksc30sZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXtpZighdGhpcy5jbG9zZWQpe3ZhciByPXRoaXMsbj1yLmlkLGk9ci5zY2hlZHVsZXIscz1pLmFjdGlvbnM7dGhpcy53b3JrPXRoaXMuc3RhdGU9dGhpcy5zY2hlZHVsZXI9bnVsbCx0aGlzLnBlbmRpbmc9ITEsUnIocyx0aGlzKSxuIT1udWxsJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGksbixudWxsKSksdGhpcy5kZWxheT1udWxsLHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyl9fSxlfSkoZWcpO3ZhciBzbD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscil7cj09PXZvaWQgMCYmKHI9dC5ub3cpLHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcj1lLHRoaXMubm93PXJ9cmV0dXJuIG8odCwiU2NoZWR1bGVyIiksdC5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiByPT09dm9pZCAwJiYocj0wKSxuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsZSkuc2NoZWR1bGUobixyKX0sdC5ub3c9aWwubm93LHR9KSgpO3ZhciByZz0oZnVuY3Rpb24odCl7b3QoZSx0KTtmdW5jdGlvbiBlKHIsbil7bj09PXZvaWQgMCYmKG49c2wubm93KTt2YXIgaT10LmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLmFjdGlvbnM9W10saS5fYWN0aXZlPSExLGl9cmV0dXJuIG8oZSwiQXN5bmNTY2hlZHVsZXIiKSxlLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbihyKXt2YXIgbj10aGlzLmFjdGlvbnM7aWYodGhpcy5fYWN0aXZlKXtuLnB1c2gocik7cmV0dXJufXZhciBpO3RoaXMuX2FjdGl2ZT0hMDtkbyBpZihpPXIuZXhlY3V0ZShyLnN0YXRlLHIuZGVsYXkpKWJyZWFrO3doaWxlKHI9bi5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaSl7Zm9yKDtyPW4uc2hpZnQoKTspci51bnN1YnNjcmliZSgpO3Rocm93IGl9fSxlfSkoc2wpO3ZhciBubj1uZXcgcmcodGcpLG5nPW5uO2Z1bmN0aW9uIHh1KHQpe3JldHVybiB0JiZwZSh0LnNjaGVkdWxlKX1vKHh1LCJpc1NjaGVkdWxlciIpO2Z1bmN0aW9uIGlnKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfW8oaWcsImxhc3QiKTtmdW5jdGlvbiBQMCh0KXtyZXR1cm4gcGUoaWcodCkpP3QucG9wKCk6dm9pZCAwfW8oUDAsInBvcFJlc3VsdFNlbGVjdG9yIik7ZnVuY3Rpb24gb24odCl7cmV0dXJuIHh1KGlnKHQpKT90LnBvcCgpOnZvaWQgMH1vKG9uLCJwb3BTY2hlZHVsZXIiKTtmdW5jdGlvbiBkcSh0LGUpe3JldHVybiB0eXBlb2YgaWcodCk9PSJudW1iZXIiP3QucG9wKCk6ZX1vKGRxLCJwb3BOdW1iZXIiKTt2YXIgYXM9bygoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnR5cGVvZiB0Lmxlbmd0aD09Im51bWJlciImJnR5cGVvZiB0IT0iZnVuY3Rpb24ifSksImlzQXJyYXlMaWtlIik7ZnVuY3Rpb24gYnUodCl7cmV0dXJuIHBlKHQ/LnRoZW4pfW8oYnUsImlzUHJvbWlzZSIpO2Z1bmN0aW9uIHd1KHQpe3JldHVybiBwZSh0W2VvXSl9byh3dSwiaXNJbnRlcm9wT2JzZXJ2YWJsZSIpO2Z1bmN0aW9uIHZ1KHQpe3JldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciYmcGUodD8uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSl9byh2dSwiaXNBc3luY0l0ZXJhYmxlIik7ZnVuY3Rpb24ga3UodCl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIllvdSBwcm92aWRlZCAiKyh0IT09bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiPyJhbiBpbnZhbGlkIG9iamVjdCI6IiciK3QrIiciKSsiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuIil9byhrdSwiY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IiKTtmdW5jdGlvbiB0Xygpe3JldHVybiB0eXBlb2YgU3ltYm9sIT0iZnVuY3Rpb24ifHwhU3ltYm9sLml0ZXJhdG9yPyJAQGl0ZXJhdG9yIjpTeW1ib2wuaXRlcmF0b3J9byh0XywiZ2V0U3ltYm9sSXRlcmF0b3IiKTt2YXIgU3U9dF8oKTtmdW5jdGlvbiBUdSh0KXtyZXR1cm4gcGUodD8uW1N1XSl9byhUdSwiaXNJdGVyYWJsZSIpO2Z1bmN0aW9uIEV1KHQpe3JldHVybiBVbSh0aGlzLGFyZ3VtZW50cyxvKGZ1bmN0aW9uKCl7dmFyIHIsbixpLHM7cmV0dXJuIHJsKHRoaXMsZnVuY3Rpb24oYSl7c3dpdGNoKGEubGFiZWwpe2Nhc2UgMDpyPXQuZ2V0UmVhZGVyKCksYS5sYWJlbD0xO2Nhc2UgMTphLnRyeXMucHVzaChbMSwsOSwxMF0pLGEubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzQsUm4oci5yZWFkKCkpXTtjYXNlIDM6cmV0dXJuIG49YS5zZW50KCksaT1uLnZhbHVlLHM9bi5kb25lLHM/WzQsUm4odm9pZCAwKV06WzMsNV07Y2FzZSA0OnJldHVyblsyLGEuc2VudCgpXTtjYXNlIDU6cmV0dXJuWzQsUm4oaSldO2Nhc2UgNjpyZXR1cm5bNCxhLnNlbnQoKV07Y2FzZSA3OnJldHVybiBhLnNlbnQoKSxbMywyXTtjYXNlIDg6cmV0dXJuWzMsMTBdO2Nhc2UgOTpyZXR1cm4gci5yZWxlYXNlTG9jaygpLFs3XTtjYXNlIDEwOnJldHVyblsyXX19KX0sInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSIpKX1vKEV1LCJyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIik7ZnVuY3Rpb24gRHUodCl7cmV0dXJuIHBlKHQ/LmdldFJlYWRlcil9byhEdSwiaXNSZWFkYWJsZVN0cmVhbUxpa2UiKTtmdW5jdGlvbiBVZSh0KXtpZih0IGluc3RhbmNlb2Yga2UpcmV0dXJuIHQ7aWYodCE9bnVsbCl7aWYod3UodCkpcmV0dXJuIHJfKHQpO2lmKGFzKHQpKXJldHVybiBuXyh0KTtpZihidSh0KSlyZXR1cm4gaV8odCk7aWYodnUodCkpcmV0dXJuIE4wKHQpO2lmKFR1KHQpKXJldHVybiBvXyh0KTtpZihEdSh0KSlyZXR1cm4gc18odCl9dGhyb3cga3UodCl9byhVZSwiaW5uZXJGcm9tIik7ZnVuY3Rpb24gcl8odCl7cmV0dXJuIG5ldyBrZShmdW5jdGlvbihlKXt2YXIgcj10W2VvXSgpO2lmKHBlKHIuc3Vic2NyaWJlKSlyZXR1cm4gci5zdWJzY3JpYmUoZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKX0pfW8ocl8sImZyb21JbnRlcm9wT2JzZXJ2YWJsZSIpO2Z1bmN0aW9uIG5fKHQpe3JldHVybiBuZXcga2UoZnVuY3Rpb24oZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aCYmIWUuY2xvc2VkO3IrKyllLm5leHQodFtyXSk7ZS5jb21wbGV0ZSgpfSl9byhuXywiZnJvbUFycmF5TGlrZSIpO2Z1bmN0aW9uIGlfKHQpe3JldHVybiBuZXcga2UoZnVuY3Rpb24oZSl7dC50aGVuKGZ1bmN0aW9uKHIpe2UuY2xvc2VkfHwoZS5uZXh0KHIpLGUuY29tcGxldGUoKSl9LGZ1bmN0aW9uKHIpe3JldHVybiBlLmVycm9yKHIpfSkudGhlbihudWxsLGd1KX0pfW8oaV8sImZyb21Qcm9taXNlIik7ZnVuY3Rpb24gb18odCl7cmV0dXJuIG5ldyBrZShmdW5jdGlvbihlKXt2YXIgcixuO3RyeXtmb3IodmFyIGk9U3QodCkscz1pLm5leHQoKTshcy5kb25lO3M9aS5uZXh0KCkpe3ZhciBhPXMudmFsdWU7aWYoZS5uZXh0KGEpLGUuY2xvc2VkKXJldHVybn19Y2F0Y2gobCl7cj17ZXJyb3I6bH19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKG49aS5yZXR1cm4pJiZuLmNhbGwoaSl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fWUuY29tcGxldGUoKX0pfW8ob18sImZyb21JdGVyYWJsZSIpO2Z1bmN0aW9uIE4wKHQpe3JldHVybiBuZXcga2UoZnVuY3Rpb24oZSl7YV8odCxlKS5jYXRjaChmdW5jdGlvbihyKXtyZXR1cm4gZS5lcnJvcihyKX0pfSl9byhOMCwiZnJvbUFzeW5jSXRlcmFibGUiKTtmdW5jdGlvbiBzXyh0KXtyZXR1cm4gTjAoRXUodCkpfW8oc18sImZyb21SZWFkYWJsZVN0cmVhbUxpa2UiKTtmdW5jdGlvbiBhXyh0LGUpe3ZhciByLG4saSxzO3JldHVybiBxbSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYSxsO3JldHVybiBybCh0aGlzLGZ1bmN0aW9uKGMpe3N3aXRjaChjLmxhYmVsKXtjYXNlIDA6Yy50cnlzLnB1c2goWzAsNSw2LDExXSkscj1WbSh0KSxjLmxhYmVsPTE7Y2FzZSAxOnJldHVybls0LHIubmV4dCgpXTtjYXNlIDI6aWYobj1jLnNlbnQoKSwhIW4uZG9uZSlyZXR1cm5bMyw0XTtpZihhPW4udmFsdWUsZS5uZXh0KGEpLGUuY2xvc2VkKXJldHVyblsyXTtjLmxhYmVsPTM7Y2FzZSAzOnJldHVyblszLDFdO2Nhc2UgNDpyZXR1cm5bMywxMV07Y2FzZSA1OnJldHVybiBsPWMuc2VudCgpLGk9e2Vycm9yOmx9LFszLDExXTtjYXNlIDY6cmV0dXJuIGMudHJ5cy5wdXNoKFs2LCw5LDEwXSksbiYmIW4uZG9uZSYmKHM9ci5yZXR1cm4pP1s0LHMuY2FsbChyKV06WzMsOF07Y2FzZSA3OmMuc2VudCgpLGMubGFiZWw9ODtjYXNlIDg6cmV0dXJuWzMsMTBdO2Nhc2UgOTppZihpKXRocm93IGkuZXJyb3I7cmV0dXJuWzddO2Nhc2UgMTA6cmV0dXJuWzddO2Nhc2UgMTE6cmV0dXJuIGUuY29tcGxldGUoKSxbMl19fSl9KX1vKGFfLCJwcm9jZXNzIik7ZnVuY3Rpb24gYnQodCxlLHIsbixpKXtuPT09dm9pZCAwJiYobj0wKSxpPT09dm9pZCAwJiYoaT0hMSk7dmFyIHM9ZS5zY2hlZHVsZShmdW5jdGlvbigpe3IoKSxpP3QuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCxuKSk6dGhpcy51bnN1YnNjcmliZSgpfSxuKTtpZih0LmFkZChzKSwhaSlyZXR1cm4gc31vKGJ0LCJleGVjdXRlU2NoZWR1bGUiKTtmdW5jdGlvbiBscyh0LGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0wKSxNZShmdW5jdGlvbihyLG4pe3Iuc3Vic2NyaWJlKE9lKG4sZnVuY3Rpb24oaSl7cmV0dXJuIGJ0KG4sdCxmdW5jdGlvbigpe3JldHVybiBuLm5leHQoaSl9LGUpfSxmdW5jdGlvbigpe3JldHVybiBidChuLHQsZnVuY3Rpb24oKXtyZXR1cm4gbi5jb21wbGV0ZSgpfSxlKX0sZnVuY3Rpb24oaSl7cmV0dXJuIGJ0KG4sdCxmdW5jdGlvbigpe3JldHVybiBuLmVycm9yKGkpfSxlKX0pKX0pfW8obHMsIm9ic2VydmVPbiIpO2Z1bmN0aW9uIGNzKHQsZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPTApLE1lKGZ1bmN0aW9uKHIsbil7bi5hZGQodC5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiByLnN1YnNjcmliZShuKX0sZSkpfSl9byhjcywic3Vic2NyaWJlT24iKTtmdW5jdGlvbiBSMCh0LGUpe3JldHVybiBVZSh0KS5waXBlKGNzKGUpLGxzKGUpKX1vKFIwLCJzY2hlZHVsZU9ic2VydmFibGUiKTtmdW5jdGlvbiBMMCh0LGUpe3JldHVybiBVZSh0KS5waXBlKGNzKGUpLGxzKGUpKX1vKEwwLCJzY2hlZHVsZVByb21pc2UiKTtmdW5jdGlvbiBGMCh0LGUpe3JldHVybiBuZXcga2UoZnVuY3Rpb24ocil7dmFyIG49MDtyZXR1cm4gZS5zY2hlZHVsZShmdW5jdGlvbigpe249PT10Lmxlbmd0aD9yLmNvbXBsZXRlKCk6KHIubmV4dCh0W24rK10pLHIuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX1vKEYwLCJzY2hlZHVsZUFycmF5Iik7ZnVuY3Rpb24gQTAodCxlKXtyZXR1cm4gbmV3IGtlKGZ1bmN0aW9uKHIpe3ZhciBuO3JldHVybiBidChyLGUsZnVuY3Rpb24oKXtuPXRbU3VdKCksYnQocixlLGZ1bmN0aW9uKCl7dmFyIGkscyxhO3RyeXtpPW4ubmV4dCgpLHM9aS52YWx1ZSxhPWkuZG9uZX1jYXRjaChsKXtyLmVycm9yKGwpO3JldHVybn1hP3IuY29tcGxldGUoKTpyLm5leHQocyl9LDAsITApfSksZnVuY3Rpb24oKXtyZXR1cm4gcGUobj8ucmV0dXJuKSYmbi5yZXR1cm4oKX19KX1vKEEwLCJzY2hlZHVsZUl0ZXJhYmxlIik7ZnVuY3Rpb24gQ3UodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIkl0ZXJhYmxlIGNhbm5vdCBiZSBudWxsIik7cmV0dXJuIG5ldyBrZShmdW5jdGlvbihyKXtidChyLGUsZnVuY3Rpb24oKXt2YXIgbj10W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO2J0KHIsZSxmdW5jdGlvbigpe24ubmV4dCgpLnRoZW4oZnVuY3Rpb24oaSl7aS5kb25lP3IuY29tcGxldGUoKTpyLm5leHQoaS52YWx1ZSl9KX0sMCwhMCl9KX0pfW8oQ3UsInNjaGVkdWxlQXN5bmNJdGVyYWJsZSIpO2Z1bmN0aW9uICQwKHQsZSl7cmV0dXJuIEN1KEV1KHQpLGUpfW8oJDAsInNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlIik7ZnVuY3Rpb24gb2codCxlKXtpZih0IT1udWxsKXtpZih3dSh0KSlyZXR1cm4gUjAodCxlKTtpZihhcyh0KSlyZXR1cm4gRjAodCxlKTtpZihidSh0KSlyZXR1cm4gTDAodCxlKTtpZih2dSh0KSlyZXR1cm4gQ3UodCxlKTtpZihUdSh0KSlyZXR1cm4gQTAodCxlKTtpZihEdSh0KSlyZXR1cm4gJDAodCxlKX10aHJvdyBrdSh0KX1vKG9nLCJzY2hlZHVsZWQiKTtmdW5jdGlvbiBzbih0LGUpe3JldHVybiBlP29nKHQsZSk6VWUodCl9byhzbiwiZnJvbSIpO2Z1bmN0aW9uIGFsKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciByPW9uKHQpO3JldHVybiBzbih0LHIpfW8oYWwsIm9mIik7ZnVuY3Rpb24gQjAodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4odCl9byhCMCwiaXNWYWxpZERhdGUiKTtmdW5jdGlvbiBhbih0LGUpe3JldHVybiBNZShmdW5jdGlvbihyLG4pe3ZhciBpPTA7ci5zdWJzY3JpYmUoT2UobixmdW5jdGlvbihzKXtuLm5leHQodC5jYWxsKGUscyxpKyspKX0pKX0pfW8oYW4sIm1hcCIpO3ZhciBsXz1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIGNfKHQsZSl7cmV0dXJuIGxfKGUpP3QuYXBwbHkodm9pZCAwLHp0KFtdLHh0KGUpKSk6dChlKX1vKGNfLCJjYWxsT3JBcHBseSIpO2Z1bmN0aW9uIE11KHQpe3JldHVybiBhbihmdW5jdGlvbihlKXtyZXR1cm4gY18odCxlKX0pfW8oTXUsIm1hcE9uZU9yTWFueUFyZ3MiKTt2YXIgdV89QXJyYXkuaXNBcnJheSxmXz1PYmplY3QuZ2V0UHJvdG90eXBlT2YscF89T2JqZWN0LnByb3RvdHlwZSxoXz1PYmplY3Qua2V5cztmdW5jdGlvbiB6MCh0KXtpZih0Lmxlbmd0aD09PTEpe3ZhciBlPXRbMF07aWYodV8oZSkpcmV0dXJue2FyZ3M6ZSxrZXlzOm51bGx9O2lmKGRfKGUpKXt2YXIgcj1oXyhlKTtyZXR1cm57YXJnczpyLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gZVtuXX0pLGtleXM6cn19fXJldHVybnthcmdzOnQsa2V5czpudWxsfX1vKHowLCJhcmdzQXJnQXJyYXlPck9iamVjdCIpO2Z1bmN0aW9uIGRfKHQpe3JldHVybiB0JiZ0eXBlb2YgdD09Im9iamVjdCImJmZfKHQpPT09cF99byhkXywiaXNQT0pPIik7ZnVuY3Rpb24gSDAodCxlKXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24ocixuLGkpe3JldHVybiByW25dPWVbaV0scn0se30pfW8oSDAsImNyZWF0ZU9iamVjdCIpO2Z1bmN0aW9uIHNnKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciByPW9uKHQpLG49UDAodCksaT16MCh0KSxzPWkuYXJncyxhPWkua2V5cztpZihzLmxlbmd0aD09PTApcmV0dXJuIHNuKFtdLHIpO3ZhciBsPW5ldyBrZShtXyhzLHIsYT9mdW5jdGlvbihjKXtyZXR1cm4gSDAoYSxjKX06cm4pKTtyZXR1cm4gbj9sLnBpcGUoTXUobikpOmx9byhzZywiY29tYmluZUxhdGVzdCIpO2Z1bmN0aW9uIG1fKHQsZSxyKXtyZXR1cm4gcj09PXZvaWQgMCYmKHI9cm4pLGZ1bmN0aW9uKG4pe2owKGUsZnVuY3Rpb24oKXtmb3IodmFyIGk9dC5sZW5ndGgscz1uZXcgQXJyYXkoaSksYT1pLGw9aSxjPW8oZnVuY3Rpb24oZil7ajAoZSxmdW5jdGlvbigpe3ZhciBwPXNuKHRbZl0sZSksaD0hMTtwLnN1YnNjcmliZShPZShuLGZ1bmN0aW9uKGQpe3NbZl09ZCxofHwoaD0hMCxsLS0pLGx8fG4ubmV4dChyKHMuc2xpY2UoKSkpfSxmdW5jdGlvbigpey0tYXx8bi5jb21wbGV0ZSgpfSkpfSxuKX0sIl9sb29wXzEiKSx1PTA7dTxpO3UrKyljKHUpfSxuKX19byhtXywiY29tYmluZUxhdGVzdEluaXQiKTtmdW5jdGlvbiBqMCh0LGUscil7dD9idChyLHQsZSk6ZSgpfW8oajAsIm1heWJlU2NoZWR1bGUiKTtmdW5jdGlvbiBXMCh0LGUscixuLGkscyxhLGwpe3ZhciBjPVtdLHU9MCxmPTAscD0hMSxoPW8oZnVuY3Rpb24oKXtwJiYhYy5sZW5ndGgmJiF1JiZlLmNvbXBsZXRlKCl9LCJjaGVja0NvbXBsZXRlIiksZD1vKGZ1bmN0aW9uKGcpe3JldHVybiB1PG4/bShnKTpjLnB1c2goZyl9LCJvdXRlck5leHQiKSxtPW8oZnVuY3Rpb24oZyl7cyYmZS5uZXh0KGcpLHUrKzt2YXIgeT0hMTtVZShyKGcsZisrKSkuc3Vic2NyaWJlKE9lKGUsZnVuY3Rpb24oeCl7aT8uKHgpLHM/ZCh4KTplLm5leHQoeCl9LGZ1bmN0aW9uKCl7eT0hMH0sdm9pZCAwLGZ1bmN0aW9uKCl7aWYoeSl0cnl7dS0tO2Zvcih2YXIgeD1vKGZ1bmN0aW9uKCl7dmFyIGs9Yy5zaGlmdCgpO2E/YnQoZSxhLGZ1bmN0aW9uKCl7cmV0dXJuIG0oayl9KTptKGspfSwiX2xvb3BfMSIpO2MubGVuZ3RoJiZ1PG47KXgoKTtoKCl9Y2F0Y2goayl7ZS5lcnJvcihrKX19KSl9LCJkb0lubmVyU3ViIik7cmV0dXJuIHQuc3Vic2NyaWJlKE9lKGUsZCxmdW5jdGlvbigpe3A9ITAsaCgpfSkpLGZ1bmN0aW9uKCl7bD8uKCl9fW8oVzAsIm1lcmdlSW50ZXJuYWxzIik7ZnVuY3Rpb24gdG8odCxlLHIpe3JldHVybiByPT09dm9pZCAwJiYocj0xLzApLHBlKGUpP3RvKGZ1bmN0aW9uKG4saSl7cmV0dXJuIGFuKGZ1bmN0aW9uKHMsYSl7cmV0dXJuIGUobixzLGksYSl9KShVZSh0KG4saSkpKX0scik6KHR5cGVvZiBlPT0ibnVtYmVyIiYmKHI9ZSksTWUoZnVuY3Rpb24obixpKXtyZXR1cm4gVzAobixpLHQscil9KSl9byh0bywibWVyZ2VNYXAiKTtmdW5jdGlvbiBPdSh0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9MS8wKSx0byhybix0KX1vKE91LCJtZXJnZUFsbCIpO2Z1bmN0aW9uIEl1KCl7cmV0dXJuIE91KDEpfW8oSXUsImNvbmNhdEFsbCIpO2Z1bmN0aW9uIF91KCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiBJdSgpKHNuKHQsb24odCkpKX1vKF91LCJjb25jYXQiKTt2YXIgZ189WyJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIl0seV89WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLHhfPVsib24iLCJvZmYiXTtmdW5jdGlvbiBybyh0LGUscixuKXtpZihwZShyKSYmKG49cixyPXZvaWQgMCksbilyZXR1cm4gcm8odCxlLHIpLnBpcGUoTXUobikpO3ZhciBpPXh0KHZfKHQpP3lfLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gZnVuY3Rpb24oYyl7cmV0dXJuIHRbbF0oZSxjLHIpfX0pOmJfKHQpP2dfLm1hcChxMCh0LGUpKTp3Xyh0KT94Xy5tYXAocTAodCxlKSk6W10sMikscz1pWzBdLGE9aVsxXTtpZighcyYmYXModCkpcmV0dXJuIHRvKGZ1bmN0aW9uKGwpe3JldHVybiBybyhsLGUscil9KShVZSh0KSk7aWYoIXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBldmVudCB0YXJnZXQiKTtyZXR1cm4gbmV3IGtlKGZ1bmN0aW9uKGwpe3ZhciBjPW8oZnVuY3Rpb24oKXtmb3IodmFyIHU9W10sZj0wO2Y8YXJndW1lbnRzLmxlbmd0aDtmKyspdVtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGwubmV4dCgxPHUubGVuZ3RoP3U6dVswXSl9LCJoYW5kbGVyIik7cmV0dXJuIHMoYyksZnVuY3Rpb24oKXtyZXR1cm4gYShjKX19KX1vKHJvLCJmcm9tRXZlbnQiKTtmdW5jdGlvbiBxMCh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbcl0oZSxuKX19fW8ocTAsInRvQ29tbW9uSGFuZGxlclJlZ2lzdHJ5Iik7ZnVuY3Rpb24gYl8odCl7cmV0dXJuIHBlKHQuYWRkTGlzdGVuZXIpJiZwZSh0LnJlbW92ZUxpc3RlbmVyKX1vKGJfLCJpc05vZGVTdHlsZUV2ZW50RW1pdHRlciIpO2Z1bmN0aW9uIHdfKHQpe3JldHVybiBwZSh0Lm9uKSYmcGUodC5vZmYpfW8od18sImlzSlF1ZXJ5U3R5bGVFdmVudEVtaXR0ZXIiKTtmdW5jdGlvbiB2Xyh0KXtyZXR1cm4gcGUodC5hZGRFdmVudExpc3RlbmVyKSYmcGUodC5yZW1vdmVFdmVudExpc3RlbmVyKX1vKHZfLCJpc0V2ZW50VGFyZ2V0Iik7ZnVuY3Rpb24gbGwodCxlLHIpe3Q9PT12b2lkIDAmJih0PTApLHI9PT12b2lkIDAmJihyPW5nKTt2YXIgbj0tMTtyZXR1cm4gZSE9bnVsbCYmKHh1KGUpP3I9ZTpuPWUpLG5ldyBrZShmdW5jdGlvbihpKXt2YXIgcz1CMCh0KT8rdC1yLm5vdygpOnQ7czwwJiYocz0wKTt2YXIgYT0wO3JldHVybiByLnNjaGVkdWxlKGZ1bmN0aW9uKCl7aS5jbG9zZWR8fChpLm5leHQoYSsrKSwwPD1uP3RoaXMuc2NoZWR1bGUodm9pZCAwLG4pOmkuY29tcGxldGUoKSl9LHMpfSl9byhsbCwidGltZXIiKTtmdW5jdGlvbiBhZyh0LGUpe3JldHVybiB0PT09dm9pZCAwJiYodD0wKSxlPT09dm9pZCAwJiYoZT1ubiksdDwwJiYodD0wKSxsbCh0LHQsZSl9byhhZywiaW50ZXJ2YWwiKTtmdW5jdGlvbiBQdSh0LGUpe3JldHVybiBNZShmdW5jdGlvbihyLG4pe3ZhciBpPTA7ci5zdWJzY3JpYmUoT2UobixmdW5jdGlvbihzKXtyZXR1cm4gdC5jYWxsKGUscyxpKyspJiZuLm5leHQocyl9KSl9KX1vKFB1LCJmaWx0ZXIiKTtmdW5jdGlvbiBOdSh0KXtyZXR1cm4gTWUoZnVuY3Rpb24oZSxyKXt2YXIgbj1bXTtyZXR1cm4gZS5zdWJzY3JpYmUoT2UocixmdW5jdGlvbihpKXtyZXR1cm4gbi5wdXNoKGkpfSxmdW5jdGlvbigpe3IubmV4dChuKSxyLmNvbXBsZXRlKCl9KSksVWUodCkuc3Vic2NyaWJlKE9lKHIsZnVuY3Rpb24oKXt2YXIgaT1uO249W10sci5uZXh0KGkpfSx0bikpLGZ1bmN0aW9uKCl7bj1udWxsfX0pfW8oTnUsImJ1ZmZlciIpO2Z1bmN0aW9uIFJ1KHQsZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPW51bGwpLGU9ZT8/dCxNZShmdW5jdGlvbihyLG4pe3ZhciBpPVtdLHM9MDtyLnN1YnNjcmliZShPZShuLGZ1bmN0aW9uKGEpe3ZhciBsLGMsdSxmLHA9bnVsbDtzKyslZT09PTAmJmkucHVzaChbXSk7dHJ5e2Zvcih2YXIgaD1TdChpKSxkPWgubmV4dCgpOyFkLmRvbmU7ZD1oLm5leHQoKSl7dmFyIG09ZC52YWx1ZTttLnB1c2goYSksdDw9bS5sZW5ndGgmJihwPXA/P1tdLHAucHVzaChtKSl9fWNhdGNoKHgpe2w9e2Vycm9yOnh9fWZpbmFsbHl7dHJ5e2QmJiFkLmRvbmUmJihjPWgucmV0dXJuKSYmYy5jYWxsKGgpfWZpbmFsbHl7aWYobCl0aHJvdyBsLmVycm9yfX1pZihwKXRyeXtmb3IodmFyIGc9U3QocCkseT1nLm5leHQoKTsheS5kb25lO3k9Zy5uZXh0KCkpe3ZhciBtPXkudmFsdWU7UnIoaSxtKSxuLm5leHQobSl9fWNhdGNoKHgpe3U9e2Vycm9yOnh9fWZpbmFsbHl7dHJ5e3kmJiF5LmRvbmUmJihmPWcucmV0dXJuKSYmZi5jYWxsKGcpfWZpbmFsbHl7aWYodSl0aHJvdyB1LmVycm9yfX19LGZ1bmN0aW9uKCl7dmFyIGEsbDt0cnl7Zm9yKHZhciBjPVN0KGkpLHU9Yy5uZXh0KCk7IXUuZG9uZTt1PWMubmV4dCgpKXt2YXIgZj11LnZhbHVlO24ubmV4dChmKX19Y2F0Y2gocCl7YT17ZXJyb3I6cH19ZmluYWxseXt0cnl7dSYmIXUuZG9uZSYmKGw9Yy5yZXR1cm4pJiZsLmNhbGwoYyl9ZmluYWxseXtpZihhKXRocm93IGEuZXJyb3J9fW4uY29tcGxldGUoKX0sdm9pZCAwLGZ1bmN0aW9uKCl7aT1udWxsfSkpfSl9byhSdSwiYnVmZmVyQ291bnQiKTtmdW5jdGlvbiBMdSh0KXtmb3IodmFyIGUscixuPVtdLGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW5baS0xXT1hcmd1bWVudHNbaV07dmFyIHM9KGU9b24obikpIT09bnVsbCYmZSE9PXZvaWQgMD9lOm5uLGE9KHI9blswXSkhPT1udWxsJiZyIT09dm9pZCAwP3I6bnVsbCxsPW5bMV18fDEvMDtyZXR1cm4gTWUoZnVuY3Rpb24oYyx1KXt2YXIgZj1bXSxwPSExLGg9byhmdW5jdGlvbihnKXt2YXIgeT1nLmJ1ZmZlcix4PWcuc3Viczt4LnVuc3Vic2NyaWJlKCksUnIoZixnKSx1Lm5leHQoeSkscCYmZCgpfSwiZW1pdCIpLGQ9byhmdW5jdGlvbigpe2lmKGYpe3ZhciBnPW5ldyBIdDt1LmFkZChnKTt2YXIgeT1bXSx4PXtidWZmZXI6eSxzdWJzOmd9O2YucHVzaCh4KSxidChnLHMsZnVuY3Rpb24oKXtyZXR1cm4gaCh4KX0sdCl9fSwic3RhcnRCdWZmZXIiKTthIT09bnVsbCYmYT49MD9idCh1LHMsZCxhLCEwKTpwPSEwLGQoKTt2YXIgbT1PZSh1LGZ1bmN0aW9uKGcpe3ZhciB5LHgsaz1mLnNsaWNlKCk7dHJ5e2Zvcih2YXIgVD1TdChrKSxSPVQubmV4dCgpOyFSLmRvbmU7Uj1ULm5leHQoKSl7dmFyIF89Ui52YWx1ZSxFPV8uYnVmZmVyO0UucHVzaChnKSxsPD1FLmxlbmd0aCYmaChfKX19Y2F0Y2goQSl7eT17ZXJyb3I6QX19ZmluYWxseXt0cnl7UiYmIVIuZG9uZSYmKHg9VC5yZXR1cm4pJiZ4LmNhbGwoVCl9ZmluYWxseXtpZih5KXRocm93IHkuZXJyb3J9fX0sZnVuY3Rpb24oKXtmb3IoO2Y/Lmxlbmd0aDspdS5uZXh0KGYuc2hpZnQoKS5idWZmZXIpO20/LnVuc3Vic2NyaWJlKCksdS5jb21wbGV0ZSgpLHUudW5zdWJzY3JpYmUoKX0sdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGY9bnVsbH0pO2Muc3Vic2NyaWJlKG0pfSl9byhMdSwiYnVmZmVyVGltZSIpO2Z1bmN0aW9uIEZ1KHQpe3JldHVybiBNZShmdW5jdGlvbihlLHIpe3ZhciBuPSExLGk9bnVsbCxzPW51bGwsYT1vKGZ1bmN0aW9uKCl7aWYocz8udW5zdWJzY3JpYmUoKSxzPW51bGwsbil7bj0hMTt2YXIgbD1pO2k9bnVsbCxyLm5leHQobCl9fSwiZW1pdCIpO2Uuc3Vic2NyaWJlKE9lKHIsZnVuY3Rpb24obCl7cz8udW5zdWJzY3JpYmUoKSxuPSEwLGk9bCxzPU9lKHIsYSx0biksVWUodChsKSkuc3Vic2NyaWJlKHMpfSxmdW5jdGlvbigpe2EoKSxyLmNvbXBsZXRlKCl9LHZvaWQgMCxmdW5jdGlvbigpe2k9cz1udWxsfSkpfSl9byhGdSwiZGVib3VuY2UiKTtmdW5jdGlvbiBBdSh0LGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT1ubiksTWUoZnVuY3Rpb24ocixuKXt2YXIgaT1udWxsLHM9bnVsbCxhPW51bGwsbD1vKGZ1bmN0aW9uKCl7aWYoaSl7aS51bnN1YnNjcmliZSgpLGk9bnVsbDt2YXIgdT1zO3M9bnVsbCxuLm5leHQodSl9fSwiZW1pdCIpO2Z1bmN0aW9uIGMoKXt2YXIgdT1hK3QsZj1lLm5vdygpO2lmKGY8dSl7aT10aGlzLnNjaGVkdWxlKHZvaWQgMCx1LWYpLG4uYWRkKGkpO3JldHVybn1sKCl9byhjLCJlbWl0V2hlbklkbGUiKSxyLnN1YnNjcmliZShPZShuLGZ1bmN0aW9uKHUpe3M9dSxhPWUubm93KCksaXx8KGk9ZS5zY2hlZHVsZShjLHQpLG4uYWRkKGkpKX0sZnVuY3Rpb24oKXtsKCksbi5jb21wbGV0ZSgpfSx2b2lkIDAsZnVuY3Rpb24oKXtzPWk9bnVsbH0pKX0pfW8oQXUsImRlYm91bmNlVGltZSIpO2Z1bmN0aW9uIHVzKHQsZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPXJuKSx0PXQ/P2tfLE1lKGZ1bmN0aW9uKHIsbil7dmFyIGkscz0hMDtyLnN1YnNjcmliZShPZShuLGZ1bmN0aW9uKGEpe3ZhciBsPWUoYSk7KHN8fCF0KGksbCkpJiYocz0hMSxpPWwsbi5uZXh0KGEpKX0pKX0pfW8odXMsImRpc3RpbmN0VW50aWxDaGFuZ2VkIik7ZnVuY3Rpb24ga18odCxlKXtyZXR1cm4gdD09PWV9byhrXywiZGVmYXVsdENvbXBhcmUiKTtmdW5jdGlvbiAkdSh0KXt0PT09dm9pZCAwJiYodD17fSk7dmFyIGU9dC5jb25uZWN0b3Iscj1lPT09dm9pZCAwP2Z1bmN0aW9uKCl7cmV0dXJuIG5ldyBqdH06ZSxuPXQucmVzZXRPbkVycm9yLGk9bj09PXZvaWQgMD8hMDpuLHM9dC5yZXNldE9uQ29tcGxldGUsYT1zPT09dm9pZCAwPyEwOnMsbD10LnJlc2V0T25SZWZDb3VudFplcm8sYz1sPT09dm9pZCAwPyEwOmw7cmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBmLHAsaCxkPTAsbT0hMSxnPSExLHk9byhmdW5jdGlvbigpe3A/LnVuc3Vic2NyaWJlKCkscD12b2lkIDB9LCJjYW5jZWxSZXNldCIpLHg9byhmdW5jdGlvbigpe3koKSxmPWg9dm9pZCAwLG09Zz0hMX0sInJlc2V0Iiksaz1vKGZ1bmN0aW9uKCl7dmFyIFQ9Zjt4KCksVD8udW5zdWJzY3JpYmUoKX0sInJlc2V0QW5kVW5zdWJzY3JpYmUiKTtyZXR1cm4gTWUoZnVuY3Rpb24oVCxSKXtkKyssIWcmJiFtJiZ5KCk7dmFyIF89aD1oPz9yKCk7Ui5hZGQoZnVuY3Rpb24oKXtkLS0sZD09PTAmJiFnJiYhbSYmKHA9bGcoayxjKSl9KSxfLnN1YnNjcmliZShSKSwhZiYmZD4wJiYoZj1uZXcgaWkoe25leHQ6byhmdW5jdGlvbihFKXtyZXR1cm4gXy5uZXh0KEUpfSwibmV4dCIpLGVycm9yOm8oZnVuY3Rpb24oRSl7Zz0hMCx5KCkscD1sZyh4LGksRSksXy5lcnJvcihFKX0sImVycm9yIiksY29tcGxldGU6byhmdW5jdGlvbigpe209ITAseSgpLHA9bGcoeCxhKSxfLmNvbXBsZXRlKCl9LCJjb21wbGV0ZSIpfSksVWUoVCkuc3Vic2NyaWJlKGYpKX0pKHUpfX1vKCR1LCJzaGFyZSIpO2Z1bmN0aW9uIGxnKHQsZSl7Zm9yKHZhciByPVtdLG49MjtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0yXT1hcmd1bWVudHNbbl07aWYoZT09PSEwKXt0KCk7cmV0dXJufWlmKGUhPT0hMSl7dmFyIGk9bmV3IGlpKHtuZXh0Om8oZnVuY3Rpb24oKXtpLnVuc3Vic2NyaWJlKCksdCgpfSwibmV4dCIpfSk7cmV0dXJuIFVlKGUuYXBwbHkodm9pZCAwLHp0KFtdLHh0KHIpKSkpLnN1YnNjcmliZShpKX19byhsZywiaGFuZGxlUmVzZXQiKTtmdW5jdGlvbiBCdSh0LGUscil7dmFyIG4saSxzLGEsbD0hMTtyZXR1cm4gdCYmdHlwZW9mIHQ9PSJvYmplY3QiPyhuPXQuYnVmZmVyU2l6ZSxhPW49PT12b2lkIDA/MS8wOm4saT10LndpbmRvd1RpbWUsZT1pPT09dm9pZCAwPzEvMDppLHM9dC5yZWZDb3VudCxsPXM9PT12b2lkIDA/ITE6cyxyPXQuc2NoZWR1bGVyKTphPXQ/PzEvMCwkdSh7Y29ubmVjdG9yOm8oZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHNzKGEsZSxyKX0sImNvbm5lY3RvciIpLHJlc2V0T25FcnJvcjohMCxyZXNldE9uQ29tcGxldGU6ITEscmVzZXRPblJlZkNvdW50WmVybzpsfSl9byhCdSwic2hhcmVSZXBsYXkiKTtmdW5jdGlvbiB6dSgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgcj1vbih0KTtyZXR1cm4gTWUoZnVuY3Rpb24obixpKXsocj9fdSh0LG4scik6X3UodCxuKSkuc3Vic2NyaWJlKGkpfSl9byh6dSwic3RhcnRXaXRoIik7ZnVuY3Rpb24gZnModCl7cmV0dXJuIE1lKGZ1bmN0aW9uKGUscil7VWUodCkuc3Vic2NyaWJlKE9lKHIsZnVuY3Rpb24oKXtyZXR1cm4gci5jb21wbGV0ZSgpfSx0bikpLCFyLmNsb3NlZCYmZS5zdWJzY3JpYmUocil9KX1vKGZzLCJ0YWtlVW50aWwiKTtmdW5jdGlvbiBIdSh0LGUpe3JldHVybiBNZShmdW5jdGlvbihyLG4pe3ZhciBpPWU/P3t9LHM9aS5sZWFkaW5nLGE9cz09PXZvaWQgMD8hMDpzLGw9aS50cmFpbGluZyxjPWw9PT12b2lkIDA/ITE6bCx1PSExLGY9bnVsbCxwPW51bGwsaD0hMSxkPW8oZnVuY3Rpb24oKXtwPy51bnN1YnNjcmliZSgpLHA9bnVsbCxjJiYoeSgpLGgmJm4uY29tcGxldGUoKSl9LCJlbmRUaHJvdHRsaW5nIiksbT1vKGZ1bmN0aW9uKCl7cD1udWxsLGgmJm4uY29tcGxldGUoKX0sImNsZWFudXBUaHJvdHRsaW5nIiksZz1vKGZ1bmN0aW9uKHgpe3JldHVybiBwPVVlKHQoeCkpLnN1YnNjcmliZShPZShuLGQsbSkpfSwic3RhcnRUaHJvdHRsZSIpLHk9byhmdW5jdGlvbigpe2lmKHUpe3U9ITE7dmFyIHg9ZjtmPW51bGwsbi5uZXh0KHgpLCFoJiZnKHgpfX0sInNlbmQiKTtyLnN1YnNjcmliZShPZShuLGZ1bmN0aW9uKHgpe3U9ITAsZj14LCEocCYmIXAuY2xvc2VkKSYmKGE/eSgpOmcoeCkpfSxmdW5jdGlvbigpe2g9ITAsIShjJiZ1JiZwJiYhcC5jbG9zZWQpJiZuLmNvbXBsZXRlKCl9KSl9KX1vKEh1LCJ0aHJvdHRsZSIpO2Z1bmN0aW9uIGp1KHQsZSxyKXtlPT09dm9pZCAwJiYoZT1ubik7dmFyIG49bGwodCxlKTtyZXR1cm4gSHUoZnVuY3Rpb24oKXtyZXR1cm4gbn0scil9byhqdSwidGhyb3R0bGVUaW1lIik7dmFyIHJOPXtidWZmZXI6TnUsYnVmZmVyQ291bnQ6UnUsYnVmZmVyVGltZTpMdSxkZWJvdW5jZTpGdSxkZWJvdW5jZVRpbWU6QXUsZmlsdGVyOlB1LG1hcDphbixzdGFydFdpdGg6enUsdGFrZVVudGlsOmZzLHRocm90dGxlVGltZTpqdX07dmFyIGNnPWNsYXNze3N0YXRpY3tvKHRoaXMsIk9ic2VydmFibGVtYXAiKX1jb25zdHJ1Y3Rvcigpe3RoaXMub2JzZXJ2YWJsZUV2ZW50RW1pdHRlckJ1bmRsZUFycmF5PW5ldyBBcnJheSx0aGlzLm9ic2VydmFibGVFdmVudFRhcmdldEJ1bmRsZUFycmF5PW5ldyBBcnJheX1nZXRTdWJqZWN0Rm9yRW1pdHRlckV2ZW50KGUscil7bGV0IG49dGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXkuZmluZChpPT5pLmV2ZW50UmVmPT09ZSYmaS5ldmVudD09PXIpO2lmKG4pcmV0dXJuIG4uc3ViamVjdDt7bGV0IGk9cm8oZSxyKSxzPW5ldyBqdDtpLnN1YnNjcmliZShzKTtsZXQgYT17c3ViamVjdDpzLGV2ZW50UmVmOmUsZXZlbnQ6cn07cmV0dXJuIHRoaXMub2JzZXJ2YWJsZUV2ZW50RW1pdHRlckJ1bmRsZUFycmF5LnB1c2goYSksYS5zdWJqZWN0fX1nZXRTdWJqZWN0Rm9yRXZlbnRUYXJnZXQoZSxyKXtsZXQgbj10aGlzLm9ic2VydmFibGVFdmVudFRhcmdldEJ1bmRsZUFycmF5LmZpbmQoaT0+aS5ldmVudFJlZj09PWUmJmkuZXZlbnQ9PT1yKTtpZihuKXJldHVybiBuLnN1YmplY3Q7e2xldCBzPXtzdWJqZWN0Om5ldyBqdCxldmVudFJlZjplLGV2ZW50OnJ9O3JldHVybiB0aGlzLm9ic2VydmFibGVFdmVudFRhcmdldEJ1bmRsZUFycmF5LnB1c2gocykscy5zdWJqZWN0fX19O3ZhciB1Zz1jbGFzc3tzdGF0aWN7byh0aGlzLCJPYnNlcnZhYmxlSW50YWtlIil9Y29uc3RydWN0b3IoKXt0aGlzLm9ic2VydmFibGVGdW5jdGlvbnM9e25leHQ6byhlPT57fSwibmV4dCIpLGNvbXBsZXRlOm8oZT0+e30sImNvbXBsZXRlIil9LHRoaXMuYnVmZmVyZWQ9ITEsdGhpcy5wYXlsb2FkQnVmZmVyPVtdLHRoaXMub2JzZXJ2YWJsZT1uZXcga2UoZT0+e3RoaXMub2JzZXJ2YWJsZUZ1bmN0aW9ucy5uZXh0PXI9PmUubmV4dChyKSx0aGlzLm9ic2VydmFibGVGdW5jdGlvbnMuY29tcGxldGU9KCk9Pih0aGlzLmNvbXBsZXRlZERlZmZlcmVkLnJlc29sdmUoKSxlLmNvbXBsZXRlKCkpfSksdGhpcy5jb21wbGV0ZWREZWZmZXJlZD1aLmRlZmVyKCksdGhpcy5jb21wbGV0ZWQ9dGhpcy5jb21wbGV0ZWREZWZmZXJlZC5wcm9taXNlfXNldE9ic2VydmFibGUoZSl7dGhpcy5vYnNlcnZhYmxlPWV9cHVzaChlKXt0aGlzLmJ1ZmZlcmVkP3RoaXMucGF5bG9hZEJ1ZmZlci5wdXNoKGUpOnRoaXMuaW50ZXJuYWxQdXNoKGUpfXB1c2hNYW55KGUpe2ZvcihsZXQgciBvZiBlKXRoaXMucHVzaChyKX1zZXRHZW5lcmF0b3IoZSl7dGhpcy5nZW5lcmF0b3I9ZX1tYWtlQnVmZmVyZWQoKXt0aGlzLmJ1ZmZlcmVkPSEwfXN1YnNjcmliZSguLi5lKXtyZXR1cm4gdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSguLi5lKX1yZXF1ZXN0KGUpe2lmKGUhPT0wKWZvcihsZXQgcj0wO3IhPT1lO3IrKylpZih0aGlzLnBheWxvYWRCdWZmZXIubGVuZ3RoPjApdGhpcy5pbnRlcm5hbFB1c2godGhpcy5wYXlsb2FkQnVmZmVyLnNoaWZ0KCkpO2Vsc2V7aWYoIXRoaXMuZ2VuZXJhdG9yKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlcXVlc3QgYW4gdW5idWZmZXJlZCB2YWx1ZSBiZWZvcmUgc2V0dGluZyBhIGdlbmVyYXRvciIpO2xldCBuPXRoaXMuZ2VuZXJhdG9yLm5leHQoKTt0aGlzLmludGVybmFsUHVzaChuLnZhbHVlKX19c2lnbmFsQ29tcGxldGUoKXt0aGlzLm9ic2VydmFibGVGdW5jdGlvbnMuY29tcGxldGUoKX1pbnRlcm5hbFB1c2goZSl7dGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLm5leHQoZSl9fTtmdW5jdGlvbiBuTih0KXtyZXR1cm4gbmV3IGtlKGU9PntsZXQgcj1vKCgpPT50LnBhdXNlKCksInBhdXNlU3RyZWFtIiksbj1vKCgpPT5wcm9jZXNzLm5leHRUaWNrKCgpPT50LnJlc3VtZSgpKSwicmVzdW1lU3RyZWFtIiksaT1vKHM9PntyKCksZS5uZXh0KHMpLG4oKX0sIm9uRGF0YSIpO3JldHVybiB0Lm9uKCJkYXRhIixpKSx0Lm9uKCJlcnJvciIscz0+ZS5lcnJvcihzKSksdC5vbigiZW5kIiwoKT0+ZS5jb21wbGV0ZSgpKSx0Lm9uKCJjbG9zZSIsKCk9PmUuY29tcGxldGUoKSksKCk9Pnt0LnJlbW92ZUxpc3RlbmVyKCJkYXRhIixpKSx0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsZS5lcnJvciksdC5yZW1vdmVMaXN0ZW5lcigiZW5kIixlLmNvbXBsZXRlKSx0LnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsZS5jb21wbGV0ZSl9fSl9byhuTiwiZnJvbVN0cmVhbVdpdGhCYWNrcHJlc3N1cmUiKTt2YXIgaU49e2F0dHJpYnV0ZTohMCx0eXBlOlN0cmluZyxjb252ZXJ0ZXI6dHMscmVmbGVjdDohMSxoYXNDaGFuZ2VkOkphfSxVMD1vKCh0PWlOLGUscik9PntsZXR7a2luZDpuLG1ldGFkYXRhOml9PXIscz1nbG9iYWxUaGlzLmxpdFByb3BlcnR5TWV0YWRhdGEuZ2V0KGkpO2lmKHM9PT12b2lkIDAmJmdsb2JhbFRoaXMubGl0UHJvcGVydHlNZXRhZGF0YS5zZXQoaSxzPW5ldyBNYXApLG49PT0ic2V0dGVyIiYmKCh0PU9iamVjdC5jcmVhdGUodCkpLndyYXBwZWQ9ITApLHMuc2V0KHIubmFtZSx0KSxuPT09ImFjY2Vzc29yIil7bGV0e25hbWU6YX09cjtyZXR1cm57c2V0KGwpe2xldCBjPWUuZ2V0LmNhbGwodGhpcyk7ZS5zZXQuY2FsbCh0aGlzLGwpLHRoaXMucmVxdWVzdFVwZGF0ZShhLGMsdCwhMCxsKX0saW5pdChsKXtyZXR1cm4gbCE9PXZvaWQgMCYmdGhpcy5DKGEsdm9pZCAwLHQsbCksbH19fWlmKG49PT0ic2V0dGVyIil7bGV0e25hbWU6YX09cjtyZXR1cm4gZnVuY3Rpb24obCl7bGV0IGM9dGhpc1thXTtlLmNhbGwodGhpcyxsKSx0aGlzLnJlcXVlc3RVcGRhdGUoYSxjLHQsITAsbCl9fXRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBkZWNvcmF0b3IgbG9jYXRpb246ICIrbil9LCJyIik7ZnVuY3Rpb24gaHModCl7cmV0dXJuKGUscik9PnR5cGVvZiByPT0ib2JqZWN0Ij9VMCh0LGUscik6KChuLGkscyk9PntsZXQgYT1pLmhhc093blByb3BlcnR5KHMpO3JldHVybiBpLmNvbnN0cnVjdG9yLmNyZWF0ZVByb3BlcnR5KHMsbiksYT9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGkscyk6dm9pZCAwfSkodCxlLHIpfW8oaHMsIm4iKTt2YXIgWXI9e307c2UoWXIse0RvbVRvb2xzOigpPT5PbixUeXBlZFJlcXVlc3Q6KCk9PlVsLGJyZWFrcG9pbnRzOigpPT5WZSxjc3M6KCk9PnRtLGVsZW1lbnRCYXNpYzooKT0+cWEscGx1Z2luczooKT0+cm19KTt2YXIgcWE9e307c2UocWEse3NldHVwOigpPT50NCxzdGF0aWNTdHlsZXM6KCk9PlpqLHN0eWxlczooKT0+ZTR9KTt2YXIgamw9e307c2Uoamwse0RlZXNDb21tczooKT0+eHl9KTt2YXIgbGU9e307c2UobGUse1RpbWVvdXQ6KCk9Pld1LGRlbGF5Rm9yOigpPT5WMCxkZWxheUZvclJhbmRvbTooKT0+b059KTt2YXIgVjA9byhhc3luYyh0LGUscj0hMSk9Pihhd2FpdCBuZXcgV3UodCxudWxsLHIpLnByb21pc2UsZSksImRlbGF5Rm9yIiksb049byhhc3luYyh0LGUscixuPSExKT0+KGF3YWl0IFYwKE1hdGgucmFuZG9tKCkqKGUtdCkrdCxudWxsLG4pLHIpLCJkZWxheUZvclJhbmRvbSIpLFd1PWNsYXNze3N0YXRpY3tvKHRoaXMsIlRpbWVvdXQiKX1jb25zdHJ1Y3RvcihlLHIsbj0hMSl7dGhpcy5fY2FuY2VsbGVkPSExLHRoaXMudGltZW91dEluTWlsbGlzPWUsdGhpcy5fZGVmZXJyZWQ9bmkoKSx0aGlzLnByb21pc2U9dGhpcy5fZGVmZXJyZWQucHJvbWlzZSx0aGlzLl90aW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLl9jYW5jZWxsZWR8fHRoaXMuX2RlZmVycmVkLnJlc29sdmUocil9LGUpLHRoaXMuc3RhcnRlZD1EYXRlLm5vdygpLG4mJnRoaXMubWFrZVVucmVmZWQoKX1tYWtlVW5yZWZlZCgpe3RoaXMuX3RpbWVvdXQudW5yZWY/LigpfWNhbmNlbCgpe3RoaXMuX2NhbmNlbGxlZD0hMCxjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCl9Z2V0VGltZUxlZnQoKXtsZXQgZT10aGlzLnN0YXJ0ZWQrdGhpcy50aW1lb3V0SW5NaWxsaXMtRGF0ZS5ub3coKTtyZXR1cm4gZT4wP2U6MH19O3ZhciBxdT17fTt2YXIgVGk9e307c2UoVGkse1RZUEVEX1JFUVVFU1RfUkVEQUNURURfUEFZTE9BRDooKT0+R3MsVHlwZWRIYW5kbGVyOigpPT5heSxUeXBlZFJlcXVlc3Q6KCk9PnV5LFR5cGVkUmVxdWVzdFJldHJ5TGltaXRFcnJvcjooKT0+YWgsVHlwZWRSZXF1ZXN0VGltZW91dEVycm9yOigpPT5zaCxUeXBlZFJlc3BvbnNlRXJyb3I6KCk9PmJyLFR5cGVkUm91dGVyOigpPT5seSxUeXBlZFRhcmdldDooKT0+Y3ksVmlydHVhbFN0cmVhbTooKT0+JHIsVmlydHVhbFN0cmVhbUFjdGl2YXRpb25TY29wZTooKT0+QW4sVmlydHVhbFN0cmVhbUNsb3NlZEVycm9yOigpPT55byxWaXJ0dWFsU3RyZWFtTGlmZWN5Y2xlQ29udHJhY3RFcnJvcjooKT0+S3AsVmlydHVhbFN0cmVhbU9wZW5UaW1lb3V0RXJyb3I6KCk9PnhvLGdldFR5cGVkUmVxdWVzdFJlc3BvbnNlSW50ZXJlc3RLZXk6KCk9Pm5ofSk7dmFyIEFlPXt9O3NlKEFlLHtBc3luY0V4ZWN1dGlvblN0YWNrOigpPT5OZyxCYWNrcHJlc3N1cmVkQXJyYXk6KCk9PlJnLEZhc3RNYXA6KCk9PmhvLEludGVyZXN0OigpPT5DbCxJbnRlcmVzdE1hcDooKT0+TGcsTGltaXRlZEFycmF5OigpPT5GZyxMb29wVHJhY2tlcjooKT0+QWcsT2JqZWN0TWFwOigpPT5MbixTdHJpbmdtYXA6KCk9Pk1sLFRpbWVkQWdncmVnYXRvcjooKT0+T2wsVGltZWRBZ2dyZWd0b3I6KCk9Pk9sLFRyZWU6KCk9PiRnLHVuaTooKT0+djF9KTt2YXIgdWw9e307c2UodWwse1NtYXJ0TWF0Y2g6KCk9PnBnfSk7dmFyIGNsPXt9O3NlKGNsLHtpc01hdGNoOigpPT5sTixtYXRjaGVyOigpPT5hTn0pO2Z1bmN0aW9uIG5vKHQpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIHN0cmluZyIpO3JldHVybiB0LnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrKj8uXS9nLCJcXCQmIikucmVwbGFjZSgvLS9nLCJcXHgyZCIpfW8obm8sImVzY2FwZVN0cmluZ1JlZ2V4cCIpO3ZhciBmZz1uZXcgTWFwLFkwPW8oKHQsZSk9PntpZighQXJyYXkuaXNBcnJheSh0KSlzd2l0Y2godHlwZW9mIHQpe2Nhc2Uic3RyaW5nIjp0PVt0XTticmVhaztjYXNlInVuZGVmaW5lZCI6dD1bXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICcke2V9JyB0byBiZSBhIHN0cmluZyBvciBhbiBhcnJheSwgYnV0IGdvdCBhIHR5cGUgb2YgJyR7dHlwZW9mIHR9J2ApfXJldHVybiB0LmZpbHRlcihyPT57aWYodHlwZW9mIHIhPSJzdHJpbmciKXtpZih0eXBlb2Ygcj4idSIpcmV0dXJuITE7dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgJyR7ZX0nIHRvIGJlIGFuIGFycmF5IG9mIHN0cmluZ3MsIGJ1dCBmb3VuZCBhIHR5cGUgb2YgJyR7dHlwZW9mIHJ9JyBpbiB0aGUgYXJyYXlgKX1yZXR1cm4hMH0pfSwic2FuaXRpemVBcnJheSIpLHNOPW8oKHQsZSk9PntlPXtjYXNlU2Vuc2l0aXZlOiExLC4uLmV9O2xldCByPXQrSlNPTi5zdHJpbmdpZnkoZSk7aWYoZmcuaGFzKHIpKXJldHVybiBmZy5nZXQocik7bGV0IG49dFswXT09PSIhIjtuJiYodD10LnNsaWNlKDEpKSx0PW5vKHQpLnJlcGxhY2UoL1xcXCovZywiW1xcc1xcU10qIik7bGV0IGk9bmV3IFJlZ0V4cChgXiR7dH0kYCxlLmNhc2VTZW5zaXRpdmU/IiI6ImkiKTtyZXR1cm4gaS5uZWdhdGVkPW4sZmcuc2V0KHIsaSksaX0sIm1ha2VSZWdleHAiKSxHMD1vKCh0LGUscixuKT0+e2lmKHQ9WTAodCwiaW5wdXRzIiksZT1ZMChlLCJwYXR0ZXJucyIpLGUubGVuZ3RoPT09MClyZXR1cm5bXTtlPWUubWFwKGE9PnNOKGEscikpO2xldHthbGxQYXR0ZXJuczppfT1yfHx7fSxzPVtdO2ZvcihsZXQgYSBvZiB0KXtsZXQgbCxjPVsuLi5lXS5maWxsKCExKTtmb3IobGV0W3UsZl1vZiBlLmVudHJpZXMoKSlpZihmLnRlc3QoYSkmJihjW3VdPSEwLGw9IWYubmVnYXRlZCwhbCkpYnJlYWs7aWYoIShsPT09ITF8fGw9PT12b2lkIDAmJmUuc29tZSh1PT4hdS5uZWdhdGVkKXx8aSYmYy5zb21lKCh1LGYpPT4hdSYmIWVbZl0ubmVnYXRlZCkpJiYocy5wdXNoKGEpLG4pKWJyZWFrfXJldHVybiBzfSwiYmFzZU1hdGNoZXIiKTtmdW5jdGlvbiBhTih0LGUscil7cmV0dXJuIEcwKHQsZSxyLCExKX1vKGFOLCJtYXRjaGVyIik7ZnVuY3Rpb24gbE4odCxlLHIpe3JldHVybiBHMCh0LGUsciwhMCkubGVuZ3RoPjB9byhsTiwiaXNNYXRjaCIpO3ZhciBwZz1jbGFzc3tzdGF0aWN7byh0aGlzLCJTbWFydE1hdGNoIil9Y29uc3RydWN0b3IoZSl7dGhpcy53aWxkY2FyZD1lfW1hdGNoKGUpe3JldHVybiBjbC5pc01hdGNoKGUsdGhpcy53aWxkY2FyZCl9fTt2YXIgcG89e307c2UocG8se0Nyb25Kb2I6KCk9PkRsLENyb25NYW5hZ2VyOigpPT5EZyxFeHRlbmRlZERhdGU6KCk9Pk1nLEhydE1lYXN1cmVtZW50OigpPT5PZyxJbnRlcnZhbDooKT0+SWcsVGltZVN0YW1wOigpPT5BcyxUaW1lcjooKT0+X2csZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlQWdvVGltZTooKT0+elIsZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlU3RyaW5nOigpPT5CUixnZXRNaWxsaVNlY29uZHNGcm9tVW5pdHM6KCk9PkNnLHVuaXRzOigpPT55aX0pO3ZhciBkbD17fTtzZShkbCx7Q3JvbjooKT0+ZXYsQ3JvbkRhdGU6KCk9PnN0LENyb25QYXR0ZXJuOigpPT5VdSxzY2hlZHVsZWRKb2JzOigpPT5kc30pO2Z1bmN0aW9uIGZsKHQpe3JldHVybiBEYXRlLlVUQyh0LnksdC5tLTEsdC5kLHQuaCx0LmksdC5zKX1vKGZsLCJUIik7ZnVuY3Rpb24gaGcodCxlKXtyZXR1cm4gdC55PT09ZS55JiZ0Lm09PT1lLm0mJnQuZD09PWUuZCYmdC5oPT09ZS5oJiZ0Lmk9PT1lLmkmJnQucz09PWUuc31vKGhnLCJEIik7ZnVuY3Rpb24gdU4odCxlKXtsZXQgcj1uZXcgRGF0ZShEYXRlLnBhcnNlKHQpKTtpZihpc05hTihyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSVNPODYwMSBwYXNzZWQgdG8gdGltZXpvbmUgcGFyc2VyLiIpO2xldCBuPXQuc3Vic3RyaW5nKDkpO3JldHVybiBuLmluY2x1ZGVzKCJaIil8fG4uaW5jbHVkZXMoIisiKXx8bi5pbmNsdWRlcygiLSIpP2RnKHIuZ2V0VVRDRnVsbFllYXIoKSxyLmdldFVUQ01vbnRoKCkrMSxyLmdldFVUQ0RhdGUoKSxyLmdldFVUQ0hvdXJzKCksci5nZXRVVENNaW51dGVzKCksci5nZXRVVENTZWNvbmRzKCksIkV0Yy9VVEMiKTpkZyhyLmdldEZ1bGxZZWFyKCksci5nZXRNb250aCgpKzEsci5nZXREYXRlKCksci5nZXRIb3VycygpLHIuZ2V0TWludXRlcygpLHIuZ2V0U2Vjb25kcygpLGUpfW8odU4sIkEiKTtmdW5jdGlvbiBRMCh0LGUscil7cmV0dXJuIEowKHVOKHQsZSkscil9byhRMCwidiIpO2Z1bmN0aW9uIEowKHQsZSl7bGV0IHI9bmV3IERhdGUoZmwodCkpLG49cGwocix0LnR6KSxpPWZsKHQpLHM9ZmwobiksYT1pLXMsbD1uZXcgRGF0ZShyLmdldFRpbWUoKSthKSxjPXBsKGwsdC50eik7aWYoaGcoYyx0KSl7bGV0IHA9bmV3IERhdGUobC5nZXRUaW1lKCktMzZlNSksaD1wbChwLHQudHopO3JldHVybiBoZyhoLHQpP3A6bH1sZXQgdT1uZXcgRGF0ZShsLmdldFRpbWUoKStmbCh0KS1mbChjKSksZj1wbCh1LHQudHopO2lmKGhnKGYsdCkpcmV0dXJuIHU7aWYoZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0ZSBwYXNzZWQgdG8gZnJvbVRaKCkiKTtyZXR1cm4gbC5nZXRUaW1lKCk+dS5nZXRUaW1lKCk/bDp1fW8oSjAsImsiKTtmdW5jdGlvbiBwbCh0LGUpe2xldCByLG47dHJ5e3I9bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIix7dGltZVpvbmU6ZSx5ZWFyOiJudW1lcmljIixtb250aDoibnVtZXJpYyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsaG91cjEyOiExfSksbj1yLmZvcm1hdFRvUGFydHModCl9Y2F0Y2gocyl7bGV0IGE9cyBpbnN0YW5jZW9mIEVycm9yP3MubWVzc2FnZTpTdHJpbmcocyk7dGhyb3cgbmV3IFJhbmdlRXJyb3IoYHRvVFo6IEludmFsaWQgdGltZXpvbmUgJyR7ZX0nIG9yIGRhdGUuIFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgSUFOQSB0aW1lem9uZSAoZS5nLiwgJ0FtZXJpY2EvTmV3X1lvcmsnLCAnRXVyb3BlL1N0b2NraG9sbScpLiBPcmlnaW5hbCBlcnJvcjogJHthfWApfWxldCBpPXt5ZWFyOjAsbW9udGg6MCxkYXk6MCxob3VyOjAsbWludXRlOjAsc2Vjb25kOjB9O2ZvcihsZXQgcyBvZiBuKShzLnR5cGU9PT0ieWVhciJ8fHMudHlwZT09PSJtb250aCJ8fHMudHlwZT09PSJkYXkifHxzLnR5cGU9PT0iaG91ciJ8fHMudHlwZT09PSJtaW51dGUifHxzLnR5cGU9PT0ic2Vjb25kIikmJihpW3MudHlwZV09cGFyc2VJbnQocy52YWx1ZSwxMCkpO2lmKGlzTmFOKGkueWVhcil8fGlzTmFOKGkubW9udGgpfHxpc05hTihpLmRheSl8fGlzTmFOKGkuaG91cil8fGlzTmFOKGkubWludXRlKXx8aXNOYU4oaS5zZWNvbmQpKXRocm93IG5ldyBFcnJvcihgdG9UWjogRmFpbGVkIHRvIHBhcnNlIGFsbCBkYXRlIGNvbXBvbmVudHMgZnJvbSB0aW1lem9uZSAnJHtlfScuIFRoaXMgbWF5IGluZGljYXRlIGFuIGludmFsaWQgZGF0ZSBvciB0aW1lem9uZSBjb25maWd1cmF0aW9uLiBQYXJzZWQgY29tcG9uZW50czogJHtKU09OLnN0cmluZ2lmeShpKX1gKTtyZXR1cm4gaS5ob3VyPT09MjQmJihpLmhvdXI9MCkse3k6aS55ZWFyLG06aS5tb250aCxkOmkuZGF5LGg6aS5ob3VyLGk6aS5taW51dGUsczppLnNlY29uZCx0ejplfX1vKHBsLCJnIik7ZnVuY3Rpb24gZGcodCxlLHIsbixpLHMsYSl7cmV0dXJue3k6dCxtOmUsZDpyLGg6bixpLHMsdHo6YX19byhkZywiYiIpO3ZhciBLMD1bMSwyLDQsOCwxNl0sVXU9Y2xhc3N7c3RhdGlje28odGhpcywiQyIpfXBhdHRlcm47dGltZXpvbmU7bW9kZTthbHRlcm5hdGl2ZVdlZWtkYXlzO3Nsb3BweVJhbmdlcztzZWNvbmQ7bWludXRlO2hvdXI7ZGF5O21vbnRoO2RheU9mV2Vlazt5ZWFyO2xhc3REYXlPZk1vbnRoO2xhc3RXZWVrZGF5O25lYXJlc3RXZWVrZGF5cztzdGFyRE9NO3N0YXJET1c7c3RhclllYXI7dXNlQW5kTG9naWM7Y29uc3RydWN0b3IodCxlLHIpe3RoaXMucGF0dGVybj10LHRoaXMudGltZXpvbmU9ZSx0aGlzLm1vZGU9cj8ubW9kZT8/ImF1dG8iLHRoaXMuYWx0ZXJuYXRpdmVXZWVrZGF5cz1yPy5hbHRlcm5hdGl2ZVdlZWtkYXlzPz8hMSx0aGlzLnNsb3BweVJhbmdlcz1yPy5zbG9wcHlSYW5nZXM/PyExLHRoaXMuc2Vjb25kPUFycmF5KDYwKS5maWxsKDApLHRoaXMubWludXRlPUFycmF5KDYwKS5maWxsKDApLHRoaXMuaG91cj1BcnJheSgyNCkuZmlsbCgwKSx0aGlzLmRheT1BcnJheSgzMSkuZmlsbCgwKSx0aGlzLm1vbnRoPUFycmF5KDEyKS5maWxsKDApLHRoaXMuZGF5T2ZXZWVrPUFycmF5KDcpLmZpbGwoMCksdGhpcy55ZWFyPUFycmF5KDFlNCkuZmlsbCgwKSx0aGlzLmxhc3REYXlPZk1vbnRoPSExLHRoaXMubGFzdFdlZWtkYXk9ITEsdGhpcy5uZWFyZXN0V2Vla2RheXM9QXJyYXkoMzEpLmZpbGwoMCksdGhpcy5zdGFyRE9NPSExLHRoaXMuc3RhckRPVz0hMSx0aGlzLnN0YXJZZWFyPSExLHRoaXMudXNlQW5kTG9naWM9ITEsdGhpcy5wYXJzZSgpfXBhcnNlKCl7aWYoISh0eXBlb2YgdGhpcy5wYXR0ZXJuPT0ic3RyaW5nInx8dGhpcy5wYXR0ZXJuIGluc3RhbmNlb2YgU3RyaW5nKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogUGF0dGVybiBoYXMgdG8gYmUgb2YgdHlwZSBzdHJpbmcuIik7dGhpcy5wYXR0ZXJuLmluZGV4T2YoIkAiKT49MCYmKHRoaXMucGF0dGVybj10aGlzLmhhbmRsZU5pY2tuYW1lcyh0aGlzLnBhdHRlcm4pLnRyaW0oKSk7bGV0IHQ9dGhpcy5wYXR0ZXJuLm1hdGNoKC9cUysvZyl8fFsiIl0sZT10Lmxlbmd0aDtpZih0Lmxlbmd0aDw1fHx0Lmxlbmd0aD43KXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gZm9ybWF0ICgnIit0aGlzLnBhdHRlcm4rIicpLCBleGFjdGx5IGZpdmUsIHNpeCwgb3Igc2V2ZW4gc3BhY2Ugc2VwYXJhdGVkIHBhcnRzIGFyZSByZXF1aXJlZC4iKTtpZih0aGlzLm1vZGUhPT0iYXV0byIpe2xldCBuO3N3aXRjaCh0aGlzLm1vZGUpe2Nhc2UiNS1wYXJ0IjpuPTU7YnJlYWs7Y2FzZSI2LXBhcnQiOm49NjticmVhaztjYXNlIjctcGFydCI6bj03O2JyZWFrO2Nhc2UiNS1vci02LXBhcnRzIjpuPVs1LDZdO2JyZWFrO2Nhc2UiNi1vci03LXBhcnRzIjpuPVs2LDddO2JyZWFrO2RlZmF1bHQ6bj0wfWlmKCEoQXJyYXkuaXNBcnJheShuKT9uLmluY2x1ZGVzKGUpOmU9PT1uKSl7bGV0IGk9QXJyYXkuaXNBcnJheShuKT9uLmpvaW4oIiBvciAiKTpuLnRvU3RyaW5nKCk7dGhyb3cgbmV3IFR5cGVFcnJvcihgQ3JvblBhdHRlcm46IG1vZGUgJyR7dGhpcy5tb2RlfScgcmVxdWlyZXMgZXhhY3RseSAke2l9IHBhcnRzLCBidXQgcGF0dGVybiAnJHt0aGlzLnBhdHRlcm59JyBoYXMgJHtlfSBwYXJ0cy5gKX19aWYodC5sZW5ndGg9PT01JiZ0LnVuc2hpZnQoIjAiKSx0Lmxlbmd0aD09PTYmJnQucHVzaCgiKiIpLHRbM10udG9VcHBlckNhc2UoKT09PSJMVyI/KHRoaXMubGFzdFdlZWtkYXk9ITAsdFszXT0iIik6dFszXS50b1VwcGVyQ2FzZSgpLmluZGV4T2YoIkwiKT49MCYmKHRbM109dFszXS5yZXBsYWNlKC9ML2dpLCIiKSx0aGlzLmxhc3REYXlPZk1vbnRoPSEwKSx0WzNdPT0iKiImJih0aGlzLnN0YXJET009ITApLHRbNl09PSIqIiYmKHRoaXMuc3RhclllYXI9ITApLHRbNF0ubGVuZ3RoPj0zJiYodFs0XT10aGlzLnJlcGxhY2VBbHBoYU1vbnRocyh0WzRdKSksdFs1XS5sZW5ndGg+PTMmJih0WzVdPXRoaXMuYWx0ZXJuYXRpdmVXZWVrZGF5cz90aGlzLnJlcGxhY2VBbHBoYURheXNRdWFydHoodFs1XSk6dGhpcy5yZXBsYWNlQWxwaGFEYXlzKHRbNV0pKSx0WzVdLnN0YXJ0c1dpdGgoIisiKSYmKHRoaXMudXNlQW5kTG9naWM9ITAsdFs1XT10WzVdLnN1YnN0cmluZygxKSx0WzVdPT09IiIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBEYXktb2Ytd2VlayBmaWVsZCBjYW5ub3QgYmUgZW1wdHkgYWZ0ZXIgJysnIG1vZGlmaWVyLiIpO3N3aXRjaCh0WzVdPT0iKiImJih0aGlzLnN0YXJET1c9ITApLHRoaXMucGF0dGVybi5pbmRleE9mKCI/Iik+PTAmJih0WzBdPXRbMF0ucmVwbGFjZSgvXD8vZywiKiIpLHRbMV09dFsxXS5yZXBsYWNlKC9cPy9nLCIqIiksdFsyXT10WzJdLnJlcGxhY2UoL1w/L2csIioiKSx0WzNdPXRbM10ucmVwbGFjZSgvXD8vZywiKiIpLHRbNF09dFs0XS5yZXBsYWNlKC9cPy9nLCIqIiksdFs1XT10WzVdLnJlcGxhY2UoL1w/L2csIioiKSx0WzZdJiYodFs2XT10WzZdLnJlcGxhY2UoL1w/L2csIioiKSkpLHRoaXMubW9kZSl7Y2FzZSI1LXBhcnQiOnRbMF09IjAiLHRbNl09IioiO2JyZWFrO2Nhc2UiNi1wYXJ0Ijp0WzZdPSIqIjticmVhaztjYXNlIjUtb3ItNi1wYXJ0cyI6dFs2XT0iKiI7YnJlYWs7Y2FzZSI2LW9yLTctcGFydHMiOmJyZWFrO2Nhc2UiNy1wYXJ0IjpjYXNlImF1dG8iOmJyZWFrfXRoaXMudGhyb3dBdElsbGVnYWxDaGFyYWN0ZXJzKHQpLHRoaXMucGFydFRvQXJyYXkoInNlY29uZCIsdFswXSwwLDEpLHRoaXMucGFydFRvQXJyYXkoIm1pbnV0ZSIsdFsxXSwwLDEpLHRoaXMucGFydFRvQXJyYXkoImhvdXIiLHRbMl0sMCwxKSx0aGlzLnBhcnRUb0FycmF5KCJkYXkiLHRbM10sLTEsMSksdGhpcy5wYXJ0VG9BcnJheSgibW9udGgiLHRbNF0sLTEsMSk7bGV0IHI9dGhpcy5hbHRlcm5hdGl2ZVdlZWtkYXlzPy0xOjA7dGhpcy5wYXJ0VG9BcnJheSgiZGF5T2ZXZWVrIix0WzVdLHIsNjMpLHRoaXMucGFydFRvQXJyYXkoInllYXIiLHRbNl0sMCwxKSwhdGhpcy5hbHRlcm5hdGl2ZVdlZWtkYXlzJiZ0aGlzLmRheU9mV2Vla1s3XSYmKHRoaXMuZGF5T2ZXZWVrWzBdPXRoaXMuZGF5T2ZXZWVrWzddKX1wYXJ0VG9BcnJheSh0LGUscixuKXtsZXQgaT10aGlzW3RdLHM9dD09PSJkYXkiJiZ0aGlzLmxhc3REYXlPZk1vbnRoLGE9dD09PSJkYXkiJiZ0aGlzLmxhc3RXZWVrZGF5O2lmKGU9PT0iIiYmIXMmJiFhKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBjb25maWd1cmF0aW9uIGVudHJ5ICIrdCsiICgiK2UrIikgaXMgZW1wdHksIGNoZWNrIGZvciB0cmFpbGluZyBzcGFjZXMuIik7aWYoZT09PSIqIilyZXR1cm4gaS5maWxsKG4pO2xldCBsPWUuc3BsaXQoIiwiKTtpZihsLmxlbmd0aD4xKWZvcihsZXQgYz0wO2M8bC5sZW5ndGg7YysrKXRoaXMucGFydFRvQXJyYXkodCxsW2NdLHIsbik7ZWxzZSBlLmluZGV4T2YoIi0iKSE9PS0xJiZlLmluZGV4T2YoIi8iKSE9PS0xP3RoaXMuaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmcoZSx0LHIsbik6ZS5pbmRleE9mKCItIikhPT0tMT90aGlzLmhhbmRsZVJhbmdlKGUsdCxyLG4pOmUuaW5kZXhPZigiLyIpIT09LTE/dGhpcy5oYW5kbGVTdGVwcGluZyhlLHQscixuKTplIT09IiImJnRoaXMuaGFuZGxlTnVtYmVyKGUsdCxyLG4pfXRocm93QXRJbGxlZ2FsQ2hhcmFjdGVycyh0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZigoZT09PTM/L1teLyowLTksXC1Xd0xsXSsvOmU9PT01Py9bXi8qMC05LFwtI0xsXSsvOi9bXi8qMC05LFwtXSsvKS50ZXN0KHRbZV0pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBjb25maWd1cmF0aW9uIGVudHJ5ICIrZSsiICgiK3RbZV0rIikgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLiIpfWhhbmRsZU51bWJlcih0LGUscixuKXtsZXQgaT10aGlzLmV4dHJhY3ROdGgodCxlKSxzPXQudG9VcHBlckNhc2UoKS5pbmNsdWRlcygiVyIpO2lmKGUhPT0iZGF5IiYmcyl0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogTmVhcmVzdCB3ZWVrZGF5IG1vZGlmaWVyIChXKSBvbmx5IGFsbG93ZWQgaW4gZGF5LW9mLW1vbnRoLiIpO3MmJihlPSJuZWFyZXN0V2Vla2RheXMiKTtsZXQgYT1wYXJzZUludChpWzBdLDEwKStyO2lmKGlzTmFOKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiAiK2UrIiBpcyBub3QgYSBudW1iZXI6ICciK3QrIiciKTt0aGlzLnNldFBhcnQoZSxhLGlbMV18fG4pfXNldFBhcnQodCxlLHIpe2lmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcyx0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCBwYXJ0IHNwZWNpZmllZDogIit0KTtpZih0PT09ImRheU9mV2VlayIpe2lmKGU9PT03JiYoZT0wKSxlPDB8fGU+Nil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yIGRheU9mV2VlazogIitlKTt0aGlzLnNldE50aFdlZWtkYXlPZk1vbnRoKGUscik7cmV0dXJufWlmKHQ9PT0ic2Vjb25kInx8dD09PSJtaW51dGUiKXtpZihlPDB8fGU+PTYwKXRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgIit0KyI6ICIrZSl9ZWxzZSBpZih0PT09ImhvdXIiKXtpZihlPDB8fGU+PTI0KXRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgIit0KyI6ICIrZSl9ZWxzZSBpZih0PT09ImRheSJ8fHQ9PT0ibmVhcmVzdFdlZWtkYXlzIil7aWYoZTwwfHxlPj0zMSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIrdCsiOiAiK2UpfWVsc2UgaWYodD09PSJtb250aCIpe2lmKGU8MHx8ZT49MTIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciAiK3QrIjogIitlKX1lbHNlIGlmKHQ9PT0ieWVhciImJihlPDF8fGU+PTFlNCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciAiK3QrIjogIitlKyIgKHN1cHBvcnRlZCByYW5nZTogMS05OTk5KSIpO3RoaXNbdF1bZV09cn12YWxpZGF0ZU5vdE5hTih0LGUpe2lmKGlzTmFOKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoZSl9dmFsaWRhdGVSYW5nZSh0LGUscixuLGkpe2lmKHQ+ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogRnJvbSB2YWx1ZSBpcyBsYXJnZXIgdGhhbiB0byB2YWx1ZTogJyIraSsiJyIpO2lmKHIhPT12b2lkIDApe2lmKHI9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6IDAiKTtpZihyPnRoaXNbbl0ubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIHN0ZXBzIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWF4aW11bSB2YWx1ZSBvZiBwYXJ0ICgiK3RoaXNbbl0ubGVuZ3RoKyIpIil9fWhhbmRsZVJhbmdlV2l0aFN0ZXBwaW5nKHQsZSxyLG4pe2lmKHQudG9VcHBlckNhc2UoKS5pbmNsdWRlcygiVyIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIFcgaXMgbm90IGFsbG93ZWQgaW4gcmFuZ2VzIHdpdGggc3RlcHBpbmcuIik7bGV0IGk9dGhpcy5leHRyYWN0TnRoKHQsZSkscz1pWzBdLm1hdGNoKC9eKFxkKyktKFxkKylcLyhcZCspJC8pO2lmKHM9PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgcmFuZ2Ugd2l0aCBzdGVwcGluZzogJyIrdCsiJyIpO2xldFssYSxsLGNdPXMsdT1wYXJzZUludChhLDEwKStyLGY9cGFyc2VJbnQobCwxMCkrcixwPXBhcnNlSW50KGMsMTApO3RoaXMudmFsaWRhdGVOb3ROYU4odSwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBsb3dlciByYW5nZSAoTmFOKSIpLHRoaXMudmFsaWRhdGVOb3ROYU4oZiwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCB1cHBlciByYW5nZSAoTmFOKSIpLHRoaXMudmFsaWRhdGVOb3ROYU4ocCwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogKE5hTikiKSx0aGlzLnZhbGlkYXRlUmFuZ2UodSxmLHAsZSx0KTtmb3IobGV0IGg9dTtoPD1mO2grPXApdGhpcy5zZXRQYXJ0KGUsaCxpWzFdfHxuKX1leHRyYWN0TnRoKHQsZSl7bGV0IHI9dCxuO2lmKHIuaW5jbHVkZXMoIiMiKSl7aWYoZSE9PSJkYXlPZldlZWsiKXRocm93IG5ldyBFcnJvcigiQ3JvblBhdHRlcm46IG50aCAoIykgb25seSBhbGxvd2VkIGluIGRheS1vZi13ZWVrIGZpZWxkIik7bj1yLnNwbGl0KCIjIilbMV0scj1yLnNwbGl0KCIjIilbMF19ZWxzZSBpZihyLnRvVXBwZXJDYXNlKCkuZW5kc1dpdGgoIkwiKSl7aWYoZSE9PSJkYXlPZldlZWsiKXRocm93IG5ldyBFcnJvcigiQ3JvblBhdHRlcm46IEwgbW9kaWZpZXIgb25seSBhbGxvd2VkIGluIGRheS1vZi13ZWVrIGZpZWxkICh1c2UgTCBhbG9uZSBmb3IgZGF5LW9mLW1vbnRoKSIpO249IkwiLHI9ci5zbGljZSgwLC0xKX1yZXR1cm5bcixuXX1oYW5kbGVSYW5nZSh0LGUscixuKXtpZih0LnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoIlciKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBXIGlzIG5vdCBhbGxvd2VkIGluIGEgcmFuZ2UuIik7bGV0IGk9dGhpcy5leHRyYWN0TnRoKHQsZSkscz1pWzBdLnNwbGl0KCItIik7aWYocy5sZW5ndGghPT0yKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgcmFuZ2U6ICciK3QrIiciKTtsZXQgYT1wYXJzZUludChzWzBdLDEwKStyLGw9cGFyc2VJbnQoc1sxXSwxMCkrcjt0aGlzLnZhbGlkYXRlTm90TmFOKGEsIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgbG93ZXIgcmFuZ2UgKE5hTikiKSx0aGlzLnZhbGlkYXRlTm90TmFOKGwsIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgdXBwZXIgcmFuZ2UgKE5hTikiKSx0aGlzLnZhbGlkYXRlUmFuZ2UoYSxsLHZvaWQgMCxlLHQpO2ZvcihsZXQgYz1hO2M8PWw7YysrKXRoaXMuc2V0UGFydChlLGMsaVsxXXx8bil9aGFuZGxlU3RlcHBpbmcodCxlLHIsbil7aWYodC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCJXIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgVyBpcyBub3QgYWxsb3dlZCBpbiBwYXJ0cyB3aXRoIHN0ZXBwaW5nLiIpO2xldCBpPXRoaXMuZXh0cmFjdE50aCh0LGUpLHM9aVswXS5zcGxpdCgiLyIpO2lmKHMubGVuZ3RoIT09Mil0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAnIit0KyInIik7aWYodGhpcy5zbG9wcHlSYW5nZXMpc1swXT09PSIiJiYoc1swXT0iKiIpO2Vsc2V7aWYoc1swXT09PSIiKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIHN0ZXBwaW5nIHdpdGggbWlzc2luZyBwcmVmaXggKCciK3QrIicpIGlzIG5vdCBhbGxvd2VkLiBVc2Ugd2lsZGNhcmQgKCovc3RlcCkgb3IgcmFuZ2UgKG1pbi1tYXgvc3RlcCkgaW5zdGVhZC4iKTtpZihzWzBdIT09IioiKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIHN0ZXBwaW5nIHdpdGggbnVtZXJpYyBwcmVmaXggKCciK3QrIicpIGlzIG5vdCBhbGxvd2VkLiBVc2Ugd2lsZGNhcmQgKCovc3RlcCkgb3IgcmFuZ2UgKG1pbi1tYXgvc3RlcCkgaW5zdGVhZC4iKX1sZXQgYT0wO3NbMF0hPT0iKiImJihhPXBhcnNlSW50KHNbMF0sMTApK3IpO2xldCBsPXBhcnNlSW50KHNbMV0sMTApO3RoaXMudmFsaWRhdGVOb3ROYU4obCwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogKE5hTikiKSx0aGlzLnZhbGlkYXRlUmFuZ2UoMCx0aGlzW2VdLmxlbmd0aC0xLGwsZSx0KTtmb3IobGV0IGM9YTtjPHRoaXNbZV0ubGVuZ3RoO2MrPWwpdGhpcy5zZXRQYXJ0KGUsYyxpWzFdfHxuKX1yZXBsYWNlQWxwaGFEYXlzKHQpe3JldHVybiB0LnJlcGxhY2UoLy1zdW4vZ2ksIi03IikucmVwbGFjZSgvc3VuL2dpLCIwIikucmVwbGFjZSgvbW9uL2dpLCIxIikucmVwbGFjZSgvdHVlL2dpLCIyIikucmVwbGFjZSgvd2VkL2dpLCIzIikucmVwbGFjZSgvdGh1L2dpLCI0IikucmVwbGFjZSgvZnJpL2dpLCI1IikucmVwbGFjZSgvc2F0L2dpLCI2Iil9cmVwbGFjZUFscGhhRGF5c1F1YXJ0eih0KXtyZXR1cm4gdC5yZXBsYWNlKC9zdW4vZ2ksIjEiKS5yZXBsYWNlKC9tb24vZ2ksIjIiKS5yZXBsYWNlKC90dWUvZ2ksIjMiKS5yZXBsYWNlKC93ZWQvZ2ksIjQiKS5yZXBsYWNlKC90aHUvZ2ksIjUiKS5yZXBsYWNlKC9mcmkvZ2ksIjYiKS5yZXBsYWNlKC9zYXQvZ2ksIjciKX1yZXBsYWNlQWxwaGFNb250aHModCl7cmV0dXJuIHQucmVwbGFjZSgvamFuL2dpLCIxIikucmVwbGFjZSgvZmViL2dpLCIyIikucmVwbGFjZSgvbWFyL2dpLCIzIikucmVwbGFjZSgvYXByL2dpLCI0IikucmVwbGFjZSgvbWF5L2dpLCI1IikucmVwbGFjZSgvanVuL2dpLCI2IikucmVwbGFjZSgvanVsL2dpLCI3IikucmVwbGFjZSgvYXVnL2dpLCI4IikucmVwbGFjZSgvc2VwL2dpLCI5IikucmVwbGFjZSgvb2N0L2dpLCIxMCIpLnJlcGxhY2UoL25vdi9naSwiMTEiKS5yZXBsYWNlKC9kZWMvZ2ksIjEyIil9aGFuZGxlTmlja25hbWVzKHQpe2xldCBlPXQudHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoZT09PSJAeWVhcmx5Inx8ZT09PSJAYW5udWFsbHkiKXJldHVybiIwIDAgMSAxICoiO2lmKGU9PT0iQG1vbnRobHkiKXJldHVybiIwIDAgMSAqICoiO2lmKGU9PT0iQHdlZWtseSIpcmV0dXJuIjAgMCAqICogMCI7aWYoZT09PSJAZGFpbHkifHxlPT09IkBtaWRuaWdodCIpcmV0dXJuIjAgMCAqICogKiI7aWYoZT09PSJAaG91cmx5IilyZXR1cm4iMCAqICogKiAqIjtpZihlPT09IkByZWJvb3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBAcmVib290IGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4gVGhpcyBpcyBhbiBldmVudC1iYXNlZCB0cmlnZ2VyIHRoYXQgcmVxdWlyZXMgc3lzdGVtIHN0YXJ0dXAgZGV0ZWN0aW9uLiIpO3JldHVybiB0fXNldE50aFdlZWtkYXlPZk1vbnRoKHQsZSl7aWYodHlwZW9mIGUhPSJudW1iZXIiJiZlLnRvVXBwZXJDYXNlKCk9PT0iTCIpdGhpcy5kYXlPZldlZWtbdF09dGhpcy5kYXlPZldlZWtbdF18MzI7ZWxzZSBpZihlPT09NjMpdGhpcy5kYXlPZldlZWtbdF09NjM7ZWxzZSBpZihlPDYmJmU+MCl0aGlzLmRheU9mV2Vla1t0XT10aGlzLmRheU9mV2Vla1t0XXxLMFtlLTFdO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ3JvblBhdHRlcm46IG50aCB3ZWVrZGF5IG91dCBvZiByYW5nZSwgc2hvdWxkIGJlIDEtNSBvciBMLiBWYWx1ZTogJHtlfSwgVHlwZTogJHt0eXBlb2YgZX1gKX19LG1nPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sSGU9W1sibW9udGgiLCJ5ZWFyIiwwXSxbImRheSIsIm1vbnRoIiwtMV0sWyJob3VyIiwiZGF5IiwwXSxbIm1pbnV0ZSIsImhvdXIiLDBdLFsic2Vjb25kIiwibWludXRlIiwwXV0sc3Q9Y2xhc3MgWjB7c3RhdGlje28odGhpcywicyIpfXR6O21zO3NlY29uZDttaW51dGU7aG91cjtkYXk7bW9udGg7eWVhcjtjb25zdHJ1Y3RvcihlLHIpe2lmKHRoaXMudHo9cixlJiZlIGluc3RhbmNlb2YgRGF0ZSlpZighaXNOYU4oZSkpdGhpcy5mcm9tRGF0ZShlKTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25EYXRlOiBJbnZhbGlkIGRhdGUgcGFzc2VkIHRvIENyb25EYXRlIGNvbnN0cnVjdG9yIik7ZWxzZSBpZihlPT1udWxsKXRoaXMuZnJvbURhdGUobmV3IERhdGUpO2Vsc2UgaWYoZSYmdHlwZW9mIGU9PSJzdHJpbmciKXRoaXMuZnJvbVN0cmluZyhlKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBaMCl0aGlzLmZyb21Dcm9uRGF0ZShlKTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25EYXRlOiBJbnZhbGlkIHR5cGUgKCIrdHlwZW9mIGUrIikgcGFzc2VkIHRvIENyb25EYXRlIGNvbnN0cnVjdG9yIil9Z2V0TGFzdERheU9mTW9udGgoZSxyKXtyZXR1cm4gciE9PTE/bWdbcl06bmV3IERhdGUoRGF0ZS5VVEMoZSxyKzEsMCkpLmdldFVUQ0RhdGUoKX1nZXRMYXN0V2Vla2RheShlLHIpe2xldCBuPXRoaXMuZ2V0TGFzdERheU9mTW9udGgoZSxyKSxpPW5ldyBEYXRlKERhdGUuVVRDKGUscixuKSkuZ2V0VVRDRGF5KCk7cmV0dXJuIGk9PT0wP24tMjppPT09Nj9uLTE6bn1nZXROZWFyZXN0V2Vla2RheShlLHIsbil7bGV0IGk9dGhpcy5nZXRMYXN0RGF5T2ZNb250aChlLHIpO2lmKG4+aSlyZXR1cm4tMTtsZXQgcz1uZXcgRGF0ZShEYXRlLlVUQyhlLHIsbikpLmdldFVUQ0RheSgpO3JldHVybiBzPT09MD9uPT09aT9uLTI6bisxOnM9PT02P249PT0xP24rMjpuLTE6bn1pc050aFdlZWtkYXlPZk1vbnRoKGUscixuLGkpe2xldCBzPW5ldyBEYXRlKERhdGUuVVRDKGUscixuKSkuZ2V0VVRDRGF5KCksYT0wO2ZvcihsZXQgbD0xO2w8PW47bCsrKW5ldyBEYXRlKERhdGUuVVRDKGUscixsKSkuZ2V0VVRDRGF5KCk9PT1zJiZhKys7aWYoaSY2MyYmSzBbYS0xXSZpKXJldHVybiEwO2lmKGkmMzIpe2xldCBsPXRoaXMuZ2V0TGFzdERheU9mTW9udGgoZSxyKTtmb3IobGV0IGM9bisxO2M8PWw7YysrKWlmKG5ldyBEYXRlKERhdGUuVVRDKGUscixjKSkuZ2V0VVRDRGF5KCk9PT1zKXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZyb21EYXRlKGUpe2lmKHRoaXMudHohPT12b2lkIDApaWYodHlwZW9mIHRoaXMudHo9PSJudW1iZXIiKXRoaXMubXM9ZS5nZXRVVENNaWxsaXNlY29uZHMoKSx0aGlzLnNlY29uZD1lLmdldFVUQ1NlY29uZHMoKSx0aGlzLm1pbnV0ZT1lLmdldFVUQ01pbnV0ZXMoKSt0aGlzLnR6LHRoaXMuaG91cj1lLmdldFVUQ0hvdXJzKCksdGhpcy5kYXk9ZS5nZXRVVENEYXRlKCksdGhpcy5tb250aD1lLmdldFVUQ01vbnRoKCksdGhpcy55ZWFyPWUuZ2V0VVRDRnVsbFllYXIoKSx0aGlzLmFwcGx5KCk7ZWxzZSB0cnl7bGV0IHI9cGwoZSx0aGlzLnR6KTt0aGlzLm1zPWUuZ2V0TWlsbGlzZWNvbmRzKCksdGhpcy5zZWNvbmQ9ci5zLHRoaXMubWludXRlPXIuaSx0aGlzLmhvdXI9ci5oLHRoaXMuZGF5PXIuZCx0aGlzLm1vbnRoPXIubS0xLHRoaXMueWVhcj1yLnl9Y2F0Y2gocil7bGV0IG49ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocik7dGhyb3cgbmV3IFR5cGVFcnJvcihgQ3JvbkRhdGU6IEZhaWxlZCB0byBjb252ZXJ0IGRhdGUgdG8gdGltZXpvbmUgJyR7dGhpcy50en0nLiBUaGlzIG1heSBoYXBwZW4gd2l0aCBpbnZhbGlkIHRpbWV6b25lIG5hbWVzIG9yIGRhdGVzLiBPcmlnaW5hbCBlcnJvcjogJHtufWApfWVsc2UgdGhpcy5tcz1lLmdldE1pbGxpc2Vjb25kcygpLHRoaXMuc2Vjb25kPWUuZ2V0U2Vjb25kcygpLHRoaXMubWludXRlPWUuZ2V0TWludXRlcygpLHRoaXMuaG91cj1lLmdldEhvdXJzKCksdGhpcy5kYXk9ZS5nZXREYXRlKCksdGhpcy5tb250aD1lLmdldE1vbnRoKCksdGhpcy55ZWFyPWUuZ2V0RnVsbFllYXIoKX1mcm9tQ3JvbkRhdGUoZSl7dGhpcy50ej1lLnR6LHRoaXMueWVhcj1lLnllYXIsdGhpcy5tb250aD1lLm1vbnRoLHRoaXMuZGF5PWUuZGF5LHRoaXMuaG91cj1lLmhvdXIsdGhpcy5taW51dGU9ZS5taW51dGUsdGhpcy5zZWNvbmQ9ZS5zZWNvbmQsdGhpcy5tcz1lLm1zfWFwcGx5KCl7aWYodGhpcy5tb250aD4xMXx8dGhpcy5tb250aDwwfHx0aGlzLmRheT5tZ1t0aGlzLm1vbnRoXXx8dGhpcy5kYXk8MXx8dGhpcy5ob3VyPjU5fHx0aGlzLm1pbnV0ZT41OXx8dGhpcy5zZWNvbmQ+NTl8fHRoaXMuaG91cjwwfHx0aGlzLm1pbnV0ZTwwfHx0aGlzLnNlY29uZDwwKXtsZXQgZT1uZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRheSx0aGlzLmhvdXIsdGhpcy5taW51dGUsdGhpcy5zZWNvbmQsdGhpcy5tcykpO3JldHVybiB0aGlzLm1zPWUuZ2V0VVRDTWlsbGlzZWNvbmRzKCksdGhpcy5zZWNvbmQ9ZS5nZXRVVENTZWNvbmRzKCksdGhpcy5taW51dGU9ZS5nZXRVVENNaW51dGVzKCksdGhpcy5ob3VyPWUuZ2V0VVRDSG91cnMoKSx0aGlzLmRheT1lLmdldFVUQ0RhdGUoKSx0aGlzLm1vbnRoPWUuZ2V0VVRDTW9udGgoKSx0aGlzLnllYXI9ZS5nZXRVVENGdWxsWWVhcigpLCEwfWVsc2UgcmV0dXJuITF9ZnJvbVN0cmluZyhlKXtpZih0eXBlb2YgdGhpcy50ej09Im51bWJlciIpe2xldCByPVEwKGUpO3RoaXMubXM9ci5nZXRVVENNaWxsaXNlY29uZHMoKSx0aGlzLnNlY29uZD1yLmdldFVUQ1NlY29uZHMoKSx0aGlzLm1pbnV0ZT1yLmdldFVUQ01pbnV0ZXMoKSx0aGlzLmhvdXI9ci5nZXRVVENIb3VycygpLHRoaXMuZGF5PXIuZ2V0VVRDRGF0ZSgpLHRoaXMubW9udGg9ci5nZXRVVENNb250aCgpLHRoaXMueWVhcj1yLmdldFVUQ0Z1bGxZZWFyKCksdGhpcy5hcHBseSgpfWVsc2UgcmV0dXJuIHRoaXMuZnJvbURhdGUoUTAoZSx0aGlzLnR6KSl9ZmluZE5leHQoZSxyLG4saSl7cmV0dXJuIHRoaXMuX2ZpbmRNYXRjaChlLHIsbixpLDEpfV9maW5kTWF0Y2goZSxyLG4saSxzKXtsZXQgYT10aGlzW3JdLGw7bi5sYXN0RGF5T2ZNb250aCYmKGw9dGhpcy5nZXRMYXN0RGF5T2ZNb250aCh0aGlzLnllYXIsdGhpcy5tb250aCkpO2xldCBjPSFuLnN0YXJET1cmJnI9PSJkYXkiP25ldyBEYXRlKERhdGUuVVRDKHRoaXMueWVhcix0aGlzLm1vbnRoLDEsMCwwLDAsMCkpLmdldFVUQ0RheSgpOnZvaWQgMCx1PXRoaXNbcl0raSxmPXM9PT0xP3A9PnA8bltyXS5sZW5ndGg6cD0+cD49MDtmb3IobGV0IHA9dTtmKHApO3ArPXMpe2xldCBoPW5bcl1bcF07aWYocj09PSJkYXkiJiYhaCl7Zm9yKGxldCBkPTA7ZDxuLm5lYXJlc3RXZWVrZGF5cy5sZW5ndGg7ZCsrKWlmKG4ubmVhcmVzdFdlZWtkYXlzW2RdKXtsZXQgbT10aGlzLmdldE5lYXJlc3RXZWVrZGF5KHRoaXMueWVhcix0aGlzLm1vbnRoLGQtaSk7aWYobT09PS0xKWNvbnRpbnVlO2lmKG09PT1wLWkpe2g9MTticmVha319fWlmKHI9PT0iZGF5IiYmbi5sYXN0V2Vla2RheSl7bGV0IGQ9dGhpcy5nZXRMYXN0V2Vla2RheSh0aGlzLnllYXIsdGhpcy5tb250aCk7cC1pPT09ZCYmKGg9MSl9aWYocj09PSJkYXkiJiZuLmxhc3REYXlPZk1vbnRoJiZwLWk9PWwmJihoPTEpLHI9PT0iZGF5IiYmIW4uc3RhckRPVyl7bGV0IGQ9bi5kYXlPZldlZWtbKGMrKHAtaS0xKSklN107aWYoZCYmZCY2MylkPXRoaXMuaXNOdGhXZWVrZGF5T2ZNb250aCh0aGlzLnllYXIsdGhpcy5tb250aCxwLWksZCk/MTowO2Vsc2UgaWYoZCl0aHJvdyBuZXcgRXJyb3IoYENyb25EYXRlOiBJbnZhbGlkIHZhbHVlIGZvciBkYXlPZldlZWsgZW5jb3VudGVyZWQuICR7ZH1gKTtuLnVzZUFuZExvZ2ljP2g9aCYmZDohZS5kb21BbmREb3cmJiFuLnN0YXJET00/aD1ofHxkOmg9aCYmZH1pZihoKXJldHVybiB0aGlzW3JdPXAtaSxhIT09dGhpc1tyXT8yOjF9cmV0dXJuIDN9cmVjdXJzZShlLHIsbil7aWYobj09PTAmJiFlLnN0YXJZZWFyKXtpZih0aGlzLnllYXI+PTAmJnRoaXMueWVhcjxlLnllYXIubGVuZ3RoJiZlLnllYXJbdGhpcy55ZWFyXT09PTApe2xldCBzPS0xO2ZvcihsZXQgYT10aGlzLnllYXIrMTthPGUueWVhci5sZW5ndGgmJmE8MWU0O2ErKylpZihlLnllYXJbYV09PT0xKXtzPWE7YnJlYWt9aWYocz09PS0xKXJldHVybiBudWxsO3RoaXMueWVhcj1zLHRoaXMubW9udGg9MCx0aGlzLmRheT0xLHRoaXMuaG91cj0wLHRoaXMubWludXRlPTAsdGhpcy5zZWNvbmQ9MCx0aGlzLm1zPTB9aWYodGhpcy55ZWFyPj0xZTQpcmV0dXJuIG51bGx9bGV0IGk9dGhpcy5maW5kTmV4dChyLEhlW25dWzBdLGUsSGVbbl1bMl0pO2lmKGk+MSl7bGV0IHM9bisxO2Zvcig7czxIZS5sZW5ndGg7KXRoaXNbSGVbc11bMF1dPS1IZVtzXVsyXSxzKys7aWYoaT09PTMpe2lmKHRoaXNbSGVbbl1bMV1dKyssdGhpc1tIZVtuXVswXV09LUhlW25dWzJdLHRoaXMuYXBwbHkoKSxuPT09MCYmIWUuc3RhclllYXIpe2Zvcig7dGhpcy55ZWFyPj0wJiZ0aGlzLnllYXI8ZS55ZWFyLmxlbmd0aCYmZS55ZWFyW3RoaXMueWVhcl09PT0wJiZ0aGlzLnllYXI8MWU0Oyl0aGlzLnllYXIrKztpZih0aGlzLnllYXI+PTFlNHx8dGhpcy55ZWFyPj1lLnllYXIubGVuZ3RoKXJldHVybiBudWxsfXJldHVybiB0aGlzLnJlY3Vyc2UoZSxyLDApfWVsc2UgaWYodGhpcy5hcHBseSgpKXJldHVybiB0aGlzLnJlY3Vyc2UoZSxyLG4tMSl9cmV0dXJuIG4rPTEsbj49SGUubGVuZ3RoP3RoaXM6KGUuc3RhclllYXI/dGhpcy55ZWFyPj0zZTM6dGhpcy55ZWFyPj0xZTQpP251bGw6dGhpcy5yZWN1cnNlKGUscixuKX1pbmNyZW1lbnQoZSxyLG4pe3JldHVybiB0aGlzLnNlY29uZCs9ci5pbnRlcnZhbCE9PXZvaWQgMCYmci5pbnRlcnZhbD4xJiZuP3IuaW50ZXJ2YWw6MSx0aGlzLm1zPTAsdGhpcy5hcHBseSgpLHRoaXMucmVjdXJzZShlLHIsMCl9ZGVjcmVtZW50KGUscil7cmV0dXJuIHRoaXMuc2Vjb25kLT1yLmludGVydmFsIT09dm9pZCAwJiZyLmludGVydmFsPjE/ci5pbnRlcnZhbDoxLHRoaXMubXM9MCx0aGlzLmFwcGx5KCksdGhpcy5yZWN1cnNlQmFja3dhcmQoZSxyLDAsMCl9cmVjdXJzZUJhY2t3YXJkKGUscixuLGk9MCl7aWYoaT4xZTQpcmV0dXJuIG51bGw7aWYobj09PTAmJiFlLnN0YXJZZWFyKXtpZih0aGlzLnllYXI+PTAmJnRoaXMueWVhcjxlLnllYXIubGVuZ3RoJiZlLnllYXJbdGhpcy55ZWFyXT09PTApe2xldCBhPS0xO2ZvcihsZXQgbD10aGlzLnllYXItMTtsPj0wO2wtLSlpZihlLnllYXJbbF09PT0xKXthPWw7YnJlYWt9aWYoYT09PS0xKXJldHVybiBudWxsO3RoaXMueWVhcj1hLHRoaXMubW9udGg9MTEsdGhpcy5kYXk9MzEsdGhpcy5ob3VyPTIzLHRoaXMubWludXRlPTU5LHRoaXMuc2Vjb25kPTU5LHRoaXMubXM9MH1pZih0aGlzLnllYXI8MClyZXR1cm4gbnVsbH1sZXQgcz10aGlzLmZpbmRQcmV2aW91cyhyLEhlW25dWzBdLGUsSGVbbl1bMl0pO2lmKHM+MSl7bGV0IGE9bisxO2Zvcig7YTxIZS5sZW5ndGg7KXtsZXQgbD1IZVthXVswXSxjPUhlW2FdWzJdLHU9dGhpcy5nZXRNYXhQYXR0ZXJuVmFsdWUobCxlLGMpO3RoaXNbbF09dSxhKyt9aWYocz09PTMpe2lmKHRoaXNbSGVbbl1bMV1dLS0sbj09PTApe2xldCBmPXRoaXMuZ2V0TGFzdERheU9mTW9udGgodGhpcy55ZWFyLHRoaXMubW9udGgpO3RoaXMuZGF5PmYmJih0aGlzLmRheT1mKX1pZihuPT09MSlpZih0aGlzLmRheTw9MCl0aGlzLmRheT0xO2Vsc2V7bGV0IGY9dGhpcy55ZWFyLHA9dGhpcy5tb250aDtmb3IoO3A8MDspcCs9MTIsZi0tO2Zvcig7cD4xMTspcC09MTIsZisrO2xldCBoPXAhPT0xP21nW3BdOm5ldyBEYXRlKERhdGUuVVRDKGYscCsxLDApKS5nZXRVVENEYXRlKCk7dGhpcy5kYXk+aCYmKHRoaXMuZGF5PWgpfXRoaXMuYXBwbHkoKTtsZXQgbD1IZVtuXVswXSxjPUhlW25dWzJdLHU9dGhpcy5nZXRNYXhQYXR0ZXJuVmFsdWUobCxlLGMpO2lmKGw9PT0iZGF5Iil7bGV0IGY9dGhpcy5nZXRMYXN0RGF5T2ZNb250aCh0aGlzLnllYXIsdGhpcy5tb250aCk7dGhpc1tsXT1NYXRoLm1pbih1LGYpfWVsc2UgdGhpc1tsXT11O2lmKHRoaXMuYXBwbHkoKSxuPT09MCl7bGV0IGY9SGVbMV1bMl0scD10aGlzLmdldE1heFBhdHRlcm5WYWx1ZSgiZGF5IixlLGYpLGg9dGhpcy5nZXRMYXN0RGF5T2ZNb250aCh0aGlzLnllYXIsdGhpcy5tb250aCksZD1NYXRoLm1pbihwLGgpO2QhPT10aGlzLmRheSYmKHRoaXMuZGF5PWQsdGhpcy5ob3VyPXRoaXMuZ2V0TWF4UGF0dGVyblZhbHVlKCJob3VyIixlLEhlWzJdWzJdKSx0aGlzLm1pbnV0ZT10aGlzLmdldE1heFBhdHRlcm5WYWx1ZSgibWludXRlIixlLEhlWzNdWzJdKSx0aGlzLnNlY29uZD10aGlzLmdldE1heFBhdHRlcm5WYWx1ZSgic2Vjb25kIixlLEhlWzRdWzJdKSl9aWYobj09PTAmJiFlLnN0YXJZZWFyKXtmb3IoO3RoaXMueWVhcj49MCYmdGhpcy55ZWFyPGUueWVhci5sZW5ndGgmJmUueWVhclt0aGlzLnllYXJdPT09MDspdGhpcy55ZWFyLS07aWYodGhpcy55ZWFyPDApcmV0dXJuIG51bGx9cmV0dXJuIHRoaXMucmVjdXJzZUJhY2t3YXJkKGUsciwwLGkrMSl9ZWxzZSBpZih0aGlzLmFwcGx5KCkpcmV0dXJuIHRoaXMucmVjdXJzZUJhY2t3YXJkKGUscixuLTEsaSsxKX1yZXR1cm4gbis9MSxuPj1IZS5sZW5ndGg/dGhpczp0aGlzLnllYXI8MD9udWxsOnRoaXMucmVjdXJzZUJhY2t3YXJkKGUscixuLGkrMSl9Z2V0TWF4UGF0dGVyblZhbHVlKGUscixuKXtpZihlPT09ImRheSImJnIubGFzdERheU9mTW9udGgpcmV0dXJuIHRoaXMuZ2V0TGFzdERheU9mTW9udGgodGhpcy55ZWFyLHRoaXMubW9udGgpO2lmKGU9PT0iZGF5IiYmIXIuc3RhckRPVylyZXR1cm4gdGhpcy5nZXRMYXN0RGF5T2ZNb250aCh0aGlzLnllYXIsdGhpcy5tb250aCk7Zm9yKGxldCBpPXJbZV0ubGVuZ3RoLTE7aT49MDtpLS0paWYocltlXVtpXSlyZXR1cm4gaS1uO3JldHVybiByW2VdLmxlbmd0aC0xLW59ZmluZFByZXZpb3VzKGUscixuLGkpe3JldHVybiB0aGlzLl9maW5kTWF0Y2goZSxyLG4saSwtMSl9Z2V0RGF0ZShlKXtyZXR1cm4gZXx8dGhpcy50ej09PXZvaWQgMD9uZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRheSx0aGlzLmhvdXIsdGhpcy5taW51dGUsdGhpcy5zZWNvbmQsdGhpcy5tcyk6dHlwZW9mIHRoaXMudHo9PSJudW1iZXIiP25ldyBEYXRlKERhdGUuVVRDKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF5LHRoaXMuaG91cix0aGlzLm1pbnV0ZS10aGlzLnR6LHRoaXMuc2Vjb25kLHRoaXMubXMpKTpKMChkZyh0aGlzLnllYXIsdGhpcy5tb250aCsxLHRoaXMuZGF5LHRoaXMuaG91cix0aGlzLm1pbnV0ZSx0aGlzLnNlY29uZCx0aGlzLnR6KSwhMSl9Z2V0VGltZSgpe3JldHVybiB0aGlzLmdldERhdGUoITEpLmdldFRpbWUoKX1tYXRjaChlLHIpe2lmKCFlLnN0YXJZZWFyJiYodGhpcy55ZWFyPDB8fHRoaXMueWVhcj49ZS55ZWFyLmxlbmd0aHx8ZS55ZWFyW3RoaXMueWVhcl09PT0wKSlyZXR1cm4hMTtmb3IobGV0IG49MDtuPEhlLmxlbmd0aDtuKyspe2xldCBpPUhlW25dWzBdLHM9SGVbbl1bMl0sYT10aGlzW2ldO2lmKGErczwwfHxhK3M+PWVbaV0ubGVuZ3RoKXJldHVybiExO2xldCBsPWVbaV1bYStzXTtpZihpPT09ImRheSIpe2lmKCFsKXtmb3IobGV0IGM9MDtjPGUubmVhcmVzdFdlZWtkYXlzLmxlbmd0aDtjKyspaWYoZS5uZWFyZXN0V2Vla2RheXNbY10pe2xldCB1PXRoaXMuZ2V0TmVhcmVzdFdlZWtkYXkodGhpcy55ZWFyLHRoaXMubW9udGgsYy1zKTtpZih1IT09LTEmJnU9PT1hKXtsPTE7YnJlYWt9fX1pZihlLmxhc3RXZWVrZGF5KXtsZXQgYz10aGlzLmdldExhc3RXZWVrZGF5KHRoaXMueWVhcix0aGlzLm1vbnRoKTthPT09YyYmKGw9MSl9aWYoZS5sYXN0RGF5T2ZNb250aCl7bGV0IGM9dGhpcy5nZXRMYXN0RGF5T2ZNb250aCh0aGlzLnllYXIsdGhpcy5tb250aCk7YT09PWMmJihsPTEpfWlmKCFlLnN0YXJET1cpe2xldCBjPW5ldyBEYXRlKERhdGUuVVRDKHRoaXMueWVhcix0aGlzLm1vbnRoLDEsMCwwLDAsMCkpLmdldFVUQ0RheSgpLHU9ZS5kYXlPZldlZWtbKGMrKGEtMSkpJTddO3UmJnUmNjMmJih1PXRoaXMuaXNOdGhXZWVrZGF5T2ZNb250aCh0aGlzLnllYXIsdGhpcy5tb250aCxhLHUpPzE6MCksZS51c2VBbmRMb2dpYz9sPWwmJnU6IXIuZG9tQW5kRG93JiYhZS5zdGFyRE9NP2w9bHx8dTpsPWwmJnV9fWlmKCFsKXJldHVybiExfXJldHVybiEwfX07ZnVuY3Rpb24gZk4odCl7aWYodD09PXZvaWQgMCYmKHQ9e30pLGRlbGV0ZSB0Lm5hbWUsdC5sZWdhY3lNb2RlIT09dm9pZCAwJiZ0LmRvbUFuZERvdz09PXZvaWQgMD90LmRvbUFuZERvdz0hdC5sZWdhY3lNb2RlOnQuZG9tQW5kRG93PT09dm9pZCAwJiYodC5kb21BbmREb3c9ITEpLHQubGVnYWN5TW9kZT0hdC5kb21BbmREb3csdC5wYXVzZWQ9dC5wYXVzZWQ9PT12b2lkIDA/ITE6dC5wYXVzZWQsdC5tYXhSdW5zPXQubWF4UnVucz09PXZvaWQgMD8xLzA6dC5tYXhSdW5zLHQuY2F0Y2g9dC5jYXRjaD09PXZvaWQgMD8hMTp0LmNhdGNoLHQuaW50ZXJ2YWw9dC5pbnRlcnZhbD09PXZvaWQgMD8wOnBhcnNlSW50KHQuaW50ZXJ2YWwudG9TdHJpbmcoKSwxMCksdC51dGNPZmZzZXQ9dC51dGNPZmZzZXQ9PT12b2lkIDA/dm9pZCAwOnBhcnNlSW50KHQudXRjT2Zmc2V0LnRvU3RyaW5nKCksMTApLHQuZGF5T2Zmc2V0PXQuZGF5T2Zmc2V0PT09dm9pZCAwPzA6cGFyc2VJbnQodC5kYXlPZmZzZXQudG9TdHJpbmcoKSwxMCksdC51bnJlZj10LnVucmVmPT09dm9pZCAwPyExOnQudW5yZWYsdC5tb2RlPXQubW9kZT09PXZvaWQgMD8iYXV0byI6dC5tb2RlLHQuYWx0ZXJuYXRpdmVXZWVrZGF5cz10LmFsdGVybmF0aXZlV2Vla2RheXM9PT12b2lkIDA/ITE6dC5hbHRlcm5hdGl2ZVdlZWtkYXlzLHQuc2xvcHB5UmFuZ2VzPXQuc2xvcHB5UmFuZ2VzPT09dm9pZCAwPyExOnQuc2xvcHB5UmFuZ2VzLCFbImF1dG8iLCI1LXBhcnQiLCI2LXBhcnQiLCI3LXBhcnQiLCI1LW9yLTYtcGFydHMiLCI2LW9yLTctcGFydHMiXS5pbmNsdWRlcyh0Lm1vZGUpKXRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IG1vZGUgbXVzdCBiZSBvbmUgb2YgJ2F1dG8nLCAnNS1wYXJ0JywgJzYtcGFydCcsICc3LXBhcnQnLCAnNS1vci02LXBhcnRzJywgb3IgJzYtb3ItNy1wYXJ0cycuIik7aWYodC5zdGFydEF0JiYodC5zdGFydEF0PW5ldyBzdCh0LnN0YXJ0QXQsdC50aW1lem9uZSkpLHQuc3RvcEF0JiYodC5zdG9wQXQ9bmV3IHN0KHQuc3RvcEF0LHQudGltZXpvbmUpKSx0LmludGVydmFsIT09bnVsbCl7aWYoaXNOYU4odC5pbnRlcnZhbCkpdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogU3VwcGxpZWQgdmFsdWUgZm9yIGludGVydmFsIGlzIG5vdCBhIG51bWJlciIpO2lmKHQuaW50ZXJ2YWw8MCl0aHJvdyBuZXcgRXJyb3IoIkNyb25PcHRpb25zOiBTdXBwbGllZCB2YWx1ZSBmb3IgaW50ZXJ2YWwgY2FuIG5vdCBiZSBuZWdhdGl2ZSIpfWlmKHQudXRjT2Zmc2V0IT09dm9pZCAwKXtpZihpc05hTih0LnV0Y09mZnNldCkpdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogSW52YWxpZCB2YWx1ZSBwYXNzZWQgZm9yIHV0Y09mZnNldCwgc2hvdWxkIGJlIG51bWJlciByZXByZXNlbnRpbmcgbWludXRlcyBvZmZzZXQgZnJvbSBVVEMuIik7aWYodC51dGNPZmZzZXQ8LTg3MHx8dC51dGNPZmZzZXQ+ODcwKXRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IHV0Y09mZnNldCBvdXQgb2YgYm91bmRzLiIpO2lmKHQudXRjT2Zmc2V0IT09dm9pZCAwJiZ0LnRpbWV6b25lKXRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IENvbWJpbmluZyAndXRjT2Zmc2V0JyB3aXRoICd0aW1lem9uZScgaXMgbm90IGFsbG93ZWQuIil9aWYodC51bnJlZiE9PSEwJiZ0LnVucmVmIT09ITEpdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogVW5yZWYgc2hvdWxkIGJlIGVpdGhlciB0cnVlLCBmYWxzZSBvciB1bmRlZmluZWQoZmFsc2UpLiIpO2lmKHQuZGF5T2Zmc2V0IT09dm9pZCAwJiZ0LmRheU9mZnNldCE9PTAmJmlzTmFOKHQuZGF5T2Zmc2V0KSl0aHJvdyBuZXcgRXJyb3IoIkNyb25PcHRpb25zOiBJbnZhbGlkIHZhbHVlIHBhc3NlZCBmb3IgZGF5T2Zmc2V0LCBzaG91bGQgYmUgYSBudW1iZXIgcmVwcmVzZW50aW5nIGRheXMgdG8gb2Zmc2V0LiIpO3JldHVybiB0fW8oZk4sIlIiKTtmdW5jdGlvbiBobCh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPT09IltvYmplY3QgRnVuY3Rpb25dInx8dHlwZW9mIHQ9PSJmdW5jdGlvbiJ8fHQgaW5zdGFuY2VvZiBGdW5jdGlvbn1vKGhsLCJwIik7ZnVuY3Rpb24gcE4odCl7cmV0dXJuIGhsKHQpfW8ocE4sIl8iKTtmdW5jdGlvbiBoTih0KXt0eXBlb2YgRGVubzwidSImJnR5cGVvZiBEZW5vLnVucmVmVGltZXI8InUiP0Rlbm8udW5yZWZUaW1lcih0KTp0JiZ0eXBlb2YgdC51bnJlZjwidSImJnQudW5yZWYoKX1vKGhOLCJ4Iik7dmFyIFgwPTMwKjFlMyxkcz1bXSxldj1jbGFzc3tzdGF0aWN7byh0aGlzLCJFIil9bmFtZTtvcHRpb25zO19zdGF0ZXM7Zm47Z2V0VHooKXtyZXR1cm4gdGhpcy5vcHRpb25zLnRpbWV6b25lfHx0aGlzLm9wdGlvbnMudXRjT2Zmc2V0fWFwcGx5RGF5T2Zmc2V0KHQpe2lmKHRoaXMub3B0aW9ucy5kYXlPZmZzZXQhPT12b2lkIDAmJnRoaXMub3B0aW9ucy5kYXlPZmZzZXQhPT0wKXtsZXQgZT10aGlzLm9wdGlvbnMuZGF5T2Zmc2V0KjI0KjYwKjYwKjFlMztyZXR1cm4gbmV3IERhdGUodC5nZXRUaW1lKCkrZSl9cmV0dXJuIHR9Y29uc3RydWN0b3IodCxlLHIpe2xldCBuLGk7aWYoaGwoZSkpaT1lO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKW49ZTtlbHNlIGlmKGUhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDcm9uOiBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCBmb3Igb3B0aW9uc0luLiBTaG91bGQgYmUgb25lIG9mIGZ1bmN0aW9uLCBvciBvYmplY3QgKG9wdGlvbnMpLiIpO2lmKGhsKHIpKWk9cjtlbHNlIGlmKHR5cGVvZiByPT0ib2JqZWN0IiluPXI7ZWxzZSBpZihyIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ3JvbjogSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgZm9yIGZ1bmNJbi4gU2hvdWxkIGJlIG9uZSBvZiBmdW5jdGlvbiwgb3Igb2JqZWN0IChvcHRpb25zKS4iKTtpZih0aGlzLm5hbWU9bj8ubmFtZSx0aGlzLm9wdGlvbnM9Zk4obiksdGhpcy5fc3RhdGVzPXtraWxsOiExLGJsb2NraW5nOiExLHByZXZpb3VzUnVuOnZvaWQgMCxjdXJyZW50UnVuOnZvaWQgMCxvbmNlOnZvaWQgMCxjdXJyZW50VGltZW91dDp2b2lkIDAsbWF4UnVuczpuP24ubWF4UnVuczp2b2lkIDAscGF1c2VkOm4/bi5wYXVzZWQ6ITEscGF0dGVybjpuZXcgVXUoIiogKiAqICogKiIsdm9pZCAwLHttb2RlOiJhdXRvIn0pfSx0JiYodCBpbnN0YW5jZW9mIERhdGV8fHR5cGVvZiB0PT0ic3RyaW5nIiYmdC5pbmRleE9mKCI6Iik+MCk/dGhpcy5fc3RhdGVzLm9uY2U9bmV3IHN0KHQsdGhpcy5nZXRUeigpKTp0aGlzLl9zdGF0ZXMucGF0dGVybj1uZXcgVXUodCx0aGlzLm9wdGlvbnMudGltZXpvbmUse21vZGU6dGhpcy5vcHRpb25zLm1vZGUsYWx0ZXJuYXRpdmVXZWVrZGF5czp0aGlzLm9wdGlvbnMuYWx0ZXJuYXRpdmVXZWVrZGF5cyxzbG9wcHlSYW5nZXM6dGhpcy5vcHRpb25zLnNsb3BweVJhbmdlc30pLHRoaXMubmFtZSl7aWYoZHMuZmluZChzPT5zLm5hbWU9PT10aGlzLm5hbWUpKXRocm93IG5ldyBFcnJvcigiQ3JvbjogVHJpZWQgdG8gaW5pdGlhbGl6ZSBuZXcgbmFtZWQgam9iICciK3RoaXMubmFtZSsiJywgYnV0IG5hbWUgYWxyZWFkeSB0YWtlbi4iKTtkcy5wdXNoKHRoaXMpfXJldHVybiBpIT09dm9pZCAwJiZwTihpKSYmKHRoaXMuZm49aSx0aGlzLnNjaGVkdWxlKCkpLHRoaXN9bmV4dFJ1bih0KXtsZXQgZT10aGlzLl9uZXh0KHQpO3JldHVybiBlP3RoaXMuYXBwbHlEYXlPZmZzZXQoZS5nZXREYXRlKCExKSk6bnVsbH1uZXh0UnVucyh0LGUpe3RoaXMuX3N0YXRlcy5tYXhSdW5zIT09dm9pZCAwJiZ0PnRoaXMuX3N0YXRlcy5tYXhSdW5zJiYodD10aGlzLl9zdGF0ZXMubWF4UnVucyk7bGV0IHI9ZXx8dGhpcy5fc3RhdGVzLmN1cnJlbnRSdW58fHZvaWQgMDtyZXR1cm4gdGhpcy5fZW51bWVyYXRlUnVucyh0LHIsIm5leHQiKX1wcmV2aW91c1J1bnModCxlKXtyZXR1cm4gdGhpcy5fZW51bWVyYXRlUnVucyh0LGV8fHZvaWQgMCwicHJldmlvdXMiKX1fZW51bWVyYXRlUnVucyh0LGUscil7bGV0IG49W10saT1lP25ldyBzdChlLHRoaXMuZ2V0VHooKSk6bnVsbCxzPXI9PT0ibmV4dCI/dGhpcy5fbmV4dDp0aGlzLl9wcmV2aW91cztmb3IoO3QtLTspe2xldCBhPXMuY2FsbCh0aGlzLGkpO2lmKCFhKWJyZWFrO2xldCBsPWEuZ2V0RGF0ZSghMSk7bi5wdXNoKHRoaXMuYXBwbHlEYXlPZmZzZXQobCkpLGk9YX1yZXR1cm4gbn1tYXRjaCh0KXtpZih0aGlzLl9zdGF0ZXMub25jZSl7bGV0IHI9bmV3IHN0KHQsdGhpcy5nZXRUeigpKTtyLm1zPTA7bGV0IG49bmV3IHN0KHRoaXMuX3N0YXRlcy5vbmNlLHRoaXMuZ2V0VHooKSk7cmV0dXJuIG4ubXM9MCxyLmdldFRpbWUoKT09PW4uZ2V0VGltZSgpfWxldCBlPW5ldyBzdCh0LHRoaXMuZ2V0VHooKSk7cmV0dXJuIGUubXM9MCxlLm1hdGNoKHRoaXMuX3N0YXRlcy5wYXR0ZXJuLHRoaXMub3B0aW9ucyl9Z2V0UGF0dGVybigpe2lmKCF0aGlzLl9zdGF0ZXMub25jZSlyZXR1cm4gdGhpcy5fc3RhdGVzLnBhdHRlcm4/dGhpcy5fc3RhdGVzLnBhdHRlcm4ucGF0dGVybjp2b2lkIDB9Z2V0T25jZSgpe3JldHVybiB0aGlzLl9zdGF0ZXMub25jZT90aGlzLl9zdGF0ZXMub25jZS5nZXREYXRlKCk6bnVsbH1pc1J1bm5pbmcoKXtsZXQgdD10aGlzLm5leHRSdW4odGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4pLGU9IXRoaXMuX3N0YXRlcy5wYXVzZWQscj10aGlzLmZuIT09dm9pZCAwLG49IXRoaXMuX3N0YXRlcy5raWxsO3JldHVybiBlJiZyJiZuJiZ0IT09bnVsbH1pc1N0b3BwZWQoKXtyZXR1cm4gdGhpcy5fc3RhdGVzLmtpbGx9aXNCdXN5KCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5ibG9ja2luZ31jdXJyZW50UnVuKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuP3RoaXMuX3N0YXRlcy5jdXJyZW50UnVuLmdldERhdGUoKTpudWxsfXByZXZpb3VzUnVuKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5wcmV2aW91c1J1bj90aGlzLl9zdGF0ZXMucHJldmlvdXNSdW4uZ2V0RGF0ZSgpOm51bGx9bXNUb05leHQodCl7bGV0IGU9dGhpcy5fbmV4dCh0KTtyZXR1cm4gZT90IGluc3RhbmNlb2Ygc3R8fHQgaW5zdGFuY2VvZiBEYXRlP2UuZ2V0VGltZSgpLXQuZ2V0VGltZSgpOmUuZ2V0VGltZSgpLW5ldyBzdCh0KS5nZXRUaW1lKCk6bnVsbH1zdG9wKCl7dGhpcy5fc3RhdGVzLmtpbGw9ITAsdGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0KTtsZXQgdD1kcy5pbmRleE9mKHRoaXMpO3Q+PTAmJmRzLnNwbGljZSh0LDEpfXBhdXNlKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5wYXVzZWQ9ITAsIXRoaXMuX3N0YXRlcy5raWxsfXJlc3VtZSgpe3JldHVybiB0aGlzLl9zdGF0ZXMucGF1c2VkPSExLCF0aGlzLl9zdGF0ZXMua2lsbH1zY2hlZHVsZSh0KXtpZih0JiZ0aGlzLmZuKXRocm93IG5ldyBFcnJvcigiQ3JvbjogSXQgaXMgbm90IGFsbG93ZWQgdG8gc2NoZWR1bGUgdHdvIGZ1bmN0aW9ucyB1c2luZyB0aGUgc2FtZSBDcm9uZXIgaW5zdGFuY2UuIik7dCYmKHRoaXMuZm49dCk7bGV0IGU9dGhpcy5tc1RvTmV4dCgpLHI9dGhpcy5uZXh0UnVuKHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKTtyZXR1cm4gZT09bnVsbHx8aXNOYU4oZSl8fHI9PT1udWxsP3RoaXM6KGU+WDAmJihlPVgwKSx0aGlzLl9zdGF0ZXMuY3VycmVudFRpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5fY2hlY2tUcmlnZ2VyKHIpLGUpLHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCYmdGhpcy5vcHRpb25zLnVucmVmJiZoTih0aGlzLl9zdGF0ZXMuY3VycmVudFRpbWVvdXQpLHRoaXMpfWFzeW5jIF90cmlnZ2VyKHQpe3RoaXMuX3N0YXRlcy5ibG9ja2luZz0hMCx0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bj1uZXcgc3Qodm9pZCAwLHRoaXMuZ2V0VHooKSk7dHJ5e2lmKHRoaXMub3B0aW9ucy5jYXRjaCl0cnl7dGhpcy5mbiE9PXZvaWQgMCYmYXdhaXQgdGhpcy5mbih0aGlzLHRoaXMub3B0aW9ucy5jb250ZXh0KX1jYXRjaChlKXtpZihobCh0aGlzLm9wdGlvbnMuY2F0Y2gpKXRyeXt0aGlzLm9wdGlvbnMuY2F0Y2goZSx0aGlzKX1jYXRjaHt9fWVsc2UgdGhpcy5mbiE9PXZvaWQgMCYmYXdhaXQgdGhpcy5mbih0aGlzLHRoaXMub3B0aW9ucy5jb250ZXh0KX1maW5hbGx5e3RoaXMuX3N0YXRlcy5wcmV2aW91c1J1bj1uZXcgc3QodCx0aGlzLmdldFR6KCkpLHRoaXMuX3N0YXRlcy5ibG9ja2luZz0hMX19YXN5bmMgdHJpZ2dlcigpe2F3YWl0IHRoaXMuX3RyaWdnZXIoKX1ydW5zTGVmdCgpe3JldHVybiB0aGlzLl9zdGF0ZXMubWF4UnVuc31fY2hlY2tUcmlnZ2VyKHQpe2xldCBlPW5ldyBEYXRlLHI9IXRoaXMuX3N0YXRlcy5wYXVzZWQmJmUuZ2V0VGltZSgpPj10LmdldFRpbWUoKSxuPXRoaXMuX3N0YXRlcy5ibG9ja2luZyYmdGhpcy5vcHRpb25zLnByb3RlY3Q7ciYmIW4/KHRoaXMuX3N0YXRlcy5tYXhSdW5zIT09dm9pZCAwJiZ0aGlzLl9zdGF0ZXMubWF4UnVucy0tLHRoaXMuX3RyaWdnZXIoKSk6ciYmbiYmaGwodGhpcy5vcHRpb25zLnByb3RlY3QpJiZzZXRUaW1lb3V0KCgpPT50aGlzLm9wdGlvbnMucHJvdGVjdCh0aGlzKSwwKSx0aGlzLnNjaGVkdWxlKCl9X25leHQodCl7bGV0IGU9ISEodHx8dGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4pLHI9ITE7IXQmJnRoaXMub3B0aW9ucy5zdGFydEF0JiZ0aGlzLm9wdGlvbnMuaW50ZXJ2YWwmJihbdCxlXT10aGlzLl9jYWxjdWxhdGVQcmV2aW91c1J1bih0LGUpLHI9IXQpLHQ9bmV3IHN0KHQsdGhpcy5nZXRUeigpKSx0aGlzLm9wdGlvbnMuc3RhcnRBdCYmdCYmdC5nZXRUaW1lKCk8dGhpcy5vcHRpb25zLnN0YXJ0QXQuZ2V0VGltZSgpJiYodD10aGlzLm9wdGlvbnMuc3RhcnRBdCk7bGV0IG49dGhpcy5fc3RhdGVzLm9uY2V8fG5ldyBzdCh0LHRoaXMuZ2V0VHooKSk7cmV0dXJuIXImJm4hPT10aGlzLl9zdGF0ZXMub25jZSYmKG49bi5pbmNyZW1lbnQodGhpcy5fc3RhdGVzLnBhdHRlcm4sdGhpcy5vcHRpb25zLGUpKSx0aGlzLl9zdGF0ZXMub25jZSYmdGhpcy5fc3RhdGVzLm9uY2UuZ2V0VGltZSgpPD10LmdldFRpbWUoKXx8bj09PW51bGx8fHRoaXMuX3N0YXRlcy5tYXhSdW5zIT09dm9pZCAwJiZ0aGlzLl9zdGF0ZXMubWF4UnVuczw9MHx8dGhpcy5fc3RhdGVzLmtpbGx8fHRoaXMub3B0aW9ucy5zdG9wQXQmJm4uZ2V0VGltZSgpPj10aGlzLm9wdGlvbnMuc3RvcEF0LmdldFRpbWUoKT9udWxsOm59X3ByZXZpb3VzKHQpe2xldCBlPW5ldyBzdCh0LHRoaXMuZ2V0VHooKSk7dGhpcy5vcHRpb25zLnN0b3BBdCYmZS5nZXRUaW1lKCk+dGhpcy5vcHRpb25zLnN0b3BBdC5nZXRUaW1lKCkmJihlPXRoaXMub3B0aW9ucy5zdG9wQXQpO2xldCByPW5ldyBzdChlLHRoaXMuZ2V0VHooKSk7cmV0dXJuIHRoaXMuX3N0YXRlcy5vbmNlP3RoaXMuX3N0YXRlcy5vbmNlLmdldFRpbWUoKTxlLmdldFRpbWUoKT90aGlzLl9zdGF0ZXMub25jZTpudWxsOihyPXIuZGVjcmVtZW50KHRoaXMuX3N0YXRlcy5wYXR0ZXJuLHRoaXMub3B0aW9ucykscj09PW51bGx8fHRoaXMub3B0aW9ucy5zdGFydEF0JiZyLmdldFRpbWUoKTx0aGlzLm9wdGlvbnMuc3RhcnRBdC5nZXRUaW1lKCk/bnVsbDpyKX1fY2FsY3VsYXRlUHJldmlvdXNSdW4odCxlKXtsZXQgcj1uZXcgc3Qodm9pZCAwLHRoaXMuZ2V0VHooKSksbj10O2lmKHRoaXMub3B0aW9ucy5zdGFydEF0LmdldFRpbWUoKTw9ci5nZXRUaW1lKCkpe249dGhpcy5vcHRpb25zLnN0YXJ0QXQ7bGV0IGk9bi5nZXRUaW1lKCkrdGhpcy5vcHRpb25zLmludGVydmFsKjFlMztmb3IoO2k8PXIuZ2V0VGltZSgpOyluPW5ldyBzdChuLHRoaXMuZ2V0VHooKSkuaW5jcmVtZW50KHRoaXMuX3N0YXRlcy5wYXR0ZXJuLHRoaXMub3B0aW9ucywhMCksaT1uLmdldFRpbWUoKSt0aGlzLm9wdGlvbnMuaW50ZXJ2YWwqMWUzO2U9ITB9cmV0dXJuIG49PT1udWxsJiYobj12b2lkIDApLFtuLGVdfX07dmFyIFRsPXt9O3NlKFRsLHthZGQ6KCk9PnNpLGFkZEJ1c2luZXNzRGF5czooKT0+dGYsYWRkRGF5czooKT0+YXQsYWRkSG91cnM6KCk9PnJmLGFkZElTT1dlZWtZZWFyczooKT0+b2YsYWRkTWlsbGlzZWNvbmRzOigpPT5haSxhZGRNaW51dGVzOigpPT54cyxhZGRNb250aHM6KCk9PmNuLGFkZFF1YXJ0ZXJzOigpPT5icyxhZGRTZWNvbmRzOigpPT5zZixhZGRXZWVrczooKT0+bGksYWRkWWVhcnM6KCk9PmFmLGFyZUludGVydmFsc092ZXJsYXBwaW5nOigpPT5vdixjbGFtcDooKT0+c3YsY2xvc2VzdEluZGV4VG86KCk9PnVmLGNsb3Nlc3RUbzooKT0+YXYsY29tcGFyZUFzYzooKT0+RXQsY29tcGFyZURlc2M6KCk9Pmx2LGNvbnN0cnVjdEZyb206KCk9PiQsY29uc3RydWN0Tm93OigpPT5nZSxkYXlzVG9XZWVrczooKT0+Y3YsZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzOigpPT51dixkaWZmZXJlbmNlSW5DYWxlbmRhckRheXM6KCk9Pmh0LGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzOigpPT5wZixkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzOigpPT5mdixkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRoczooKT0+b28sZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVyczooKT0+d3MsZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrczooKT0+c28sZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFyczooKT0+Y2ksZGlmZmVyZW5jZUluRGF5czooKT0+dnMsZGlmZmVyZW5jZUluSG91cnM6KCk9PmFvLGRpZmZlcmVuY2VJbklTT1dlZWtZZWFyczooKT0+aHYsZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzOigpPT5rcyxkaWZmZXJlbmNlSW5NaW51dGVzOigpPT5sbyxkaWZmZXJlbmNlSW5Nb250aHM6KCk9PnVpLGRpZmZlcmVuY2VJblF1YXJ0ZXJzOigpPT5kdixkaWZmZXJlbmNlSW5TZWNvbmRzOigpPT5obixkaWZmZXJlbmNlSW5XZWVrczooKT0+bXYsZGlmZmVyZW5jZUluWWVhcnM6KCk9Pm1mLGVhY2hEYXlPZkludGVydmFsOigpPT5nZixlYWNoSG91ck9mSW50ZXJ2YWw6KCk9Pmd2LGVhY2hNaW51dGVPZkludGVydmFsOigpPT55dixlYWNoTW9udGhPZkludGVydmFsOigpPT54dixlYWNoUXVhcnRlck9mSW50ZXJ2YWw6KCk9PmJ2LGVhY2hXZWVrT2ZJbnRlcnZhbDooKT0+d3YsZWFjaFdlZWtlbmRPZkludGVydmFsOigpPT5FcyxlYWNoV2Vla2VuZE9mTW9udGg6KCk9PnZ2LGVhY2hXZWVrZW5kT2ZZZWFyOigpPT5rdixlYWNoWWVhck9mSW50ZXJ2YWw6KCk9PlN2LGVuZE9mRGF5OigpPT5TcyxlbmRPZkRlY2FkZTooKT0+VHYsZW5kT2ZIb3VyOigpPT5FdixlbmRPZklTT1dlZWs6KCk9PkR2LGVuZE9mSVNPV2Vla1llYXI6KCk9PkN2LGVuZE9mTWludXRlOigpPT5NdixlbmRPZk1vbnRoOigpPT5UcyxlbmRPZlF1YXJ0ZXI6KCk9Pk92LGVuZE9mU2Vjb25kOigpPT5JdixlbmRPZlRvZGF5OigpPT5fdixlbmRPZlRvbW9ycm93OigpPT5QdixlbmRPZldlZWs6KCk9PnhmLGVuZE9mWWVhcjooKT0+eWYsZW5kT2ZZZXN0ZXJkYXk6KCk9Pk52LGZvcm1hdDooKT0+YmwsZm9ybWF0RGF0ZTooKT0+YmwsZm9ybWF0RGlzdGFuY2U6KCk9PlNmLGZvcm1hdERpc3RhbmNlU3RyaWN0OigpPT5UZixmb3JtYXREaXN0YW5jZVRvTm93OigpPT5xdixmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0OigpPT5Vdixmb3JtYXREdXJhdGlvbjooKT0+VnYsZm9ybWF0SVNPOigpPT5Zdixmb3JtYXRJU085MDc1OigpPT5Hdixmb3JtYXRJU09EdXJhdGlvbjooKT0+UXYsZm9ybWF0UkZDMzMzOTooKT0+SnYsZm9ybWF0UkZDNzIzMTooKT0+S3YsZm9ybWF0UmVsYXRpdmU6KCk9Plh2LGZvcm1hdHRlcnM6KCk9PnlsLGZyb21Vbml4VGltZTooKT0+WnYsZ2V0RGF0ZTooKT0+RWYsZ2V0RGF5OigpPT5kaSxnZXREYXlPZlllYXI6KCk9PndmLGdldERheXNJbk1vbnRoOigpPT5EZixnZXREYXlzSW5ZZWFyOigpPT5layxnZXREZWNhZGU6KCk9PnRrLGdldERlZmF1bHRPcHRpb25zOigpPT5NZixnZXRIb3VyczooKT0+cmssZ2V0SVNPRGF5OigpPT5PZixnZXRJU09XZWVrOigpPT5PcyxnZXRJU09XZWVrWWVhcjooKT0+THQsZ2V0SVNPV2Vla3NJblllYXI6KCk9Pm5rLGdldE1pbGxpc2Vjb25kczooKT0+aWssZ2V0TWludXRlczooKT0+b2ssZ2V0TW9udGg6KCk9PnNrLGdldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzOigpPT5hayxnZXRRdWFydGVyOigpPT5nbCxnZXRTZWNvbmRzOigpPT5sayxnZXRUaW1lOigpPT5jayxnZXRVbml4VGltZTooKT0+dWssZ2V0V2VlazooKT0+SXMsZ2V0V2Vla09mTW9udGg6KCk9PmZrLGdldFdlZWtZZWFyOigpPT5waSxnZXRXZWVrc0luTW9udGg6KCk9PnBrLGdldFllYXI6KCk9PmhrLGhvdXJzVG9NaWxsaXNlY29uZHM6KCk9PmRrLGhvdXJzVG9NaW51dGVzOigpPT5tayxob3Vyc1RvU2Vjb25kczooKT0+Z2ssaW50ZXJ2YWw6KCk9PnlrLGludGVydmFsVG9EdXJhdGlvbjooKT0+eGssaW50bEZvcm1hdDooKT0+YmssaW50bEZvcm1hdERpc3RhbmNlOigpPT53ayxpc0FmdGVyOigpPT52ayxpc0JlZm9yZTooKT0+a2ssaXNEYXRlOigpPT5mZixpc0VxdWFsOigpPT5Tayxpc0V4aXN0czooKT0+VGssaXNGaXJzdERheU9mTW9udGg6KCk9PkVrLGlzRnJpZGF5OigpPT5Eayxpc0Z1dHVyZTooKT0+Q2ssaXNMYXN0RGF5T2ZNb250aDooKT0+ZGYsaXNMZWFwWWVhcjooKT0+Q2YsaXNNYXRjaDooKT0+TWssaXNNb25kYXk6KCk9Pk9rLGlzUGFzdDooKT0+SWssaXNTYW1lRGF5OigpPT5wbixpc1NhbWVIb3VyOigpPT53cCxpc1NhbWVJU09XZWVrOigpPT52cCxpc1NhbWVJU09XZWVrWWVhcjooKT0+X2ssaXNTYW1lTWludXRlOigpPT5rcCxpc1NhbWVNb250aDooKT0+U3AsaXNTYW1lUXVhcnRlcjooKT0+VHAsaXNTYW1lU2Vjb25kOigpPT5FcCxpc1NhbWVXZWVrOigpPT5Scyxpc1NhbWVZZWFyOigpPT5EcCxpc1NhdHVyZGF5OigpPT5adSxpc1N1bmRheTooKT0+ZWYsaXNUaGlzSG91cjooKT0+UGssaXNUaGlzSVNPV2VlazooKT0+TmssaXNUaGlzTWludXRlOigpPT5Sayxpc1RoaXNNb250aDooKT0+TGssaXNUaGlzUXVhcnRlcjooKT0+RmssaXNUaGlzU2Vjb25kOigpPT5Bayxpc1RoaXNXZWVrOigpPT4kayxpc1RoaXNZZWFyOigpPT5Cayxpc1RodXJzZGF5OigpPT56ayxpc1RvZGF5OigpPT5Iayxpc1RvbW9ycm93OigpPT5qayxpc1R1ZXNkYXk6KCk9PldrLGlzVmFsaWQ6KCk9Pnd0LGlzV2VkbmVzZGF5OigpPT5xayxpc1dlZWtlbmQ6KCk9PnVuLGlzV2l0aGluSW50ZXJ2YWw6KCk9PlVrLGlzWWVzdGVyZGF5OigpPT5WayxsYXN0RGF5T2ZEZWNhZGU6KCk9PllrLGxhc3REYXlPZklTT1dlZWs6KCk9PkdrLGxhc3REYXlPZklTT1dlZWtZZWFyOigpPT5RayxsYXN0RGF5T2ZNb250aDooKT0+SWYsbGFzdERheU9mUXVhcnRlcjooKT0+SmssbGFzdERheU9mV2VlazooKT0+Q3AsbGFzdERheU9mWWVhcjooKT0+S2ssbGlnaHRGb3JtYXQ6KCk9PlhrLGxpZ2h0Rm9ybWF0dGVyczooKT0+cnIsbG9uZ0Zvcm1hdHRlcnM6KCk9PmhpLG1heDooKT0+bGYsbWlsbGlzZWNvbmRzOigpPT5aayxtaWxsaXNlY29uZHNUb0hvdXJzOigpPT5lUyxtaWxsaXNlY29uZHNUb01pbnV0ZXM6KCk9PnRTLG1pbGxpc2Vjb25kc1RvU2Vjb25kczooKT0+clMsbWluOigpPT5jZixtaW51dGVzVG9Ib3VyczooKT0+blMsbWludXRlc1RvTWlsbGlzZWNvbmRzOigpPT5pUyxtaW51dGVzVG9TZWNvbmRzOigpPT5vUyxtb250aHNUb1F1YXJ0ZXJzOigpPT5zUyxtb250aHNUb1llYXJzOigpPT5hUyxuZXh0RGF5OigpPT5DdCxuZXh0RnJpZGF5OigpPT5sUyxuZXh0TW9uZGF5OigpPT5jUyxuZXh0U2F0dXJkYXk6KCk9PnVTLG5leHRTdW5kYXk6KCk9PmZTLG5leHRUaHVyc2RheTooKT0+cFMsbmV4dFR1ZXNkYXk6KCk9PmhTLG5leHRXZWRuZXNkYXk6KCk9PmRTLHBhcnNlOigpPT5icCxwYXJzZUlTTzooKT0+Z1MscGFyc2VKU09OOigpPT55UyxwYXJzZXJzOigpPT54cCxwcmV2aW91c0RheTooKT0+TXQscHJldmlvdXNGcmlkYXk6KCk9PnhTLHByZXZpb3VzTW9uZGF5OigpPT5iUyxwcmV2aW91c1NhdHVyZGF5OigpPT53UyxwcmV2aW91c1N1bmRheTooKT0+dlMscHJldmlvdXNUaHVyc2RheTooKT0+a1MscHJldmlvdXNUdWVzZGF5OigpPT5TUyxwcmV2aW91c1dlZG5lc2RheTooKT0+VFMscXVhcnRlcnNUb01vbnRoczooKT0+RVMscXVhcnRlcnNUb1llYXJzOigpPT5EUyxyb3VuZFRvTmVhcmVzdEhvdXJzOigpPT5DUyxyb3VuZFRvTmVhcmVzdE1pbnV0ZXM6KCk9Pk1TLHNlY29uZHNUb0hvdXJzOigpPT5PUyxzZWNvbmRzVG9NaWxsaXNlY29uZHM6KCk9PklTLHNlY29uZHNUb01pbnV0ZXM6KCk9Pl9TLHNldDooKT0+UFMsc2V0RGF0ZTooKT0+TlMsc2V0RGF5OigpPT5taSxzZXREYXlPZlllYXI6KCk9PlJTLHNldERlZmF1bHRPcHRpb25zOigpPT5MUyxzZXRIb3VyczooKT0+RlMsc2V0SVNPRGF5OigpPT5ycCxzZXRJU09XZWVrOigpPT5RZixzZXRJU09XZWVrWWVhcjooKT0+bmYsc2V0TWlsbGlzZWNvbmRzOigpPT5BUyxzZXRNaW51dGVzOigpPT4kUyxzZXRNb250aDooKT0+THMsc2V0UXVhcnRlcjooKT0+QlMsc2V0U2Vjb25kczooKT0+elMsc2V0V2VlazooKT0+WWYsc2V0V2Vla1llYXI6KCk9PkhTLHNldFllYXI6KCk9PmpTLHN0YXJ0T2ZEYXk6KCk9PmZuLHN0YXJ0T2ZEZWNhZGU6KCk9PldTLHN0YXJ0T2ZIb3VyOigpPT53bCxzdGFydE9mSVNPV2VlazooKT0+dHQsc3RhcnRPZklTT1dlZWtZZWFyOigpPT50cixzdGFydE9mTWludXRlOigpPT52bCxzdGFydE9mTW9udGg6KCk9PmZpLHN0YXJ0T2ZRdWFydGVyOigpPT5kbixzdGFydE9mU2Vjb25kOigpPT5rbCxzdGFydE9mVG9kYXk6KCk9PnFTLHN0YXJ0T2ZUb21vcnJvdzooKT0+VVMsc3RhcnRPZldlZWs6KCk9PkZlLHN0YXJ0T2ZXZWVrWWVhcjooKT0+Y28sc3RhcnRPZlllYXI6KCk9PkRzLHN0YXJ0T2ZZZXN0ZXJkYXk6KCk9PlZTLHN1YjooKT0+WVMsc3ViQnVzaW5lc3NEYXlzOigpPT5HUyxzdWJEYXlzOigpPT5naSxzdWJIb3VyczooKT0+UVMsc3ViSVNPV2Vla1llYXJzOigpPT5oZixzdWJNaWxsaXNlY29uZHM6KCk9PkpTLHN1Yk1pbnV0ZXM6KCk9PktTLHN1Yk1vbnRoczooKT0+T3Asc3ViUXVhcnRlcnM6KCk9PlhTLHN1YlNlY29uZHM6KCk9PlpTLHN1YldlZWtzOigpPT5lMSxzdWJZZWFyczooKT0+dDEsdG9EYXRlOigpPT5iLHRyYW5zcG9zZTooKT0+X2Ysd2Vla3NUb0RheXM6KCk9PnIxLHllYXJzVG9EYXlzOigpPT5uMSx5ZWFyc1RvTW9udGhzOigpPT5pMSx5ZWFyc1RvUXVhcnRlcnM6KCk9Pm8xfSk7dmFyIFl1PTcsbWw9MzY1LjI0MjUsZE49TWF0aC5wb3coMTAsOCkqMjQqNjAqNjAqMWUzLFRKPS1kTixsbj02MDQ4ZTUsR3U9ODY0ZTUsVHQ9NmU0LGVyPTM2ZTUsbXM9MWUzLGdnPTUyNTYwMCxvaT00MzIwMCxncz0xNDQwLFF1PTYwLEp1PTMsS3U9MTIsWHU9NCxpbz0zNjAwLHlzPTYwLFZ1PWlvKjI0LHR2PVZ1KjcseWc9VnUqMzY1LjI0MjUseGc9eWcvMTIscnY9eGcqMyxiZz1TeW1ib2wuZm9yKCJjb25zdHJ1Y3REYXRlRnJvbSIpO2Z1bmN0aW9uICQodCxlKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0JiZ0eXBlb2YgdD09Im9iamVjdCImJmJnIGluIHQ/dFtiZ10oZSk6dCBpbnN0YW5jZW9mIERhdGU/bmV3IHQuY29uc3RydWN0b3IoZSk6bmV3IERhdGUoZSl9bygkLCJjb25zdHJ1Y3RGcm9tIik7dmFyIENKPSQ7ZnVuY3Rpb24gYih0LGUpe3JldHVybiAkKGV8fHQsdCl9byhiLCJ0b0RhdGUiKTt2YXIgX0o9YjtmdW5jdGlvbiBhdCh0LGUscil7bGV0IG49Yih0LHI/LmluKTtyZXR1cm4gaXNOYU4oZSk/JChyPy5pbnx8dCxOYU4pOihlJiZuLnNldERhdGUobi5nZXREYXRlKCkrZSksbil9byhhdCwiYWRkRGF5cyIpO3ZhciBGSj1hdDtmdW5jdGlvbiBjbih0LGUscil7bGV0IG49Yih0LHI/LmluKTtpZihpc05hTihlKSlyZXR1cm4gJChyPy5pbnx8dCxOYU4pO2lmKCFlKXJldHVybiBuO2xldCBpPW4uZ2V0RGF0ZSgpLHM9JChyPy5pbnx8dCxuLmdldFRpbWUoKSk7cy5zZXRNb250aChuLmdldE1vbnRoKCkrZSsxLDApO2xldCBhPXMuZ2V0RGF0ZSgpO3JldHVybiBpPj1hP3M6KG4uc2V0RnVsbFllYXIocy5nZXRGdWxsWWVhcigpLHMuZ2V0TW9udGgoKSxpKSxuKX1vKGNuLCJhZGRNb250aHMiKTt2YXIgSEo9Y247ZnVuY3Rpb24gc2kodCxlLHIpe2xldHt5ZWFyczpuPTAsbW9udGhzOmk9MCx3ZWVrczpzPTAsZGF5czphPTAsaG91cnM6bD0wLG1pbnV0ZXM6Yz0wLHNlY29uZHM6dT0wfT1lLGY9Yih0LHI/LmluKSxwPWl8fG4/Y24oZixpK24qMTIpOmYsaD1hfHxzP2F0KHAsYStzKjcpOnAsZD1jK2wqNjAsZz0odStkKjYwKSoxZTM7cmV0dXJuICQocj8uaW58fHQsK2grZyl9byhzaSwiYWRkIik7dmFyIEdKPXNpO2Z1bmN0aW9uIFp1KHQsZSl7cmV0dXJuIGIodCxlPy5pbikuZ2V0RGF5KCk9PT02fW8oWnUsImlzU2F0dXJkYXkiKTt2YXIgWEo9WnU7ZnVuY3Rpb24gZWYodCxlKXtyZXR1cm4gYih0LGU/LmluKS5nZXREYXkoKT09PTB9byhlZiwiaXNTdW5kYXkiKTt2YXIgcks9ZWY7ZnVuY3Rpb24gdW4odCxlKXtsZXQgcj1iKHQsZT8uaW4pLmdldERheSgpO3JldHVybiByPT09MHx8cj09PTZ9byh1biwiaXNXZWVrZW5kIik7dmFyIHNLPXVuO2Z1bmN0aW9uIHRmKHQsZSxyKXtsZXQgbj1iKHQscj8uaW4pLGk9dW4obixyKTtpZihpc05hTihlKSlyZXR1cm4gJChyPy5pbixOYU4pO2xldCBzPW4uZ2V0SG91cnMoKSxhPWU8MD8tMToxLGw9TWF0aC50cnVuYyhlLzUpO24uc2V0RGF0ZShuLmdldERhdGUoKStsKjcpO2xldCBjPU1hdGguYWJzKGUlNSk7Zm9yKDtjPjA7KW4uc2V0RGF0ZShuLmdldERhdGUoKSthKSx1bihuLHIpfHwoYy09MSk7cmV0dXJuIGkmJnVuKG4scikmJmUhPT0wJiYoWnUobixyKSYmbi5zZXREYXRlKG4uZ2V0RGF0ZSgpKyhhPDA/MjotMSkpLGVmKG4scikmJm4uc2V0RGF0ZShuLmdldERhdGUoKSsoYTwwPzE6LTIpKSksbi5zZXRIb3VycyhzKSxufW8odGYsImFkZEJ1c2luZXNzRGF5cyIpO3ZhciBkSz10ZjtmdW5jdGlvbiBhaSh0LGUscil7cmV0dXJuICQocj8uaW58fHQsK2IodCkrZSl9byhhaSwiYWRkTWlsbGlzZWNvbmRzIik7dmFyIGJLPWFpO2Z1bmN0aW9uIHJmKHQsZSxyKXtyZXR1cm4gYWkodCxlKmVyLHIpfW8ocmYsImFkZEhvdXJzIik7dmFyIFRLPXJmO3ZhciBudj17fTtmdW5jdGlvbiBfZSgpe3JldHVybiBudn1vKF9lLCJnZXREZWZhdWx0T3B0aW9ucyIpO2Z1bmN0aW9uIGl2KHQpe252PXR9byhpdiwic2V0RGVmYXVsdE9wdGlvbnMiKTtmdW5jdGlvbiBGZSh0LGUpe2xldCByPV9lKCksbj1lPy53ZWVrU3RhcnRzT24/P2U/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz9yLndlZWtTdGFydHNPbj8/ci5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/MCxpPWIodCxlPy5pbikscz1pLmdldERheSgpLGE9KHM8bj83OjApK3MtbjtyZXR1cm4gaS5zZXREYXRlKGkuZ2V0RGF0ZSgpLWEpLGkuc2V0SG91cnMoMCwwLDAsMCksaX1vKEZlLCJzdGFydE9mV2VlayIpO3ZhciBfSz1GZTtmdW5jdGlvbiB0dCh0LGUpe3JldHVybiBGZSh0LHsuLi5lLHdlZWtTdGFydHNPbjoxfSl9byh0dCwic3RhcnRPZklTT1dlZWsiKTt2YXIgTEs9dHQ7ZnVuY3Rpb24gTHQodCxlKXtsZXQgcj1iKHQsZT8uaW4pLG49ci5nZXRGdWxsWWVhcigpLGk9JChyLDApO2kuc2V0RnVsbFllYXIobisxLDAsNCksaS5zZXRIb3VycygwLDAsMCwwKTtsZXQgcz10dChpKSxhPSQociwwKTthLnNldEZ1bGxZZWFyKG4sMCw0KSxhLnNldEhvdXJzKDAsMCwwLDApO2xldCBsPXR0KGEpO3JldHVybiByLmdldFRpbWUoKT49cy5nZXRUaW1lKCk/bisxOnIuZ2V0VGltZSgpPj1sLmdldFRpbWUoKT9uOm4tMX1vKEx0LCJnZXRJU09XZWVrWWVhciIpO3ZhciBISz1MdDtmdW5jdGlvbiBHZSh0KXtsZXQgZT1iKHQpLHI9bmV3IERhdGUoRGF0ZS5VVEMoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSxlLmdldEhvdXJzKCksZS5nZXRNaW51dGVzKCksZS5nZXRTZWNvbmRzKCksZS5nZXRNaWxsaXNlY29uZHMoKSkpO3JldHVybiByLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSksK3QtK3J9byhHZSwiZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyIpO2Z1bmN0aW9uIHRlKHQsLi4uZSl7bGV0IHI9JC5iaW5kKG51bGwsdHx8ZS5maW5kKG49PnR5cGVvZiBuPT0ib2JqZWN0IikpO3JldHVybiBlLm1hcChyKX1vKHRlLCJub3JtYWxpemVEYXRlcyIpO2Z1bmN0aW9uIGZuKHQsZSl7bGV0IHI9Yih0LGU/LmluKTtyZXR1cm4gci5zZXRIb3VycygwLDAsMCwwKSxyfW8oZm4sInN0YXJ0T2ZEYXkiKTt2YXIgS0s9Zm47ZnVuY3Rpb24gaHQodCxlLHIpe2xldFtuLGldPXRlKHI/LmluLHQsZSkscz1mbihuKSxhPWZuKGkpLGw9K3MtR2UocyksYz0rYS1HZShhKTtyZXR1cm4gTWF0aC5yb3VuZCgobC1jKS9HdSl9byhodCwiZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzIik7dmFyIGlYPWh0O2Z1bmN0aW9uIHRyKHQsZSl7bGV0IHI9THQodCxlKSxuPSQoZT8uaW58fHQsMCk7cmV0dXJuIG4uc2V0RnVsbFllYXIociwwLDQpLG4uc2V0SG91cnMoMCwwLDAsMCksdHQobil9byh0ciwic3RhcnRPZklTT1dlZWtZZWFyIik7dmFyIHVYPXRyO2Z1bmN0aW9uIG5mKHQsZSxyKXtsZXQgbj1iKHQscj8uaW4pLGk9aHQobix0cihuLHIpKSxzPSQocj8uaW58fHQsMCk7cmV0dXJuIHMuc2V0RnVsbFllYXIoZSwwLDQpLHMuc2V0SG91cnMoMCwwLDAsMCksbj10cihzKSxuLnNldERhdGUobi5nZXREYXRlKCkraSksbn1vKG5mLCJzZXRJU09XZWVrWWVhciIpO3ZhciB5WD1uZjtmdW5jdGlvbiBvZih0LGUscil7cmV0dXJuIG5mKHQsTHQodCxyKStlLHIpfW8ob2YsImFkZElTT1dlZWtZZWFycyIpO3ZhciBrWD1vZjtmdW5jdGlvbiB4cyh0LGUscil7bGV0IG49Yih0LHI/LmluKTtyZXR1cm4gbi5zZXRUaW1lKG4uZ2V0VGltZSgpK2UqVHQpLG59byh4cywiYWRkTWludXRlcyIpO3ZhciBDWD14cztmdW5jdGlvbiBicyh0LGUscil7cmV0dXJuIGNuKHQsZSozLHIpfW8oYnMsImFkZFF1YXJ0ZXJzIik7dmFyIF9YPWJzO2Z1bmN0aW9uIHNmKHQsZSxyKXtyZXR1cm4gYWkodCxlKjFlMyxyKX1vKHNmLCJhZGRTZWNvbmRzIik7dmFyIExYPXNmO2Z1bmN0aW9uIGxpKHQsZSxyKXtyZXR1cm4gYXQodCxlKjcscil9byhsaSwiYWRkV2Vla3MiKTt2YXIgQlg9bGk7ZnVuY3Rpb24gYWYodCxlLHIpe3JldHVybiBjbih0LGUqMTIscil9byhhZiwiYWRkWWVhcnMiKTt2YXIgV1g9YWY7ZnVuY3Rpb24gb3YodCxlLHIpe2xldFtuLGldPVsrYih0LnN0YXJ0LHI/LmluKSwrYih0LmVuZCxyPy5pbildLnNvcnQoKGwsYyk9PmwtYyksW3MsYV09WytiKGUuc3RhcnQscj8uaW4pLCtiKGUuZW5kLHI/LmluKV0uc29ydCgobCxjKT0+bC1jKTtyZXR1cm4gcj8uaW5jbHVzaXZlP248PWEmJnM8PWk6bjxhJiZzPGl9byhvdiwiYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmciKTt2YXIgWVg9b3Y7ZnVuY3Rpb24gbGYodCxlKXtsZXQgcixuPWU/LmluO3JldHVybiB0LmZvckVhY2goaT0+eyFuJiZ0eXBlb2YgaT09Im9iamVjdCImJihuPSQuYmluZChudWxsLGkpKTtsZXQgcz1iKGksbik7KCFyfHxyPHN8fGlzTmFOKCtzKSkmJihyPXMpfSksJChuLHJ8fE5hTil9byhsZiwibWF4Iik7dmFyIFhYPWxmO2Z1bmN0aW9uIGNmKHQsZSl7bGV0IHIsbj1lPy5pbjtyZXR1cm4gdC5mb3JFYWNoKGk9PnshbiYmdHlwZW9mIGk9PSJvYmplY3QiJiYobj0kLmJpbmQobnVsbCxpKSk7bGV0IHM9YihpLG4pOyghcnx8cj5zfHxpc05hTigrcykpJiYocj1zKX0pLCQobixyfHxOYU4pfW8oY2YsIm1pbiIpO3ZhciBuWj1jZjtmdW5jdGlvbiBzdih0LGUscil7bGV0W24saSxzXT10ZShyPy5pbix0LGUuc3RhcnQsZS5lbmQpO3JldHVybiBjZihbbGYoW24saV0sciksc10scil9byhzdiwiY2xhbXAiKTt2YXIgY1o9c3Y7ZnVuY3Rpb24gdWYodCxlKXtsZXQgcj0rYih0KTtpZihpc05hTihyKSlyZXR1cm4gTmFOO2xldCBuLGk7cmV0dXJuIGUuZm9yRWFjaCgocyxhKT0+e2xldCBsPWIocyk7aWYoaXNOYU4oK2wpKXtuPU5hTixpPU5hTjtyZXR1cm59bGV0IGM9TWF0aC5hYnMoci0rbCk7KG49PW51bGx8fGM8aSkmJihuPWEsaT1jKX0pLG59byh1ZiwiY2xvc2VzdEluZGV4VG8iKTt2YXIgaFo9dWY7ZnVuY3Rpb24gYXYodCxlLHIpe2xldFtuLC4uLmldPXRlKHI/LmluLHQsLi4uZSkscz11ZihuLGkpO2lmKHR5cGVvZiBzPT0ibnVtYmVyIiYmaXNOYU4ocykpcmV0dXJuICQobixOYU4pO2lmKHMhPT12b2lkIDApcmV0dXJuIGlbc119byhhdiwiY2xvc2VzdFRvIik7dmFyIGJaPWF2O2Z1bmN0aW9uIEV0KHQsZSl7bGV0IHI9K2IodCktK2IoZSk7cmV0dXJuIHI8MD8tMTpyPjA/MTpyfW8oRXQsImNvbXBhcmVBc2MiKTt2YXIgU1o9RXQ7ZnVuY3Rpb24gbHYodCxlKXtsZXQgcj0rYih0KS0rYihlKTtyZXR1cm4gcj4wPy0xOnI8MD8xOnJ9byhsdiwiY29tcGFyZURlc2MiKTt2YXIgQ1o9bHY7ZnVuY3Rpb24gZ2UodCl7cmV0dXJuICQodCxEYXRlLm5vdygpKX1vKGdlLCJjb25zdHJ1Y3ROb3ciKTt2YXIgX1o9Z2U7ZnVuY3Rpb24gY3YodCl7bGV0IGU9TWF0aC50cnVuYyh0LzcpO3JldHVybiBlPT09MD8wOmV9byhjdiwiZGF5c1RvV2Vla3MiKTt2YXIgTFo9Y3Y7ZnVuY3Rpb24gcG4odCxlLHIpe2xldFtuLGldPXRlKHI/LmluLHQsZSk7cmV0dXJuK2ZuKG4pPT0rZm4oaSl9byhwbiwiaXNTYW1lRGF5Iik7dmFyIHpaPXBuO2Z1bmN0aW9uIGZmKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZXx8dHlwZW9mIHQ9PSJvYmplY3QiJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9PT0iW29iamVjdCBEYXRlXSJ9byhmZiwiaXNEYXRlIik7dmFyIFdaPWZmO2Z1bmN0aW9uIHd0KHQpe3JldHVybiEoIWZmKHQpJiZ0eXBlb2YgdCE9Im51bWJlciJ8fGlzTmFOKCtiKHQpKSl9byh3dCwiaXNWYWxpZCIpO3ZhciBHWj13dDtmdW5jdGlvbiB1dih0LGUscil7bGV0W24saV09dGUocj8uaW4sdCxlKTtpZighd3Qobil8fCF3dChpKSlyZXR1cm4gTmFOO2xldCBzPWh0KG4saSksYT1zPDA/LTE6MSxsPU1hdGgudHJ1bmMocy83KSxjPWwqNSx1PWF0KGksbCo3KTtmb3IoOyFwbihuLHUpOyljKz11bih1LHIpPzA6YSx1PWF0KHUsYSk7cmV0dXJuIGM9PT0wPzA6Y31vKHV2LCJkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMiKTt2YXIgbmVlPXV2O2Z1bmN0aW9uIHBmKHQsZSxyKXtsZXRbbixpXT10ZShyPy5pbix0LGUpO3JldHVybiBMdChuLHIpLUx0KGkscil9byhwZiwiZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnMiKTt2YXIgbGVlPXBmO2Z1bmN0aW9uIGZ2KHQsZSxyKXtsZXRbbixpXT10ZShyPy5pbix0LGUpLHM9dHQobiksYT10dChpKSxsPStzLUdlKHMpLGM9K2EtR2UoYSk7cmV0dXJuIE1hdGgucm91bmQoKGwtYykvbG4pfW8oZnYsImRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3MiKTt2YXIgbWVlPWZ2O2Z1bmN0aW9uIG9vKHQsZSxyKXtsZXRbbixpXT10ZShyPy5pbix0LGUpLHM9bi5nZXRGdWxsWWVhcigpLWkuZ2V0RnVsbFllYXIoKSxhPW4uZ2V0TW9udGgoKS1pLmdldE1vbnRoKCk7cmV0dXJuIHMqMTIrYX1vKG9vLCJkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyIpO3ZhciBiZWU9b287ZnVuY3Rpb24gZ2wodCxlKXtsZXQgcj1iKHQsZT8uaW4pO3JldHVybiBNYXRoLnRydW5jKHIuZ2V0TW9udGgoKS8zKSsxfW8oZ2wsImdldFF1YXJ0ZXIiKTt2YXIgU2VlPWdsO2Z1bmN0aW9uIHdzKHQsZSxyKXtsZXRbbixpXT10ZShyPy5pbix0LGUpLHM9bi5nZXRGdWxsWWVhcigpLWkuZ2V0RnVsbFllYXIoKSxhPWdsKG4pLWdsKGkpO3JldHVybiBzKjQrYX1vKHdzLCJkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzIik7dmFyIE1lZT13cztmdW5jdGlvbiBzbyh0LGUscil7bGV0W24saV09dGUocj8uaW4sdCxlKSxzPUZlKG4sciksYT1GZShpLHIpLGw9K3MtR2UocyksYz0rYS1HZShhKTtyZXR1cm4gTWF0aC5yb3VuZCgobC1jKS9sbil9byhzbywiZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyIpO3ZhciBMZWU9c287ZnVuY3Rpb24gY2kodCxlLHIpe2xldFtuLGldPXRlKHI/LmluLHQsZSk7cmV0dXJuIG4uZ2V0RnVsbFllYXIoKS1pLmdldEZ1bGxZZWFyKCl9byhjaSwiZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyIpO3ZhciBCZWU9Y2k7ZnVuY3Rpb24gdnModCxlLHIpe2xldFtuLGldPXRlKHI/LmluLHQsZSkscz1wdihuLGkpLGE9TWF0aC5hYnMoaHQobixpKSk7bi5zZXREYXRlKG4uZ2V0RGF0ZSgpLXMqYSk7bGV0IGw9KyhwdihuLGkpPT09LXMpLGM9cyooYS1sKTtyZXR1cm4gYz09PTA/MDpjfW8odnMsImRpZmZlcmVuY2VJbkRheXMiKTtmdW5jdGlvbiBwdih0LGUpe2xldCByPXQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl8fHQuZ2V0TW9udGgoKS1lLmdldE1vbnRoKCl8fHQuZ2V0RGF0ZSgpLWUuZ2V0RGF0ZSgpfHx0LmdldEhvdXJzKCktZS5nZXRIb3VycygpfHx0LmdldE1pbnV0ZXMoKS1lLmdldE1pbnV0ZXMoKXx8dC5nZXRTZWNvbmRzKCktZS5nZXRTZWNvbmRzKCl8fHQuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRNaWxsaXNlY29uZHMoKTtyZXR1cm4gcjwwPy0xOnI+MD8xOnJ9byhwdiwiY29tcGFyZUxvY2FsQXNjIik7dmFyIHFlZT12cztmdW5jdGlvbiBEdCh0KXtyZXR1cm4gZT0+e2xldCBuPSh0P01hdGhbdF06TWF0aC50cnVuYykoZSk7cmV0dXJuIG49PT0wPzA6bn19byhEdCwiZ2V0Um91bmRpbmdNZXRob2QiKTtmdW5jdGlvbiBhbyh0LGUscil7bGV0W24saV09dGUocj8uaW4sdCxlKSxzPSgrbi0raSkvZXI7cmV0dXJuIER0KHI/LnJvdW5kaW5nTWV0aG9kKShzKX1vKGFvLCJkaWZmZXJlbmNlSW5Ib3VycyIpO3ZhciBYZWU9YW87ZnVuY3Rpb24gaGYodCxlLHIpe3JldHVybiBvZih0LC1lLHIpfW8oaGYsInN1YklTT1dlZWtZZWFycyIpO3ZhciBydGU9aGY7ZnVuY3Rpb24gaHYodCxlLHIpe2xldFtuLGldPXRlKHI/LmluLHQsZSkscz1FdChuLGkpLGE9TWF0aC5hYnMocGYobixpLHIpKSxsPWhmKG4scyphLHIpLGM9KyhFdChsLGkpPT09LXMpLHU9cyooYS1jKTtyZXR1cm4gdT09PTA/MDp1fW8oaHYsImRpZmZlcmVuY2VJbklTT1dlZWtZZWFycyIpO3ZhciBjdGU9aHY7ZnVuY3Rpb24ga3ModCxlKXtyZXR1cm4rYih0KS0rYihlKX1vKGtzLCJkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMiKTt2YXIgaHRlPWtzO2Z1bmN0aW9uIGxvKHQsZSxyKXtsZXQgbj1rcyh0LGUpL1R0O3JldHVybiBEdChyPy5yb3VuZGluZ01ldGhvZCkobil9byhsbywiZGlmZmVyZW5jZUluTWludXRlcyIpO3ZhciBidGU9bG87ZnVuY3Rpb24gU3ModCxlKXtsZXQgcj1iKHQsZT8uaW4pO3JldHVybiByLnNldEhvdXJzKDIzLDU5LDU5LDk5OSkscn1vKFNzLCJlbmRPZkRheSIpO3ZhciBTdGU9U3M7ZnVuY3Rpb24gVHModCxlKXtsZXQgcj1iKHQsZT8uaW4pLG49ci5nZXRNb250aCgpO3JldHVybiByLnNldEZ1bGxZZWFyKHIuZ2V0RnVsbFllYXIoKSxuKzEsMCksci5zZXRIb3VycygyMyw1OSw1OSw5OTkpLHJ9byhUcywiZW5kT2ZNb250aCIpO3ZhciBDdGU9VHM7ZnVuY3Rpb24gZGYodCxlKXtsZXQgcj1iKHQsZT8uaW4pO3JldHVybitTcyhyLGUpPT0rVHMocixlKX1vKGRmLCJpc0xhc3REYXlPZk1vbnRoIik7dmFyIE50ZT1kZjtmdW5jdGlvbiB1aSh0LGUscil7bGV0W24saSxzXT10ZShyPy5pbix0LHQsZSksYT1FdChpLHMpLGw9TWF0aC5hYnMob28oaSxzKSk7aWYobDwxKXJldHVybiAwO2kuZ2V0TW9udGgoKT09PTEmJmkuZ2V0RGF0ZSgpPjI3JiZpLnNldERhdGUoMzApLGkuc2V0TW9udGgoaS5nZXRNb250aCgpLWEqbCk7bGV0IGM9RXQoaSxzKT09PS1hO2RmKG4pJiZsPT09MSYmRXQobixzKT09PTEmJihjPSExKTtsZXQgdT1hKihsLStjKTtyZXR1cm4gdT09PTA/MDp1fW8odWksImRpZmZlcmVuY2VJbk1vbnRocyIpO3ZhciB6dGU9dWk7ZnVuY3Rpb24gZHYodCxlLHIpe2xldCBuPXVpKHQsZSxyKS8zO3JldHVybiBEdChyPy5yb3VuZGluZ01ldGhvZCkobil9byhkdiwiZGlmZmVyZW5jZUluUXVhcnRlcnMiKTt2YXIgVXRlPWR2O2Z1bmN0aW9uIGhuKHQsZSxyKXtsZXQgbj1rcyh0LGUpLzFlMztyZXR1cm4gRHQocj8ucm91bmRpbmdNZXRob2QpKG4pfW8oaG4sImRpZmZlcmVuY2VJblNlY29uZHMiKTt2YXIgSnRlPWhuO2Z1bmN0aW9uIG12KHQsZSxyKXtsZXQgbj12cyh0LGUscikvNztyZXR1cm4gRHQocj8ucm91bmRpbmdNZXRob2QpKG4pfW8obXYsImRpZmZlcmVuY2VJbldlZWtzIik7dmFyIHRyZT1tdjtmdW5jdGlvbiBtZih0LGUscil7bGV0W24saV09dGUocj8uaW4sdCxlKSxzPUV0KG4saSksYT1NYXRoLmFicyhjaShuLGkpKTtuLnNldEZ1bGxZZWFyKDE1ODQpLGkuc2V0RnVsbFllYXIoMTU4NCk7bGV0IGw9RXQobixpKT09PS1zLGM9cyooYS0rbCk7cmV0dXJuIGM9PT0wPzA6Y31vKG1mLCJkaWZmZXJlbmNlSW5ZZWFycyIpO3ZhciBhcmU9bWY7ZnVuY3Rpb24gZHQodCxlKXtsZXRbcixuXT10ZSh0LGUuc3RhcnQsZS5lbmQpO3JldHVybntzdGFydDpyLGVuZDpufX1vKGR0LCJub3JtYWxpemVJbnRlcnZhbCIpO2Z1bmN0aW9uIGdmKHQsZSl7bGV0e3N0YXJ0OnIsZW5kOm59PWR0KGU/LmluLHQpLGk9K3I+K24scz1pPytyOituLGE9aT9uOnI7YS5zZXRIb3VycygwLDAsMCwwKTtsZXQgbD1lPy5zdGVwPz8xO2lmKCFsKXJldHVybltdO2w8MCYmKGw9LWwsaT0haSk7bGV0IGM9W107Zm9yKDsrYTw9czspYy5wdXNoKCQocixhKSksYS5zZXREYXRlKGEuZ2V0RGF0ZSgpK2wpLGEuc2V0SG91cnMoMCwwLDAsMCk7cmV0dXJuIGk/Yy5yZXZlcnNlKCk6Y31vKGdmLCJlYWNoRGF5T2ZJbnRlcnZhbCIpO3ZhciBtcmU9Z2Y7ZnVuY3Rpb24gZ3YodCxlKXtsZXR7c3RhcnQ6cixlbmQ6bn09ZHQoZT8uaW4sdCksaT0rcj4rbixzPWk/K3I6K24sYT1pP246cjthLnNldE1pbnV0ZXMoMCwwLDApO2xldCBsPWU/LnN0ZXA/PzE7aWYoIWwpcmV0dXJuW107bDwwJiYobD0tbCxpPSFpKTtsZXQgYz1bXTtmb3IoOythPD1zOyljLnB1c2goJChyLGEpKSxhLnNldEhvdXJzKGEuZ2V0SG91cnMoKStsKTtyZXR1cm4gaT9jLnJldmVyc2UoKTpjfW8oZ3YsImVhY2hIb3VyT2ZJbnRlcnZhbCIpO3ZhciB3cmU9Z3Y7ZnVuY3Rpb24geXYodCxlKXtsZXR7c3RhcnQ6cixlbmQ6bn09ZHQoZT8uaW4sdCk7ci5zZXRTZWNvbmRzKDAsMCk7bGV0IGk9K3I+K24scz1pPytyOituLGE9aT9uOnIsbD1lPy5zdGVwPz8xO2lmKCFsKXJldHVybltdO2w8MCYmKGw9LWwsaT0haSk7bGV0IGM9W107Zm9yKDsrYTw9czspYy5wdXNoKCQocixhKSksYT14cyhhLGwpO3JldHVybiBpP2MucmV2ZXJzZSgpOmN9byh5diwiZWFjaE1pbnV0ZU9mSW50ZXJ2YWwiKTt2YXIgRHJlPXl2O2Z1bmN0aW9uIHh2KHQsZSl7bGV0e3N0YXJ0OnIsZW5kOm59PWR0KGU/LmluLHQpLGk9K3I+K24scz1pPytyOituLGE9aT9uOnI7YS5zZXRIb3VycygwLDAsMCwwKSxhLnNldERhdGUoMSk7bGV0IGw9ZT8uc3RlcD8/MTtpZighbClyZXR1cm5bXTtsPDAmJihsPS1sLGk9IWkpO2xldCBjPVtdO2Zvcig7K2E8PXM7KWMucHVzaCgkKHIsYSkpLGEuc2V0TW9udGgoYS5nZXRNb250aCgpK2wpO3JldHVybiBpP2MucmV2ZXJzZSgpOmN9byh4diwiZWFjaE1vbnRoT2ZJbnRlcnZhbCIpO3ZhciBfcmU9eHY7ZnVuY3Rpb24gZG4odCxlKXtsZXQgcj1iKHQsZT8uaW4pLG49ci5nZXRNb250aCgpLGk9bi1uJTM7cmV0dXJuIHIuc2V0TW9udGgoaSwxKSxyLnNldEhvdXJzKDAsMCwwLDApLHJ9byhkbiwic3RhcnRPZlF1YXJ0ZXIiKTt2YXIgTHJlPWRuO2Z1bmN0aW9uIGJ2KHQsZSl7bGV0e3N0YXJ0OnIsZW5kOm59PWR0KGU/LmluLHQpLGk9K3I+K24scz1pPytkbihyKTorZG4obiksYT1pP2RuKG4pOmRuKHIpLGw9ZT8uc3RlcD8/MTtpZighbClyZXR1cm5bXTtsPDAmJihsPS1sLGk9IWkpO2xldCBjPVtdO2Zvcig7K2E8PXM7KWMucHVzaCgkKHIsYSkpLGE9YnMoYSxsKTtyZXR1cm4gaT9jLnJldmVyc2UoKTpjfW8oYnYsImVhY2hRdWFydGVyT2ZJbnRlcnZhbCIpO3ZhciBqcmU9YnY7ZnVuY3Rpb24gd3YodCxlKXtsZXR7c3RhcnQ6cixlbmQ6bn09ZHQoZT8uaW4sdCksaT0rcj4rbixzPWk/RmUobixlKTpGZShyLGUpLGE9aT9GZShyLGUpOkZlKG4sZSk7cy5zZXRIb3VycygxNSksYS5zZXRIb3VycygxNSk7bGV0IGw9K2EuZ2V0VGltZSgpLGM9cyx1PWU/LnN0ZXA/PzE7aWYoIXUpcmV0dXJuW107dTwwJiYodT0tdSxpPSFpKTtsZXQgZj1bXTtmb3IoOytjPD1sOyljLnNldEhvdXJzKDApLGYucHVzaCgkKHIsYykpLGM9bGkoYyx1KSxjLnNldEhvdXJzKDE1KTtyZXR1cm4gaT9mLnJldmVyc2UoKTpmfW8od3YsImVhY2hXZWVrT2ZJbnRlcnZhbCIpO3ZhciBRcmU9d3Y7ZnVuY3Rpb24gRXModCxlKXtsZXR7c3RhcnQ6cixlbmQ6bn09ZHQoZT8uaW4sdCksaT1nZih7c3RhcnQ6cixlbmQ6bn0sZSkscz1bXSxhPTA7Zm9yKDthPGkubGVuZ3RoOyl7bGV0IGw9aVthKytdO3VuKGwpJiZzLnB1c2goJChyLGwpKX1yZXR1cm4gc31vKEVzLCJlYWNoV2Vla2VuZE9mSW50ZXJ2YWwiKTt2YXIgcm5lPUVzO2Z1bmN0aW9uIGZpKHQsZSl7bGV0IHI9Yih0LGU/LmluKTtyZXR1cm4gci5zZXREYXRlKDEpLHIuc2V0SG91cnMoMCwwLDAsMCkscn1vKGZpLCJzdGFydE9mTW9udGgiKTt2YXIgc25lPWZpO2Z1bmN0aW9uIHZ2KHQsZSl7bGV0IHI9ZmkodCxlKSxuPVRzKHQsZSk7cmV0dXJuIEVzKHtzdGFydDpyLGVuZDpufSxlKX1vKHZ2LCJlYWNoV2Vla2VuZE9mTW9udGgiKTt2YXIgcG5lPXZ2O2Z1bmN0aW9uIHlmKHQsZSl7bGV0IHI9Yih0LGU/LmluKSxuPXIuZ2V0RnVsbFllYXIoKTtyZXR1cm4gci5zZXRGdWxsWWVhcihuKzEsMCwwKSxyLnNldEhvdXJzKDIzLDU5LDU5LDk5OSkscn1vKHlmLCJlbmRPZlllYXIiKTt2YXIgZ25lPXlmO2Z1bmN0aW9uIERzKHQsZSl7bGV0IHI9Yih0LGU/LmluKTtyZXR1cm4gci5zZXRGdWxsWWVhcihyLmdldEZ1bGxZZWFyKCksMCwxKSxyLnNldEhvdXJzKDAsMCwwLDApLHJ9byhEcywic3RhcnRPZlllYXIiKTt2YXIgd25lPURzO2Z1bmN0aW9uIGt2KHQsZSl7bGV0IHI9RHModCxlKSxuPXlmKHQsZSk7cmV0dXJuIEVzKHtzdGFydDpyLGVuZDpufSxlKX1vKGt2LCJlYWNoV2Vla2VuZE9mWWVhciIpO3ZhciBEbmU9a3Y7ZnVuY3Rpb24gU3YodCxlKXtsZXR7c3RhcnQ6cixlbmQ6bn09ZHQoZT8uaW4sdCksaT0rcj4rbixzPWk/K3I6K24sYT1pP246cjthLnNldEhvdXJzKDAsMCwwLDApLGEuc2V0TW9udGgoMCwxKTtsZXQgbD1lPy5zdGVwPz8xO2lmKCFsKXJldHVybltdO2w8MCYmKGw9LWwsaT0haSk7bGV0IGM9W107Zm9yKDsrYTw9czspYy5wdXNoKCQocixhKSksYS5zZXRGdWxsWWVhcihhLmdldEZ1bGxZZWFyKCkrbCk7cmV0dXJuIGk/Yy5yZXZlcnNlKCk6Y31vKFN2LCJlYWNoWWVhck9mSW50ZXJ2YWwiKTt2YXIgX25lPVN2O2Z1bmN0aW9uIFR2KHQsZSl7bGV0IHI9Yih0LGU/LmluKSxuPXIuZ2V0RnVsbFllYXIoKSxpPTkrTWF0aC5mbG9vcihuLzEwKSoxMDtyZXR1cm4gci5zZXRGdWxsWWVhcihpLDExLDMxKSxyLnNldEhvdXJzKDIzLDU5LDU5LDk5OSkscn1vKFR2LCJlbmRPZkRlY2FkZSIpO3ZhciBMbmU9VHY7ZnVuY3Rpb24gRXYodCxlKXtsZXQgcj1iKHQsZT8uaW4pO3JldHVybiByLnNldE1pbnV0ZXMoNTksNTksOTk5KSxyfW8oRXYsImVuZE9mSG91ciIpO3ZhciBCbmU9RXY7ZnVuY3Rpb24geGYodCxlKXtsZXQgcj1fZSgpLG49ZT8ud2Vla1N0YXJ0c09uPz9lPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/ci53ZWVrU3RhcnRzT24/P3IubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/PzAsaT1iKHQsZT8uaW4pLHM9aS5nZXREYXkoKSxhPShzPG4/LTc6MCkrNi0ocy1uKTtyZXR1cm4gaS5zZXREYXRlKGkuZ2V0RGF0ZSgpK2EpLGkuc2V0SG91cnMoMjMsNTksNTksOTk5KSxpfW8oeGYsImVuZE9mV2VlayIpO3ZhciBxbmU9eGY7ZnVuY3Rpb24gRHYodCxlKXtyZXR1cm4geGYodCx7Li4uZSx3ZWVrU3RhcnRzT246MX0pfW8oRHYsImVuZE9mSVNPV2VlayIpO3ZhciBHbmU9RHY7ZnVuY3Rpb24gQ3YodCxlKXtsZXQgcj1MdCh0LGUpLG49JChlPy5pbnx8dCwwKTtuLnNldEZ1bGxZZWFyKHIrMSwwLDQpLG4uc2V0SG91cnMoMCwwLDAsMCk7bGV0IGk9dHQobixlKTtyZXR1cm4gaS5zZXRNaWxsaXNlY29uZHMoaS5nZXRNaWxsaXNlY29uZHMoKS0xKSxpfW8oQ3YsImVuZE9mSVNPV2Vla1llYXIiKTt2YXIgZWllPUN2O2Z1bmN0aW9uIE12KHQsZSl7bGV0IHI9Yih0LGU/LmluKTtyZXR1cm4gci5zZXRTZWNvbmRzKDU5LDk5OSkscn1vKE12LCJlbmRPZk1pbnV0ZSIpO3ZhciBpaWU9TXY7ZnVuY3Rpb24gT3YodCxlKXtsZXQgcj1iKHQsZT8uaW4pLG49ci5nZXRNb250aCgpLGk9bi1uJTMrMztyZXR1cm4gci5zZXRNb250aChpLDApLHIuc2V0SG91cnMoMjMsNTksNTksOTk5KSxyfW8oT3YsImVuZE9mUXVhcnRlciIpO3ZhciBsaWU9T3Y7ZnVuY3Rpb24gSXYodCxlKXtsZXQgcj1iKHQsZT8uaW4pO3JldHVybiByLnNldE1pbGxpc2Vjb25kcyg5OTkpLHJ9byhJdiwiZW5kT2ZTZWNvbmQiKTt2YXIgcGllPUl2O2Z1bmN0aW9uIF92KHQpe3JldHVybiBTcyhEYXRlLm5vdygpLHQpfW8oX3YsImVuZE9mVG9kYXkiKTt2YXIgZ2llPV92O2Z1bmN0aW9uIFB2KHQpe2xldCBlPWdlKHQ/LmluKSxyPWUuZ2V0RnVsbFllYXIoKSxuPWUuZ2V0TW9udGgoKSxpPWUuZ2V0RGF0ZSgpLHM9Z2UodD8uaW4pO3JldHVybiBzLnNldEZ1bGxZZWFyKHIsbixpKzEpLHMuc2V0SG91cnMoMjMsNTksNTksOTk5KSx0Py5pbj90LmluKHMpOnN9byhQdiwiZW5kT2ZUb21vcnJvdyIpO3ZhciB3aWU9UHY7ZnVuY3Rpb24gTnYodCl7bGV0IGU9Z2UodD8uaW4pLHI9JCh0Py5pbiwwKTtyZXR1cm4gci5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLGUuZ2V0RGF0ZSgpLTEpLHIuc2V0SG91cnMoMjMsNTksNTksOTk5KSxyfW8oTnYsImVuZE9mWWVzdGVyZGF5Iik7dmFyIEVpZT1Odjt2YXIgbU49e2xlc3NUaGFuWFNlY29uZHM6e29uZToibGVzcyB0aGFuIGEgc2Vjb25kIixvdGhlcjoibGVzcyB0aGFuIHt7Y291bnR9fSBzZWNvbmRzIn0seFNlY29uZHM6e29uZToiMSBzZWNvbmQiLG90aGVyOiJ7e2NvdW50fX0gc2Vjb25kcyJ9LGhhbGZBTWludXRlOiJoYWxmIGEgbWludXRlIixsZXNzVGhhblhNaW51dGVzOntvbmU6Imxlc3MgdGhhbiBhIG1pbnV0ZSIsb3RoZXI6Imxlc3MgdGhhbiB7e2NvdW50fX0gbWludXRlcyJ9LHhNaW51dGVzOntvbmU6IjEgbWludXRlIixvdGhlcjoie3tjb3VudH19IG1pbnV0ZXMifSxhYm91dFhIb3Vyczp7b25lOiJhYm91dCAxIGhvdXIiLG90aGVyOiJhYm91dCB7e2NvdW50fX0gaG91cnMifSx4SG91cnM6e29uZToiMSBob3VyIixvdGhlcjoie3tjb3VudH19IGhvdXJzIn0seERheXM6e29uZToiMSBkYXkiLG90aGVyOiJ7e2NvdW50fX0gZGF5cyJ9LGFib3V0WFdlZWtzOntvbmU6ImFib3V0IDEgd2VlayIsb3RoZXI6ImFib3V0IHt7Y291bnR9fSB3ZWVrcyJ9LHhXZWVrczp7b25lOiIxIHdlZWsiLG90aGVyOiJ7e2NvdW50fX0gd2Vla3MifSxhYm91dFhNb250aHM6e29uZToiYWJvdXQgMSBtb250aCIsb3RoZXI6ImFib3V0IHt7Y291bnR9fSBtb250aHMifSx4TW9udGhzOntvbmU6IjEgbW9udGgiLG90aGVyOiJ7e2NvdW50fX0gbW9udGhzIn0sYWJvdXRYWWVhcnM6e29uZToiYWJvdXQgMSB5ZWFyIixvdGhlcjoiYWJvdXQge3tjb3VudH19IHllYXJzIn0seFllYXJzOntvbmU6IjEgeWVhciIsb3RoZXI6Int7Y291bnR9fSB5ZWFycyJ9LG92ZXJYWWVhcnM6e29uZToib3ZlciAxIHllYXIiLG90aGVyOiJvdmVyIHt7Y291bnR9fSB5ZWFycyJ9LGFsbW9zdFhZZWFyczp7b25lOiJhbG1vc3QgMSB5ZWFyIixvdGhlcjoiYWxtb3N0IHt7Y291bnR9fSB5ZWFycyJ9fSxSdj1vKCh0LGUscik9PntsZXQgbixpPW1OW3RdO3JldHVybiB0eXBlb2YgaT09InN0cmluZyI/bj1pOmU9PT0xP249aS5vbmU6bj1pLm90aGVyLnJlcGxhY2UoInt7Y291bnR9fSIsZS50b1N0cmluZygpKSxyPy5hZGRTdWZmaXg/ci5jb21wYXJpc29uJiZyLmNvbXBhcmlzb24+MD8iaW4gIituOm4rIiBhZ28iOm59LCJmb3JtYXREaXN0YW5jZSIpO2Z1bmN0aW9uIGJmKHQpe3JldHVybihlPXt9KT0+e2xldCByPWUud2lkdGg/U3RyaW5nKGUud2lkdGgpOnQuZGVmYXVsdFdpZHRoO3JldHVybiB0LmZvcm1hdHNbcl18fHQuZm9ybWF0c1t0LmRlZmF1bHRXaWR0aF19fW8oYmYsImJ1aWxkRm9ybWF0TG9uZ0ZuIik7dmFyIGdOPXtmdWxsOiJFRUVFLCBNTU1NIGRvLCB5Iixsb25nOiJNTU1NIGRvLCB5IixtZWRpdW06Ik1NTSBkLCB5IixzaG9ydDoiTU0vZGQveXl5eSJ9LHlOPXtmdWxsOiJoOm1tOnNzIGEgenp6eiIsbG9uZzoiaDptbTpzcyBhIHoiLG1lZGl1bToiaDptbTpzcyBhIixzaG9ydDoiaDptbSBhIn0seE49e2Z1bGw6Int7ZGF0ZX19ICdhdCcge3t0aW1lfX0iLGxvbmc6Int7ZGF0ZX19ICdhdCcge3t0aW1lfX0iLG1lZGl1bToie3tkYXRlfX0sIHt7dGltZX19IixzaG9ydDoie3tkYXRlfX0sIHt7dGltZX19In0sTHY9e2RhdGU6YmYoe2Zvcm1hdHM6Z04sZGVmYXVsdFdpZHRoOiJmdWxsIn0pLHRpbWU6YmYoe2Zvcm1hdHM6eU4sZGVmYXVsdFdpZHRoOiJmdWxsIn0pLGRhdGVUaW1lOmJmKHtmb3JtYXRzOnhOLGRlZmF1bHRXaWR0aDoiZnVsbCJ9KX07dmFyIGJOPXtsYXN0V2VlazoiJ2xhc3QnIGVlZWUgJ2F0JyBwIix5ZXN0ZXJkYXk6Iid5ZXN0ZXJkYXkgYXQnIHAiLHRvZGF5OiIndG9kYXkgYXQnIHAiLHRvbW9ycm93OiIndG9tb3Jyb3cgYXQnIHAiLG5leHRXZWVrOiJlZWVlICdhdCcgcCIsb3RoZXI6IlAifSxGdj1vKCh0LGUscixuKT0+Yk5bdF0sImZvcm1hdFJlbGF0aXZlIik7ZnVuY3Rpb24gQ3ModCl7cmV0dXJuKGUscik9PntsZXQgbj1yPy5jb250ZXh0P1N0cmluZyhyLmNvbnRleHQpOiJzdGFuZGFsb25lIixpO2lmKG49PT0iZm9ybWF0dGluZyImJnQuZm9ybWF0dGluZ1ZhbHVlcyl7bGV0IGE9dC5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRofHx0LmRlZmF1bHRXaWR0aCxsPXI/LndpZHRoP1N0cmluZyhyLndpZHRoKTphO2k9dC5mb3JtYXR0aW5nVmFsdWVzW2xdfHx0LmZvcm1hdHRpbmdWYWx1ZXNbYV19ZWxzZXtsZXQgYT10LmRlZmF1bHRXaWR0aCxsPXI/LndpZHRoP1N0cmluZyhyLndpZHRoKTp0LmRlZmF1bHRXaWR0aDtpPXQudmFsdWVzW2xdfHx0LnZhbHVlc1thXX1sZXQgcz10LmFyZ3VtZW50Q2FsbGJhY2s/dC5hcmd1bWVudENhbGxiYWNrKGUpOmU7cmV0dXJuIGlbc119fW8oQ3MsImJ1aWxkTG9jYWxpemVGbiIpO3ZhciB3Tj17bmFycm93OlsiQiIsIkEiXSxhYmJyZXZpYXRlZDpbIkJDIiwiQUQiXSx3aWRlOlsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl19LHZOPXtuYXJyb3c6WyIxIiwiMiIsIjMiLCI0Il0sYWJicmV2aWF0ZWQ6WyJRMSIsIlEyIiwiUTMiLCJRNCJdLHdpZGU6WyIxc3QgcXVhcnRlciIsIjJuZCBxdWFydGVyIiwiM3JkIHF1YXJ0ZXIiLCI0dGggcXVhcnRlciJdfSxrTj17bmFycm93OlsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sYWJicmV2aWF0ZWQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSx3aWRlOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXX0sU049e25hcnJvdzpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxzaG9ydDpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sYWJicmV2aWF0ZWQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSx3aWRlOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sVE49e25hcnJvdzp7YW06ImEiLHBtOiJwIixtaWRuaWdodDoibWkiLG5vb246Im4iLG1vcm5pbmc6Im1vcm5pbmciLGFmdGVybm9vbjoiYWZ0ZXJub29uIixldmVuaW5nOiJldmVuaW5nIixuaWdodDoibmlnaHQifSxhYmJyZXZpYXRlZDp7YW06IkFNIixwbToiUE0iLG1pZG5pZ2h0OiJtaWRuaWdodCIsbm9vbjoibm9vbiIsbW9ybmluZzoibW9ybmluZyIsYWZ0ZXJub29uOiJhZnRlcm5vb24iLGV2ZW5pbmc6ImV2ZW5pbmciLG5pZ2h0OiJuaWdodCJ9LHdpZGU6e2FtOiJhLm0uIixwbToicC5tLiIsbWlkbmlnaHQ6Im1pZG5pZ2h0Iixub29uOiJub29uIixtb3JuaW5nOiJtb3JuaW5nIixhZnRlcm5vb246ImFmdGVybm9vbiIsZXZlbmluZzoiZXZlbmluZyIsbmlnaHQ6Im5pZ2h0In19LEVOPXtuYXJyb3c6e2FtOiJhIixwbToicCIsbWlkbmlnaHQ6Im1pIixub29uOiJuIixtb3JuaW5nOiJpbiB0aGUgbW9ybmluZyIsYWZ0ZXJub29uOiJpbiB0aGUgYWZ0ZXJub29uIixldmVuaW5nOiJpbiB0aGUgZXZlbmluZyIsbmlnaHQ6ImF0IG5pZ2h0In0sYWJicmV2aWF0ZWQ6e2FtOiJBTSIscG06IlBNIixtaWRuaWdodDoibWlkbmlnaHQiLG5vb246Im5vb24iLG1vcm5pbmc6ImluIHRoZSBtb3JuaW5nIixhZnRlcm5vb246ImluIHRoZSBhZnRlcm5vb24iLGV2ZW5pbmc6ImluIHRoZSBldmVuaW5nIixuaWdodDoiYXQgbmlnaHQifSx3aWRlOnthbToiYS5tLiIscG06InAubS4iLG1pZG5pZ2h0OiJtaWRuaWdodCIsbm9vbjoibm9vbiIsbW9ybmluZzoiaW4gdGhlIG1vcm5pbmciLGFmdGVybm9vbjoiaW4gdGhlIGFmdGVybm9vbiIsZXZlbmluZzoiaW4gdGhlIGV2ZW5pbmciLG5pZ2h0OiJhdCBuaWdodCJ9fSxETj1vKCh0LGUpPT57bGV0IHI9TnVtYmVyKHQpLG49ciUxMDA7aWYobj4yMHx8bjwxMClzd2l0Y2gobiUxMCl7Y2FzZSAxOnJldHVybiByKyJzdCI7Y2FzZSAyOnJldHVybiByKyJuZCI7Y2FzZSAzOnJldHVybiByKyJyZCJ9cmV0dXJuIHIrInRoIn0sIm9yZGluYWxOdW1iZXIiKSxBdj17b3JkaW5hbE51bWJlcjpETixlcmE6Q3Moe3ZhbHVlczp3TixkZWZhdWx0V2lkdGg6IndpZGUifSkscXVhcnRlcjpDcyh7dmFsdWVzOnZOLGRlZmF1bHRXaWR0aDoid2lkZSIsYXJndW1lbnRDYWxsYmFjazpvKHQ9PnQtMSwiYXJndW1lbnRDYWxsYmFjayIpfSksbW9udGg6Q3Moe3ZhbHVlczprTixkZWZhdWx0V2lkdGg6IndpZGUifSksZGF5OkNzKHt2YWx1ZXM6U04sZGVmYXVsdFdpZHRoOiJ3aWRlIn0pLGRheVBlcmlvZDpDcyh7dmFsdWVzOlROLGRlZmF1bHRXaWR0aDoid2lkZSIsZm9ybWF0dGluZ1ZhbHVlczpFTixkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiJ3aWRlIn0pfTtmdW5jdGlvbiBNcyh0KXtyZXR1cm4oZSxyPXt9KT0+e2xldCBuPXIud2lkdGgsaT1uJiZ0Lm1hdGNoUGF0dGVybnNbbl18fHQubWF0Y2hQYXR0ZXJuc1t0LmRlZmF1bHRNYXRjaFdpZHRoXSxzPWUubWF0Y2goaSk7aWYoIXMpcmV0dXJuIG51bGw7bGV0IGE9c1swXSxsPW4mJnQucGFyc2VQYXR0ZXJuc1tuXXx8dC5wYXJzZVBhdHRlcm5zW3QuZGVmYXVsdFBhcnNlV2lkdGhdLGM9QXJyYXkuaXNBcnJheShsKT9NTihsLHA9PnAudGVzdChhKSk6Q04obCxwPT5wLnRlc3QoYSkpLHU7dT10LnZhbHVlQ2FsbGJhY2s/dC52YWx1ZUNhbGxiYWNrKGMpOmMsdT1yLnZhbHVlQ2FsbGJhY2s/ci52YWx1ZUNhbGxiYWNrKHUpOnU7bGV0IGY9ZS5zbGljZShhLmxlbmd0aCk7cmV0dXJue3ZhbHVlOnUscmVzdDpmfX19byhNcywiYnVpbGRNYXRjaEZuIik7ZnVuY3Rpb24gQ04odCxlKXtmb3IobGV0IHIgaW4gdClpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmZSh0W3JdKSlyZXR1cm4gcn1vKENOLCJmaW5kS2V5Iik7ZnVuY3Rpb24gTU4odCxlKXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylpZihlKHRbcl0pKXJldHVybiByfW8oTU4sImZpbmRJbmRleCIpO2Z1bmN0aW9uICR2KHQpe3JldHVybihlLHI9e30pPT57bGV0IG49ZS5tYXRjaCh0Lm1hdGNoUGF0dGVybik7aWYoIW4pcmV0dXJuIG51bGw7bGV0IGk9blswXSxzPWUubWF0Y2godC5wYXJzZVBhdHRlcm4pO2lmKCFzKXJldHVybiBudWxsO2xldCBhPXQudmFsdWVDYWxsYmFjaz90LnZhbHVlQ2FsbGJhY2soc1swXSk6c1swXTthPXIudmFsdWVDYWxsYmFjaz9yLnZhbHVlQ2FsbGJhY2soYSk6YTtsZXQgbD1lLnNsaWNlKGkubGVuZ3RoKTtyZXR1cm57dmFsdWU6YSxyZXN0Omx9fX1vKCR2LCJidWlsZE1hdGNoUGF0dGVybkZuIik7dmFyIE9OPS9eKFxkKykodGh8c3R8bmR8cmQpPy9pLElOPS9cZCsvaSxfTj17bmFycm93Oi9eKGJ8YSkvaSxhYmJyZXZpYXRlZDovXihiXC4/XHM/Y1wuP3xiXC4/XHM/Y1wuP1xzP2VcLj98YVwuP1xzP2RcLj98Y1wuP1xzP2VcLj8pL2ksd2lkZTovXihiZWZvcmUgY2hyaXN0fGJlZm9yZSBjb21tb24gZXJhfGFubm8gZG9taW5pfGNvbW1vbiBlcmEpL2l9LFBOPXthbnk6Wy9eYi9pLC9eKGF8YykvaV19LE5OPXtuYXJyb3c6L15bMTIzNF0vaSxhYmJyZXZpYXRlZDovXnFbMTIzNF0vaSx3aWRlOi9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pfSxSTj17YW55OlsvMS9pLC8yL2ksLzMvaSwvNC9pXX0sTE49e25hcnJvdzovXltqZm1hc29uZF0vaSxhYmJyZXZpYXRlZDovXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSx3aWRlOi9eKGphbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2l9LEZOPXtuYXJyb3c6Wy9eai9pLC9eZi9pLC9ebS9pLC9eYS9pLC9ebS9pLC9eai9pLC9eai9pLC9eYS9pLC9ecy9pLC9eby9pLC9ebi9pLC9eZC9pXSxhbnk6Wy9eamEvaSwvXmYvaSwvXm1hci9pLC9eYXAvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmF1L2ksL15zL2ksL15vL2ksL15uL2ksL15kL2ldfSxBTj17bmFycm93Oi9eW3NtdHdmXS9pLHNob3J0Oi9eKHN1fG1vfHR1fHdlfHRofGZyfHNhKS9pLGFiYnJldmlhdGVkOi9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSx3aWRlOi9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pfSwkTj17bmFycm93OlsvXnMvaSwvXm0vaSwvXnQvaSwvXncvaSwvXnQvaSwvXmYvaSwvXnMvaV0sYW55OlsvXnN1L2ksL15tL2ksL150dS9pLC9edy9pLC9edGgvaSwvXmYvaSwvXnNhL2ldfSxCTj17bmFycm93Oi9eKGF8cHxtaXxufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSxhbnk6L14oW2FwXVwuP1xzP21cLj98bWlkbmlnaHR8bm9vbnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2l9LHpOPXthbnk6e2FtOi9eYS9pLHBtOi9ecC9pLG1pZG5pZ2h0Oi9ebWkvaSxub29uOi9ebm8vaSxtb3JuaW5nOi9tb3JuaW5nL2ksYWZ0ZXJub29uOi9hZnRlcm5vb24vaSxldmVuaW5nOi9ldmVuaW5nL2ksbmlnaHQ6L25pZ2h0L2l9fSxCdj17b3JkaW5hbE51bWJlcjokdih7bWF0Y2hQYXR0ZXJuOk9OLHBhcnNlUGF0dGVybjpJTix2YWx1ZUNhbGxiYWNrOm8odD0+cGFyc2VJbnQodCwxMCksInZhbHVlQ2FsbGJhY2siKX0pLGVyYTpNcyh7bWF0Y2hQYXR0ZXJuczpfTixkZWZhdWx0TWF0Y2hXaWR0aDoid2lkZSIscGFyc2VQYXR0ZXJuczpQTixkZWZhdWx0UGFyc2VXaWR0aDoiYW55In0pLHF1YXJ0ZXI6TXMoe21hdGNoUGF0dGVybnM6Tk4sZGVmYXVsdE1hdGNoV2lkdGg6IndpZGUiLHBhcnNlUGF0dGVybnM6Uk4sZGVmYXVsdFBhcnNlV2lkdGg6ImFueSIsdmFsdWVDYWxsYmFjazpvKHQ9PnQrMSwidmFsdWVDYWxsYmFjayIpfSksbW9udGg6TXMoe21hdGNoUGF0dGVybnM6TE4sZGVmYXVsdE1hdGNoV2lkdGg6IndpZGUiLHBhcnNlUGF0dGVybnM6Rk4sZGVmYXVsdFBhcnNlV2lkdGg6ImFueSJ9KSxkYXk6TXMoe21hdGNoUGF0dGVybnM6QU4sZGVmYXVsdE1hdGNoV2lkdGg6IndpZGUiLHBhcnNlUGF0dGVybnM6JE4sZGVmYXVsdFBhcnNlV2lkdGg6ImFueSJ9KSxkYXlQZXJpb2Q6TXMoe21hdGNoUGF0dGVybnM6Qk4sZGVmYXVsdE1hdGNoV2lkdGg6ImFueSIscGFyc2VQYXR0ZXJuczp6TixkZWZhdWx0UGFyc2VXaWR0aDoiYW55In0pfTt2YXIgV3Q9e2NvZGU6ImVuLVVTIixmb3JtYXREaXN0YW5jZTpSdixmb3JtYXRMb25nOkx2LGZvcm1hdFJlbGF0aXZlOkZ2LGxvY2FsaXplOkF2LG1hdGNoOkJ2LG9wdGlvbnM6e3dlZWtTdGFydHNPbjowLGZpcnN0V2Vla0NvbnRhaW5zRGF0ZToxfX0sZW9lPVd0O2Z1bmN0aW9uIHdmKHQsZSl7bGV0IHI9Yih0LGU/LmluKTtyZXR1cm4gaHQocixEcyhyKSkrMX1vKHdmLCJnZXREYXlPZlllYXIiKTt2YXIgYW9lPXdmO2Z1bmN0aW9uIE9zKHQsZSl7bGV0IHI9Yih0LGU/LmluKSxuPSt0dChyKS0rdHIocik7cmV0dXJuIE1hdGgucm91bmQobi9sbikrMX1vKE9zLCJnZXRJU09XZWVrIik7dmFyIGRvZT1PcztmdW5jdGlvbiBwaSh0LGUpe2xldCByPWIodCxlPy5pbiksbj1yLmdldEZ1bGxZZWFyKCksaT1fZSgpLHM9ZT8uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz9lPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/aS5maXJzdFdlZWtDb250YWluc0RhdGU/P2kubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGU/PzEsYT0kKGU/LmlufHx0LDApO2Euc2V0RnVsbFllYXIobisxLDAscyksYS5zZXRIb3VycygwLDAsMCwwKTtsZXQgbD1GZShhLGUpLGM9JChlPy5pbnx8dCwwKTtjLnNldEZ1bGxZZWFyKG4sMCxzKSxjLnNldEhvdXJzKDAsMCwwLDApO2xldCB1PUZlKGMsZSk7cmV0dXJuK3I+PStsP24rMTorcj49K3U/bjpuLTF9byhwaSwiZ2V0V2Vla1llYXIiKTt2YXIgdm9lPXBpO2Z1bmN0aW9uIGNvKHQsZSl7bGV0IHI9X2UoKSxuPWU/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/ZT8ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGU/P3IuZmlyc3RXZWVrQ29udGFpbnNEYXRlPz9yLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz8xLGk9cGkodCxlKSxzPSQoZT8uaW58fHQsMCk7cmV0dXJuIHMuc2V0RnVsbFllYXIoaSwwLG4pLHMuc2V0SG91cnMoMCwwLDAsMCksRmUocyxlKX1vKGNvLCJzdGFydE9mV2Vla1llYXIiKTt2YXIgTW9lPWNvO2Z1bmN0aW9uIElzKHQsZSl7bGV0IHI9Yih0LGU/LmluKSxuPStGZShyLGUpLStjbyhyLGUpO3JldHVybiBNYXRoLnJvdW5kKG4vbG4pKzF9byhJcywiZ2V0V2VlayIpO3ZhciBMb2U9SXM7ZnVuY3Rpb24gSyh0LGUpe2xldCByPXQ8MD8iLSI6IiIsbj1NYXRoLmFicyh0KS50b1N0cmluZygpLnBhZFN0YXJ0KGUsIjAiKTtyZXR1cm4gcitufW8oSywiYWRkTGVhZGluZ1plcm9zIik7dmFyIHJyPXt5KHQsZSl7bGV0IHI9dC5nZXRGdWxsWWVhcigpLG49cj4wP3I6MS1yO3JldHVybiBLKGU9PT0ieXkiP24lMTAwOm4sZS5sZW5ndGgpfSxNKHQsZSl7bGV0IHI9dC5nZXRNb250aCgpO3JldHVybiBlPT09Ik0iP1N0cmluZyhyKzEpOksocisxLDIpfSxkKHQsZSl7cmV0dXJuIEsodC5nZXREYXRlKCksZS5sZW5ndGgpfSxhKHQsZSl7bGV0IHI9dC5nZXRIb3VycygpLzEyPj0xPyJwbSI6ImFtIjtzd2l0Y2goZSl7Y2FzZSJhIjpjYXNlImFhIjpyZXR1cm4gci50b1VwcGVyQ2FzZSgpO2Nhc2UiYWFhIjpyZXR1cm4gcjtjYXNlImFhYWFhIjpyZXR1cm4gclswXTtkZWZhdWx0OnJldHVybiByPT09ImFtIj8iYS5tLiI6InAubS4ifX0saCh0LGUpe3JldHVybiBLKHQuZ2V0SG91cnMoKSUxMnx8MTIsZS5sZW5ndGgpfSxIKHQsZSl7cmV0dXJuIEsodC5nZXRIb3VycygpLGUubGVuZ3RoKX0sbSh0LGUpe3JldHVybiBLKHQuZ2V0TWludXRlcygpLGUubGVuZ3RoKX0scyh0LGUpe3JldHVybiBLKHQuZ2V0U2Vjb25kcygpLGUubGVuZ3RoKX0sUyh0LGUpe2xldCByPWUubGVuZ3RoLG49dC5nZXRNaWxsaXNlY29uZHMoKSxpPU1hdGgudHJ1bmMobipNYXRoLnBvdygxMCxyLTMpKTtyZXR1cm4gSyhpLGUubGVuZ3RoKX19O3ZhciBfcz17YW06ImFtIixwbToicG0iLG1pZG5pZ2h0OiJtaWRuaWdodCIsbm9vbjoibm9vbiIsbW9ybmluZzoibW9ybmluZyIsYWZ0ZXJub29uOiJhZnRlcm5vb24iLGV2ZW5pbmc6ImV2ZW5pbmciLG5pZ2h0OiJuaWdodCJ9LHlsPXtHOm8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXQuZ2V0RnVsbFllYXIoKT4wPzE6MDtzd2l0Y2goZSl7Y2FzZSJHIjpjYXNlIkdHIjpjYXNlIkdHRyI6cmV0dXJuIHIuZXJhKG4se3dpZHRoOiJhYmJyZXZpYXRlZCJ9KTtjYXNlIkdHR0dHIjpyZXR1cm4gci5lcmEobix7d2lkdGg6Im5hcnJvdyJ9KTtkZWZhdWx0OnJldHVybiByLmVyYShuLHt3aWR0aDoid2lkZSJ9KX19LCJHIikseTpvKGZ1bmN0aW9uKHQsZSxyKXtpZihlPT09InlvIil7bGV0IG49dC5nZXRGdWxsWWVhcigpLGk9bj4wP246MS1uO3JldHVybiByLm9yZGluYWxOdW1iZXIoaSx7dW5pdDoieWVhciJ9KX1yZXR1cm4gcnIueSh0LGUpfSwieSIpLFk6byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1waSh0LG4pLHM9aT4wP2k6MS1pO2lmKGU9PT0iWVkiKXtsZXQgYT1zJTEwMDtyZXR1cm4gSyhhLDIpfXJldHVybiBlPT09IllvIj9yLm9yZGluYWxOdW1iZXIocyx7dW5pdDoieWVhciJ9KTpLKHMsZS5sZW5ndGgpfSwiWSIpLFI6byhmdW5jdGlvbih0LGUpe2xldCByPUx0KHQpO3JldHVybiBLKHIsZS5sZW5ndGgpfSwiUiIpLHU6byhmdW5jdGlvbih0LGUpe2xldCByPXQuZ2V0RnVsbFllYXIoKTtyZXR1cm4gSyhyLGUubGVuZ3RoKX0sInUiKSxROm8oZnVuY3Rpb24odCxlLHIpe2xldCBuPU1hdGguY2VpbCgodC5nZXRNb250aCgpKzEpLzMpO3N3aXRjaChlKXtjYXNlIlEiOnJldHVybiBTdHJpbmcobik7Y2FzZSJRUSI6cmV0dXJuIEsobiwyKTtjYXNlIlFvIjpyZXR1cm4gci5vcmRpbmFsTnVtYmVyKG4se3VuaXQ6InF1YXJ0ZXIifSk7Y2FzZSJRUVEiOnJldHVybiByLnF1YXJ0ZXIobix7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiUVFRUVEiOnJldHVybiByLnF1YXJ0ZXIobix7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtkZWZhdWx0OnJldHVybiByLnF1YXJ0ZXIobix7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fSwiUSIpLHE6byhmdW5jdGlvbih0LGUscil7bGV0IG49TWF0aC5jZWlsKCh0LmdldE1vbnRoKCkrMSkvMyk7c3dpdGNoKGUpe2Nhc2UicSI6cmV0dXJuIFN0cmluZyhuKTtjYXNlInFxIjpyZXR1cm4gSyhuLDIpO2Nhc2UicW8iOnJldHVybiByLm9yZGluYWxOdW1iZXIobix7dW5pdDoicXVhcnRlciJ9KTtjYXNlInFxcSI6cmV0dXJuIHIucXVhcnRlcihuLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJxcXFxcSI6cmV0dXJuIHIucXVhcnRlcihuLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2RlZmF1bHQ6cmV0dXJuIHIucXVhcnRlcihuLHt3aWR0aDoid2lkZSIsY29udGV4dDoic3RhbmRhbG9uZSJ9KX19LCJxIiksTTpvKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmdldE1vbnRoKCk7c3dpdGNoKGUpe2Nhc2UiTSI6Y2FzZSJNTSI6cmV0dXJuIHJyLk0odCxlKTtjYXNlIk1vIjpyZXR1cm4gci5vcmRpbmFsTnVtYmVyKG4rMSx7dW5pdDoibW9udGgifSk7Y2FzZSJNTU0iOnJldHVybiByLm1vbnRoKG4se3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlIk1NTU1NIjpyZXR1cm4gci5tb250aChuLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIHIubW9udGgobix7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fSwiTSIpLEw6byhmdW5jdGlvbih0LGUscil7bGV0IG49dC5nZXRNb250aCgpO3N3aXRjaChlKXtjYXNlIkwiOnJldHVybiBTdHJpbmcobisxKTtjYXNlIkxMIjpyZXR1cm4gSyhuKzEsMik7Y2FzZSJMbyI6cmV0dXJuIHIub3JkaW5hbE51bWJlcihuKzEse3VuaXQ6Im1vbnRoIn0pO2Nhc2UiTExMIjpyZXR1cm4gci5tb250aChuLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJMTExMTCI6cmV0dXJuIHIubW9udGgobix7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoic3RhbmRhbG9uZSJ9KTtkZWZhdWx0OnJldHVybiByLm1vbnRoKG4se3dpZHRoOiJ3aWRlIixjb250ZXh0OiJzdGFuZGFsb25lIn0pfX0sIkwiKSx3Om8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9SXModCxuKTtyZXR1cm4gZT09PSJ3byI/ci5vcmRpbmFsTnVtYmVyKGkse3VuaXQ6IndlZWsifSk6SyhpLGUubGVuZ3RoKX0sInciKSxJOm8oZnVuY3Rpb24odCxlLHIpe2xldCBuPU9zKHQpO3JldHVybiBlPT09IklvIj9yLm9yZGluYWxOdW1iZXIobix7dW5pdDoid2VlayJ9KTpLKG4sZS5sZW5ndGgpfSwiSSIpLGQ6byhmdW5jdGlvbih0LGUscil7cmV0dXJuIGU9PT0iZG8iP3Iub3JkaW5hbE51bWJlcih0LmdldERhdGUoKSx7dW5pdDoiZGF0ZSJ9KTpyci5kKHQsZSl9LCJkIiksRDpvKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj13Zih0KTtyZXR1cm4gZT09PSJEbyI/ci5vcmRpbmFsTnVtYmVyKG4se3VuaXQ6ImRheU9mWWVhciJ9KTpLKG4sZS5sZW5ndGgpfSwiRCIpLEU6byhmdW5jdGlvbih0LGUscil7bGV0IG49dC5nZXREYXkoKTtzd2l0Y2goZSl7Y2FzZSJFIjpjYXNlIkVFIjpjYXNlIkVFRSI6cmV0dXJuIHIuZGF5KG4se3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlIkVFRUVFIjpyZXR1cm4gci5kYXkobix7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlIkVFRUVFRSI6cmV0dXJuIHIuZGF5KG4se3dpZHRoOiJzaG9ydCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtkZWZhdWx0OnJldHVybiByLmRheShuLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19LCJFIiksZTpvKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPXQuZ2V0RGF5KCkscz0oaS1uLndlZWtTdGFydHNPbis4KSU3fHw3O3N3aXRjaChlKXtjYXNlImUiOnJldHVybiBTdHJpbmcocyk7Y2FzZSJlZSI6cmV0dXJuIEsocywyKTtjYXNlImVvIjpyZXR1cm4gci5vcmRpbmFsTnVtYmVyKHMse3VuaXQ6ImRheSJ9KTtjYXNlImVlZSI6cmV0dXJuIHIuZGF5KGkse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlImVlZWVlIjpyZXR1cm4gci5kYXkoaSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlImVlZWVlZSI6cmV0dXJuIHIuZGF5KGkse3dpZHRoOiJzaG9ydCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtkZWZhdWx0OnJldHVybiByLmRheShpLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19LCJlIiksYzpvKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPXQuZ2V0RGF5KCkscz0oaS1uLndlZWtTdGFydHNPbis4KSU3fHw3O3N3aXRjaChlKXtjYXNlImMiOnJldHVybiBTdHJpbmcocyk7Y2FzZSJjYyI6cmV0dXJuIEsocyxlLmxlbmd0aCk7Y2FzZSJjbyI6cmV0dXJuIHIub3JkaW5hbE51bWJlcihzLHt1bml0OiJkYXkifSk7Y2FzZSJjY2MiOnJldHVybiByLmRheShpLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJjY2NjYyI6cmV0dXJuIHIuZGF5KGkse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJjY2NjY2MiOnJldHVybiByLmRheShpLHt3aWR0aDoic2hvcnQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7ZGVmYXVsdDpyZXR1cm4gci5kYXkoaSx7d2lkdGg6IndpZGUiLGNvbnRleHQ6InN0YW5kYWxvbmUifSl9fSwiYyIpLGk6byhmdW5jdGlvbih0LGUscil7bGV0IG49dC5nZXREYXkoKSxpPW49PT0wPzc6bjtzd2l0Y2goZSl7Y2FzZSJpIjpyZXR1cm4gU3RyaW5nKGkpO2Nhc2UiaWkiOnJldHVybiBLKGksZS5sZW5ndGgpO2Nhc2UiaW8iOnJldHVybiByLm9yZGluYWxOdW1iZXIoaSx7dW5pdDoiZGF5In0pO2Nhc2UiaWlpIjpyZXR1cm4gci5kYXkobix7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiaWlpaWkiOnJldHVybiByLmRheShuLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiaWlpaWlpIjpyZXR1cm4gci5kYXkobix7d2lkdGg6InNob3J0Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIHIuZGF5KG4se3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfX0sImkiKSxhOm8oZnVuY3Rpb24odCxlLHIpe2xldCBpPXQuZ2V0SG91cnMoKS8xMj49MT8icG0iOiJhbSI7c3dpdGNoKGUpe2Nhc2UiYSI6Y2FzZSJhYSI6cmV0dXJuIHIuZGF5UGVyaW9kKGkse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlImFhYSI6cmV0dXJuIHIuZGF5UGVyaW9kKGkse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KS50b0xvd2VyQ2FzZSgpO2Nhc2UiYWFhYWEiOnJldHVybiByLmRheVBlcmlvZChpLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIHIuZGF5UGVyaW9kKGkse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfX0sImEiKSxiOm8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXQuZ2V0SG91cnMoKSxpO3N3aXRjaChuPT09MTI/aT1fcy5ub29uOm49PT0wP2k9X3MubWlkbmlnaHQ6aT1uLzEyPj0xPyJwbSI6ImFtIixlKXtjYXNlImIiOmNhc2UiYmIiOnJldHVybiByLmRheVBlcmlvZChpLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJiYmIiOnJldHVybiByLmRheVBlcmlvZChpLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSkudG9Mb3dlckNhc2UoKTtjYXNlImJiYmJiIjpyZXR1cm4gci5kYXlQZXJpb2QoaSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtkZWZhdWx0OnJldHVybiByLmRheVBlcmlvZChpLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19LCJiIiksQjpvKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmdldEhvdXJzKCksaTtzd2l0Y2gobj49MTc/aT1fcy5ldmVuaW5nOm4+PTEyP2k9X3MuYWZ0ZXJub29uOm4+PTQ/aT1fcy5tb3JuaW5nOmk9X3MubmlnaHQsZSl7Y2FzZSJCIjpjYXNlIkJCIjpjYXNlIkJCQiI6cmV0dXJuIHIuZGF5UGVyaW9kKGkse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlIkJCQkJCIjpyZXR1cm4gci5kYXlQZXJpb2QoaSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtkZWZhdWx0OnJldHVybiByLmRheVBlcmlvZChpLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19LCJCIiksaDpvKGZ1bmN0aW9uKHQsZSxyKXtpZihlPT09ImhvIil7bGV0IG49dC5nZXRIb3VycygpJTEyO3JldHVybiBuPT09MCYmKG49MTIpLHIub3JkaW5hbE51bWJlcihuLHt1bml0OiJob3VyIn0pfXJldHVybiByci5oKHQsZSl9LCJoIiksSDpvKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZT09PSJIbyI/ci5vcmRpbmFsTnVtYmVyKHQuZ2V0SG91cnMoKSx7dW5pdDoiaG91ciJ9KTpyci5IKHQsZSl9LCJIIiksSzpvKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmdldEhvdXJzKCklMTI7cmV0dXJuIGU9PT0iS28iP3Iub3JkaW5hbE51bWJlcihuLHt1bml0OiJob3VyIn0pOksobixlLmxlbmd0aCl9LCJLIiksazpvKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmdldEhvdXJzKCk7cmV0dXJuIG49PT0wJiYobj0yNCksZT09PSJrbyI/ci5vcmRpbmFsTnVtYmVyKG4se3VuaXQ6ImhvdXIifSk6SyhuLGUubGVuZ3RoKX0sImsiKSxtOm8oZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPT09Im1vIj9yLm9yZGluYWxOdW1iZXIodC5nZXRNaW51dGVzKCkse3VuaXQ6Im1pbnV0ZSJ9KTpyci5tKHQsZSl9LCJtIiksczpvKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZT09PSJzbyI/ci5vcmRpbmFsTnVtYmVyKHQuZ2V0U2Vjb25kcygpLHt1bml0OiJzZWNvbmQifSk6cnIucyh0LGUpfSwicyIpLFM6byhmdW5jdGlvbih0LGUpe3JldHVybiByci5TKHQsZSl9LCJTIiksWDpvKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmdldFRpbWV6b25lT2Zmc2V0KCk7aWYobj09PTApcmV0dXJuIloiO3N3aXRjaChlKXtjYXNlIlgiOnJldHVybiBIdihuKTtjYXNlIlhYWFgiOmNhc2UiWFgiOnJldHVybiB1byhuKTtkZWZhdWx0OnJldHVybiB1byhuLCI6Iil9fSwiWCIpLHg6byhmdW5jdGlvbih0LGUscil7bGV0IG49dC5nZXRUaW1lem9uZU9mZnNldCgpO3N3aXRjaChlKXtjYXNlIngiOnJldHVybiBIdihuKTtjYXNlInh4eHgiOmNhc2UieHgiOnJldHVybiB1byhuKTtkZWZhdWx0OnJldHVybiB1byhuLCI6Iil9fSwieCIpLE86byhmdW5jdGlvbih0LGUscil7bGV0IG49dC5nZXRUaW1lem9uZU9mZnNldCgpO3N3aXRjaChlKXtjYXNlIk8iOmNhc2UiT08iOmNhc2UiT09PIjpyZXR1cm4iR01UIit6dihuLCI6Iik7ZGVmYXVsdDpyZXR1cm4iR01UIit1byhuLCI6Iil9fSwiTyIpLHo6byhmdW5jdGlvbih0LGUscil7bGV0IG49dC5nZXRUaW1lem9uZU9mZnNldCgpO3N3aXRjaChlKXtjYXNlInoiOmNhc2UienoiOmNhc2Uienp6IjpyZXR1cm4iR01UIit6dihuLCI6Iik7ZGVmYXVsdDpyZXR1cm4iR01UIit1byhuLCI6Iil9fSwieiIpLHQ6byhmdW5jdGlvbih0LGUscil7bGV0IG49TWF0aC50cnVuYygrdC8xZTMpO3JldHVybiBLKG4sZS5sZW5ndGgpfSwidCIpLFQ6byhmdW5jdGlvbih0LGUscil7cmV0dXJuIEsoK3QsZS5sZW5ndGgpfSwiVCIpfTtmdW5jdGlvbiB6dih0LGU9IiIpe2xldCByPXQ+MD8iLSI6IisiLG49TWF0aC5hYnModCksaT1NYXRoLnRydW5jKG4vNjApLHM9biU2MDtyZXR1cm4gcz09PTA/citTdHJpbmcoaSk6citTdHJpbmcoaSkrZStLKHMsMil9byh6diwiZm9ybWF0VGltZXpvbmVTaG9ydCIpO2Z1bmN0aW9uIEh2KHQsZSl7cmV0dXJuIHQlNjA9PT0wPyh0PjA/Ii0iOiIrIikrSyhNYXRoLmFicyh0KS82MCwyKTp1byh0LGUpfW8oSHYsImZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyIpO2Z1bmN0aW9uIHVvKHQsZT0iIil7bGV0IHI9dD4wPyItIjoiKyIsbj1NYXRoLmFicyh0KSxpPUsoTWF0aC50cnVuYyhuLzYwKSwyKSxzPUsobiU2MCwyKTtyZXR1cm4gcitpK2Urc31vKHVvLCJmb3JtYXRUaW1lem9uZSIpO3ZhciBqdj1vKCh0LGUpPT57c3dpdGNoKHQpe2Nhc2UiUCI6cmV0dXJuIGUuZGF0ZSh7d2lkdGg6InNob3J0In0pO2Nhc2UiUFAiOnJldHVybiBlLmRhdGUoe3dpZHRoOiJtZWRpdW0ifSk7Y2FzZSJQUFAiOnJldHVybiBlLmRhdGUoe3dpZHRoOiJsb25nIn0pO2RlZmF1bHQ6cmV0dXJuIGUuZGF0ZSh7d2lkdGg6ImZ1bGwifSl9fSwiZGF0ZUxvbmdGb3JtYXR0ZXIiKSxXdj1vKCh0LGUpPT57c3dpdGNoKHQpe2Nhc2UicCI6cmV0dXJuIGUudGltZSh7d2lkdGg6InNob3J0In0pO2Nhc2UicHAiOnJldHVybiBlLnRpbWUoe3dpZHRoOiJtZWRpdW0ifSk7Y2FzZSJwcHAiOnJldHVybiBlLnRpbWUoe3dpZHRoOiJsb25nIn0pO2RlZmF1bHQ6cmV0dXJuIGUudGltZSh7d2lkdGg6ImZ1bGwifSl9fSwidGltZUxvbmdGb3JtYXR0ZXIiKSxITj1vKCh0LGUpPT57bGV0IHI9dC5tYXRjaCgvKFArKShwKyk/Lyl8fFtdLG49clsxXSxpPXJbMl07aWYoIWkpcmV0dXJuIGp2KHQsZSk7bGV0IHM7c3dpdGNoKG4pe2Nhc2UiUCI6cz1lLmRhdGVUaW1lKHt3aWR0aDoic2hvcnQifSk7YnJlYWs7Y2FzZSJQUCI6cz1lLmRhdGVUaW1lKHt3aWR0aDoibWVkaXVtIn0pO2JyZWFrO2Nhc2UiUFBQIjpzPWUuZGF0ZVRpbWUoe3dpZHRoOiJsb25nIn0pO2JyZWFrO2RlZmF1bHQ6cz1lLmRhdGVUaW1lKHt3aWR0aDoiZnVsbCJ9KTticmVha31yZXR1cm4gcy5yZXBsYWNlKCJ7e2RhdGV9fSIsanYobixlKSkucmVwbGFjZSgie3t0aW1lfX0iLFd2KGksZSkpfSwiZGF0ZVRpbWVMb25nRm9ybWF0dGVyIiksaGk9e3A6V3YsUDpITn07dmFyIGpOPS9eRCskLyxXTj0vXlkrJC8scU49WyJEIiwiREQiLCJZWSIsIllZWVkiXTtmdW5jdGlvbiB2Zih0KXtyZXR1cm4gak4udGVzdCh0KX1vKHZmLCJpc1Byb3RlY3RlZERheU9mWWVhclRva2VuIik7ZnVuY3Rpb24ga2YodCl7cmV0dXJuIFdOLnRlc3QodCl9byhrZiwiaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuIik7ZnVuY3Rpb24geGwodCxlLHIpe2xldCBuPVVOKHQsZSxyKTtpZihjb25zb2xlLndhcm4obikscU4uaW5jbHVkZXModCkpdGhyb3cgbmV3IFJhbmdlRXJyb3Iobil9byh4bCwid2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvciIpO2Z1bmN0aW9uIFVOKHQsZSxyKXtsZXQgbj10WzBdPT09IlkiPyJ5ZWFycyI6ImRheXMgb2YgdGhlIG1vbnRoIjtyZXR1cm5gVXNlIFxgJHt0LnRvTG93ZXJDYXNlKCl9XGAgaW5zdGVhZCBvZiBcYCR7dH1cYCAoaW4gXGAke2V9XGApIGZvciBmb3JtYXR0aW5nICR7bn0gdG8gdGhlIGlucHV0IFxgJHtyfVxgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRgfW8oVU4sIm1lc3NhZ2UiKTt2YXIgVk49L1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFx3KVwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZyxZTj0vUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZyxHTj0vXicoW15dKj8pJz8kLyxRTj0vJycvZyxKTj0vW2EtekEtWl0vO2Z1bmN0aW9uIGJsKHQsZSxyKXtsZXQgbj1fZSgpLGk9cj8ubG9jYWxlPz9uLmxvY2FsZT8/V3Qscz1yPy5maXJzdFdlZWtDb250YWluc0RhdGU/P3I/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz9uLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/bi5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/MSxhPXI/LndlZWtTdGFydHNPbj8/cj8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/P24ud2Vla1N0YXJ0c09uPz9uLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz8wLGw9Yih0LHI/LmluKTtpZighd3QobCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpO2xldCBjPWUubWF0Y2goWU4pLm1hcChmPT57bGV0IHA9ZlswXTtpZihwPT09InAifHxwPT09IlAiKXtsZXQgaD1oaVtwXTtyZXR1cm4gaChmLGkuZm9ybWF0TG9uZyl9cmV0dXJuIGZ9KS5qb2luKCIiKS5tYXRjaChWTikubWFwKGY9PntpZihmPT09IicnIilyZXR1cm57aXNUb2tlbjohMSx2YWx1ZToiJyJ9O2xldCBwPWZbMF07aWYocD09PSInIilyZXR1cm57aXNUb2tlbjohMSx2YWx1ZTpLTihmKX07aWYoeWxbcF0pcmV0dXJue2lzVG9rZW46ITAsdmFsdWU6Zn07aWYocC5tYXRjaChKTikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgIitwKyJgIik7cmV0dXJue2lzVG9rZW46ITEsdmFsdWU6Zn19KTtpLmxvY2FsaXplLnByZXByb2Nlc3NvciYmKGM9aS5sb2NhbGl6ZS5wcmVwcm9jZXNzb3IobCxjKSk7bGV0IHU9e2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZTpzLHdlZWtTdGFydHNPbjphLGxvY2FsZTppfTtyZXR1cm4gYy5tYXAoZj0+e2lmKCFmLmlzVG9rZW4pcmV0dXJuIGYudmFsdWU7bGV0IHA9Zi52YWx1ZTsoIXI/LnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2VucyYma2YocCl8fCFyPy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zJiZ2ZihwKSkmJnhsKHAsZSxTdHJpbmcodCkpO2xldCBoPXlsW3BbMF1dO3JldHVybiBoKGwscCxpLmxvY2FsaXplLHUpfSkuam9pbigiIil9byhibCwiZm9ybWF0Iik7ZnVuY3Rpb24gS04odCl7bGV0IGU9dC5tYXRjaChHTik7cmV0dXJuIGU/ZVsxXS5yZXBsYWNlKFFOLCInIik6dH1vKEtOLCJjbGVhbkVzY2FwZWRTdHJpbmciKTt2YXIgbHNlPWJsO2Z1bmN0aW9uIFNmKHQsZSxyKXtsZXQgbj1fZSgpLGk9cj8ubG9jYWxlPz9uLmxvY2FsZT8/V3Qscz0yNTIwLGE9RXQodCxlKTtpZihpc05hTihhKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7bGV0IGw9T2JqZWN0LmFzc2lnbih7fSxyLHthZGRTdWZmaXg6cj8uYWRkU3VmZml4LGNvbXBhcmlzb246YX0pLFtjLHVdPXRlKHI/LmluLC4uLmE+MD9bZSx0XTpbdCxlXSksZj1obih1LGMpLHA9KEdlKHUpLUdlKGMpKS8xZTMsaD1NYXRoLnJvdW5kKChmLXApLzYwKSxkO2lmKGg8MilyZXR1cm4gcj8uaW5jbHVkZVNlY29uZHM/Zjw1P2kuZm9ybWF0RGlzdGFuY2UoImxlc3NUaGFuWFNlY29uZHMiLDUsbCk6ZjwxMD9pLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhTZWNvbmRzIiwxMCxsKTpmPDIwP2kuZm9ybWF0RGlzdGFuY2UoImxlc3NUaGFuWFNlY29uZHMiLDIwLGwpOmY8NDA/aS5mb3JtYXREaXN0YW5jZSgiaGFsZkFNaW51dGUiLDAsbCk6Zjw2MD9pLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhNaW51dGVzIiwxLGwpOmkuZm9ybWF0RGlzdGFuY2UoInhNaW51dGVzIiwxLGwpOmg9PT0wP2kuZm9ybWF0RGlzdGFuY2UoImxlc3NUaGFuWE1pbnV0ZXMiLDEsbCk6aS5mb3JtYXREaXN0YW5jZSgieE1pbnV0ZXMiLGgsbCk7aWYoaDw0NSlyZXR1cm4gaS5mb3JtYXREaXN0YW5jZSgieE1pbnV0ZXMiLGgsbCk7aWYoaDw5MClyZXR1cm4gaS5mb3JtYXREaXN0YW5jZSgiYWJvdXRYSG91cnMiLDEsbCk7aWYoaDxncyl7bGV0IG09TWF0aC5yb3VuZChoLzYwKTtyZXR1cm4gaS5mb3JtYXREaXN0YW5jZSgiYWJvdXRYSG91cnMiLG0sbCl9ZWxzZXtpZihoPHMpcmV0dXJuIGkuZm9ybWF0RGlzdGFuY2UoInhEYXlzIiwxLGwpO2lmKGg8b2kpe2xldCBtPU1hdGgucm91bmQoaC9ncyk7cmV0dXJuIGkuZm9ybWF0RGlzdGFuY2UoInhEYXlzIixtLGwpfWVsc2UgaWYoaDxvaSoyKXJldHVybiBkPU1hdGgucm91bmQoaC9vaSksaS5mb3JtYXREaXN0YW5jZSgiYWJvdXRYTW9udGhzIixkLGwpfWlmKGQ9dWkodSxjKSxkPDEyKXtsZXQgbT1NYXRoLnJvdW5kKGgvb2kpO3JldHVybiBpLmZvcm1hdERpc3RhbmNlKCJ4TW9udGhzIixtLGwpfWVsc2V7bGV0IG09ZCUxMixnPU1hdGgudHJ1bmMoZC8xMik7cmV0dXJuIG08Mz9pLmZvcm1hdERpc3RhbmNlKCJhYm91dFhZZWFycyIsZyxsKTptPDk/aS5mb3JtYXREaXN0YW5jZSgib3ZlclhZZWFycyIsZyxsKTppLmZvcm1hdERpc3RhbmNlKCJhbG1vc3RYWWVhcnMiLGcrMSxsKX19byhTZiwiZm9ybWF0RGlzdGFuY2UiKTt2YXIgYnNlPVNmO2Z1bmN0aW9uIFRmKHQsZSxyKXtsZXQgbj1fZSgpLGk9cj8ubG9jYWxlPz9uLmxvY2FsZT8/V3Qscz1FdCh0LGUpO2lmKGlzTmFOKHMpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTtsZXQgYT1PYmplY3QuYXNzaWduKHt9LHIse2FkZFN1ZmZpeDpyPy5hZGRTdWZmaXgsY29tcGFyaXNvbjpzfSksW2wsY109dGUocj8uaW4sLi4ucz4wP1tlLHRdOlt0LGVdKSx1PUR0KHI/LnJvdW5kaW5nTWV0aG9kPz8icm91bmQiKSxmPWMuZ2V0VGltZSgpLWwuZ2V0VGltZSgpLHA9Zi9UdCxoPUdlKGMpLUdlKGwpLGQ9KGYtaCkvVHQsbT1yPy51bml0LGc7aWYobT9nPW06cDwxP2c9InNlY29uZCI6cDw2MD9nPSJtaW51dGUiOnA8Z3M/Zz0iaG91ciI6ZDxvaT9nPSJkYXkiOmQ8Z2c/Zz0ibW9udGgiOmc9InllYXIiLGc9PT0ic2Vjb25kIil7bGV0IHk9dShmLzFlMyk7cmV0dXJuIGkuZm9ybWF0RGlzdGFuY2UoInhTZWNvbmRzIix5LGEpfWVsc2UgaWYoZz09PSJtaW51dGUiKXtsZXQgeT11KHApO3JldHVybiBpLmZvcm1hdERpc3RhbmNlKCJ4TWludXRlcyIseSxhKX1lbHNlIGlmKGc9PT0iaG91ciIpe2xldCB5PXUocC82MCk7cmV0dXJuIGkuZm9ybWF0RGlzdGFuY2UoInhIb3VycyIseSxhKX1lbHNlIGlmKGc9PT0iZGF5Iil7bGV0IHk9dShkL2dzKTtyZXR1cm4gaS5mb3JtYXREaXN0YW5jZSgieERheXMiLHksYSl9ZWxzZSBpZihnPT09Im1vbnRoIil7bGV0IHk9dShkL29pKTtyZXR1cm4geT09PTEyJiZtIT09Im1vbnRoIj9pLmZvcm1hdERpc3RhbmNlKCJ4WWVhcnMiLDEsYSk6aS5mb3JtYXREaXN0YW5jZSgieE1vbnRocyIseSxhKX1lbHNle2xldCB5PXUoZC9nZyk7cmV0dXJuIGkuZm9ybWF0RGlzdGFuY2UoInhZZWFycyIseSxhKX19byhUZiwiZm9ybWF0RGlzdGFuY2VTdHJpY3QiKTt2YXIgT3NlPVRmO2Z1bmN0aW9uIHF2KHQsZSl7cmV0dXJuIFNmKHQsZ2UodCksZSl9byhxdiwiZm9ybWF0RGlzdGFuY2VUb05vdyIpO3ZhciBSc2U9cXY7ZnVuY3Rpb24gVXYodCxlKXtyZXR1cm4gVGYodCxnZSh0KSxlKX1vKFV2LCJmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0Iik7dmFyIEJzZT1Vdjt2YXIgWE49WyJ5ZWFycyIsIm1vbnRocyIsIndlZWtzIiwiZGF5cyIsImhvdXJzIiwibWludXRlcyIsInNlY29uZHMiXTtmdW5jdGlvbiBWdih0LGUpe2xldCByPV9lKCksbj1lPy5sb2NhbGU/P3IubG9jYWxlPz9XdCxpPWU/LmZvcm1hdD8/WE4scz1lPy56ZXJvPz8hMSxhPWU/LmRlbGltaXRlcj8/IiAiO3JldHVybiBuLmZvcm1hdERpc3RhbmNlP2kucmVkdWNlKChjLHUpPT57bGV0IGY9YHgke3UucmVwbGFjZSgvKF4uKS8saD0+aC50b1VwcGVyQ2FzZSgpKX1gLHA9dFt1XTtyZXR1cm4gcCE9PXZvaWQgMCYmKHN8fHRbdV0pP2MuY29uY2F0KG4uZm9ybWF0RGlzdGFuY2UoZixwKSk6Y30sW10pLmpvaW4oYSk6IiJ9byhWdiwiZm9ybWF0RHVyYXRpb24iKTt2YXIgcXNlPVZ2O2Z1bmN0aW9uIFl2KHQsZSl7bGV0IHI9Yih0LGU/LmluKTtpZihpc05hTigrcikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpO2xldCBuPWU/LmZvcm1hdD8/ImV4dGVuZGVkIixpPWU/LnJlcHJlc2VudGF0aW9uPz8iY29tcGxldGUiLHM9IiIsYT0iIixsPW49PT0iZXh0ZW5kZWQiPyItIjoiIixjPW49PT0iZXh0ZW5kZWQiPyI6IjoiIjtpZihpIT09InRpbWUiKXtsZXQgdT1LKHIuZ2V0RGF0ZSgpLDIpLGY9SyhyLmdldE1vbnRoKCkrMSwyKTtzPWAke0soci5nZXRGdWxsWWVhcigpLDQpfSR7bH0ke2Z9JHtsfSR7dX1gfWlmKGkhPT0iZGF0ZSIpe2xldCB1PXIuZ2V0VGltZXpvbmVPZmZzZXQoKTtpZih1IT09MCl7bGV0IGc9TWF0aC5hYnModSkseT1LKE1hdGgudHJ1bmMoZy82MCksMikseD1LKGclNjAsMik7YT1gJHt1PDA/IisiOiItIn0ke3l9OiR7eH1gfWVsc2UgYT0iWiI7bGV0IGY9SyhyLmdldEhvdXJzKCksMikscD1LKHIuZ2V0TWludXRlcygpLDIpLGg9SyhyLmdldFNlY29uZHMoKSwyKSxkPXM9PT0iIj8iIjoiVCIsbT1bZixwLGhdLmpvaW4oYyk7cz1gJHtzfSR7ZH0ke219JHthfWB9cmV0dXJuIHN9byhZdiwiZm9ybWF0SVNPIik7dmFyIFFzZT1ZdjtmdW5jdGlvbiBHdih0LGUpe2xldCByPWIodCxlPy5pbik7aWYoIXd0KHIpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTtsZXQgbj1lPy5mb3JtYXQ/PyJleHRlbmRlZCIsaT1lPy5yZXByZXNlbnRhdGlvbj8/ImNvbXBsZXRlIixzPSIiLGE9bj09PSJleHRlbmRlZCI/Ii0iOiIiLGw9bj09PSJleHRlbmRlZCI/IjoiOiIiO2lmKGkhPT0idGltZSIpe2xldCBjPUsoci5nZXREYXRlKCksMiksdT1LKHIuZ2V0TW9udGgoKSsxLDIpO3M9YCR7SyhyLmdldEZ1bGxZZWFyKCksNCl9JHthfSR7dX0ke2F9JHtjfWB9aWYoaSE9PSJkYXRlIil7bGV0IGM9SyhyLmdldEhvdXJzKCksMiksdT1LKHIuZ2V0TWludXRlcygpLDIpLGY9SyhyLmdldFNlY29uZHMoKSwyKTtzPWAke3N9JHtzPT09IiI/IiI6IiAifSR7Y30ke2x9JHt1fSR7bH0ke2Z9YH1yZXR1cm4gc31vKEd2LCJmb3JtYXRJU085MDc1Iik7dmFyIHRhZT1HdjtmdW5jdGlvbiBRdih0KXtsZXR7eWVhcnM6ZT0wLG1vbnRoczpyPTAsZGF5czpuPTAsaG91cnM6aT0wLG1pbnV0ZXM6cz0wLHNlY29uZHM6YT0wfT10O3JldHVybmBQJHtlfVkke3J9TSR7bn1EVCR7aX1IJHtzfU0ke2F9U2B9byhRdiwiZm9ybWF0SVNPRHVyYXRpb24iKTt2YXIgaWFlPVF2O2Z1bmN0aW9uIEp2KHQsZSl7bGV0IHI9Yih0LGU/LmluKTtpZighd3QocikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpO2xldCBuPWU/LmZyYWN0aW9uRGlnaXRzPz8wLGk9SyhyLmdldERhdGUoKSwyKSxzPUsoci5nZXRNb250aCgpKzEsMiksYT1yLmdldEZ1bGxZZWFyKCksbD1LKHIuZ2V0SG91cnMoKSwyKSxjPUsoci5nZXRNaW51dGVzKCksMiksdT1LKHIuZ2V0U2Vjb25kcygpLDIpLGY9IiI7aWYobj4wKXtsZXQgZD1yLmdldE1pbGxpc2Vjb25kcygpLG09TWF0aC50cnVuYyhkKk1hdGgucG93KDEwLG4tMykpO2Y9Ii4iK0sobSxuKX1sZXQgcD0iIixoPXIuZ2V0VGltZXpvbmVPZmZzZXQoKTtpZihoIT09MCl7bGV0IGQ9TWF0aC5hYnMoaCksbT1LKE1hdGgudHJ1bmMoZC82MCksMiksZz1LKGQlNjAsMik7cD1gJHtoPDA/IisiOiItIn0ke219OiR7Z31gfWVsc2UgcD0iWiI7cmV0dXJuYCR7YX0tJHtzfS0ke2l9VCR7bH06JHtjfToke3V9JHtmfSR7cH1gfW8oSnYsImZvcm1hdFJGQzMzMzkiKTt2YXIgdWFlPUp2O3ZhciBaTj1bIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGVSPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gS3YodCl7bGV0IGU9Yih0KTtpZighd3QoZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpO2xldCByPVpOW2UuZ2V0VVRDRGF5KCldLG49SyhlLmdldFVUQ0RhdGUoKSwyKSxpPWVSW2UuZ2V0VVRDTW9udGgoKV0scz1lLmdldFVUQ0Z1bGxZZWFyKCksYT1LKGUuZ2V0VVRDSG91cnMoKSwyKSxsPUsoZS5nZXRVVENNaW51dGVzKCksMiksYz1LKGUuZ2V0VVRDU2Vjb25kcygpLDIpO3JldHVybmAke3J9LCAke259ICR7aX0gJHtzfSAke2F9OiR7bH06JHtjfSBHTVRgfW8oS3YsImZvcm1hdFJGQzcyMzEiKTt2YXIgZ2FlPUt2O2Z1bmN0aW9uIFh2KHQsZSxyKXtsZXRbbixpXT10ZShyPy5pbix0LGUpLHM9X2UoKSxhPXI/LmxvY2FsZT8/cy5sb2NhbGU/P1d0LGw9cj8ud2Vla1N0YXJ0c09uPz9yPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/cy53ZWVrU3RhcnRzT24/P3MubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/PzAsYz1odChuLGkpO2lmKGlzTmFOKGMpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTtsZXQgdTtjPC02P3U9Im90aGVyIjpjPC0xP3U9Imxhc3RXZWVrIjpjPDA/dT0ieWVzdGVyZGF5IjpjPDE/dT0idG9kYXkiOmM8Mj91PSJ0b21vcnJvdyI6Yzw3P3U9Im5leHRXZWVrIjp1PSJvdGhlciI7bGV0IGY9YS5mb3JtYXRSZWxhdGl2ZSh1LG4saSx7bG9jYWxlOmEsd2Vla1N0YXJ0c09uOmx9KTtyZXR1cm4gYmwobixmLHtsb2NhbGU6YSx3ZWVrU3RhcnRzT246bH0pfW8oWHYsImZvcm1hdFJlbGF0aXZlIik7dmFyIFRhZT1YdjtmdW5jdGlvbiBadih0LGUpe3JldHVybiBiKHQqMWUzLGU/LmluKX1vKFp2LCJmcm9tVW5peFRpbWUiKTt2YXIgTWFlPVp2O2Z1bmN0aW9uIEVmKHQsZSl7cmV0dXJuIGIodCxlPy5pbikuZ2V0RGF0ZSgpfW8oRWYsImdldERhdGUiKTt2YXIgUGFlPUVmO2Z1bmN0aW9uIGRpKHQsZSl7cmV0dXJuIGIodCxlPy5pbikuZ2V0RGF5KCl9byhkaSwiZ2V0RGF5Iik7dmFyIEZhZT1kaTtmdW5jdGlvbiBEZih0LGUpe2xldCByPWIodCxlPy5pbiksbj1yLmdldEZ1bGxZZWFyKCksaT1yLmdldE1vbnRoKCkscz0kKHIsMCk7cmV0dXJuIHMuc2V0RnVsbFllYXIobixpKzEsMCkscy5zZXRIb3VycygwLDAsMCwwKSxzLmdldERhdGUoKX1vKERmLCJnZXREYXlzSW5Nb250aCIpO3ZhciBIYWU9RGY7ZnVuY3Rpb24gQ2YodCxlKXtsZXQgbj1iKHQsZT8uaW4pLmdldEZ1bGxZZWFyKCk7cmV0dXJuIG4lNDAwPT09MHx8biU0PT09MCYmbiUxMDAhPT0wfW8oQ2YsImlzTGVhcFllYXIiKTt2YXIgVWFlPUNmO2Z1bmN0aW9uIGVrKHQsZSl7bGV0IHI9Yih0LGU/LmluKTtyZXR1cm4gTnVtYmVyLmlzTmFOKCtyKT9OYU46Q2Yocik/MzY2OjM2NX1vKGVrLCJnZXREYXlzSW5ZZWFyIik7dmFyIEphZT1laztmdW5jdGlvbiB0ayh0LGUpe2xldCBuPWIodCxlPy5pbikuZ2V0RnVsbFllYXIoKTtyZXR1cm4gTWF0aC5mbG9vcihuLzEwKSoxMH1vKHRrLCJnZXREZWNhZGUiKTt2YXIgZWxlPXRrO2Z1bmN0aW9uIE1mKCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sX2UoKSl9byhNZiwiZ2V0RGVmYXVsdE9wdGlvbnMiKTt2YXIgaWxlPU1mO2Z1bmN0aW9uIHJrKHQsZSl7cmV0dXJuIGIodCxlPy5pbikuZ2V0SG91cnMoKX1vKHJrLCJnZXRIb3VycyIpO3ZhciBsbGU9cms7ZnVuY3Rpb24gT2YodCxlKXtsZXQgcj1iKHQsZT8uaW4pLmdldERheSgpO3JldHVybiByPT09MD83OnJ9byhPZiwiZ2V0SVNPRGF5Iik7dmFyIHBsZT1PZjtmdW5jdGlvbiBuayh0LGUpe2xldCByPXRyKHQsZSksaT0rdHIobGkociw2MCkpLStyO3JldHVybiBNYXRoLnJvdW5kKGkvbG4pfW8obmssImdldElTT1dlZWtzSW5ZZWFyIik7dmFyIHhsZT1uaztmdW5jdGlvbiBpayh0KXtyZXR1cm4gYih0KS5nZXRNaWxsaXNlY29uZHMoKX1vKGlrLCJnZXRNaWxsaXNlY29uZHMiKTt2YXIga2xlPWlrO2Z1bmN0aW9uIG9rKHQsZSl7cmV0dXJuIGIodCxlPy5pbikuZ2V0TWludXRlcygpfW8ob2ssImdldE1pbnV0ZXMiKTt2YXIgRGxlPW9rO2Z1bmN0aW9uIHNrKHQsZSl7cmV0dXJuIGIodCxlPy5pbikuZ2V0TW9udGgoKX1vKHNrLCJnZXRNb250aCIpO3ZhciBJbGU9c2s7ZnVuY3Rpb24gYWsodCxlKXtsZXRbcixuXT1bK2IodC5zdGFydCksK2IodC5lbmQpXS5zb3J0KChwLGgpPT5wLWgpLFtpLHNdPVsrYihlLnN0YXJ0KSwrYihlLmVuZCldLnNvcnQoKHAsaCk9PnAtaCk7aWYoIShyPHMmJmk8bikpcmV0dXJuIDA7bGV0IGw9aTxyP3I6aSxjPWwtR2UobCksdT1zPm4/bjpzLGY9dS1HZSh1KTtyZXR1cm4gTWF0aC5jZWlsKChmLWMpL0d1KX1vKGFrLCJnZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscyIpO3ZhciBGbGU9YWs7ZnVuY3Rpb24gbGsodCl7cmV0dXJuIGIodCkuZ2V0U2Vjb25kcygpfW8obGssImdldFNlY29uZHMiKTt2YXIgemxlPWxrO2Z1bmN0aW9uIGNrKHQpe3JldHVybitiKHQpfW8oY2ssImdldFRpbWUiKTt2YXIgcWxlPWNrO2Z1bmN0aW9uIHVrKHQpe3JldHVybiBNYXRoLnRydW5jKCtiKHQpLzFlMyl9byh1aywiZ2V0VW5peFRpbWUiKTt2YXIgR2xlPXVrO2Z1bmN0aW9uIGZrKHQsZSl7bGV0IHI9X2UoKSxuPWU/LndlZWtTdGFydHNPbj8/ZT8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/P3Iud2Vla1N0YXJ0c09uPz9yLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz8wLGk9RWYoYih0LGU/LmluKSk7aWYoaXNOYU4oaSkpcmV0dXJuIE5hTjtsZXQgcz1kaShmaSh0LGUpKSxhPW4tczthPD0wJiYoYSs9Nyk7bGV0IGw9aS1hO3JldHVybiBNYXRoLmNlaWwobC83KSsxfW8oZmssImdldFdlZWtPZk1vbnRoIik7dmFyIHJjZT1maztmdW5jdGlvbiBJZih0LGUpe2xldCByPWIodCxlPy5pbiksbj1yLmdldE1vbnRoKCk7cmV0dXJuIHIuc2V0RnVsbFllYXIoci5nZXRGdWxsWWVhcigpLG4rMSwwKSxyLnNldEhvdXJzKDAsMCwwLDApLGIocixlPy5pbil9byhJZiwibGFzdERheU9mTW9udGgiKTt2YXIgc2NlPUlmO2Z1bmN0aW9uIHBrKHQsZSl7bGV0IHI9Yih0LGU/LmluKTtyZXR1cm4gc28oSWYocixlKSxmaShyLGUpLGUpKzF9byhwaywiZ2V0V2Vla3NJbk1vbnRoIik7dmFyIGhjZT1waztmdW5jdGlvbiBoayh0LGUpe3JldHVybiBiKHQsZT8uaW4pLmdldEZ1bGxZZWFyKCl9byhoaywiZ2V0WWVhciIpO3ZhciB5Y2U9aGs7ZnVuY3Rpb24gZGsodCl7cmV0dXJuIE1hdGgudHJ1bmModCplcil9byhkaywiaG91cnNUb01pbGxpc2Vjb25kcyIpO3ZhciB2Y2U9ZGs7ZnVuY3Rpb24gbWsodCl7cmV0dXJuIE1hdGgudHJ1bmModCpRdSl9byhtaywiaG91cnNUb01pbnV0ZXMiKTt2YXIgRWNlPW1rO2Z1bmN0aW9uIGdrKHQpe3JldHVybiBNYXRoLnRydW5jKHQqaW8pfW8oZ2ssImhvdXJzVG9TZWNvbmRzIik7dmFyIE9jZT1naztmdW5jdGlvbiB5ayh0LGUscil7bGV0W24saV09dGUocj8uaW4sdCxlKTtpZihpc05hTigrbikpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3RhcnQgZGF0ZSBpcyBpbnZhbGlkIik7aWYoaXNOYU4oK2kpKXRocm93IG5ldyBUeXBlRXJyb3IoIkVuZCBkYXRlIGlzIGludmFsaWQiKTtpZihyPy5hc3NlcnRQb3NpdGl2ZSYmK24+K2kpdGhyb3cgbmV3IFR5cGVFcnJvcigiRW5kIGRhdGUgbXVzdCBiZSBhZnRlciBzdGFydCBkYXRlIik7cmV0dXJue3N0YXJ0Om4sZW5kOml9fW8oeWssImludGVydmFsIik7dmFyIE5jZT15aztmdW5jdGlvbiB4ayh0LGUpe2xldHtzdGFydDpyLGVuZDpufT1kdChlPy5pbix0KSxpPXt9LHM9bWYobixyKTtzJiYoaS55ZWFycz1zKTtsZXQgYT1zaShyLHt5ZWFyczppLnllYXJzfSksbD11aShuLGEpO2wmJihpLm1vbnRocz1sKTtsZXQgYz1zaShhLHttb250aHM6aS5tb250aHN9KSx1PXZzKG4sYyk7dSYmKGkuZGF5cz11KTtsZXQgZj1zaShjLHtkYXlzOmkuZGF5c30pLHA9YW8obixmKTtwJiYoaS5ob3Vycz1wKTtsZXQgaD1zaShmLHtob3VyczppLmhvdXJzfSksZD1sbyhuLGgpO2QmJihpLm1pbnV0ZXM9ZCk7bGV0IG09c2koaCx7bWludXRlczppLm1pbnV0ZXN9KSxnPWhuKG4sbSk7cmV0dXJuIGcmJihpLnNlY29uZHM9ZyksaX1vKHhrLCJpbnRlcnZhbFRvRHVyYXRpb24iKTt2YXIgcWNlPXhrO2Z1bmN0aW9uIGJrKHQsZSxyKXtsZXQgbjtyZXR1cm4gdFIoZSk/bj1lOnI9ZSxuZXcgSW50bC5EYXRlVGltZUZvcm1hdChyPy5sb2NhbGUsbikuZm9ybWF0KGIodCkpfW8oYmssImludGxGb3JtYXQiKTtmdW5jdGlvbiB0Uih0KXtyZXR1cm4gdCE9PXZvaWQgMCYmISgibG9jYWxlImluIHQpfW8odFIsImlzRm9ybWF0T3B0aW9ucyIpO3ZhciBHY2U9Yms7ZnVuY3Rpb24gd2sodCxlLHIpe2xldCBuPTAsaSxbcyxhXT10ZShyPy5pbix0LGUpO2lmKHI/LnVuaXQpaT1yPy51bml0LGk9PT0ic2Vjb25kIj9uPWhuKHMsYSk6aT09PSJtaW51dGUiP249bG8ocyxhKTppPT09ImhvdXIiP249YW8ocyxhKTppPT09ImRheSI/bj1odChzLGEpOmk9PT0id2VlayI/bj1zbyhzLGEpOmk9PT0ibW9udGgiP249b28ocyxhKTppPT09InF1YXJ0ZXIiP249d3MocyxhKTppPT09InllYXIiJiYobj1jaShzLGEpKTtlbHNle2xldCBjPWhuKHMsYSk7TWF0aC5hYnMoYyk8eXM/KG49aG4ocyxhKSxpPSJzZWNvbmQiKTpNYXRoLmFicyhjKTxpbz8obj1sbyhzLGEpLGk9Im1pbnV0ZSIpOk1hdGguYWJzKGMpPFZ1JiZNYXRoLmFicyhodChzLGEpKTwxPyhuPWFvKHMsYSksaT0iaG91ciIpOk1hdGguYWJzKGMpPHR2JiYobj1odChzLGEpKSYmTWF0aC5hYnMobik8Nz9pPSJkYXkiOk1hdGguYWJzKGMpPHhnPyhuPXNvKHMsYSksaT0id2VlayIpOk1hdGguYWJzKGMpPHJ2PyhuPW9vKHMsYSksaT0ibW9udGgiKTpNYXRoLmFicyhjKTx5Zz93cyhzLGEpPDQ/KG49d3MocyxhKSxpPSJxdWFydGVyIik6KG49Y2kocyxhKSxpPSJ5ZWFyIik6KG49Y2kocyxhKSxpPSJ5ZWFyIil9cmV0dXJuIG5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChyPy5sb2NhbGUse251bWVyaWM6ImF1dG8iLC4uLnJ9KS5mb3JtYXQobixpKX1vKHdrLCJpbnRsRm9ybWF0RGlzdGFuY2UiKTt2YXIgYXVlPXdrO2Z1bmN0aW9uIHZrKHQsZSl7cmV0dXJuK2IodCk+K2IoZSl9byh2aywiaXNBZnRlciIpO3ZhciBmdWU9dms7ZnVuY3Rpb24ga2sodCxlKXtyZXR1cm4rYih0KTwrYihlKX1vKGtrLCJpc0JlZm9yZSIpO3ZhciBtdWU9a2s7ZnVuY3Rpb24gU2sodCxlKXtyZXR1cm4rYih0KT09K2IoZSl9byhTaywiaXNFcXVhbCIpO3ZhciBidWU9U2s7ZnVuY3Rpb24gVGsodCxlLHIpe2xldCBuPW5ldyBEYXRlKHQsZSxyKTtyZXR1cm4gbi5nZXRGdWxsWWVhcigpPT09dCYmbi5nZXRNb250aCgpPT09ZSYmbi5nZXREYXRlKCk9PT1yfW8oVGssImlzRXhpc3RzIik7dmFyIGt1ZT1UaztmdW5jdGlvbiBFayh0LGUpe3JldHVybiBiKHQsZT8uaW4pLmdldERhdGUoKT09PTF9byhFaywiaXNGaXJzdERheU9mTW9udGgiKTt2YXIgRHVlPUVrO2Z1bmN0aW9uIERrKHQsZSl7cmV0dXJuIGIodCxlPy5pbikuZ2V0RGF5KCk9PT01fW8oRGssImlzRnJpZGF5Iik7dmFyIEl1ZT1EaztmdW5jdGlvbiBDayh0KXtyZXR1cm4rYih0KT5EYXRlLm5vdygpfW8oQ2ssImlzRnV0dXJlIik7dmFyIFJ1ZT1DaztmdW5jdGlvbiBfZih0LGUpe2xldCByPXJSKGUpP25ldyBlKDApOiQoZSwwKTtyZXR1cm4gci5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKSxyLnNldEhvdXJzKHQuZ2V0SG91cnMoKSx0LmdldE1pbnV0ZXMoKSx0LmdldFNlY29uZHMoKSx0LmdldE1pbGxpc2Vjb25kcygpKSxyfW8oX2YsInRyYW5zcG9zZSIpO2Z1bmN0aW9uIHJSKHQpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIiYmdC5wcm90b3R5cGU/LmNvbnN0cnVjdG9yPT09dH1vKHJSLCJpc0NvbnN0cnVjdG9yIik7dmFyICR1ZT1fZjt2YXIgblI9MTAsUGY9Y2xhc3N7c3RhdGlje28odGhpcywiU2V0dGVyIil9c3ViUHJpb3JpdHk9MDt2YWxpZGF0ZShlLHIpe3JldHVybiEwfX0sTmY9Y2xhc3MgZXh0ZW5kcyBQZntzdGF0aWN7byh0aGlzLCJWYWx1ZVNldHRlciIpfWNvbnN0cnVjdG9yKGUscixuLGkscyl7c3VwZXIoKSx0aGlzLnZhbHVlPWUsdGhpcy52YWxpZGF0ZVZhbHVlPXIsdGhpcy5zZXRWYWx1ZT1uLHRoaXMucHJpb3JpdHk9aSxzJiYodGhpcy5zdWJQcmlvcml0eT1zKX12YWxpZGF0ZShlLHIpe3JldHVybiB0aGlzLnZhbGlkYXRlVmFsdWUoZSx0aGlzLnZhbHVlLHIpfXNldChlLHIsbil7cmV0dXJuIHRoaXMuc2V0VmFsdWUoZSxyLHRoaXMudmFsdWUsbil9fSxSZj1jbGFzcyBleHRlbmRzIFBme3N0YXRpY3tvKHRoaXMsIkRhdGVUaW1lem9uZVNldHRlciIpfXByaW9yaXR5PW5SO3N1YlByaW9yaXR5PS0xO2NvbnN0cnVjdG9yKGUscil7c3VwZXIoKSx0aGlzLmNvbnRleHQ9ZXx8KG49PiQocixuKSl9c2V0KGUscil7cmV0dXJuIHIudGltZXN0YW1wSXNTZXQ/ZTokKGUsX2YoZSx0aGlzLmNvbnRleHQpKX19O3ZhciBKPWNsYXNze3N0YXRpY3tvKHRoaXMsIlBhcnNlciIpfXJ1bihlLHIsbixpKXtsZXQgcz10aGlzLnBhcnNlKGUscixuLGkpO3JldHVybiBzP3tzZXR0ZXI6bmV3IE5mKHMudmFsdWUsdGhpcy52YWxpZGF0ZSx0aGlzLnNldCx0aGlzLnByaW9yaXR5LHRoaXMuc3ViUHJpb3JpdHkpLHJlc3Q6cy5yZXN0fTpudWxsfXZhbGlkYXRlKGUscixuKXtyZXR1cm4hMH19O3ZhciBMZj1jbGFzcyBleHRlbmRzIEp7c3RhdGlje28odGhpcywiRXJhUGFyc2VyIil9cHJpb3JpdHk9MTQwO3BhcnNlKGUscixuKXtzd2l0Y2gocil7Y2FzZSJHIjpjYXNlIkdHIjpjYXNlIkdHRyI6cmV0dXJuIG4uZXJhKGUse3dpZHRoOiJhYmJyZXZpYXRlZCJ9KXx8bi5lcmEoZSx7d2lkdGg6Im5hcnJvdyJ9KTtjYXNlIkdHR0dHIjpyZXR1cm4gbi5lcmEoZSx7d2lkdGg6Im5hcnJvdyJ9KTtkZWZhdWx0OnJldHVybiBuLmVyYShlLHt3aWR0aDoid2lkZSJ9KXx8bi5lcmEoZSx7d2lkdGg6ImFiYnJldmlhdGVkIn0pfHxuLmVyYShlLHt3aWR0aDoibmFycm93In0pfX1zZXQoZSxyLG4pe3JldHVybiByLmVyYT1uLGUuc2V0RnVsbFllYXIobiwwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJSIiwidSIsInQiLCJUIl19O3ZhciBTZT17bW9udGg6L14oMVswLTJdfDA/XGQpLyxkYXRlOi9eKDNbMC0xXXxbMC0yXT9cZCkvLGRheU9mWWVhcjovXigzNlswLTZdfDNbMC01XVxkfFswLTJdP1xkP1xkKS8sd2VlazovXig1WzAtM118WzAtNF0/XGQpLyxob3VyMjNoOi9eKDJbMC0zXXxbMC0xXT9cZCkvLGhvdXIyNGg6L14oMlswLTRdfFswLTFdP1xkKS8saG91cjExaDovXigxWzAtMV18MD9cZCkvLGhvdXIxMmg6L14oMVswLTJdfDA/XGQpLyxtaW51dGU6L15bMC01XT9cZC8sc2Vjb25kOi9eWzAtNV0/XGQvLHNpbmdsZURpZ2l0Oi9eXGQvLHR3b0RpZ2l0czovXlxkezEsMn0vLHRocmVlRGlnaXRzOi9eXGR7MSwzfS8sZm91ckRpZ2l0czovXlxkezEsNH0vLGFueURpZ2l0c1NpZ25lZDovXi0/XGQrLyxzaW5nbGVEaWdpdFNpZ25lZDovXi0/XGQvLHR3b0RpZ2l0c1NpZ25lZDovXi0/XGR7MSwyfS8sdGhyZWVEaWdpdHNTaWduZWQ6L14tP1xkezEsM30vLGZvdXJEaWdpdHNTaWduZWQ6L14tP1xkezEsNH0vfSxncj17YmFzaWNPcHRpb25hbE1pbnV0ZXM6L14oWystXSkoXGR7Mn0pKFxkezJ9KT98Wi8sYmFzaWM6L14oWystXSkoXGR7Mn0pKFxkezJ9KXxaLyxiYXNpY09wdGlvbmFsU2Vjb25kczovXihbKy1dKShcZHsyfSkoXGR7Mn0pKChcZHsyfSkpP3xaLyxleHRlbmRlZDovXihbKy1dKShcZHsyfSk6KFxkezJ9KXxaLyxleHRlbmRlZE9wdGlvbmFsU2Vjb25kczovXihbKy1dKShcZHsyfSk6KFxkezJ9KSg6KFxkezJ9KSk/fFovfTtmdW5jdGlvbiBOZSh0LGUpe3JldHVybiB0JiZ7dmFsdWU6ZSh0LnZhbHVlKSxyZXN0OnQucmVzdH19byhOZSwibWFwVmFsdWUiKTtmdW5jdGlvbiB2ZSh0LGUpe2xldCByPWUubWF0Y2godCk7cmV0dXJuIHI/e3ZhbHVlOnBhcnNlSW50KHJbMF0sMTApLHJlc3Q6ZS5zbGljZShyWzBdLmxlbmd0aCl9Om51bGx9byh2ZSwicGFyc2VOdW1lcmljUGF0dGVybiIpO2Z1bmN0aW9uIHlyKHQsZSl7bGV0IHI9ZS5tYXRjaCh0KTtpZighcilyZXR1cm4gbnVsbDtpZihyWzBdPT09IloiKXJldHVybnt2YWx1ZTowLHJlc3Q6ZS5zbGljZSgxKX07bGV0IG49clsxXT09PSIrIj8xOi0xLGk9clsyXT9wYXJzZUludChyWzJdLDEwKTowLHM9clszXT9wYXJzZUludChyWzNdLDEwKTowLGE9cls1XT9wYXJzZUludChyWzVdLDEwKTowO3JldHVybnt2YWx1ZTpuKihpKmVyK3MqVHQrYSptcykscmVzdDplLnNsaWNlKHJbMF0ubGVuZ3RoKX19byh5ciwicGFyc2VUaW1lem9uZVBhdHRlcm4iKTtmdW5jdGlvbiBGZih0KXtyZXR1cm4gdmUoU2UuYW55RGlnaXRzU2lnbmVkLHQpfW8oRmYsInBhcnNlQW55RGlnaXRzU2lnbmVkIik7ZnVuY3Rpb24gaGUodCxlKXtzd2l0Y2godCl7Y2FzZSAxOnJldHVybiB2ZShTZS5zaW5nbGVEaWdpdCxlKTtjYXNlIDI6cmV0dXJuIHZlKFNlLnR3b0RpZ2l0cyxlKTtjYXNlIDM6cmV0dXJuIHZlKFNlLnRocmVlRGlnaXRzLGUpO2Nhc2UgNDpyZXR1cm4gdmUoU2UuZm91ckRpZ2l0cyxlKTtkZWZhdWx0OnJldHVybiB2ZShuZXcgUmVnRXhwKCJeXFxkezEsIit0KyJ9IiksZSl9fW8oaGUsInBhcnNlTkRpZ2l0cyIpO2Z1bmN0aW9uIFBzKHQsZSl7c3dpdGNoKHQpe2Nhc2UgMTpyZXR1cm4gdmUoU2Uuc2luZ2xlRGlnaXRTaWduZWQsZSk7Y2FzZSAyOnJldHVybiB2ZShTZS50d29EaWdpdHNTaWduZWQsZSk7Y2FzZSAzOnJldHVybiB2ZShTZS50aHJlZURpZ2l0c1NpZ25lZCxlKTtjYXNlIDQ6cmV0dXJuIHZlKFNlLmZvdXJEaWdpdHNTaWduZWQsZSk7ZGVmYXVsdDpyZXR1cm4gdmUobmV3IFJlZ0V4cCgiXi0/XFxkezEsIit0KyJ9IiksZSl9fW8oUHMsInBhcnNlTkRpZ2l0c1NpZ25lZCIpO2Z1bmN0aW9uIE5zKHQpe3N3aXRjaCh0KXtjYXNlIm1vcm5pbmciOnJldHVybiA0O2Nhc2UiZXZlbmluZyI6cmV0dXJuIDE3O2Nhc2UicG0iOmNhc2Uibm9vbiI6Y2FzZSJhZnRlcm5vb24iOnJldHVybiAxMjtkZWZhdWx0OnJldHVybiAwfX1vKE5zLCJkYXlQZXJpb2RFbnVtVG9Ib3VycyIpO2Z1bmN0aW9uIEFmKHQsZSl7bGV0IHI9ZT4wLG49cj9lOjEtZSxpO2lmKG48PTUwKWk9dHx8MTAwO2Vsc2V7bGV0IHM9bis1MCxhPU1hdGgudHJ1bmMocy8xMDApKjEwMCxsPXQ+PXMlMTAwO2k9dCthLShsPzEwMDowKX1yZXR1cm4gcj9pOjEtaX1vKEFmLCJub3JtYWxpemVUd29EaWdpdFllYXIiKTtmdW5jdGlvbiAkZih0KXtyZXR1cm4gdCU0MDA9PT0wfHx0JTQ9PT0wJiZ0JTEwMCE9PTB9bygkZiwiaXNMZWFwWWVhckluZGV4Iik7dmFyIEJmPWNsYXNzIGV4dGVuZHMgSntzdGF0aWN7byh0aGlzLCJZZWFyUGFyc2VyIil9cHJpb3JpdHk9MTMwO2luY29tcGF0aWJsZVRva2Vucz1bIlkiLCJSIiwidSIsInciLCJJIiwiaSIsImUiLCJjIiwidCIsIlQiXTtwYXJzZShlLHIsbil7bGV0IGk9byhzPT4oe3llYXI6cyxpc1R3b0RpZ2l0WWVhcjpyPT09Inl5In0pLCJ2YWx1ZUNhbGxiYWNrIik7c3dpdGNoKHIpe2Nhc2UieSI6cmV0dXJuIE5lKGhlKDQsZSksaSk7Y2FzZSJ5byI6cmV0dXJuIE5lKG4ub3JkaW5hbE51bWJlcihlLHt1bml0OiJ5ZWFyIn0pLGkpO2RlZmF1bHQ6cmV0dXJuIE5lKGhlKHIubGVuZ3RoLGUpLGkpfX12YWxpZGF0ZShlLHIpe3JldHVybiByLmlzVHdvRGlnaXRZZWFyfHxyLnllYXI+MH1zZXQoZSxyLG4pe2xldCBpPWUuZ2V0RnVsbFllYXIoKTtpZihuLmlzVHdvRGlnaXRZZWFyKXtsZXQgYT1BZihuLnllYXIsaSk7cmV0dXJuIGUuc2V0RnVsbFllYXIoYSwwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1sZXQgcz0hKCJlcmEiaW4gcil8fHIuZXJhPT09MT9uLnllYXI6MS1uLnllYXI7cmV0dXJuIGUuc2V0RnVsbFllYXIocywwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX19O3ZhciB6Zj1jbGFzcyBleHRlbmRzIEp7c3RhdGlje28odGhpcywiTG9jYWxXZWVrWWVhclBhcnNlciIpfXByaW9yaXR5PTEzMDtwYXJzZShlLHIsbil7bGV0IGk9byhzPT4oe3llYXI6cyxpc1R3b0RpZ2l0WWVhcjpyPT09IllZIn0pLCJ2YWx1ZUNhbGxiYWNrIik7c3dpdGNoKHIpe2Nhc2UiWSI6cmV0dXJuIE5lKGhlKDQsZSksaSk7Y2FzZSJZbyI6cmV0dXJuIE5lKG4ub3JkaW5hbE51bWJlcihlLHt1bml0OiJ5ZWFyIn0pLGkpO2RlZmF1bHQ6cmV0dXJuIE5lKGhlKHIubGVuZ3RoLGUpLGkpfX12YWxpZGF0ZShlLHIpe3JldHVybiByLmlzVHdvRGlnaXRZZWFyfHxyLnllYXI+MH1zZXQoZSxyLG4saSl7bGV0IHM9cGkoZSxpKTtpZihuLmlzVHdvRGlnaXRZZWFyKXtsZXQgbD1BZihuLnllYXIscyk7cmV0dXJuIGUuc2V0RnVsbFllYXIobCwwLGkuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSxlLnNldEhvdXJzKDAsMCwwLDApLEZlKGUsaSl9bGV0IGE9ISgiZXJhImluIHIpfHxyLmVyYT09PTE/bi55ZWFyOjEtbi55ZWFyO3JldHVybiBlLnNldEZ1bGxZZWFyKGEsMCxpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSksZS5zZXRIb3VycygwLDAsMCwwKSxGZShlLGkpfWluY29tcGF0aWJsZVRva2Vucz1bInkiLCJSIiwidSIsIlEiLCJxIiwiTSIsIkwiLCJJIiwiZCIsIkQiLCJpIiwidCIsIlQiXX07dmFyIEhmPWNsYXNzIGV4dGVuZHMgSntzdGF0aWN7byh0aGlzLCJJU09XZWVrWWVhclBhcnNlciIpfXByaW9yaXR5PTEzMDtwYXJzZShlLHIpe3JldHVybiByPT09IlIiP1BzKDQsZSk6UHMoci5sZW5ndGgsZSl9c2V0KGUscixuKXtsZXQgaT0kKGUsMCk7cmV0dXJuIGkuc2V0RnVsbFllYXIobiwwLDQpLGkuc2V0SG91cnMoMCwwLDAsMCksdHQoaSl9aW5jb21wYXRpYmxlVG9rZW5zPVsiRyIsInkiLCJZIiwidSIsIlEiLCJxIiwiTSIsIkwiLCJ3IiwiZCIsIkQiLCJlIiwiYyIsInQiLCJUIl19O3ZhciBqZj1jbGFzcyBleHRlbmRzIEp7c3RhdGlje28odGhpcywiRXh0ZW5kZWRZZWFyUGFyc2VyIil9cHJpb3JpdHk9MTMwO3BhcnNlKGUscil7cmV0dXJuIHI9PT0idSI/UHMoNCxlKTpQcyhyLmxlbmd0aCxlKX1zZXQoZSxyLG4pe3JldHVybiBlLnNldEZ1bGxZZWFyKG4sMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsiRyIsInkiLCJZIiwiUiIsInciLCJJIiwiaSIsImUiLCJjIiwidCIsIlQiXX07dmFyIFdmPWNsYXNzIGV4dGVuZHMgSntzdGF0aWN7byh0aGlzLCJRdWFydGVyUGFyc2VyIil9cHJpb3JpdHk9MTIwO3BhcnNlKGUscixuKXtzd2l0Y2gocil7Y2FzZSJRIjpjYXNlIlFRIjpyZXR1cm4gaGUoci5sZW5ndGgsZSk7Y2FzZSJRbyI6cmV0dXJuIG4ub3JkaW5hbE51bWJlcihlLHt1bml0OiJxdWFydGVyIn0pO2Nhc2UiUVFRIjpyZXR1cm4gbi5xdWFydGVyKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8bi5xdWFydGVyKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJRUVFRUSI6cmV0dXJuIG4ucXVhcnRlcihlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIG4ucXVhcnRlcihlLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8bi5xdWFydGVyKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8bi5xdWFydGVyKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fXZhbGlkYXRlKGUscil7cmV0dXJuIHI+PTEmJnI8PTR9c2V0KGUscixuKXtyZXR1cm4gZS5zZXRNb250aCgobi0xKSozLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJZIiwiUiIsInEiLCJNIiwiTCIsInciLCJJIiwiZCIsIkQiLCJpIiwiZSIsImMiLCJ0IiwiVCJdfTt2YXIgcWY9Y2xhc3MgZXh0ZW5kcyBKe3N0YXRpY3tvKHRoaXMsIlN0YW5kQWxvbmVRdWFydGVyUGFyc2VyIil9cHJpb3JpdHk9MTIwO3BhcnNlKGUscixuKXtzd2l0Y2gocil7Y2FzZSJxIjpjYXNlInFxIjpyZXR1cm4gaGUoci5sZW5ndGgsZSk7Y2FzZSJxbyI6cmV0dXJuIG4ub3JkaW5hbE51bWJlcihlLHt1bml0OiJxdWFydGVyIn0pO2Nhc2UicXFxIjpyZXR1cm4gbi5xdWFydGVyKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoic3RhbmRhbG9uZSJ9KXx8bi5xdWFydGVyKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJxcXFxcSI6cmV0dXJuIG4ucXVhcnRlcihlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2RlZmF1bHQ6cmV0dXJuIG4ucXVhcnRlcihlLHt3aWR0aDoid2lkZSIsY29udGV4dDoic3RhbmRhbG9uZSJ9KXx8bi5xdWFydGVyKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoic3RhbmRhbG9uZSJ9KXx8bi5xdWFydGVyKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6InN0YW5kYWxvbmUifSl9fXZhbGlkYXRlKGUscil7cmV0dXJuIHI+PTEmJnI8PTR9c2V0KGUscixuKXtyZXR1cm4gZS5zZXRNb250aCgobi0xKSozLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJZIiwiUiIsIlEiLCJNIiwiTCIsInciLCJJIiwiZCIsIkQiLCJpIiwiZSIsImMiLCJ0IiwiVCJdfTt2YXIgVWY9Y2xhc3MgZXh0ZW5kcyBKe3N0YXRpY3tvKHRoaXMsIk1vbnRoUGFyc2VyIil9aW5jb21wYXRpYmxlVG9rZW5zPVsiWSIsIlIiLCJxIiwiUSIsIkwiLCJ3IiwiSSIsIkQiLCJpIiwiZSIsImMiLCJ0IiwiVCJdO3ByaW9yaXR5PTExMDtwYXJzZShlLHIsbil7bGV0IGk9byhzPT5zLTEsInZhbHVlQ2FsbGJhY2siKTtzd2l0Y2gocil7Y2FzZSJNIjpyZXR1cm4gTmUodmUoU2UubW9udGgsZSksaSk7Y2FzZSJNTSI6cmV0dXJuIE5lKGhlKDIsZSksaSk7Y2FzZSJNbyI6cmV0dXJuIE5lKG4ub3JkaW5hbE51bWJlcihlLHt1bml0OiJtb250aCJ9KSxpKTtjYXNlIk1NTSI6cmV0dXJuIG4ubW9udGgoZSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxuLm1vbnRoKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJNTU1NTSI6cmV0dXJuIG4ubW9udGgoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtkZWZhdWx0OnJldHVybiBuLm1vbnRoKGUse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxuLm1vbnRoKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8bi5tb250aChlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfX12YWxpZGF0ZShlLHIpe3JldHVybiByPj0wJiZyPD0xMX1zZXQoZSxyLG4pe3JldHVybiBlLnNldE1vbnRoKG4sMSksZS5zZXRIb3VycygwLDAsMCwwKSxlfX07dmFyIFZmPWNsYXNzIGV4dGVuZHMgSntzdGF0aWN7byh0aGlzLCJTdGFuZEFsb25lTW9udGhQYXJzZXIiKX1wcmlvcml0eT0xMTA7cGFyc2UoZSxyLG4pe2xldCBpPW8ocz0+cy0xLCJ2YWx1ZUNhbGxiYWNrIik7c3dpdGNoKHIpe2Nhc2UiTCI6cmV0dXJuIE5lKHZlKFNlLm1vbnRoLGUpLGkpO2Nhc2UiTEwiOnJldHVybiBOZShoZSgyLGUpLGkpO2Nhc2UiTG8iOnJldHVybiBOZShuLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoibW9udGgifSksaSk7Y2FzZSJMTEwiOnJldHVybiBuLm1vbnRoKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoic3RhbmRhbG9uZSJ9KXx8bi5tb250aChlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2Nhc2UiTExMTEwiOnJldHVybiBuLm1vbnRoKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7ZGVmYXVsdDpyZXR1cm4gbi5tb250aChlLHt3aWR0aDoid2lkZSIsY29udGV4dDoic3RhbmRhbG9uZSJ9KXx8bi5tb250aChlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSl8fG4ubW9udGgoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoic3RhbmRhbG9uZSJ9KX19dmFsaWRhdGUoZSxyKXtyZXR1cm4gcj49MCYmcjw9MTF9c2V0KGUscixuKXtyZXR1cm4gZS5zZXRNb250aChuLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJZIiwiUiIsInEiLCJRIiwiTSIsInciLCJJIiwiRCIsImkiLCJlIiwiYyIsInQiLCJUIl19O2Z1bmN0aW9uIFlmKHQsZSxyKXtsZXQgbj1iKHQscj8uaW4pLGk9SXMobixyKS1lO3JldHVybiBuLnNldERhdGUobi5nZXREYXRlKCktaSo3KSxiKG4scj8uaW4pfW8oWWYsInNldFdlZWsiKTt2YXIgamZlPVlmO3ZhciBHZj1jbGFzcyBleHRlbmRzIEp7c3RhdGlje28odGhpcywiTG9jYWxXZWVrUGFyc2VyIil9cHJpb3JpdHk9MTAwO3BhcnNlKGUscixuKXtzd2l0Y2gocil7Y2FzZSJ3IjpyZXR1cm4gdmUoU2Uud2VlayxlKTtjYXNlIndvIjpyZXR1cm4gbi5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6IndlZWsifSk7ZGVmYXVsdDpyZXR1cm4gaGUoci5sZW5ndGgsZSl9fXZhbGlkYXRlKGUscil7cmV0dXJuIHI+PTEmJnI8PTUzfXNldChlLHIsbixpKXtyZXR1cm4gRmUoWWYoZSxuLGkpLGkpfWluY29tcGF0aWJsZVRva2Vucz1bInkiLCJSIiwidSIsInEiLCJRIiwiTSIsIkwiLCJJIiwiZCIsIkQiLCJpIiwidCIsIlQiXX07ZnVuY3Rpb24gUWYodCxlLHIpe2xldCBuPWIodCxyPy5pbiksaT1PcyhuLHIpLWU7cmV0dXJuIG4uc2V0RGF0ZShuLmdldERhdGUoKS1pKjcpLG59byhRZiwic2V0SVNPV2VlayIpO3ZhciBlcGU9UWY7dmFyIEpmPWNsYXNzIGV4dGVuZHMgSntzdGF0aWN7byh0aGlzLCJJU09XZWVrUGFyc2VyIil9cHJpb3JpdHk9MTAwO3BhcnNlKGUscixuKXtzd2l0Y2gocil7Y2FzZSJJIjpyZXR1cm4gdmUoU2Uud2VlayxlKTtjYXNlIklvIjpyZXR1cm4gbi5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6IndlZWsifSk7ZGVmYXVsdDpyZXR1cm4gaGUoci5sZW5ndGgsZSl9fXZhbGlkYXRlKGUscil7cmV0dXJuIHI+PTEmJnI8PTUzfXNldChlLHIsbil7cmV0dXJuIHR0KFFmKGUsbikpfWluY29tcGF0aWJsZVRva2Vucz1bInkiLCJZIiwidSIsInEiLCJRIiwiTSIsIkwiLCJ3IiwiZCIsIkQiLCJlIiwiYyIsInQiLCJUIl19O3ZhciBpUj1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLG9SPVszMSwyOSwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sS2Y9Y2xhc3MgZXh0ZW5kcyBKe3N0YXRpY3tvKHRoaXMsIkRhdGVQYXJzZXIiKX1wcmlvcml0eT05MDtzdWJQcmlvcml0eT0xO3BhcnNlKGUscixuKXtzd2l0Y2gocil7Y2FzZSJkIjpyZXR1cm4gdmUoU2UuZGF0ZSxlKTtjYXNlImRvIjpyZXR1cm4gbi5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6ImRhdGUifSk7ZGVmYXVsdDpyZXR1cm4gaGUoci5sZW5ndGgsZSl9fXZhbGlkYXRlKGUscil7bGV0IG49ZS5nZXRGdWxsWWVhcigpLGk9JGYobikscz1lLmdldE1vbnRoKCk7cmV0dXJuIGk/cj49MSYmcjw9b1Jbc106cj49MSYmcjw9aVJbc119c2V0KGUscixuKXtyZXR1cm4gZS5zZXREYXRlKG4pLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJZIiwiUiIsInEiLCJRIiwidyIsIkkiLCJEIiwiaSIsImUiLCJjIiwidCIsIlQiXX07dmFyIFhmPWNsYXNzIGV4dGVuZHMgSntzdGF0aWN7byh0aGlzLCJEYXlPZlllYXJQYXJzZXIiKX1wcmlvcml0eT05MDtzdWJwcmlvcml0eT0xO3BhcnNlKGUscixuKXtzd2l0Y2gocil7Y2FzZSJEIjpjYXNlIkREIjpyZXR1cm4gdmUoU2UuZGF5T2ZZZWFyLGUpO2Nhc2UiRG8iOnJldHVybiBuLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoiZGF0ZSJ9KTtkZWZhdWx0OnJldHVybiBoZShyLmxlbmd0aCxlKX19dmFsaWRhdGUoZSxyKXtsZXQgbj1lLmdldEZ1bGxZZWFyKCk7cmV0dXJuICRmKG4pP3I+PTEmJnI8PTM2NjpyPj0xJiZyPD0zNjV9c2V0KGUscixuKXtyZXR1cm4gZS5zZXRNb250aCgwLG4pLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJZIiwiUiIsInEiLCJRIiwiTSIsIkwiLCJ3IiwiSSIsImQiLCJFIiwiaSIsImUiLCJjIiwidCIsIlQiXX07ZnVuY3Rpb24gbWkodCxlLHIpe2xldCBuPV9lKCksaT1yPy53ZWVrU3RhcnRzT24/P3I/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz9uLndlZWtTdGFydHNPbj8/bi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/MCxzPWIodCxyPy5pbiksYT1zLmdldERheSgpLGM9KGUlNys3KSU3LHU9Ny1pLGY9ZTwwfHxlPjY/ZS0oYSt1KSU3OihjK3UpJTctKGErdSklNztyZXR1cm4gYXQocyxmLHIpfW8obWksInNldERheSIpO3ZhciBTcGU9bWk7dmFyIFpmPWNsYXNzIGV4dGVuZHMgSntzdGF0aWN7byh0aGlzLCJEYXlQYXJzZXIiKX1wcmlvcml0eT05MDtwYXJzZShlLHIsbil7c3dpdGNoKHIpe2Nhc2UiRSI6Y2FzZSJFRSI6Y2FzZSJFRUUiOnJldHVybiBuLmRheShlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fG4uZGF5KGUse3dpZHRoOiJzaG9ydCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8bi5kYXkoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlIkVFRUVFIjpyZXR1cm4gbi5kYXkoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlIkVFRUVFRSI6cmV0dXJuIG4uZGF5KGUse3dpZHRoOiJzaG9ydCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8bi5kYXkoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtkZWZhdWx0OnJldHVybiBuLmRheShlLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8bi5kYXkoZSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxuLmRheShlLHt3aWR0aDoic2hvcnQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fG4uZGF5KGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fXZhbGlkYXRlKGUscil7cmV0dXJuIHI+PTAmJnI8PTZ9c2V0KGUscixuLGkpe3JldHVybiBlPW1pKGUsbixpKSxlLnNldEhvdXJzKDAsMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsiRCIsImkiLCJlIiwiYyIsInQiLCJUIl19O3ZhciBlcD1jbGFzcyBleHRlbmRzIEp7c3RhdGlje28odGhpcywiTG9jYWxEYXlQYXJzZXIiKX1wcmlvcml0eT05MDtwYXJzZShlLHIsbixpKXtsZXQgcz1vKGE9PntsZXQgbD1NYXRoLmZsb29yKChhLTEpLzcpKjc7cmV0dXJuKGEraS53ZWVrU3RhcnRzT24rNiklNytsfSwidmFsdWVDYWxsYmFjayIpO3N3aXRjaChyKXtjYXNlImUiOmNhc2UiZWUiOnJldHVybiBOZShoZShyLmxlbmd0aCxlKSxzKTtjYXNlImVvIjpyZXR1cm4gTmUobi5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6ImRheSJ9KSxzKTtjYXNlImVlZSI6cmV0dXJuIG4uZGF5KGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8bi5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxuLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiZWVlZWUiOnJldHVybiBuLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiZWVlZWVlIjpyZXR1cm4gbi5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxuLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIG4uZGF5KGUse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxuLmRheShlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fG4uZGF5KGUse3dpZHRoOiJzaG9ydCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8bi5kYXkoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19dmFsaWRhdGUoZSxyKXtyZXR1cm4gcj49MCYmcjw9Nn1zZXQoZSxyLG4saSl7cmV0dXJuIGU9bWkoZSxuLGkpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJ5IiwiUiIsInUiLCJxIiwiUSIsIk0iLCJMIiwiSSIsImQiLCJEIiwiRSIsImkiLCJjIiwidCIsIlQiXX07dmFyIHRwPWNsYXNzIGV4dGVuZHMgSntzdGF0aWN7byh0aGlzLCJTdGFuZEFsb25lTG9jYWxEYXlQYXJzZXIiKX1wcmlvcml0eT05MDtwYXJzZShlLHIsbixpKXtsZXQgcz1vKGE9PntsZXQgbD1NYXRoLmZsb29yKChhLTEpLzcpKjc7cmV0dXJuKGEraS53ZWVrU3RhcnRzT24rNiklNytsfSwidmFsdWVDYWxsYmFjayIpO3N3aXRjaChyKXtjYXNlImMiOmNhc2UiY2MiOnJldHVybiBOZShoZShyLmxlbmd0aCxlKSxzKTtjYXNlImNvIjpyZXR1cm4gTmUobi5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6ImRheSJ9KSxzKTtjYXNlImNjYyI6cmV0dXJuIG4uZGF5KGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoic3RhbmRhbG9uZSJ9KXx8bi5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pfHxuLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2Nhc2UiY2NjY2MiOnJldHVybiBuLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2Nhc2UiY2NjY2NjIjpyZXR1cm4gbi5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pfHxuLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2RlZmF1bHQ6cmV0dXJuIG4uZGF5KGUse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJzdGFuZGFsb25lIn0pfHxuLmRheShlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSl8fG4uZGF5KGUse3dpZHRoOiJzaG9ydCIsY29udGV4dDoic3RhbmRhbG9uZSJ9KXx8bi5kYXkoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoic3RhbmRhbG9uZSJ9KX19dmFsaWRhdGUoZSxyKXtyZXR1cm4gcj49MCYmcjw9Nn1zZXQoZSxyLG4saSl7cmV0dXJuIGU9bWkoZSxuLGkpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJ5IiwiUiIsInUiLCJxIiwiUSIsIk0iLCJMIiwiSSIsImQiLCJEIiwiRSIsImkiLCJlIiwidCIsIlQiXX07ZnVuY3Rpb24gcnAodCxlLHIpe2xldCBuPWIodCxyPy5pbiksaT1PZihuLHIpLHM9ZS1pO3JldHVybiBhdChuLHMscil9byhycCwic2V0SVNPRGF5Iik7dmFyIFdwZT1ycDt2YXIgbnA9Y2xhc3MgZXh0ZW5kcyBKe3N0YXRpY3tvKHRoaXMsIklTT0RheVBhcnNlciIpfXByaW9yaXR5PTkwO3BhcnNlKGUscixuKXtsZXQgaT1vKHM9PnM9PT0wPzc6cywidmFsdWVDYWxsYmFjayIpO3N3aXRjaChyKXtjYXNlImkiOmNhc2UiaWkiOnJldHVybiBoZShyLmxlbmd0aCxlKTtjYXNlImlvIjpyZXR1cm4gbi5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6ImRheSJ9KTtjYXNlImlpaSI6cmV0dXJuIE5lKG4uZGF5KGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8bi5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxuLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pLGkpO2Nhc2UiaWlpaWkiOnJldHVybiBOZShuLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pLGkpO2Nhc2UiaWlpaWlpIjpyZXR1cm4gTmUobi5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxuLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pLGkpO2RlZmF1bHQ6cmV0dXJuIE5lKG4uZGF5KGUse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxuLmRheShlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fG4uZGF5KGUse3dpZHRoOiJzaG9ydCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8bi5kYXkoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KSxpKX19dmFsaWRhdGUoZSxyKXtyZXR1cm4gcj49MSYmcjw9N31zZXQoZSxyLG4pe3JldHVybiBlPXJwKGUsbiksZS5zZXRIb3VycygwLDAsMCwwKSxlfWluY29tcGF0aWJsZVRva2Vucz1bInkiLCJZIiwidSIsInEiLCJRIiwiTSIsIkwiLCJ3IiwiZCIsIkQiLCJFIiwiZSIsImMiLCJ0IiwiVCJdfTt2YXIgaXA9Y2xhc3MgZXh0ZW5kcyBKe3N0YXRpY3tvKHRoaXMsIkFNUE1QYXJzZXIiKX1wcmlvcml0eT04MDtwYXJzZShlLHIsbil7c3dpdGNoKHIpe2Nhc2UiYSI6Y2FzZSJhYSI6Y2FzZSJhYWEiOnJldHVybiBuLmRheVBlcmlvZChlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fG4uZGF5UGVyaW9kKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJhYWFhYSI6cmV0dXJuIG4uZGF5UGVyaW9kKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7ZGVmYXVsdDpyZXR1cm4gbi5kYXlQZXJpb2QoZSx7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fG4uZGF5UGVyaW9kKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8bi5kYXlQZXJpb2QoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19c2V0KGUscixuKXtyZXR1cm4gZS5zZXRIb3VycyhOcyhuKSwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJiIiwiQiIsIkgiLCJrIiwidCIsIlQiXX07dmFyIG9wPWNsYXNzIGV4dGVuZHMgSntzdGF0aWN7byh0aGlzLCJBTVBNTWlkbmlnaHRQYXJzZXIiKX1wcmlvcml0eT04MDtwYXJzZShlLHIsbil7c3dpdGNoKHIpe2Nhc2UiYiI6Y2FzZSJiYiI6Y2FzZSJiYmIiOnJldHVybiBuLmRheVBlcmlvZChlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fG4uZGF5UGVyaW9kKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJiYmJiYiI6cmV0dXJuIG4uZGF5UGVyaW9kKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7ZGVmYXVsdDpyZXR1cm4gbi5kYXlQZXJpb2QoZSx7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fG4uZGF5UGVyaW9kKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8bi5kYXlQZXJpb2QoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19c2V0KGUscixuKXtyZXR1cm4gZS5zZXRIb3VycyhOcyhuKSwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJhIiwiQiIsIkgiLCJrIiwidCIsIlQiXX07dmFyIHNwPWNsYXNzIGV4dGVuZHMgSntzdGF0aWN7byh0aGlzLCJEYXlQZXJpb2RQYXJzZXIiKX1wcmlvcml0eT04MDtwYXJzZShlLHIsbil7c3dpdGNoKHIpe2Nhc2UiQiI6Y2FzZSJCQiI6Y2FzZSJCQkIiOnJldHVybiBuLmRheVBlcmlvZChlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fG4uZGF5UGVyaW9kKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJCQkJCQiI6cmV0dXJuIG4uZGF5UGVyaW9kKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7ZGVmYXVsdDpyZXR1cm4gbi5kYXlQZXJpb2QoZSx7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fG4uZGF5UGVyaW9kKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8bi5kYXlQZXJpb2QoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19c2V0KGUscixuKXtyZXR1cm4gZS5zZXRIb3VycyhOcyhuKSwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJhIiwiYiIsInQiLCJUIl19O3ZhciBhcD1jbGFzcyBleHRlbmRzIEp7c3RhdGlje28odGhpcywiSG91cjF0bzEyUGFyc2VyIil9cHJpb3JpdHk9NzA7cGFyc2UoZSxyLG4pe3N3aXRjaChyKXtjYXNlImgiOnJldHVybiB2ZShTZS5ob3VyMTJoLGUpO2Nhc2UiaG8iOnJldHVybiBuLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoiaG91ciJ9KTtkZWZhdWx0OnJldHVybiBoZShyLmxlbmd0aCxlKX19dmFsaWRhdGUoZSxyKXtyZXR1cm4gcj49MSYmcjw9MTJ9c2V0KGUscixuKXtsZXQgaT1lLmdldEhvdXJzKCk+PTEyO3JldHVybiBpJiZuPDEyP2Uuc2V0SG91cnMobisxMiwwLDAsMCk6IWkmJm49PT0xMj9lLnNldEhvdXJzKDAsMCwwLDApOmUuc2V0SG91cnMobiwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJIIiwiSyIsImsiLCJ0IiwiVCJdfTt2YXIgbHA9Y2xhc3MgZXh0ZW5kcyBKe3N0YXRpY3tvKHRoaXMsIkhvdXIwdG8yM1BhcnNlciIpfXByaW9yaXR5PTcwO3BhcnNlKGUscixuKXtzd2l0Y2gocil7Y2FzZSJIIjpyZXR1cm4gdmUoU2UuaG91cjIzaCxlKTtjYXNlIkhvIjpyZXR1cm4gbi5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6ImhvdXIifSk7ZGVmYXVsdDpyZXR1cm4gaGUoci5sZW5ndGgsZSl9fXZhbGlkYXRlKGUscil7cmV0dXJuIHI+PTAmJnI8PTIzfXNldChlLHIsbil7cmV0dXJuIGUuc2V0SG91cnMobiwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJhIiwiYiIsImgiLCJLIiwiayIsInQiLCJUIl19O3ZhciBjcD1jbGFzcyBleHRlbmRzIEp7c3RhdGlje28odGhpcywiSG91cjBUbzExUGFyc2VyIil9cHJpb3JpdHk9NzA7cGFyc2UoZSxyLG4pe3N3aXRjaChyKXtjYXNlIksiOnJldHVybiB2ZShTZS5ob3VyMTFoLGUpO2Nhc2UiS28iOnJldHVybiBuLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoiaG91ciJ9KTtkZWZhdWx0OnJldHVybiBoZShyLmxlbmd0aCxlKX19dmFsaWRhdGUoZSxyKXtyZXR1cm4gcj49MCYmcjw9MTF9c2V0KGUscixuKXtyZXR1cm4gZS5nZXRIb3VycygpPj0xMiYmbjwxMj9lLnNldEhvdXJzKG4rMTIsMCwwLDApOmUuc2V0SG91cnMobiwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJoIiwiSCIsImsiLCJ0IiwiVCJdfTt2YXIgdXA9Y2xhc3MgZXh0ZW5kcyBKe3N0YXRpY3tvKHRoaXMsIkhvdXIxVG8yNFBhcnNlciIpfXByaW9yaXR5PTcwO3BhcnNlKGUscixuKXtzd2l0Y2gocil7Y2FzZSJrIjpyZXR1cm4gdmUoU2UuaG91cjI0aCxlKTtjYXNlImtvIjpyZXR1cm4gbi5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6ImhvdXIifSk7ZGVmYXVsdDpyZXR1cm4gaGUoci5sZW5ndGgsZSl9fXZhbGlkYXRlKGUscil7cmV0dXJuIHI+PTEmJnI8PTI0fXNldChlLHIsbil7bGV0IGk9bjw9MjQ/biUyNDpuO3JldHVybiBlLnNldEhvdXJzKGksMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsiYSIsImIiLCJoIiwiSCIsIksiLCJ0IiwiVCJdfTt2YXIgZnA9Y2xhc3MgZXh0ZW5kcyBKe3N0YXRpY3tvKHRoaXMsIk1pbnV0ZVBhcnNlciIpfXByaW9yaXR5PTYwO3BhcnNlKGUscixuKXtzd2l0Y2gocil7Y2FzZSJtIjpyZXR1cm4gdmUoU2UubWludXRlLGUpO2Nhc2UibW8iOnJldHVybiBuLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoibWludXRlIn0pO2RlZmF1bHQ6cmV0dXJuIGhlKHIubGVuZ3RoLGUpfX12YWxpZGF0ZShlLHIpe3JldHVybiByPj0wJiZyPD01OX1zZXQoZSxyLG4pe3JldHVybiBlLnNldE1pbnV0ZXMobiwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsidCIsIlQiXX07dmFyIHBwPWNsYXNzIGV4dGVuZHMgSntzdGF0aWN7byh0aGlzLCJTZWNvbmRQYXJzZXIiKX1wcmlvcml0eT01MDtwYXJzZShlLHIsbil7c3dpdGNoKHIpe2Nhc2UicyI6cmV0dXJuIHZlKFNlLnNlY29uZCxlKTtjYXNlInNvIjpyZXR1cm4gbi5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6InNlY29uZCJ9KTtkZWZhdWx0OnJldHVybiBoZShyLmxlbmd0aCxlKX19dmFsaWRhdGUoZSxyKXtyZXR1cm4gcj49MCYmcjw9NTl9c2V0KGUscixuKXtyZXR1cm4gZS5zZXRTZWNvbmRzKG4sMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJ0IiwiVCJdfTt2YXIgaHA9Y2xhc3MgZXh0ZW5kcyBKe3N0YXRpY3tvKHRoaXMsIkZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIiKX1wcmlvcml0eT0zMDtwYXJzZShlLHIpe2xldCBuPW8oaT0+TWF0aC50cnVuYyhpKk1hdGgucG93KDEwLC1yLmxlbmd0aCszKSksInZhbHVlQ2FsbGJhY2siKTtyZXR1cm4gTmUoaGUoci5sZW5ndGgsZSksbil9c2V0KGUscixuKXtyZXR1cm4gZS5zZXRNaWxsaXNlY29uZHMobiksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJ0IiwiVCJdfTt2YXIgZHA9Y2xhc3MgZXh0ZW5kcyBKe3N0YXRpY3tvKHRoaXMsIklTT1RpbWV6b25lV2l0aFpQYXJzZXIiKX1wcmlvcml0eT0xMDtwYXJzZShlLHIpe3N3aXRjaChyKXtjYXNlIlgiOnJldHVybiB5cihnci5iYXNpY09wdGlvbmFsTWludXRlcyxlKTtjYXNlIlhYIjpyZXR1cm4geXIoZ3IuYmFzaWMsZSk7Y2FzZSJYWFhYIjpyZXR1cm4geXIoZ3IuYmFzaWNPcHRpb25hbFNlY29uZHMsZSk7Y2FzZSJYWFhYWCI6cmV0dXJuIHlyKGdyLmV4dGVuZGVkT3B0aW9uYWxTZWNvbmRzLGUpO2RlZmF1bHQ6cmV0dXJuIHlyKGdyLmV4dGVuZGVkLGUpfX1zZXQoZSxyLG4pe3JldHVybiByLnRpbWVzdGFtcElzU2V0P2U6JChlLGUuZ2V0VGltZSgpLUdlKGUpLW4pfWluY29tcGF0aWJsZVRva2Vucz1bInQiLCJUIiwieCJdfTt2YXIgbXA9Y2xhc3MgZXh0ZW5kcyBKe3N0YXRpY3tvKHRoaXMsIklTT1RpbWV6b25lUGFyc2VyIil9cHJpb3JpdHk9MTA7cGFyc2UoZSxyKXtzd2l0Y2gocil7Y2FzZSJ4IjpyZXR1cm4geXIoZ3IuYmFzaWNPcHRpb25hbE1pbnV0ZXMsZSk7Y2FzZSJ4eCI6cmV0dXJuIHlyKGdyLmJhc2ljLGUpO2Nhc2UieHh4eCI6cmV0dXJuIHlyKGdyLmJhc2ljT3B0aW9uYWxTZWNvbmRzLGUpO2Nhc2UieHh4eHgiOnJldHVybiB5cihnci5leHRlbmRlZE9wdGlvbmFsU2Vjb25kcyxlKTtkZWZhdWx0OnJldHVybiB5cihnci5leHRlbmRlZCxlKX19c2V0KGUscixuKXtyZXR1cm4gci50aW1lc3RhbXBJc1NldD9lOiQoZSxlLmdldFRpbWUoKS1HZShlKS1uKX1pbmNvbXBhdGlibGVUb2tlbnM9WyJ0IiwiVCIsIlgiXX07dmFyIGdwPWNsYXNzIGV4dGVuZHMgSntzdGF0aWN7byh0aGlzLCJUaW1lc3RhbXBTZWNvbmRzUGFyc2VyIil9cHJpb3JpdHk9NDA7cGFyc2UoZSl7cmV0dXJuIEZmKGUpfXNldChlLHIsbil7cmV0dXJuWyQoZSxuKjFlMykse3RpbWVzdGFtcElzU2V0OiEwfV19aW5jb21wYXRpYmxlVG9rZW5zPSIqIn07dmFyIHlwPWNsYXNzIGV4dGVuZHMgSntzdGF0aWN7byh0aGlzLCJUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIiKX1wcmlvcml0eT0yMDtwYXJzZShlKXtyZXR1cm4gRmYoZSl9c2V0KGUscixuKXtyZXR1cm5bJChlLG4pLHt0aW1lc3RhbXBJc1NldDohMH1dfWluY29tcGF0aWJsZVRva2Vucz0iKiJ9O3ZhciB4cD17RzpuZXcgTGYseTpuZXcgQmYsWTpuZXcgemYsUjpuZXcgSGYsdTpuZXcgamYsUTpuZXcgV2YscTpuZXcgcWYsTTpuZXcgVWYsTDpuZXcgVmYsdzpuZXcgR2YsSTpuZXcgSmYsZDpuZXcgS2YsRDpuZXcgWGYsRTpuZXcgWmYsZTpuZXcgZXAsYzpuZXcgdHAsaTpuZXcgbnAsYTpuZXcgaXAsYjpuZXcgb3AsQjpuZXcgc3AsaDpuZXcgYXAsSDpuZXcgbHAsSzpuZXcgY3AsazpuZXcgdXAsbTpuZXcgZnAsczpuZXcgcHAsUzpuZXcgaHAsWDpuZXcgZHAseDpuZXcgbXAsdDpuZXcgZ3AsVDpuZXcgeXB9O3ZhciBzUj0vW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXHcpXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nLGFSPS9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nLGxSPS9eJyhbXl0qPyknPyQvLGNSPS8nJy9nLHVSPS9cUy8sZlI9L1thLXpBLVpdLztmdW5jdGlvbiBicCh0LGUscixuKXtsZXQgaT1vKCgpPT4kKG4/LmlufHxyLE5hTiksImludmFsaWREYXRlIikscz1NZigpLGE9bj8ubG9jYWxlPz9zLmxvY2FsZT8/V3QsbD1uPy5maXJzdFdlZWtDb250YWluc0RhdGU/P24/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz9zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/cy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/MSxjPW4/LndlZWtTdGFydHNPbj8/bj8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/P3Mud2Vla1N0YXJ0c09uPz9zLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz8wO2lmKCFlKXJldHVybiB0P2koKTpiKHIsbj8uaW4pO2xldCB1PXtmaXJzdFdlZWtDb250YWluc0RhdGU6bCx3ZWVrU3RhcnRzT246Yyxsb2NhbGU6YX0sZj1bbmV3IFJmKG4/LmluLHIpXSxwPWUubWF0Y2goYVIpLm1hcCh5PT57bGV0IHg9eVswXTtpZih4IGluIGhpKXtsZXQgaz1oaVt4XTtyZXR1cm4gayh5LGEuZm9ybWF0TG9uZyl9cmV0dXJuIHl9KS5qb2luKCIiKS5tYXRjaChzUiksaD1bXTtmb3IobGV0IHkgb2YgcCl7IW4/LnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2VucyYma2YoeSkmJnhsKHksZSx0KSwhbj8udXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucyYmdmYoeSkmJnhsKHksZSx0KTtsZXQgeD15WzBdLGs9eHBbeF07aWYoayl7bGV0e2luY29tcGF0aWJsZVRva2VuczpUfT1rO2lmKEFycmF5LmlzQXJyYXkoVCkpe2xldCBfPWguZmluZChFPT5ULmluY2x1ZGVzKEUudG9rZW4pfHxFLnRva2VuPT09eCk7aWYoXyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIGZvcm1hdCBzdHJpbmcgbXVzdG4ndCBjb250YWluIFxgJHtfLmZ1bGxUb2tlbn1cYCBhbmQgXGAke3l9XGAgYXQgdGhlIHNhbWUgdGltZWApfWVsc2UgaWYoay5pbmNvbXBhdGlibGVUb2tlbnM9PT0iKiImJmgubGVuZ3RoPjApdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFRoZSBmb3JtYXQgc3RyaW5nIG11c3RuJ3QgY29udGFpbiBcYCR7eX1cYCBhbmQgYW55IG90aGVyIHRva2VuIGF0IHRoZSBzYW1lIHRpbWVgKTtoLnB1c2goe3Rva2VuOngsZnVsbFRva2VuOnl9KTtsZXQgUj1rLnJ1bih0LHksYS5tYXRjaCx1KTtpZighUilyZXR1cm4gaSgpO2YucHVzaChSLnNldHRlciksdD1SLnJlc3R9ZWxzZXtpZih4Lm1hdGNoKGZSKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGAiK3grImAiKTtpZih5PT09IicnIj95PSInIjp4PT09IiciJiYoeT1wUih5KSksdC5pbmRleE9mKHkpPT09MCl0PXQuc2xpY2UoeS5sZW5ndGgpO2Vsc2UgcmV0dXJuIGkoKX19aWYodC5sZW5ndGg+MCYmdVIudGVzdCh0KSlyZXR1cm4gaSgpO2xldCBkPWYubWFwKHk9PnkucHJpb3JpdHkpLnNvcnQoKHkseCk9PngteSkuZmlsdGVyKCh5LHgsayk9PmsuaW5kZXhPZih5KT09PXgpLm1hcCh5PT5mLmZpbHRlcih4PT54LnByaW9yaXR5PT09eSkuc29ydCgoeCxrKT0+ay5zdWJQcmlvcml0eS14LnN1YlByaW9yaXR5KSkubWFwKHk9PnlbMF0pLG09YihyLG4/LmluKTtpZihpc05hTigrbSkpcmV0dXJuIGkoKTtsZXQgZz17fTtmb3IobGV0IHkgb2YgZCl7aWYoIXkudmFsaWRhdGUobSx1KSlyZXR1cm4gaSgpO2xldCB4PXkuc2V0KG0sZyx1KTtBcnJheS5pc0FycmF5KHgpPyhtPXhbMF0sT2JqZWN0LmFzc2lnbihnLHhbMV0pKTptPXh9cmV0dXJuIG19byhicCwicGFyc2UiKTtmdW5jdGlvbiBwUih0KXtyZXR1cm4gdC5tYXRjaChsUilbMV0ucmVwbGFjZShjUiwiJyIpfW8ocFIsImNsZWFuRXNjYXBlZFN0cmluZyIpO3ZhciBaZGU9YnA7ZnVuY3Rpb24gTWsodCxlLHIpe3JldHVybiB3dChicCh0LGUsbmV3IERhdGUscikpfW8oTWssImlzTWF0Y2giKTt2YXIgaW1lPU1rO2Z1bmN0aW9uIE9rKHQsZSl7cmV0dXJuIGIodCxlPy5pbikuZ2V0RGF5KCk9PT0xfW8oT2ssImlzTW9uZGF5Iik7dmFyIGxtZT1PaztmdW5jdGlvbiBJayh0KXtyZXR1cm4rYih0KTxEYXRlLm5vdygpfW8oSWssImlzUGFzdCIpO3ZhciBwbWU9SWs7ZnVuY3Rpb24gd2wodCxlKXtsZXQgcj1iKHQsZT8uaW4pO3JldHVybiByLnNldE1pbnV0ZXMoMCwwLDApLHJ9byh3bCwic3RhcnRPZkhvdXIiKTt2YXIgZ21lPXdsO2Z1bmN0aW9uIHdwKHQsZSxyKXtsZXRbbixpXT10ZShyPy5pbix0LGUpO3JldHVybit3bChuKT09K3dsKGkpfW8od3AsImlzU2FtZUhvdXIiKTt2YXIgdm1lPXdwO2Z1bmN0aW9uIFJzKHQsZSxyKXtsZXRbbixpXT10ZShyPy5pbix0LGUpO3JldHVybitGZShuLHIpPT0rRmUoaSxyKX1vKFJzLCJpc1NhbWVXZWVrIik7dmFyIERtZT1ScztmdW5jdGlvbiB2cCh0LGUscil7cmV0dXJuIFJzKHQsZSx7Li4ucix3ZWVrU3RhcnRzT246MX0pfW8odnAsImlzU2FtZUlTT1dlZWsiKTt2YXIgSW1lPXZwO2Z1bmN0aW9uIF9rKHQsZSxyKXtsZXRbbixpXT10ZShyPy5pbix0LGUpO3JldHVybit0cihuKT09K3RyKGkpfW8oX2ssImlzU2FtZUlTT1dlZWtZZWFyIik7dmFyIExtZT1faztmdW5jdGlvbiB2bCh0LGUpe2xldCByPWIodCxlPy5pbik7cmV0dXJuIHIuc2V0U2Vjb25kcygwLDApLHJ9byh2bCwic3RhcnRPZk1pbnV0ZSIpO3ZhciBCbWU9dmw7ZnVuY3Rpb24ga3AodCxlKXtyZXR1cm4rdmwodCk9PSt2bChlKX1vKGtwLCJpc1NhbWVNaW51dGUiKTt2YXIgV21lPWtwO2Z1bmN0aW9uIFNwKHQsZSxyKXtsZXRbbixpXT10ZShyPy5pbix0LGUpO3JldHVybiBuLmdldEZ1bGxZZWFyKCk9PT1pLmdldEZ1bGxZZWFyKCkmJm4uZ2V0TW9udGgoKT09PWkuZ2V0TW9udGgoKX1vKFNwLCJpc1NhbWVNb250aCIpO3ZhciBZbWU9U3A7ZnVuY3Rpb24gVHAodCxlLHIpe2xldFtuLGldPXRlKHI/LmluLHQsZSk7cmV0dXJuK2RuKG4pPT0rZG4oaSl9byhUcCwiaXNTYW1lUXVhcnRlciIpO3ZhciBYbWU9VHA7ZnVuY3Rpb24ga2wodCxlKXtsZXQgcj1iKHQsZT8uaW4pO3JldHVybiByLnNldE1pbGxpc2Vjb25kcygwKSxyfW8oa2wsInN0YXJ0T2ZTZWNvbmQiKTt2YXIgcmdlPWtsO2Z1bmN0aW9uIEVwKHQsZSl7cmV0dXJuK2tsKHQpPT0ra2woZSl9byhFcCwiaXNTYW1lU2Vjb25kIik7dmFyIHNnZT1FcDtmdW5jdGlvbiBEcCh0LGUscil7bGV0W24saV09dGUocj8uaW4sdCxlKTtyZXR1cm4gbi5nZXRGdWxsWWVhcigpPT09aS5nZXRGdWxsWWVhcigpfW8oRHAsImlzU2FtZVllYXIiKTt2YXIgdWdlPURwO2Z1bmN0aW9uIFBrKHQsZSl7cmV0dXJuIHdwKGIodCxlPy5pbiksZ2UoZT8uaW58fHQpKX1vKFBrLCJpc1RoaXNIb3VyIik7dmFyIGdnZT1QaztmdW5jdGlvbiBOayh0LGUpe3JldHVybiB2cCgkKGU/LmlufHx0LHQpLGdlKGU/LmlufHx0KSl9byhOaywiaXNUaGlzSVNPV2VlayIpO3ZhciBrZ2U9Tms7ZnVuY3Rpb24gUmsodCl7cmV0dXJuIGtwKHQsZ2UodCkpfW8oUmssImlzVGhpc01pbnV0ZSIpO3ZhciBDZ2U9Ums7ZnVuY3Rpb24gTGsodCxlKXtyZXR1cm4gU3AoJChlPy5pbnx8dCx0KSxnZShlPy5pbnx8dCkpfW8oTGssImlzVGhpc01vbnRoIik7dmFyIE5nZT1MaztmdW5jdGlvbiBGayh0LGUpe3JldHVybiBUcCgkKGU/LmlufHx0LHQpLGdlKGU/LmlufHx0KSl9byhGaywiaXNUaGlzUXVhcnRlciIpO3ZhciBCZ2U9Rms7ZnVuY3Rpb24gQWsodCl7cmV0dXJuIEVwKHQsZ2UodCkpfW8oQWssImlzVGhpc1NlY29uZCIpO3ZhciBxZ2U9QWs7ZnVuY3Rpb24gJGsodCxlKXtyZXR1cm4gUnMoJChlPy5pbnx8dCx0KSxnZShlPy5pbnx8dCksZSl9bygkaywiaXNUaGlzV2VlayIpO3ZhciBKZ2U9JGs7ZnVuY3Rpb24gQmsodCxlKXtyZXR1cm4gRHAoJChlPy5pbnx8dCx0KSxnZShlPy5pbnx8dCkpfW8oQmssImlzVGhpc1llYXIiKTt2YXIgcnllPUJrO2Z1bmN0aW9uIHprKHQsZSl7cmV0dXJuIGIodCxlPy5pbikuZ2V0RGF5KCk9PT00fW8oemssImlzVGh1cnNkYXkiKTt2YXIgc3llPXprO2Z1bmN0aW9uIEhrKHQsZSl7cmV0dXJuIHBuKCQoZT8uaW58fHQsdCksZ2UoZT8uaW58fHQpKX1vKEhrLCJpc1RvZGF5Iik7dmFyIHB5ZT1IaztmdW5jdGlvbiBqayh0LGUpe3JldHVybiBwbih0LGF0KGdlKGU/LmlufHx0KSwxKSxlKX1vKGprLCJpc1RvbW9ycm93Iik7dmFyIHh5ZT1qaztmdW5jdGlvbiBXayh0LGUpe3JldHVybiBiKHQsZT8uaW4pLmdldERheSgpPT09Mn1vKFdrLCJpc1R1ZXNkYXkiKTt2YXIga3llPVdrO2Z1bmN0aW9uIHFrKHQsZSl7cmV0dXJuIGIodCxlPy5pbikuZ2V0RGF5KCk9PT0zfW8ocWssImlzV2VkbmVzZGF5Iik7dmFyIER5ZT1xaztmdW5jdGlvbiBVayh0LGUscil7bGV0IG49K2IodCxyPy5pbiksW2ksc109WytiKGUuc3RhcnQscj8uaW4pLCtiKGUuZW5kLHI/LmluKV0uc29ydCgoYSxsKT0+YS1sKTtyZXR1cm4gbj49aSYmbjw9c31vKFVrLCJpc1dpdGhpbkludGVydmFsIik7dmFyIEl5ZT1VaztmdW5jdGlvbiBnaSh0LGUscil7cmV0dXJuIGF0KHQsLWUscil9byhnaSwic3ViRGF5cyIpO3ZhciBSeWU9Z2k7ZnVuY3Rpb24gVmsodCxlKXtyZXR1cm4gcG4oJChlPy5pbnx8dCx0KSxnaShnZShlPy5pbnx8dCksMSkpfW8oVmssImlzWWVzdGVyZGF5Iik7dmFyIEh5ZT1WaztmdW5jdGlvbiBZayh0LGUpe2xldCByPWIodCxlPy5pbiksbj1yLmdldEZ1bGxZZWFyKCksaT05K01hdGguZmxvb3Iobi8xMCkqMTA7cmV0dXJuIHIuc2V0RnVsbFllYXIoaSsxLDAsMCksci5zZXRIb3VycygwLDAsMCwwKSxiKHIsZT8uaW4pfW8oWWssImxhc3REYXlPZkRlY2FkZSIpO3ZhciBVeWU9WWs7ZnVuY3Rpb24gQ3AodCxlKXtsZXQgcj1fZSgpLG49ZT8ud2Vla1N0YXJ0c09uPz9lPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/ci53ZWVrU3RhcnRzT24/P3IubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/PzAsaT1iKHQsZT8uaW4pLHM9aS5nZXREYXkoKSxhPShzPG4/LTc6MCkrNi0ocy1uKTtyZXR1cm4gaS5zZXRIb3VycygwLDAsMCwwKSxpLnNldERhdGUoaS5nZXREYXRlKCkrYSksaX1vKENwLCJsYXN0RGF5T2ZXZWVrIik7dmFyIEp5ZT1DcDtmdW5jdGlvbiBHayh0LGUpe3JldHVybiBDcCh0LHsuLi5lLHdlZWtTdGFydHNPbjoxfSl9byhHaywibGFzdERheU9mSVNPV2VlayIpO3ZhciBleGU9R2s7ZnVuY3Rpb24gUWsodCxlKXtsZXQgcj1MdCh0LGUpLG49JChlPy5pbnx8dCwwKTtuLnNldEZ1bGxZZWFyKHIrMSwwLDQpLG4uc2V0SG91cnMoMCwwLDAsMCk7bGV0IGk9dHQobixlKTtyZXR1cm4gaS5zZXREYXRlKGkuZ2V0RGF0ZSgpLTEpLGl9byhRaywibGFzdERheU9mSVNPV2Vla1llYXIiKTt2YXIgc3hlPVFrO2Z1bmN0aW9uIEprKHQsZSl7bGV0IHI9Yih0LGU/LmluKSxuPXIuZ2V0TW9udGgoKSxpPW4tbiUzKzM7cmV0dXJuIHIuc2V0TW9udGgoaSwwKSxyLnNldEhvdXJzKDAsMCwwLDApLHJ9byhKaywibGFzdERheU9mUXVhcnRlciIpO3ZhciB1eGU9Sms7ZnVuY3Rpb24gS2sodCxlKXtsZXQgcj1iKHQsZT8uaW4pLG49ci5nZXRGdWxsWWVhcigpO3JldHVybiByLnNldEZ1bGxZZWFyKG4rMSwwLDApLHIuc2V0SG91cnMoMCwwLDAsMCkscn1vKEtrLCJsYXN0RGF5T2ZZZWFyIik7dmFyIGR4ZT1Lazt2YXIgaFI9LyhcdylcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2csZFI9L14nKFteXSo/KSc/JC8sbVI9LycnL2csZ1I9L1thLXpBLVpdLztmdW5jdGlvbiBYayh0LGUpe2xldCByPWIodCk7aWYoIXd0KHIpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTtsZXQgbj1lLm1hdGNoKGhSKTtyZXR1cm4gbj9uLm1hcChzPT57aWYocz09PSInJyIpcmV0dXJuIiciO2xldCBhPXNbMF07aWYoYT09PSInIilyZXR1cm4geVIocyk7bGV0IGw9cnJbYV07aWYobClyZXR1cm4gbChyLHMpO2lmKGEubWF0Y2goZ1IpKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYCIrYSsiYCIpO3JldHVybiBzfSkuam9pbigiIik6IiJ9byhYaywibGlnaHRGb3JtYXQiKTtmdW5jdGlvbiB5Uih0KXtsZXQgZT10Lm1hdGNoKGRSKTtyZXR1cm4gZT9lWzFdLnJlcGxhY2UobVIsIiciKTp0fW8oeVIsImNsZWFuRXNjYXBlZFN0cmluZyIpO3ZhciB3eGU9WGs7ZnVuY3Rpb24gWmsoe3llYXJzOnQsbW9udGhzOmUsd2Vla3M6cixkYXlzOm4saG91cnM6aSxtaW51dGVzOnMsc2Vjb25kczphfSl7bGV0IGw9MDt0JiYobCs9dCozNjUuMjQyNSksZSYmKGwrPWUqKDM2NS4yNDI1LzEyKSksciYmKGwrPXIqNyksbiYmKGwrPW4pO2xldCBjPWwqMjQqNjAqNjA7cmV0dXJuIGkmJihjKz1pKjYwKjYwKSxzJiYoYys9cyo2MCksYSYmKGMrPWEpLE1hdGgudHJ1bmMoYyoxZTMpfW8oWmssIm1pbGxpc2Vjb25kcyIpO3ZhciBUeGU9Wms7ZnVuY3Rpb24gZVModCl7bGV0IGU9dC9lcjtyZXR1cm4gTWF0aC50cnVuYyhlKX1vKGVTLCJtaWxsaXNlY29uZHNUb0hvdXJzIik7dmFyIE14ZT1lUztmdW5jdGlvbiB0Uyh0KXtsZXQgZT10L1R0O3JldHVybiBNYXRoLnRydW5jKGUpfW8odFMsIm1pbGxpc2Vjb25kc1RvTWludXRlcyIpO3ZhciBQeGU9dFM7ZnVuY3Rpb24gclModCl7bGV0IGU9dC9tcztyZXR1cm4gTWF0aC50cnVuYyhlKX1vKHJTLCJtaWxsaXNlY29uZHNUb1NlY29uZHMiKTt2YXIgRnhlPXJTO2Z1bmN0aW9uIG5TKHQpe2xldCBlPXQvUXU7cmV0dXJuIE1hdGgudHJ1bmMoZSl9byhuUywibWludXRlc1RvSG91cnMiKTt2YXIgenhlPW5TO2Z1bmN0aW9uIGlTKHQpe3JldHVybiBNYXRoLnRydW5jKHQqVHQpfW8oaVMsIm1pbnV0ZXNUb01pbGxpc2Vjb25kcyIpO3ZhciBxeGU9aVM7ZnVuY3Rpb24gb1ModCl7cmV0dXJuIE1hdGgudHJ1bmModCp5cyl9byhvUywibWludXRlc1RvU2Vjb25kcyIpO3ZhciBHeGU9b1M7ZnVuY3Rpb24gc1ModCl7bGV0IGU9dC9KdTtyZXR1cm4gTWF0aC50cnVuYyhlKX1vKHNTLCJtb250aHNUb1F1YXJ0ZXJzIik7dmFyIFh4ZT1zUztmdW5jdGlvbiBhUyh0KXtsZXQgZT10L0t1O3JldHVybiBNYXRoLnRydW5jKGUpfW8oYVMsIm1vbnRoc1RvWWVhcnMiKTt2YXIgcmJlPWFTO2Z1bmN0aW9uIEN0KHQsZSxyKXtsZXQgbj1lLWRpKHQscik7cmV0dXJuIG48PTAmJihuKz03KSxhdCh0LG4scil9byhDdCwibmV4dERheSIpO3ZhciBhYmU9Q3Q7ZnVuY3Rpb24gbFModCxlKXtyZXR1cm4gQ3QodCw1LGUpfW8obFMsIm5leHRGcmlkYXkiKTt2YXIgZmJlPWxTO2Z1bmN0aW9uIGNTKHQsZSl7cmV0dXJuIEN0KHQsMSxlKX1vKGNTLCJuZXh0TW9uZGF5Iik7dmFyIG1iZT1jUztmdW5jdGlvbiB1Uyh0LGUpe3JldHVybiBDdCh0LDYsZSl9byh1UywibmV4dFNhdHVyZGF5Iik7dmFyIGJiZT11UztmdW5jdGlvbiBmUyh0LGUpe3JldHVybiBDdCh0LDAsZSl9byhmUywibmV4dFN1bmRheSIpO3ZhciBTYmU9ZlM7ZnVuY3Rpb24gcFModCxlKXtyZXR1cm4gQ3QodCw0LGUpfW8ocFMsIm5leHRUaHVyc2RheSIpO3ZhciBDYmU9cFM7ZnVuY3Rpb24gaFModCxlKXtyZXR1cm4gQ3QodCwyLGUpfW8oaFMsIm5leHRUdWVzZGF5Iik7dmFyIF9iZT1oUztmdW5jdGlvbiBkUyh0LGUpe3JldHVybiBDdCh0LDMsZSl9byhkUywibmV4dFdlZG5lc2RheSIpO3ZhciBMYmU9ZFM7ZnVuY3Rpb24gZ1ModCxlKXtsZXQgcj1vKCgpPT4kKGU/LmluLE5hTiksImludmFsaWREYXRlIiksbj1lPy5hZGRpdGlvbmFsRGlnaXRzPz8yLGk9dlIodCkscztpZihpLmRhdGUpe2xldCB1PWtSKGkuZGF0ZSxuKTtzPVNSKHUucmVzdERhdGVTdHJpbmcsdS55ZWFyKX1pZighc3x8aXNOYU4oK3MpKXJldHVybiByKCk7bGV0IGE9K3MsbD0wLGM7aWYoaS50aW1lJiYobD1UUihpLnRpbWUpLGlzTmFOKGwpKSlyZXR1cm4gcigpO2lmKGkudGltZXpvbmUpe2lmKGM9RVIoaS50aW1lem9uZSksaXNOYU4oYykpcmV0dXJuIHIoKX1lbHNle2xldCB1PW5ldyBEYXRlKGErbCksZj1iKDAsZT8uaW4pO3JldHVybiBmLnNldEZ1bGxZZWFyKHUuZ2V0VVRDRnVsbFllYXIoKSx1LmdldFVUQ01vbnRoKCksdS5nZXRVVENEYXRlKCkpLGYuc2V0SG91cnModS5nZXRVVENIb3VycygpLHUuZ2V0VVRDTWludXRlcygpLHUuZ2V0VVRDU2Vjb25kcygpLHUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpLGZ9cmV0dXJuIGIoYStsK2MsZT8uaW4pfW8oZ1MsInBhcnNlSVNPIik7dmFyIE1wPXtkYXRlVGltZURlbGltaXRlcjovW1QgXS8sdGltZVpvbmVEZWxpbWl0ZXI6L1taIF0vaSx0aW1lem9uZTovKFtaKy1dLiopJC99LHhSPS9eLT8oPzooXGR7M30pfChcZHsyfSkoPzotPyhcZHsyfSkpP3xXKFxkezJ9KSg/Oi0/KFxkezF9KSk/fCkkLyxiUj0vXihcZHsyfSg/OlsuLF1cZCopPykoPzo6PyhcZHsyfSg/OlsuLF1cZCopPykpPyg/Ojo/KFxkezJ9KD86Wy4sXVxkKik/KSk/JC8sd1I9L14oWystXSkoXGR7Mn0pKD86Oj8oXGR7Mn0pKT8kLztmdW5jdGlvbiB2Uih0KXtsZXQgZT17fSxyPXQuc3BsaXQoTXAuZGF0ZVRpbWVEZWxpbWl0ZXIpLG47aWYoci5sZW5ndGg+MilyZXR1cm4gZTtpZigvOi8udGVzdChyWzBdKT9uPXJbMF06KGUuZGF0ZT1yWzBdLG49clsxXSxNcC50aW1lWm9uZURlbGltaXRlci50ZXN0KGUuZGF0ZSkmJihlLmRhdGU9dC5zcGxpdChNcC50aW1lWm9uZURlbGltaXRlcilbMF0sbj10LnN1YnN0cihlLmRhdGUubGVuZ3RoLHQubGVuZ3RoKSkpLG4pe2xldCBpPU1wLnRpbWV6b25lLmV4ZWMobik7aT8oZS50aW1lPW4ucmVwbGFjZShpWzFdLCIiKSxlLnRpbWV6b25lPWlbMV0pOmUudGltZT1ufXJldHVybiBlfW8odlIsInNwbGl0RGF0ZVN0cmluZyIpO2Z1bmN0aW9uIGtSKHQsZSl7bGV0IHI9bmV3IFJlZ0V4cCgiXig/OihcXGR7NH18WystXVxcZHsiKyg0K2UpKyJ9KXwoXFxkezJ9fFsrLV1cXGR7IisoMitlKSsifSkkKSIpLG49dC5tYXRjaChyKTtpZighbilyZXR1cm57eWVhcjpOYU4scmVzdERhdGVTdHJpbmc6IiJ9O2xldCBpPW5bMV0/cGFyc2VJbnQoblsxXSk6bnVsbCxzPW5bMl0/cGFyc2VJbnQoblsyXSk6bnVsbDtyZXR1cm57eWVhcjpzPT09bnVsbD9pOnMqMTAwLHJlc3REYXRlU3RyaW5nOnQuc2xpY2UoKG5bMV18fG5bMl0pLmxlbmd0aCl9fW8oa1IsInBhcnNlWWVhciIpO2Z1bmN0aW9uIFNSKHQsZSl7aWYoZT09PW51bGwpcmV0dXJuIG5ldyBEYXRlKE5hTik7bGV0IHI9dC5tYXRjaCh4Uik7aWYoIXIpcmV0dXJuIG5ldyBEYXRlKE5hTik7bGV0IG49ISFyWzRdLGk9U2woclsxXSkscz1TbChyWzJdKS0xLGE9U2woclszXSksbD1TbChyWzRdKSxjPVNsKHJbNV0pLTE7aWYobilyZXR1cm4gSVIoZSxsLGMpP0RSKGUsbCxjKTpuZXcgRGF0ZShOYU4pO3tsZXQgdT1uZXcgRGF0ZSgwKTtyZXR1cm4hTVIoZSxzLGEpfHwhT1IoZSxpKT9uZXcgRGF0ZShOYU4pOih1LnNldFVUQ0Z1bGxZZWFyKGUscyxNYXRoLm1heChpLGEpKSx1KX19byhTUiwicGFyc2VEYXRlIik7ZnVuY3Rpb24gU2wodCl7cmV0dXJuIHQ/cGFyc2VJbnQodCk6MX1vKFNsLCJwYXJzZURhdGVVbml0Iik7ZnVuY3Rpb24gVFIodCl7bGV0IGU9dC5tYXRjaChiUik7aWYoIWUpcmV0dXJuIE5hTjtsZXQgcj13ZyhlWzFdKSxuPXdnKGVbMl0pLGk9d2coZVszXSk7cmV0dXJuIF9SKHIsbixpKT9yKmVyK24qVHQraSoxZTM6TmFOfW8oVFIsInBhcnNlVGltZSIpO2Z1bmN0aW9uIHdnKHQpe3JldHVybiB0JiZwYXJzZUZsb2F0KHQucmVwbGFjZSgiLCIsIi4iKSl8fDB9byh3ZywicGFyc2VUaW1lVW5pdCIpO2Z1bmN0aW9uIEVSKHQpe2lmKHQ9PT0iWiIpcmV0dXJuIDA7bGV0IGU9dC5tYXRjaCh3Uik7aWYoIWUpcmV0dXJuIDA7bGV0IHI9ZVsxXT09PSIrIj8tMToxLG49cGFyc2VJbnQoZVsyXSksaT1lWzNdJiZwYXJzZUludChlWzNdKXx8MDtyZXR1cm4gUFIobixpKT9yKihuKmVyK2kqVHQpOk5hTn1vKEVSLCJwYXJzZVRpbWV6b25lIik7ZnVuY3Rpb24gRFIodCxlLHIpe2xldCBuPW5ldyBEYXRlKDApO24uc2V0VVRDRnVsbFllYXIodCwwLDQpO2xldCBpPW4uZ2V0VVRDRGF5KCl8fDcscz0oZS0xKSo3K3IrMS1pO3JldHVybiBuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrcyksbn1vKERSLCJkYXlPZklTT1dlZWtZZWFyIik7dmFyIENSPVszMSxudWxsLDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtmdW5jdGlvbiBtUyh0KXtyZXR1cm4gdCU0MDA9PT0wfHx0JTQ9PT0wJiZ0JTEwMCE9PTB9byhtUywiaXNMZWFwWWVhckluZGV4Iik7ZnVuY3Rpb24gTVIodCxlLHIpe3JldHVybiBlPj0wJiZlPD0xMSYmcj49MSYmcjw9KENSW2VdfHwobVModCk/Mjk6MjgpKX1vKE1SLCJ2YWxpZGF0ZURhdGUiKTtmdW5jdGlvbiBPUih0LGUpe3JldHVybiBlPj0xJiZlPD0obVModCk/MzY2OjM2NSl9byhPUiwidmFsaWRhdGVEYXlPZlllYXJEYXRlIik7ZnVuY3Rpb24gSVIodCxlLHIpe3JldHVybiBlPj0xJiZlPD01MyYmcj49MCYmcjw9Nn1vKElSLCJ2YWxpZGF0ZVdlZWtEYXRlIik7ZnVuY3Rpb24gX1IodCxlLHIpe3JldHVybiB0PT09MjQ/ZT09PTAmJnI9PT0wOnI+PTAmJnI8NjAmJmU+PTAmJmU8NjAmJnQ+PTAmJnQ8MjV9byhfUiwidmFsaWRhdGVUaW1lIik7ZnVuY3Rpb24gUFIodCxlKXtyZXR1cm4gZT49MCYmZTw9NTl9byhQUiwidmFsaWRhdGVUaW1lem9uZSIpO3ZhciBIYmU9Z1M7ZnVuY3Rpb24geVModCxlKXtsZXQgcj10Lm1hdGNoKC8oXGR7NH0pLShcZHsyfSktKFxkezJ9KVtUIF0oXGR7Mn0pOihcZHsyfSk6KFxkezJ9KSg/OlwuKFxkezAsN30pKT8oPzpafCguKShcZHsyfSk6PyhcZHsyfSk/KT8vKTtyZXR1cm4gcj9iKERhdGUuVVRDKCtyWzFdLCtyWzJdLTEsK3JbM10sK3JbNF0tKCtyWzldfHwwKSoocls4XT09Ii0iPy0xOjEpLCtyWzVdLSgrclsxMF18fDApKihyWzhdPT0iLSI/LTE6MSksK3JbNl0sKygocls3XXx8IjAiKSsiMDAiKS5zdWJzdHJpbmcoMCwzKSksZT8uaW4pOmIoTmFOLGU/LmluKX1vKHlTLCJwYXJzZUpTT04iKTt2YXIgVWJlPXlTO2Z1bmN0aW9uIE10KHQsZSxyKXtsZXQgbj1kaSh0LHIpLWU7cmV0dXJuIG48PTAmJihuKz03KSxnaSh0LG4scil9byhNdCwicHJldmlvdXNEYXkiKTt2YXIgSmJlPU10O2Z1bmN0aW9uIHhTKHQsZSl7cmV0dXJuIE10KHQsNSxlKX1vKHhTLCJwcmV2aW91c0ZyaWRheSIpO3ZhciBld2U9eFM7ZnVuY3Rpb24gYlModCxlKXtyZXR1cm4gTXQodCwxLGUpfW8oYlMsInByZXZpb3VzTW9uZGF5Iik7dmFyIGl3ZT1iUztmdW5jdGlvbiB3Uyh0LGUpe3JldHVybiBNdCh0LDYsZSl9byh3UywicHJldmlvdXNTYXR1cmRheSIpO3ZhciBsd2U9d1M7ZnVuY3Rpb24gdlModCxlKXtyZXR1cm4gTXQodCwwLGUpfW8odlMsInByZXZpb3VzU3VuZGF5Iik7dmFyIHB3ZT12UztmdW5jdGlvbiBrUyh0LGUpe3JldHVybiBNdCh0LDQsZSl9byhrUywicHJldmlvdXNUaHVyc2RheSIpO3ZhciBnd2U9a1M7ZnVuY3Rpb24gU1ModCxlKXtyZXR1cm4gTXQodCwyLGUpfW8oU1MsInByZXZpb3VzVHVlc2RheSIpO3ZhciB3d2U9U1M7ZnVuY3Rpb24gVFModCxlKXtyZXR1cm4gTXQodCwzLGUpfW8oVFMsInByZXZpb3VzV2VkbmVzZGF5Iik7dmFyIFR3ZT1UUztmdW5jdGlvbiBFUyh0KXtyZXR1cm4gTWF0aC50cnVuYyh0Kkp1KX1vKEVTLCJxdWFydGVyc1RvTW9udGhzIik7dmFyIE13ZT1FUztmdW5jdGlvbiBEUyh0KXtsZXQgZT10L1h1O3JldHVybiBNYXRoLnRydW5jKGUpfW8oRFMsInF1YXJ0ZXJzVG9ZZWFycyIpO3ZhciBQd2U9RFM7ZnVuY3Rpb24gQ1ModCxlKXtsZXQgcj1lPy5uZWFyZXN0VG8/PzE7aWYocjwxfHxyPjEyKXJldHVybiAkKGU/LmlufHx0LE5hTik7bGV0IG49Yih0LGU/LmluKSxpPW4uZ2V0TWludXRlcygpLzYwLHM9bi5nZXRTZWNvbmRzKCkvNjAvNjAsYT1uLmdldE1pbGxpc2Vjb25kcygpLzFlMy82MC82MCxsPW4uZ2V0SG91cnMoKStpK3MrYSxjPWU/LnJvdW5kaW5nTWV0aG9kPz8icm91bmQiLGY9RHQoYykobC9yKSpyO3JldHVybiBuLnNldEhvdXJzKGYsMCwwLDApLG59byhDUywicm91bmRUb05lYXJlc3RIb3VycyIpO3ZhciAkd2U9Q1M7ZnVuY3Rpb24gTVModCxlKXtsZXQgcj1lPy5uZWFyZXN0VG8/PzE7aWYocjwxfHxyPjMwKXJldHVybiAkKHQsTmFOKTtsZXQgbj1iKHQsZT8uaW4pLGk9bi5nZXRTZWNvbmRzKCkvNjAscz1uLmdldE1pbGxpc2Vjb25kcygpLzFlMy82MCxhPW4uZ2V0TWludXRlcygpK2krcyxsPWU/LnJvdW5kaW5nTWV0aG9kPz8icm91bmQiLHU9RHQobCkoYS9yKSpyO3JldHVybiBuLnNldE1pbnV0ZXModSwwLDApLG59byhNUywicm91bmRUb05lYXJlc3RNaW51dGVzIik7dmFyIHF3ZT1NUztmdW5jdGlvbiBPUyh0KXtsZXQgZT10L2lvO3JldHVybiBNYXRoLnRydW5jKGUpfW8oT1MsInNlY29uZHNUb0hvdXJzIik7dmFyIEd3ZT1PUztmdW5jdGlvbiBJUyh0KXtyZXR1cm4gdCptc31vKElTLCJzZWNvbmRzVG9NaWxsaXNlY29uZHMiKTt2YXIgWHdlPUlTO2Z1bmN0aW9uIF9TKHQpe2xldCBlPXQveXM7cmV0dXJuIE1hdGgudHJ1bmMoZSl9byhfUywic2Vjb25kc1RvTWludXRlcyIpO3ZhciByMGU9X1M7ZnVuY3Rpb24gTHModCxlLHIpe2xldCBuPWIodCxyPy5pbiksaT1uLmdldEZ1bGxZZWFyKCkscz1uLmdldERhdGUoKSxhPSQocj8uaW58fHQsMCk7YS5zZXRGdWxsWWVhcihpLGUsMTUpLGEuc2V0SG91cnMoMCwwLDAsMCk7bGV0IGw9RGYoYSk7cmV0dXJuIG4uc2V0TW9udGgoZSxNYXRoLm1pbihzLGwpKSxufW8oTHMsInNldE1vbnRoIik7dmFyIGwwZT1McztmdW5jdGlvbiBQUyh0LGUscil7bGV0IG49Yih0LHI/LmluKTtyZXR1cm4gaXNOYU4oK24pPyQocj8uaW58fHQsTmFOKTooZS55ZWFyIT1udWxsJiZuLnNldEZ1bGxZZWFyKGUueWVhciksZS5tb250aCE9bnVsbCYmKG49THMobixlLm1vbnRoKSksZS5kYXRlIT1udWxsJiZuLnNldERhdGUoZS5kYXRlKSxlLmhvdXJzIT1udWxsJiZuLnNldEhvdXJzKGUuaG91cnMpLGUubWludXRlcyE9bnVsbCYmbi5zZXRNaW51dGVzKGUubWludXRlcyksZS5zZWNvbmRzIT1udWxsJiZuLnNldFNlY29uZHMoZS5zZWNvbmRzKSxlLm1pbGxpc2Vjb25kcyE9bnVsbCYmbi5zZXRNaWxsaXNlY29uZHMoZS5taWxsaXNlY29uZHMpLG4pfW8oUFMsInNldCIpO3ZhciBkMGU9UFM7ZnVuY3Rpb24gTlModCxlLHIpe2xldCBuPWIodCxyPy5pbik7cmV0dXJuIG4uc2V0RGF0ZShlKSxufW8oTlMsInNldERhdGUiKTt2YXIgeDBlPU5TO2Z1bmN0aW9uIFJTKHQsZSxyKXtsZXQgbj1iKHQscj8uaW4pO3JldHVybiBuLnNldE1vbnRoKDApLG4uc2V0RGF0ZShlKSxufW8oUlMsInNldERheU9mWWVhciIpO3ZhciBrMGU9UlM7ZnVuY3Rpb24gTFModCl7bGV0IGU9e30scj1fZSgpO2ZvcihsZXQgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKTtmb3IobGV0IG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKHRbbl09PT12b2lkIDA/ZGVsZXRlIGVbbl06ZVtuXT10W25dKTtpdihlKX1vKExTLCJzZXREZWZhdWx0T3B0aW9ucyIpO3ZhciBEMGU9TFM7ZnVuY3Rpb24gRlModCxlLHIpe2xldCBuPWIodCxyPy5pbik7cmV0dXJuIG4uc2V0SG91cnMoZSksbn1vKEZTLCJzZXRIb3VycyIpO3ZhciBJMGU9RlM7ZnVuY3Rpb24gQVModCxlLHIpe2xldCBuPWIodCxyPy5pbik7cmV0dXJuIG4uc2V0TWlsbGlzZWNvbmRzKGUpLG59byhBUywic2V0TWlsbGlzZWNvbmRzIik7dmFyIFIwZT1BUztmdW5jdGlvbiAkUyh0LGUscil7bGV0IG49Yih0LHI/LmluKTtyZXR1cm4gbi5zZXRNaW51dGVzKGUpLG59bygkUywic2V0TWludXRlcyIpO3ZhciAkMGU9JFM7ZnVuY3Rpb24gQlModCxlLHIpe2xldCBuPWIodCxyPy5pbiksaT1NYXRoLnRydW5jKG4uZ2V0TW9udGgoKS8zKSsxLHM9ZS1pO3JldHVybiBMcyhuLG4uZ2V0TW9udGgoKStzKjMpfW8oQlMsInNldFF1YXJ0ZXIiKTt2YXIgVzBlPUJTO2Z1bmN0aW9uIHpTKHQsZSxyKXtsZXQgbj1iKHQscj8uaW4pO3JldHVybiBuLnNldFNlY29uZHMoZSksbn1vKHpTLCJzZXRTZWNvbmRzIik7dmFyIFkwZT16UztmdW5jdGlvbiBIUyh0LGUscil7bGV0IG49X2UoKSxpPXI/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/cj8ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGU/P24uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz9uLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz8xLHM9aHQoYih0LHI/LmluKSxjbyh0LHIpLHIpLGE9JChyPy5pbnx8dCwwKTthLnNldEZ1bGxZZWFyKGUsMCxpKSxhLnNldEhvdXJzKDAsMCwwLDApO2xldCBsPWNvKGEscik7cmV0dXJuIGwuc2V0RGF0ZShsLmdldERhdGUoKStzKSxsfW8oSFMsInNldFdlZWtZZWFyIik7dmFyIHR2ZT1IUztmdW5jdGlvbiBqUyh0LGUscil7bGV0IG49Yih0LHI/LmluKTtyZXR1cm4gaXNOYU4oK24pPyQocj8uaW58fHQsTmFOKToobi5zZXRGdWxsWWVhcihlKSxuKX1vKGpTLCJzZXRZZWFyIik7dmFyIHN2ZT1qUztmdW5jdGlvbiBXUyh0LGUpe2xldCByPWIodCxlPy5pbiksbj1yLmdldEZ1bGxZZWFyKCksaT1NYXRoLmZsb29yKG4vMTApKjEwO3JldHVybiByLnNldEZ1bGxZZWFyKGksMCwxKSxyLnNldEhvdXJzKDAsMCwwLDApLHJ9byhXUywic3RhcnRPZkRlY2FkZSIpO3ZhciB1dmU9V1M7ZnVuY3Rpb24gcVModCl7cmV0dXJuIGZuKERhdGUubm93KCksdCl9byhxUywic3RhcnRPZlRvZGF5Iik7dmFyIGR2ZT1xUztmdW5jdGlvbiBVUyh0KXtsZXQgZT1nZSh0Py5pbikscj1lLmdldEZ1bGxZZWFyKCksbj1lLmdldE1vbnRoKCksaT1lLmdldERhdGUoKSxzPSQodD8uaW4sMCk7cmV0dXJuIHMuc2V0RnVsbFllYXIocixuLGkrMSkscy5zZXRIb3VycygwLDAsMCwwKSxzfW8oVVMsInN0YXJ0T2ZUb21vcnJvdyIpO3ZhciBidmU9VVM7ZnVuY3Rpb24gVlModCl7bGV0IGU9Z2UodD8uaW4pLHI9ZS5nZXRGdWxsWWVhcigpLG49ZS5nZXRNb250aCgpLGk9ZS5nZXREYXRlKCkscz1nZSh0Py5pbik7cmV0dXJuIHMuc2V0RnVsbFllYXIocixuLGktMSkscy5zZXRIb3VycygwLDAsMCwwKSxzfW8oVlMsInN0YXJ0T2ZZZXN0ZXJkYXkiKTt2YXIgU3ZlPVZTO2Z1bmN0aW9uIE9wKHQsZSxyKXtyZXR1cm4gY24odCwtZSxyKX1vKE9wLCJzdWJNb250aHMiKTt2YXIgQ3ZlPU9wO2Z1bmN0aW9uIFlTKHQsZSxyKXtsZXR7eWVhcnM6bj0wLG1vbnRoczppPTAsd2Vla3M6cz0wLGRheXM6YT0wLGhvdXJzOmw9MCxtaW51dGVzOmM9MCxzZWNvbmRzOnU9MH09ZSxmPU9wKHQsaStuKjEyLHIpLHA9Z2koZixhK3MqNyxyKSxoPWMrbCo2MCxtPSh1K2gqNjApKjFlMztyZXR1cm4gJChyPy5pbnx8dCwrcC1tKX1vKFlTLCJzdWIiKTt2YXIgTnZlPVlTO2Z1bmN0aW9uIEdTKHQsZSxyKXtyZXR1cm4gdGYodCwtZSxyKX1vKEdTLCJzdWJCdXNpbmVzc0RheXMiKTt2YXIgQXZlPUdTO2Z1bmN0aW9uIFFTKHQsZSxyKXtyZXR1cm4gcmYodCwtZSxyKX1vKFFTLCJzdWJIb3VycyIpO3ZhciBIdmU9UVM7ZnVuY3Rpb24gSlModCxlLHIpe3JldHVybiBhaSh0LC1lLHIpfW8oSlMsInN1Yk1pbGxpc2Vjb25kcyIpO3ZhciBVdmU9SlM7ZnVuY3Rpb24gS1ModCxlLHIpe3JldHVybiB4cyh0LC1lLHIpfW8oS1MsInN1Yk1pbnV0ZXMiKTt2YXIgUXZlPUtTO2Z1bmN0aW9uIFhTKHQsZSxyKXtyZXR1cm4gYnModCwtZSxyKX1vKFhTLCJzdWJRdWFydGVycyIpO3ZhciBadmU9WFM7ZnVuY3Rpb24gWlModCxlLHIpe3JldHVybiBzZih0LC1lLHIpfW8oWlMsInN1YlNlY29uZHMiKTt2YXIgbmtlPVpTO2Z1bmN0aW9uIGUxKHQsZSxyKXtyZXR1cm4gbGkodCwtZSxyKX1vKGUxLCJzdWJXZWVrcyIpO3ZhciBha2U9ZTE7ZnVuY3Rpb24gdDEodCxlLHIpe3JldHVybiBhZih0LC1lLHIpfW8odDEsInN1YlllYXJzIik7dmFyIGZrZT10MTtmdW5jdGlvbiByMSh0KXtyZXR1cm4gTWF0aC50cnVuYyh0KjcpfW8ocjEsIndlZWtzVG9EYXlzIik7dmFyIG1rZT1yMTtmdW5jdGlvbiBuMSh0KXtyZXR1cm4gTWF0aC50cnVuYyh0KjM2NS4yNDI1KX1vKG4xLCJ5ZWFyc1RvRGF5cyIpO3ZhciBia2U9bjE7ZnVuY3Rpb24gaTEodCl7cmV0dXJuIE1hdGgudHJ1bmModCpLdSl9byhpMSwieWVhcnNUb01vbnRocyIpO3ZhciBTa2U9aTE7ZnVuY3Rpb24gbzEodCl7cmV0dXJuIE1hdGgudHJ1bmModCpYdSl9byhvMSwieWVhcnNUb1F1YXJ0ZXJzIik7dmFyIENrZT1vMTt2YXIgbDE9byh0PT5OdW1iZXIuaXNGaW5pdGUodCk/dDowLCJ0b1plcm9JZkluZmluaXR5Iik7ZnVuY3Rpb24gTlIodCl7cmV0dXJue2RheXM6TWF0aC50cnVuYyh0Lzg2NGU1KSxob3VyczpNYXRoLnRydW5jKHQvMzZlNSUyNCksbWludXRlczpNYXRoLnRydW5jKHQvNmU0JTYwKSxzZWNvbmRzOk1hdGgudHJ1bmModC8xZTMlNjApLG1pbGxpc2Vjb25kczpNYXRoLnRydW5jKHQlMWUzKSxtaWNyb3NlY29uZHM6TWF0aC50cnVuYyhsMSh0KjFlMyklMWUzKSxuYW5vc2Vjb25kczpNYXRoLnRydW5jKGwxKHQqMWU2KSUxZTMpfX1vKE5SLCJwYXJzZU51bWJlciIpO2Z1bmN0aW9uIFJSKHQpe3JldHVybntkYXlzOnQvODY0MDAwMDBuLGhvdXJzOnQvMzYwMDAwMG4lMjRuLG1pbnV0ZXM6dC82MDAwMG4lNjBuLHNlY29uZHM6dC8xMDAwbiU2MG4sbWlsbGlzZWNvbmRzOnQlMTAwMG4sbWljcm9zZWNvbmRzOjBuLG5hbm9zZWNvbmRzOjBufX1vKFJSLCJwYXJzZUJpZ2ludCIpO2Z1bmN0aW9uIEVnKHQpe3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSJudW1iZXIiOntpZihOdW1iZXIuaXNGaW5pdGUodCkpcmV0dXJuIE5SKHQpO2JyZWFrfWNhc2UiYmlnaW50IjpyZXR1cm4gUlIodCl9dGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmaW5pdGUgbnVtYmVyIG9yIGJpZ2ludCIpfW8oRWcsInBhcnNlTWlsbGlzZWNvbmRzIik7dmFyIExSPW8odD0+dD09PTB8fHQ9PT0wbiwiaXNaZXJvIiksRlI9bygodCxlKT0+ZT09PTF8fGU9PT0xbj90OmAke3R9c2AsInBsdXJhbGl6ZSIpLEFSPTFlLTcsJFI9MjRuKjYwbio2MG4qMTAwMG47ZnVuY3Rpb24gRWwodCxlKXtsZXQgcj10eXBlb2YgdD09ImJpZ2ludCI7aWYoIXImJiFOdW1iZXIuaXNGaW5pdGUodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmaW5pdGUgbnVtYmVyIG9yIGJpZ2ludCIpO2U9ey4uLmV9O2xldCBuPXQ8MD8iLSI6IiI7dD10PDA/LXQ6dCxlLmNvbG9uTm90YXRpb24mJihlLmNvbXBhY3Q9ITEsZS5mb3JtYXRTdWJNaWxsaXNlY29uZHM9ITEsZS5zZXBhcmF0ZU1pbGxpc2Vjb25kcz0hMSxlLnZlcmJvc2U9ITEpLGUuY29tcGFjdCYmKGUudW5pdENvdW50PTEsZS5zZWNvbmRzRGVjaW1hbERpZ2l0cz0wLGUubWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cz0wKTtsZXQgaT1bXSxzPW8oKGYscCk9PntsZXQgaD1NYXRoLmZsb29yKGYqMTAqKnArQVIpO3JldHVybihNYXRoLnJvdW5kKGgpLzEwKipwKS50b0ZpeGVkKHApfSwiZmxvb3JEZWNpbWFscyIpLGE9bygoZixwLGgsZCk9PntpZighKChpLmxlbmd0aD09PTB8fCFlLmNvbG9uTm90YXRpb24pJiZMUihmKSYmIShlLmNvbG9uTm90YXRpb24mJmg9PT0ibSIpKSl7aWYoZD8/PVN0cmluZyhmKSxlLmNvbG9uTm90YXRpb24pe2xldCBtPWQuaW5jbHVkZXMoIi4iKT9kLnNwbGl0KCIuIilbMF0ubGVuZ3RoOmQubGVuZ3RoLGc9aS5sZW5ndGg+MD8yOjE7ZD0iMCIucmVwZWF0KE1hdGgubWF4KDAsZy1tKSkrZH1lbHNlIGQrPWUudmVyYm9zZT8iICIrRlIocCxmKTpoO2kucHVzaChkKX19LCJhZGQiKSxsPUVnKHQpLGM9QmlnSW50KGwuZGF5cyk7aWYoZS5oaWRlWWVhckFuZERheXM/YShCaWdJbnQoYykqMjRuK0JpZ0ludChsLmhvdXJzKSwiaG91ciIsImgiKTooZS5oaWRlWWVhcj9hKGMsImRheSIsImQiKTooYShjLzM2NW4sInllYXIiLCJ5IiksYShjJTM2NW4sImRheSIsImQiKSksYShOdW1iZXIobC5ob3VycyksImhvdXIiLCJoIikpLGEoTnVtYmVyKGwubWludXRlcyksIm1pbnV0ZSIsIm0iKSwhZS5oaWRlU2Vjb25kcylpZihlLnNlcGFyYXRlTWlsbGlzZWNvbmRzfHxlLmZvcm1hdFN1Yk1pbGxpc2Vjb25kc3x8IWUuY29sb25Ob3RhdGlvbiYmdDwxZTMmJiFlLnN1YlNlY29uZHNBc0RlY2ltYWxzKXtsZXQgZj1OdW1iZXIobC5zZWNvbmRzKSxwPU51bWJlcihsLm1pbGxpc2Vjb25kcyksaD1OdW1iZXIobC5taWNyb3NlY29uZHMpLGQ9TnVtYmVyKGwubmFub3NlY29uZHMpO2lmKGEoZiwic2Vjb25kIiwicyIpLGUuZm9ybWF0U3ViTWlsbGlzZWNvbmRzKWEocCwibWlsbGlzZWNvbmQiLCJtcyIpLGEoaCwibWljcm9zZWNvbmQiLCJceEI1cyIpLGEoZCwibmFub3NlY29uZCIsIm5zIik7ZWxzZXtsZXQgbT1wK2gvMWUzK2QvMWU2LGc9dHlwZW9mIGUubWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cz09Im51bWJlciI/ZS5taWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzOjAseT1tPj0xP01hdGgucm91bmQobSk6TWF0aC5jZWlsKG0pLHg9MWUzLTEwKiotZyxrPWc/TWF0aC5taW4obSx4KS50b0ZpeGVkKGcpOk1hdGgubWluKHkseCk7YShOdW1iZXIucGFyc2VGbG9hdChrKSwibWlsbGlzZWNvbmQiLCJtcyIsayl9fWVsc2V7bGV0IGY9KHI/TnVtYmVyKHQlJFIpOnQpLzFlMyU2MCxwPXR5cGVvZiBlLnNlY29uZHNEZWNpbWFsRGlnaXRzPT0ibnVtYmVyIj9lLnNlY29uZHNEZWNpbWFsRGlnaXRzOjEsaD1zKGYscCksZD1lLmtlZXBEZWNpbWFsc09uV2hvbGVTZWNvbmRzP2g6aC5yZXBsYWNlKC9cLjArJC8sIiIpO2EoTnVtYmVyLnBhcnNlRmxvYXQoZCksInNlY29uZCIsInMiLGQpfWlmKGkubGVuZ3RoPT09MClyZXR1cm4gbisiMCIrKGUudmVyYm9zZT8iIG1pbGxpc2Vjb25kcyI6Im1zIik7bGV0IHU9ZS5jb2xvbk5vdGF0aW9uPyI6IjoiICI7cmV0dXJuIHR5cGVvZiBlLnVuaXRDb3VudD09Im51bWJlciImJihpPWkuc2xpY2UoMCxNYXRoLm1heChlLnVuaXRDb3VudCwxKSkpLG4raS5qb2luKHUpfW8oRWwsInByZXR0eU1pbGxpc2Vjb25kcyIpO3ZhciBmbz1kcihzMSgpLDEpLGMxPWRyKGExKCksMSk7Zm8uZGVmYXVsdC5leHRlbmQoYzEuZGVmYXVsdCk7dmFyIERsPWNsYXNze3N0YXRpY3tvKHRoaXMsIkNyb25Kb2IiKX1jb25zdHJ1Y3RvcihlLHIsbil7dGhpcy5zdGF0dXM9ImluaXRpYWwiLHRoaXMubmV4dEV4ZWN1dGlvblVuaXg9MCx0aGlzLmNyb25FeHByZXNzaW9uPXIsdGhpcy5qb2JGdW5jdGlvbj1uLHRoaXMuY3JvblBhcnNlcj1uZXcgZGwuQ3JvbihyKX1jaGVja0V4ZWN1dGlvbigpe2lmKHRoaXMuc3RhdHVzPT09InN0b3BwZWQiKXJldHVybiB0aGlzLm5leHRFeGVjdXRpb25Vbml4O2lmKHRoaXMubmV4dEV4ZWN1dGlvblVuaXg9PT0wJiZ0aGlzLmdldE5leHRFeGVjdXRpb25UaW1lKCksRGF0ZS5ub3coKT50aGlzLm5leHRFeGVjdXRpb25Vbml4KXtsZXQgZT10aGlzLmpvYkZ1bmN0aW9uKHRoaXMubmV4dEV4ZWN1dGlvblVuaXgpO2UgaW5zdGFuY2VvZiBQcm9taXNlJiZlLmNhdGNoKHI9PmNvbnNvbGUubG9nKHIpKSx0aGlzLm5leHRFeGVjdXRpb25Vbml4PXRoaXMuZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKX1yZXR1cm4gdGhpcy5uZXh0RXhlY3V0aW9uVW5peH1nZXROZXh0RXhlY3V0aW9uVGltZSgpe3JldHVybiB0aGlzLm5leHRFeGVjdXRpb25Vbml4PURhdGUubm93KCkrdGhpcy5nZXRUaW1lVG9OZXh0RXhlY3V0aW9uKCl9Z2V0VGltZVRvTmV4dEV4ZWN1dGlvbigpe3JldHVybiB0aGlzLmNyb25QYXJzZXIubXNUb05leHQoKX1zdGFydCgpe3RoaXMuc3RhdHVzPSJzdGFydGVkIn1zdG9wKCl7dGhpcy5zdGF0dXM9InN0b3BwZWQifX07dmFyIERnPWNsYXNze3N0YXRpY3tvKHRoaXMsIkNyb25NYW5hZ2VyIil9Y29uc3RydWN0b3IoKXt0aGlzLnN0YXR1cz0ic3RvcHBlZCIsdGhpcy5jcm9uam9icz1uZXcgQWUuT2JqZWN0TWFwLHRoaXMuY3ljbGVXYWtlRGVmZXJyZWQ9bnVsbH13YWtlQ3ljbGUoKXt0aGlzLmN5Y2xlV2FrZURlZmVycmVkJiZ0aGlzLmN5Y2xlV2FrZURlZmVycmVkLnN0YXR1cz09PSJwZW5kaW5nIiYmdGhpcy5jeWNsZVdha2VEZWZlcnJlZC5yZXNvbHZlKCl9YWRkQ3JvbmpvYihlLHIpe2xldCBuPW5ldyBEbCh0aGlzLGUscik7cmV0dXJuIHRoaXMuY3JvbmpvYnMuYWRkKG4pLHRoaXMuc3RhdHVzPT09InN0YXJ0ZWQiJiYobi5zdGFydCgpLHRoaXMud2FrZUN5Y2xlKCkpLG59cmVtb3ZlQ3JvbmpvYihlKXtlLnN0b3AoKSx0aGlzLmNyb25qb2JzLnJlbW92ZShlKSx0aGlzLnN0YXR1cz09PSJzdGFydGVkIiYmdGhpcy53YWtlQ3ljbGUoKX1zdGFydCgpe2lmKHRoaXMuc3RhdHVzIT09InN0YXJ0ZWQiKXt0aGlzLnN0YXR1cz0ic3RhcnRlZCI7Zm9yKGxldCBlIG9mIHRoaXMuY3JvbmpvYnMuZ2V0QXJyYXkoKSllLnN0YXJ0KCk7dGhpcy5ydW5Dcm9uQ3ljbGUoKX19YXN5bmMgcnVuQ3JvbkN5Y2xlKCl7Zm9yKDt0aGlzLnN0YXR1cz09PSJzdGFydGVkIjspe3RoaXMuY3ljbGVXYWtlRGVmZXJyZWQ9bmV3IFouRGVmZXJyZWQ7bGV0IGU9MS8wO2ZvcihsZXQgciBvZiB0aGlzLmNyb25qb2JzLmdldEFycmF5KCkpe3IuY2hlY2tFeGVjdXRpb24oKTtsZXQgbj1yLmdldFRpbWVUb05leHRFeGVjdXRpb24oKTtuPGUmJihlPW4pfWlmKGU8MS8wJiZlPjApdGhpcy5leGVjdXRpb25UaW1lb3V0PW5ldyBsZS5UaW1lb3V0KGUpLGF3YWl0IFByb21pc2UucmFjZShbdGhpcy5leGVjdXRpb25UaW1lb3V0LnByb21pc2UsdGhpcy5jeWNsZVdha2VEZWZlcnJlZC5wcm9taXNlXSksdGhpcy5leGVjdXRpb25UaW1lb3V0LmNhbmNlbCgpO2Vsc2V7aWYoZTw9MCljb250aW51ZTthd2FpdCB0aGlzLmN5Y2xlV2FrZURlZmVycmVkLnByb21pc2V9fXRoaXMuY3ljbGVXYWtlRGVmZXJyZWQ9bnVsbH1zdG9wKCl7dGhpcy5zdGF0dXM9PT0ic3RhcnRlZCImJih0aGlzLnN0YXR1cz0ic3RvcHBlZCIsdGhpcy5leGVjdXRpb25UaW1lb3V0JiZ0aGlzLmV4ZWN1dGlvblRpbWVvdXQuY2FuY2VsKCksdGhpcy53YWtlQ3ljbGUoKSk7Zm9yKGxldCBlIG9mIHRoaXMuY3JvbmpvYnMuZ2V0QXJyYXkoKSllLnN0b3AoKX19O3ZhciB5aT17eWVhcnM6bygodD0xKT0+dCozMTU0ZTcsInllYXJzIiksbW9udGhzOm8oKHQ9MSk9PnQqMjYyOGU2LCJtb250aHMiKSx3ZWVrczpvKCh0PTEpPT50KjYwNDhlNSwid2Vla3MiKSxkYXlzOm8oKHQ9MSk9PnQqODY0ZTUsImRheXMiKSxob3VyczpvKCh0PTEpPT50KjM2ZTUsImhvdXJzIiksbWludXRlczpvKCh0PTEpPT50KjZlNCwibWludXRlcyIpLHNlY29uZHM6bygodD0xKT0+dCoxZTMsInNlY29uZHMiKX0sQ2c9byh0PT57bGV0IGU9MCxyPW8obj0+e2U9ZStufSwiYWRkTWlsbGlTZWNvbmRzIik7cmV0dXJuIHQueWVhcnMmJnIoeWkueWVhcnModC55ZWFycykpLHQubW9udGhzJiZyKHlpLm1vbnRocyh0Lm1vbnRocykpLHQud2Vla3MmJnIoeWkud2Vla3ModC53ZWVrcykpLHQuZGF5cyYmcih5aS5kYXlzKHQuZGF5cykpLHQuaG91cnMmJnIoeWkuaG91cnModC5ob3VycykpLHQubWludXRlcyYmcih5aS5taW51dGVzKHQubWludXRlcykpLHQuc2Vjb25kcyYmcih5aS5zZWNvbmRzKHQuc2Vjb25kcykpLGV9LCJnZXRNaWxsaVNlY29uZHNGcm9tVW5pdHMiKSxCUj1vKHQ9PkVsKHQpLCJnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVTdHJpbmciKSx6Uj1vKHQ9PlRsLmZvcm1hdERpc3RhbmNlVG9Ob3cobmV3IERhdGUodCkpLCJnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVBZ29UaW1lIik7dmFyIE1nPWNsYXNzIHQgZXh0ZW5kcyBEYXRle3N0YXRpY3tvKHRoaXMsIkV4dGVuZGVkRGF0ZSIpfXN0YXRpYyBmcm9tTWlsbGlzKGUpe3JldHVybiBuZXcgdChlKX1zdGF0aWMgZnJvbURhdGUoZSl7cmV0dXJuIG5ldyB0KGUuZ2V0VGltZSgpKX1zdGF0aWMgZnJvbUV1cm9wZWFuRGF0ZShlKXtsZXQgcj0vKC4qKVwuKC4qKVwuKC4qKS8uZXhlYyhlKSxpPW5ldyBEYXRlKHBhcnNlRmxvYXQoclszXSkscGFyc2VGbG9hdChyWzJdKS0xLHBhcnNlRmxvYXQoclsxXSkpLmdldFRpbWUoKTtyZXR1cm4gbmV3IHQoaSl9c3RhdGljIGZyb21IeXBoZWREYXRlKGUpe2xldCByPW5ldyBEYXRlKGUpLmdldFRpbWUoKTtyZXR1cm4gbmV3IHQocil9c3RhdGljIGZyb21FdXJvcGVhbkRhdGVBbmRUaW1lKGUscj0iMTI6MDA6MDAiLG49IkV1cm9wZS9CZXJsaW4iKXtsZXQgaT0vKC4qKVwuKC4qKVwuKC4qKS8uZXhlYyhlKSxzPW8odT0+YDAke3V9YC5zbGljZSgtMiksInNsaWNlRGF0ZSIpLGE9YCR7aVszXX0tJHtzKGlbMl0pfS0ke3MoaVsxXSl9VCR7cn1gLGM9Zm8uZGVmYXVsdChhKS50b0RhdGUoKS5nZXRUaW1lKCk7cmV0dXJuIG5ldyB0KGMpfWNvbnN0cnVjdG9yKGU9RGF0ZS5ub3coKSl7c3VwZXIoZSl9ZXhwb3J0VG9FdXJvcGVhbkRhdGUoKXtsZXQgZT10aGlzLmV4cG9ydFRvVW5pdHMoKTtyZXR1cm5gJHtlLmRheVN0cmluZ30uJHtlLm1vbnRoU3RyaW5nfS4ke2UueWVhclN0cmluZ31gfWV4cG9ydFRvSHlwaGVkU29ydGFibGVEYXRlKCl7bGV0IGU9dGhpcy5leHBvcnRUb1VuaXRzKCk7cmV0dXJuYCR7ZS55ZWFyU3RyaW5nfS0ke2UubW9udGhTdHJpbmd9LSR7ZS5kYXlTdHJpbmd9YH1leHBvcnRUb1VuaXRzKCl7bGV0IGU9WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHI9WyJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSIsIlN1bmRheSJdO3JldHVybnt5ZWFyOnRoaXMuZ2V0RnVsbFllYXIoKSx5ZWFyU3RyaW5nOmAke3RoaXMuZ2V0RnVsbFllYXIoKX1gLG1vbnRoOnRoaXMuZ2V0TW9udGgoKSsxLG1vbnRoU3RyaW5nOigiMCIrKHRoaXMuZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpLG1vbnRoTmFtZTplW3RoaXMuZ2V0TW9udGgoKV0sZGF5OnRoaXMuZ2V0RGF0ZSgpLGRheVN0cmluZzooIjAiK3RoaXMuZ2V0RGF0ZSgpKS5zbGljZSgtMiksZGF5T2ZUaGVXZWVrOnRoaXMuZ2V0RGF5KCksZGF5T2ZUaGVXZWVrTmFtZTpyW3RoaXMuZ2V0RGF5KCldfX1mb3JtYXQoZSl7cmV0dXJuIGZvLmRlZmF1bHQodGhpcy5nZXRUaW1lKCkpLmZvcm1hdChlKX1pc1RvZGF5KCl7cmV0dXJuIGZvLmRlZmF1bHQodGhpcy5nZXRUaW1lKCkpLmlzVG9kYXkoKX1sZXNzVGltZVBhc3NlZFRvTm93KGUpe2xldCByPUNnKGUpO3JldHVybiBEYXRlLm5vdygpLXRoaXMuZ2V0VGltZSgpPHJ9bW9yZVRpbWVQYXNzZWRUb05vdyhlKXtyZXR1cm4hdGhpcy5sZXNzVGltZVBhc3NlZFRvTm93KGUpfX07dmFyIE9nPWNsYXNze3N0YXRpY3tvKHRoaXMsIkhydE1lYXN1cmVtZW50Iil9Y29uc3RydWN0b3IoKXt0aGlzLm5hbm9TZWNvbmRzPW51bGwsdGhpcy5taWxsaVNlY29uZHM9bnVsbCx0aGlzLl9taWxsaVN0YXJ0PW51bGwsdGhpcy5fbWlsbGlEaWZmPW51bGwsdGhpcy5fc3RhcnRlZD0hMX1zdGFydCgpe3RoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fbWlsbGlTdGFydD1EYXRlLm5vdygpfXN0b3AoKXtpZih0aGlzLl9zdGFydGVkPT09ITEpe2NvbnNvbGUubG9nKCJIYXNuJ3Qgc3RhcnRlZCB5ZXQiKTtyZXR1cm59cmV0dXJuIHRoaXMuX21pbGxpRGlmZj1EYXRlLm5vdygpLXRoaXMuX21pbGxpU3RhcnQsdGhpcy5uYW5vU2Vjb25kcz10aGlzLl9taWxsaURpZmYqMWUzLHRoaXMubWlsbGlTZWNvbmRzPXRoaXMuX21pbGxpRGlmZix0aGlzfXJlc2V0KCl7dGhpcy5uYW5vU2Vjb25kcz1udWxsLHRoaXMubWlsbGlTZWNvbmRzPW51bGwsdGhpcy5fbWlsbGlTdGFydD1udWxsLHRoaXMuX21pbGxpRGlmZj1udWxsLHRoaXMuX3N0YXJ0ZWQ9ITF9fTt2YXIgSWc9Y2xhc3N7c3RhdGlje28odGhpcywiSW50ZXJ2YWwiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnN0YXR1cz0iaW5pdGlhbCIsdGhpcy5zdGF0dXNBdXRob3JpemF0aW9uPW51bGwsdGhpcy5pbnRlcnZhbEpvYnM9W10sdGhpcy5pbnRlcnZhbE1pbGxpc2Vjb25kcz1lfXN0YXJ0KCl7dGhpcy5zdGF0dXM9InN0YXJ0ZWQiO2xldCBlPW5ldyBEYXRlO3RoaXMuc3RhdHVzQXV0aG9yaXphdGlvbj1lLG8oYXN5bmMoKT0+e2Zvcig7dGhpcy5zdGF0dXM9PT0ic3RhcnRlZCImJnRoaXMuc3RhdHVzQXV0aG9yaXphdGlvbj09PWU7KWF3YWl0IGxlLmRlbGF5Rm9yKHRoaXMuaW50ZXJ2YWxNaWxsaXNlY29uZHMpLHRoaXMuZXhlY3V0ZUludGVydmFsSm9icygpfSwicnVuSW50ZXJ2YWwiKSgpfXN0b3AoKXt0aGlzLnN0YXR1cz0ic3RvcHBlZCIsdGhpcy5zdGF0dXNBdXRob3JpemF0aW9uPW51bGx9YWRkSW50ZXJ2YWxKb2IoZSl7dGhpcy5pbnRlcnZhbEpvYnMucHVzaChlKX1leGVjdXRlSW50ZXJ2YWxKb2JzKCl7Zm9yKGxldCBlIG9mIHRoaXMuaW50ZXJ2YWxKb2JzKWUoKX19O3ZhciBBcz1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIlRpbWVTdGFtcCIpfXN0YXRpYyBmcm9tTWlsbGlTZWNvbmRzKGUpe3JldHVybiBuZXcgdChlKX1zdGF0aWMgZnJvbVRpbWVTdGFtcChlKXtsZXQgcj1uZXcgdDtyZXR1cm4gci5jaGFuZ2U9ci5taWxsaVNlY29uZHMtZS5taWxsaVNlY29uZHMscn1jb25zdHJ1Y3RvcihlKXt0aGlzLmNoYW5nZT1udWxsLGU/dHlwZW9mIGU9PSJudW1iZXIiJiYodGhpcy5kYXRlPW5ldyBEYXRlKGUpKTp0aGlzLmRhdGU9bmV3IERhdGUsdGhpcy5taWxsaVNlY29uZHM9dGhpcy5kYXRlLmdldFRpbWUoKSx0aGlzLmVwb2NodGltZT1NYXRoLmZsb29yKHRoaXMubWlsbGlTZWNvbmRzLzFlMyl9aXNPbGRlclRoYW5PdGhlclRpbWVTdGFtcChlLHI9MCl7cmV0dXJuIHRoaXMubWlsbGlTZWNvbmRzPGUubWlsbGlTZWNvbmRzLXJ9aXNPbGRlclRoYW4oZSxyPTApe3JldHVybiB0aGlzLm1pbGxpU2Vjb25kcytyPGUubWlsbGlTZWNvbmRzfWlzWW91bmdlclRoYW5PdGhlclRpbWVTdGFtcChlLHI9MCl7cmV0dXJuIHRoaXMubWlsbGlTZWNvbmRzPmUubWlsbGlTZWNvbmRzK3J9aXNZb3VuZ2VyVGhhbk1pbGxpU2Vjb25kcyhlKXtsZXQgbj1uZXcgdCgpLmVwb2NodGltZS1lLGk9bmV3IHQobik7cmV0dXJuIHRoaXMuaXNZb3VuZ2VyVGhhbk90aGVyVGltZVN0YW1wKGkpfX07dmFyIF9nPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRpbWVyIil9Z2V0IHRpbWVMZWZ0KCl7cmV0dXJuIHRoaXMudGltZUluTWlsbGlzZWNvbmRzLXRoaXMucGF1c2VkQXQuY2hhbmdlfWNvbnN0cnVjdG9yKGUpe3RoaXMuc3RhdGU9ImluaXRpYXRlZCIsdGhpcy5jb21wbGV0ZWREZWZlcnJlZD1aLmRlZmVyKCksdGhpcy50aW1lSW5NaWxsaXNlY29uZHM9ZSx0aGlzLmNvbXBsZXRlZD10aGlzLmNvbXBsZXRlZERlZmVycmVkLnByb21pc2V9c3RhcnQoKXtpZighdGhpcy5zdGFydGVkQXQpdGhpcy5jdXJyZW50VGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5jb21wbGV0ZWREZWZlcnJlZC5yZXNvbHZlKCl9LHRoaXMudGltZUluTWlsbGlzZWNvbmRzKSx0aGlzLnN0YXJ0ZWRBdD1uZXcgQXM7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInRpbWVyIGhhcyBiZWVuIHN0YXJ0ZWQgYmVmb3JlLiBQbGVhc2UgdXNlIHJlc3VtZSBpbnN0ZWFkIil9cGF1c2UoKXt0aGlzLnN0YXJ0ZWRBdCYmKGNsZWFyVGltZW91dCh0aGlzLmN1cnJlbnRUaW1lb3V0KSx0aGlzLmN1cnJlbnRUaW1lb3V0PW51bGwsdGhpcy5wYXVzZWRBdD1Bcy5mcm9tVGltZVN0YW1wKHRoaXMuc3RhcnRlZEF0KSl9cmVzdW1lKCl7aWYodGhpcy5zdGFydGVkQXQpdGhpcy5jdXJyZW50VGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5jb21wbGV0ZWREZWZlcnJlZC5yZXNvbHZlKCl9LHRoaXMudGltZUxlZnQpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJ0aW1lciBoYXMgTk9UIGJlZW4gc3RhcnRlZCBiZWZvcmUuIFBsZWFzZSB1c2UgLnN0YXJ0KCkgaW5zdGVhZCIpfXJlc2V0KCl7dGhpcy5wYXVzZSgpLHRoaXMuc3RhcnRlZEF0PW51bGwsdGhpcy5wYXVzZWRBdD1udWxsfX07dmFyIF9wPWRyKHcxKCksMSk7dmFyIE5nPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFzeW5jRXhlY3V0aW9uU3RhY2siKX1leGVjdXRpb25TbG90cz1bXTtpc1Byb2Nlc3Npbmc9ITE7bm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3k9MS8wO25vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudD0wO25vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZT1bXTthc3luYyBnZXRFeGNsdXNpdmVFeGVjdXRpb25TbG90KGUscil7bGV0IG49Wi5kZWZlcigpLGk9e2Z1bmNUb0V4ZWN1dGU6ZSxleGVjdXRpb25EZWZlcnJlZDpuLHRpbWVvdXQ6cixtb2RlOiJleGNsdXNpdmUifTtyZXR1cm4gdGhpcy5leGVjdXRpb25TbG90cy5wdXNoKGkpLHRoaXMucHJvY2Vzc0V4ZWN1dGlvblNsb3RzKCksbi5wcm9taXNlfWFzeW5jIGdldE5vbkV4Y2x1c2l2ZUV4ZWN1dGlvblNsb3QoZSxyKXtsZXQgbj1aLmRlZmVyKCksaT17ZnVuY1RvRXhlY3V0ZTplLGV4ZWN1dGlvbkRlZmVycmVkOm4sdGltZW91dDpyLG1vZGU6Im5vbmV4Y2x1c2l2ZSJ9O3JldHVybiB0aGlzLmV4ZWN1dGlvblNsb3RzLnB1c2goaSksdGhpcy5wcm9jZXNzRXhlY3V0aW9uU2xvdHMoKSxuLnByb21pc2V9c2V0Tm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3koZSl7aWYoIU51bWJlci5pc0Zpbml0ZShlKXx8ZTwxKXRocm93IG5ldyBFcnJvcigibm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3kgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXIgPj0gMSIpO3RoaXMubm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3k9ZX1nZXROb25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSgpe3JldHVybiB0aGlzLm5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5fWdldEFjdGl2ZU5vbkV4Y2x1c2l2ZUNvdW50KCl7cmV0dXJuIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50fWdldFBlbmRpbmdOb25FeGNsdXNpdmVDb3VudCgpe3JldHVybiB0aGlzLm5vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZS5sZW5ndGh9YXN5bmMgcHJvY2Vzc0V4ZWN1dGlvblNsb3RzKCl7aWYoIXRoaXMuaXNQcm9jZXNzaW5nKXtmb3IodGhpcy5pc1Byb2Nlc3Npbmc9ITA7dGhpcy5leGVjdXRpb25TbG90cy5sZW5ndGg+MDspe2xldCBlPXRoaXMuZXhlY3V0aW9uU2xvdHNbMF07aWYoZS5tb2RlPT09ImV4Y2x1c2l2ZSIpYXdhaXQgdGhpcy5leGVjdXRlRXhjbHVzaXZlU2xvdChlKSx0aGlzLmV4ZWN1dGlvblNsb3RzLnNoaWZ0KCk7ZWxzZXtsZXQgcj1bXTtmb3IoO3RoaXMuZXhlY3V0aW9uU2xvdHMubGVuZ3RoPjAmJnRoaXMuZXhlY3V0aW9uU2xvdHNbMF0ubW9kZT09PSJub25leGNsdXNpdmUiOylyLnB1c2godGhpcy5leGVjdXRpb25TbG90cy5zaGlmdCgpKTthd2FpdCB0aGlzLmV4ZWN1dGVOb25FeGNsdXNpdmVTbG90cyhyKX19dGhpcy5pc1Byb2Nlc3Npbmc9ITF9fWFzeW5jIGV4ZWN1dGVFeGNsdXNpdmVTbG90KGUpe3RyeXtpZihlLnRpbWVvdXQpe2xldCByPW5ldyBsZS5UaW1lb3V0KGUudGltZW91dCk7dHJ5e2xldCBuPWF3YWl0IFByb21pc2UucmFjZShbZS5mdW5jVG9FeGVjdXRlKCksci5wcm9taXNlLnRoZW4oKCk9Pnt0aHJvdyBuZXcgRXJyb3IoIlRpbWVvdXQgcmVhY2hlZCIpfSldKTtyLmNhbmNlbCgpLGUuZXhlY3V0aW9uRGVmZXJyZWQucmVzb2x2ZShuKX1jYXRjaChuKXt0aHJvdyByLmNhbmNlbCgpLG59fWVsc2V7bGV0IHI9YXdhaXQgZS5mdW5jVG9FeGVjdXRlKCk7ZS5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHIpfX1jYXRjaChyKXtlLmV4ZWN1dGlvbkRlZmVycmVkLnJlamVjdChyKX19YXN5bmMgZXhlY3V0ZU5vbkV4Y2x1c2l2ZVNsb3RzKGUpe2xldCByPWUubWFwKGFzeW5jIG49Pnthd2FpdCB0aGlzLndhaXRGb3JOb25FeGNsdXNpdmVTbG90KCk7dHJ5e2lmKG4udGltZW91dCl7bGV0IGk9bmV3IGxlLlRpbWVvdXQobi50aW1lb3V0KTt0cnl7bGV0IHM9YXdhaXQgUHJvbWlzZS5yYWNlKFtuLmZ1bmNUb0V4ZWN1dGUoKSxpLnByb21pc2UudGhlbigoKT0+e3Rocm93IG5ldyBFcnJvcigiVGltZW91dCByZWFjaGVkIil9KV0pO2kuY2FuY2VsKCksbi5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHMpfWNhdGNoKHMpe3Rocm93IGkuY2FuY2VsKCksc319ZWxzZXtsZXQgaT1hd2FpdCBuLmZ1bmNUb0V4ZWN1dGUoKTtuLmV4ZWN1dGlvbkRlZmVycmVkLnJlc29sdmUoaSl9fWNhdGNoKGkpe24uZXhlY3V0aW9uRGVmZXJyZWQucmVqZWN0KGkpfWZpbmFsbHl7dGhpcy5yZWxlYXNlTm9uRXhjbHVzaXZlU2xvdCgpfX0pO2F3YWl0IFByb21pc2UuYWxsKHIpfXdhaXRGb3JOb25FeGNsdXNpdmVTbG90KCl7cmV0dXJuIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50PHRoaXMubm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3k/KHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50KyssUHJvbWlzZS5yZXNvbHZlKCkpOm5ldyBQcm9taXNlKGU9Pnt0aGlzLm5vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZS5wdXNoKCgpPT57dGhpcy5ub25FeGNsdXNpdmVDdXJyZW50Q291bnQrKyxlKCl9KX0pfXJlbGVhc2VOb25FeGNsdXNpdmVTbG90KCl7dGhpcy5ub25FeGNsdXNpdmVDdXJyZW50Q291bnQtLTtsZXQgZT10aGlzLm5vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZS5zaGlmdCgpO2UmJmUoKX19O3ZhciBSZz1jbGFzc3tzdGF0aWN7byh0aGlzLCJCYWNrcHJlc3N1cmVkQXJyYXkiKX1kYXRhO2hpZ2hXYXRlck1hcms7aGFzU3BhY2U9bmV3IEllLnJ4anMuU3ViamVjdDtpdGVtc0F2YWlsYWJsZT1uZXcgSWUucnhqcy5TdWJqZWN0O2lzRGVzdHJveWVkPSExO2NvbnN0cnVjdG9yKGU9MTYpe3RoaXMuZGF0YT1bXSx0aGlzLmhpZ2hXYXRlck1hcms9ZX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGh9cHVzaChlKXt0aGlzLmRhdGEucHVzaChlKSx0aGlzLml0ZW1zQXZhaWxhYmxlLm5leHQoIml0ZW1zQXZhaWxhYmxlIik7bGV0IHI9dGhpcy5jaGVja1NwYWNlQXZhaWxhYmxlKCk7cmV0dXJuIHImJnRoaXMuaGFzU3BhY2UubmV4dCgiaGFzU3BhY2UiKSxyfXB1c2hNYW55KGUpe2ZvcihsZXQgciBvZiBlKXRoaXMucHVzaChyKTtyZXR1cm4gdGhpcy5jaGVja1NwYWNlQXZhaWxhYmxlKCl9c2hpZnQoKXtsZXQgZT10aGlzLmRhdGEuc2hpZnQoKTtyZXR1cm4gdGhpcy5jaGVja1NwYWNlQXZhaWxhYmxlKCkmJnRoaXMuaGFzU3BhY2UubmV4dCgiaGFzU3BhY2UiKSxlfXBlZWsoKXtyZXR1cm4gdGhpcy5kYXRhWzBdfWNoZWNrU3BhY2VBdmFpbGFibGUoKXtyZXR1cm4gdGhpcy5kYXRhLmxlbmd0aDx0aGlzLmhpZ2hXYXRlck1hcmt9Y2hlY2tIYXNJdGVtcygpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RoPjB9d2FpdEZvclNwYWNlKCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntpZih0aGlzLmNoZWNrU3BhY2VBdmFpbGFibGUoKXx8dGhpcy5pc0Rlc3Ryb3llZCllKCk7ZWxzZXtsZXQgcj10aGlzLmhhc1NwYWNlLnN1YnNjcmliZSh7bmV4dDpvKCgpPT57ci51bnN1YnNjcmliZSgpLGUoKX0sIm5leHQiKSxjb21wbGV0ZTpvKCgpPT57ZSgpfSwiY29tcGxldGUiKX0pfX0pfXdhaXRGb3JJdGVtcygpe3JldHVybiBuZXcgUHJvbWlzZShlPT57aWYodGhpcy5kYXRhLmxlbmd0aD4wfHx0aGlzLmlzRGVzdHJveWVkKWUoKTtlbHNle2xldCByPXRoaXMuaXRlbXNBdmFpbGFibGUuc3Vic2NyaWJlKHtuZXh0Om8oKCk9PntyLnVuc3Vic2NyaWJlKCksZSgpfSwibmV4dCIpLGNvbXBsZXRlOm8oKCk9PntlKCl9LCJjb21wbGV0ZSIpfSl9fSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5kYXRhW1N5bWJvbC5pdGVyYXRvcl0oKX1kZXN0cm95KCl7dGhpcy5pc0Rlc3Ryb3llZD0hMCx0aGlzLmhhc1NwYWNlLmNvbXBsZXRlKCksdGhpcy5pdGVtc0F2YWlsYWJsZS5jb21wbGV0ZSgpfX07dmFyIGhvPWNsYXNzIHR7c3RhdGlje28odGhpcywiRmFzdE1hcCIpfW1hcE9iamVjdD1uZXcgTWFwO2lzVW5pcXVlS2V5KGUpe3JldHVybiF0aGlzLm1hcE9iamVjdC5oYXMoZSl9aGFzKGUpe3JldHVybiB0aGlzLm1hcE9iamVjdC5oYXMoZSl9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5tYXBPYmplY3Quc2l6ZX1hZGRUb01hcChlLHIsbil7cmV0dXJuIHRoaXMuaXNVbmlxdWVLZXkoZSl8fG4mJm4uZm9yY2U/KHRoaXMubWFwT2JqZWN0LnNldChlLHIpLCEwKTohMX1nZXRCeUtleShlKXtyZXR1cm4gdGhpcy5tYXBPYmplY3QuZ2V0KGUpfXJlbW92ZUZyb21NYXAoZSl7bGV0IHI9dGhpcy5tYXBPYmplY3QuZ2V0KGUpO3JldHVybiB0aGlzLm1hcE9iamVjdC5kZWxldGUoZSkscn1nZXRLZXlzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5tYXBPYmplY3Qua2V5cygpKX12YWx1ZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLm1hcE9iamVjdC52YWx1ZXMoKSl9ZW50cmllcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMubWFwT2JqZWN0LmVudHJpZXMoKSl9Y2xlYW4oKXt0aGlzLm1hcE9iamVjdC5jbGVhcigpfWNvbmNhdChlKXtsZXQgcj1uZXcgdDtmb3IobGV0IG4gb2YgdGhpcy5nZXRLZXlzKCkpci5hZGRUb01hcChuLHRoaXMuZ2V0QnlLZXkobikpO2ZvcihsZXQgbiBvZiBlLmdldEtleXMoKSlyLmFkZFRvTWFwKG4sZS5nZXRCeUtleShuKSx7Zm9yY2U6ITB9KTtyZXR1cm4gcn1hZGRBbGxGcm9tT3RoZXIoZSl7Zm9yKGxldCByIG9mIGUuZ2V0S2V5cygpKXRoaXMuYWRkVG9NYXAocixlLmdldEJ5S2V5KHIpLHtmb3JjZTohMH0pfWFzeW5jIGZpbmQoZSl7Zm9yKGxldCByIG9mIHRoaXMuZ2V0S2V5cygpKXtsZXQgbj10aGlzLmdldEJ5S2V5KHIpO2lmKGF3YWl0IGUobikpcmV0dXJuIG59fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMubWFwT2JqZWN0LmVudHJpZXMoKX19O3ZhciB2MT1vKCh0PSJ1bmkiKT0+YCR7dH14eHh4eHh4eHh4eGAucmVwbGFjZSgvW3h5XS9nLGU9PntsZXQgcj1NYXRoLnJhbmRvbSgpKjE2fDA7cmV0dXJuKGU9PT0ieCI/cjpyJjN8OCkudG9TdHJpbmcoMTYpfSksInVuaSIpLExuPWNsYXNzIHR7c3RhdGlje28odGhpcywiT2JqZWN0TWFwIil9ZmFzdE1hcD1uZXcgaG87cmV2ZXJzZU1hcD1uZXcgTWFwO2V2ZW50U3ViamVjdD1uZXcgSWUucnhqcy5TdWJqZWN0O2NvbnN0cnVjdG9yKCl7fWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5mYXN0TWFwLnNpemV9YWRkTWFwcGVkVW5pcXVlKGUscil7dGhpcy5mYXN0TWFwLmFkZFRvTWFwKGUsciksdGhpcy5yZXZlcnNlTWFwLnNldChyLGUpfWdldE1hcHBlZFVuaXF1ZShlKXtyZXR1cm4gdGhpcy5mYXN0TWFwLmdldEJ5S2V5KGUpfXJlbW92ZU1hcHBlZFVuaXF1ZShlKXtsZXQgcj10aGlzLmZhc3RNYXAucmVtb3ZlRnJvbU1hcChlKTtyZXR1cm4gciE9PXZvaWQgMCYmKHRoaXMucmV2ZXJzZU1hcC5kZWxldGUociksdGhpcy5ldmVudFN1YmplY3QubmV4dCh7b3BlcmF0aW9uOiJyZW1vdmUiLHBheWxvYWQ6cn0pKSxyfWFkZChlKXtsZXQgcj10aGlzLnJldmVyc2VNYXAuZ2V0KGUpO2lmKHIhPT12b2lkIDApcmV0dXJuIHI7bGV0IG49djEoImtleSIpO3JldHVybiB0aGlzLmFkZE1hcHBlZFVuaXF1ZShuLGUpLHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoe29wZXJhdGlvbjoiYWRkIixwYXlsb2FkOmV9KSxufWFkZEFycmF5KGUpe2ZvcihsZXQgciBvZiBlKXRoaXMuYWRkKHIpfWNoZWNrRm9yT2JqZWN0KGUpe3JldHVybiB0aGlzLnJldmVyc2VNYXAuaGFzKGUpfWdldEtleUZvck9iamVjdChlKXtyZXR1cm4gdGhpcy5yZXZlcnNlTWFwLmdldChlKT8/bnVsbH1hc3luYyBmaW5kKGUpe3JldHVybiB0aGlzLmZhc3RNYXAuZmluZChlKX1maW5kU3luYyhlKXtmb3IobGV0IHIgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSlpZihlKHRoaXMuZmFzdE1hcC5nZXRCeUtleShyKSkpcmV0dXJuIHRoaXMuZ2V0TWFwcGVkVW5pcXVlKHIpfWFzeW5jIGZpbmRPbmVBbmRSZW1vdmUoZSl7bGV0IHI9YXdhaXQgdGhpcy5maW5kKGUpO3JldHVybiByJiZ0aGlzLnJlbW92ZShyKSxyfWZpbmRPbmVBbmRSZW1vdmVTeW5jKGUpe2xldCByPXRoaXMuZmluZFN5bmMoZSk7cmV0dXJuIHImJnRoaXMucmVtb3ZlKHIpLHJ9YXN5bmMgZm9yRWFjaChlKXtmb3IobGV0IHIgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSlhd2FpdCBlKHRoaXMuZmFzdE1hcC5nZXRCeUtleShyKSl9Z2V0T25lQW5kUmVtb3ZlKCl7bGV0IGU9dGhpcy5mYXN0TWFwLmdldEtleXMoKTtpZihlLmxlbmd0aD09PTApcmV0dXJuIG51bGw7e2xldCByPWVbMF0sbj10aGlzLmZhc3RNYXAucmVtb3ZlRnJvbU1hcChyKTtyZXR1cm4gdGhpcy5yZXZlcnNlTWFwLmRlbGV0ZShuKSx0aGlzLmV2ZW50U3ViamVjdC5uZXh0KHtvcGVyYXRpb246InJlbW92ZSIscGF5bG9hZDpufSksbn19Z2V0QXJyYXkoKXtyZXR1cm4gdGhpcy5mYXN0TWFwLnZhbHVlcygpfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5mYXN0TWFwLnNpemU9PT0wfXJlbW92ZShlKXtsZXQgcj10aGlzLnJldmVyc2VNYXAuZ2V0KGUpO2lmKHIhPT12b2lkIDApe2xldCBuPXRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKHIpO3JldHVybiB0aGlzLnJldmVyc2VNYXAuZGVsZXRlKG4pLHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoe29wZXJhdGlvbjoicmVtb3ZlIixwYXlsb2FkOm59KSxufXJldHVybiBudWxsfXdpcGUoKXtsZXQgZT10aGlzLmZhc3RNYXAuZ2V0S2V5cygpO2ZvcihsZXQgciBvZiBlKXtsZXQgbj10aGlzLmZhc3RNYXAucmVtb3ZlRnJvbU1hcChyKTt0aGlzLnJldmVyc2VNYXAuZGVsZXRlKG4pLHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoe29wZXJhdGlvbjoicmVtb3ZlIixwYXlsb2FkOm59KX19Y29uY2F0KGUpe2xldCByPW5ldyB0O3IuZmFzdE1hcC5hZGRBbGxGcm9tT3RoZXIodGhpcy5mYXN0TWFwKSxyLmZhc3RNYXAuYWRkQWxsRnJvbU90aGVyKGUuZmFzdE1hcCk7Zm9yKGxldCBuIG9mIHIuZmFzdE1hcC5nZXRLZXlzKCkpci5yZXZlcnNlTWFwLnNldChyLmZhc3RNYXAuZ2V0QnlLZXkobiksbik7cmV0dXJuIHJ9YWRkQWxsRnJvbU90aGVyKGUpe3RoaXMuZmFzdE1hcC5hZGRBbGxGcm9tT3RoZXIoZS5mYXN0TWFwKTtmb3IobGV0IHIgb2YgZS5mYXN0TWFwLmdldEtleXMoKSl0aGlzLnJldmVyc2VNYXAuc2V0KGUuZmFzdE1hcC5nZXRCeUtleShyKSxyKX1tYXAoZSl7cmV0dXJuIHRoaXMuZ2V0QXJyYXkoKS5tYXAoZSl9ZmlsdGVyKGUpe3JldHVybiB0aGlzLmdldEFycmF5KCkuZmlsdGVyKGUpfXJlZHVjZShlLHIpe3JldHVybiB0aGlzLmdldEFycmF5KCkucmVkdWNlKGUscil9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5nZXRBcnJheSgpW1N5bWJvbC5pdGVyYXRvcl0oKX1kZXN0cm95KCl7dGhpcy53aXBlKCksdGhpcy5yZXZlcnNlTWFwLmNsZWFyKCksdGhpcy5ldmVudFN1YmplY3QuY29tcGxldGUoKX19O3ZhciBDbD1jbGFzc3tzdGF0aWN7byh0aGlzLCJJbnRlcmVzdCIpfW9wdGlvbnM7aW50ZXJlc3RNYXBSZWY7b3JpZ2luYWxJbnRlcmVzdDtjb21wYXJpc29uRnVuYztkZXN0cnVjdGlvblRpbWVyPW5ldyBwby5UaW1lcigxZTQpO2lzRnVsbGZpbGxlZD0hMTtpc0Rlc3Ryb3llZD0hMTtmdWxsZmlsbG1lbnRTdG9yZT1bXTttYXJrTG9zdFRpbWVvdXQ9bnVsbDtnZXQgY29tcGFyaXNvblN0cmluZygpe3JldHVybiB0aGlzLmNvbXBhcmlzb25GdW5jKHRoaXMub3JpZ2luYWxJbnRlcmVzdCl9aW50ZXJlc3REZWZlcnJlZD1uZXcgWi5EZWZlcnJlZDtpbnRlcmVzdEZ1bGxmaWxsZWQ9dGhpcy5pbnRlcmVzdERlZmVycmVkLnByb21pc2U7ZnVsbGZpbGxJbnRlcmVzdChlKXt0aGlzLmlzRnVsbGZpbGxlZD0hMCx0aGlzLmZ1bGxmaWxsbWVudFN0b3JlPVtdLHRoaXMuaW50ZXJlc3REZWZlcnJlZC5yZXNvbHZlKGUpLHRoaXMuZGVzdHJveSgpfWNvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMuaW50ZXJlc3RNYXBSZWY9ZSx0aGlzLm9yaWdpbmFsSW50ZXJlc3Q9cix0aGlzLmNvbXBhcmlzb25GdW5jPW4sdGhpcy5vcHRpb25zPWksdGhpcy5kZXN0cnVjdGlvblRpbWVyLmNvbXBsZXRlZC50aGVuKCgpPT57dGhpcy5pc0Rlc3Ryb3llZHx8dGhpcy5kZXN0cm95KCl9KSx0aGlzLm9wdGlvbnM/Lm1hcmtMb3N0QWZ0ZXJEZWZhdWx0JiYodGhpcy5tYXJrTG9zdFRpbWVvdXQ9bmV3IGxlLlRpbWVvdXQodGhpcy5vcHRpb25zLm1hcmtMb3N0QWZ0ZXJEZWZhdWx0KSx0aGlzLm1hcmtMb3N0VGltZW91dC5wcm9taXNlLnRoZW4oKCk9Pnt0aGlzLmlzRGVzdHJveWVkfHx0aGlzLm1hcmtMb3N0KCl9KSl9ZGVzdHJveSgpe3RoaXMuaXNEZXN0cm95ZWR8fCh0aGlzLmlzRGVzdHJveWVkPSEwLHRoaXMuZGVzdHJ1Y3Rpb25UaW1lci5yZXNldCgpLHRoaXMubWFya0xvc3RUaW1lb3V0JiYodGhpcy5tYXJrTG9zdFRpbWVvdXQuY2FuY2VsKCksdGhpcy5tYXJrTG9zdFRpbWVvdXQ9bnVsbCksdGhpcy5mdWxsZmlsbG1lbnRTdG9yZT1bXSx0aGlzLmludGVyZXN0TWFwUmVmLnJlbW92ZUludGVyZXN0KHRoaXMpLCF0aGlzLmlzRnVsbGZpbGxlZCYmdGhpcy5vcHRpb25zPy5kZWZhdWx0RnVsbGZpbGxtZW50JiYodGhpcy5pc0Z1bGxmaWxsZWQ9ITAsdGhpcy5pbnRlcmVzdERlZmVycmVkLnJlc29sdmUodGhpcy5vcHRpb25zLmRlZmF1bHRGdWxsZmlsbG1lbnQpKSl9bWFya0xvc3QoKXt0aGlzLmRlc3RydWN0aW9uVGltZXIuc3RhcnQoKX1yZW5ldygpe3RoaXMuZGVzdHJ1Y3Rpb25UaW1lci5yZXNldCgpfX07dmFyIExnPWNsYXNze3N0YXRpY3tvKHRoaXMsIkludGVyZXN0TWFwIil9b3B0aW9ucztpbnRlcmVzdE9iamVjdE1hcD1uZXcgTG47aW50ZXJlc3RzQnlDb21wYXJpc29uU3RyaW5nPW5ldyBNYXA7Y29tcGFyaXNvblN0cmluZ3NCeUludGVyZXN0PW5ldyBXZWFrTWFwO2NvbXBhcmlzb25GdW5jO2NvbnN0cnVjdG9yKGUscj17fSl7dGhpcy5jb21wYXJpc29uRnVuYz1lLHRoaXMub3B0aW9ucz1yfWFzeW5jIGFkZEludGVyZXN0KGUscil7bGV0IG49dGhpcy5jb21wYXJpc29uRnVuYyhlKSxpLHM9dGhpcy5pbnRlcmVzdHNCeUNvbXBhcmlzb25TdHJpbmcuZ2V0KG4pO3JldHVybiBzPyhpPXMsaS5yZW5ldygpKTooaT1uZXcgQ2wodGhpcyxlLHRoaXMuY29tcGFyaXNvbkZ1bmMse21hcmtMb3N0QWZ0ZXJEZWZhdWx0OnRoaXMub3B0aW9ucy5tYXJrTG9zdEFmdGVyRGVmYXVsdCxkZWZhdWx0RnVsbGZpbGxtZW50OnJ9KSx0aGlzLmludGVyZXN0T2JqZWN0TWFwLmFkZChpKSx0aGlzLmNvbXBhcmlzb25TdHJpbmdzQnlJbnRlcmVzdC5zZXQoaSxuKSx0aGlzLmludGVyZXN0c0J5Q29tcGFyaXNvblN0cmluZy5zZXQobixpKSksdGhpcy5pbnRlcmVzdE9ic2VydmFibGUucHVzaChpKSxpfWludGVyZXN0T2JzZXJ2YWJsZT1uZXcgSWUuT2JzZXJ2YWJsZUludGFrZTtyZW1vdmVJbnRlcmVzdChlKXtpZighdGhpcy5jb21wYXJpc29uU3RyaW5nc0J5SW50ZXJlc3QuaGFzKGUpKXJldHVybjtsZXQgcj10aGlzLmNvbXBhcmlzb25TdHJpbmdzQnlJbnRlcmVzdC5nZXQoZSk7dGhpcy5pbnRlcmVzdE9iamVjdE1hcC5yZW1vdmUoZSksdGhpcy5jb21wYXJpc29uU3RyaW5nc0J5SW50ZXJlc3QuZGVsZXRlKGUpLHRoaXMuaW50ZXJlc3RzQnlDb21wYXJpc29uU3RyaW5nLmdldChyKT09PWUmJnRoaXMuaW50ZXJlc3RzQnlDb21wYXJpc29uU3RyaW5nLmRlbGV0ZShyKX1jaGVja0ludGVyZXN0KGUpe2xldCByPXRoaXMuY29tcGFyaXNvbkZ1bmMoZSk7cmV0dXJuIHRoaXMuY2hlY2tJbnRlcmVzdEJ5U3RyaW5nKHIpfWNoZWNrSW50ZXJlc3RCeVN0cmluZyhlKXtyZXR1cm4gdGhpcy5pbnRlcmVzdHNCeUNvbXBhcmlzb25TdHJpbmcuaGFzKGUpfWluZm9ybUxvc3RJbnRlcmVzdChlKXtsZXQgcj10aGlzLmZpbmRJbnRlcmVzdChlKTtyJiZyLm1hcmtMb3N0KCl9ZmluZEludGVyZXN0KGUpe2xldCByPXRoaXMuY29tcGFyaXNvbkZ1bmMoZSk7cmV0dXJuIHRoaXMuaW50ZXJlc3RzQnlDb21wYXJpc29uU3RyaW5nLmdldChyKT8/bnVsbH1kZXN0cm95KCl7bGV0IGU9dGhpcy5pbnRlcmVzdE9iamVjdE1hcC5nZXRBcnJheSgpO2ZvcihsZXQgciBvZiBlKXIuZGVzdHJveSgpO3RoaXMuaW50ZXJlc3RPYmplY3RNYXAud2lwZSgpLHRoaXMuaW50ZXJlc3RzQnlDb21wYXJpc29uU3RyaW5nLmNsZWFyKCksdGhpcy5pbnRlcmVzdE9ic2VydmFibGUuc2lnbmFsQ29tcGxldGUoKX19O3ZhciBGZz1jbGFzc3tzdGF0aWN7byh0aGlzLCJMaW1pdGVkQXJyYXkiKX1hcnJheT1bXTthcnJheUxpbWl0O2NvbnN0cnVjdG9yKGUpe3RoaXMuYXJyYXlMaW1pdD1lfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5hcnJheS5sZW5ndGh9YWRkT25lKGUpe3RoaXMuYXJyYXkudW5zaGlmdChlKSx0aGlzLmFycmF5Lmxlbmd0aD50aGlzLmFycmF5TGltaXQmJih0aGlzLmFycmF5Lmxlbmd0aD10aGlzLmFycmF5TGltaXQpfWFkZE1hbnkoZSl7Zm9yKGxldCByIG9mIGUpdGhpcy5hZGRPbmUocil9c2V0TGltaXQoZSl7dGhpcy5hcnJheUxpbWl0PWUsdGhpcy5hcnJheS5sZW5ndGg+dGhpcy5hcnJheUxpbWl0JiYodGhpcy5hcnJheS5sZW5ndGg9dGhpcy5hcnJheUxpbWl0KX1nZXRBdmVyYWdlKCl7aWYodGhpcy5hcnJheS5sZW5ndGg9PT0wKXJldHVybiAwO2lmKHR5cGVvZiB0aGlzLmFycmF5WzBdPT0ibnVtYmVyIil7bGV0IGU9MDtmb3IobGV0IHIgb2YgdGhpcy5hcnJheSllPWUrcjtyZXR1cm4gZS90aGlzLmFycmF5Lmxlbmd0aH1lbHNlIHJldHVybiBudWxsfXJlbW92ZShlKXtsZXQgcj10aGlzLmFycmF5LmluZGV4T2YoZSk7cmV0dXJuIHIhPT0tMT8odGhpcy5hcnJheS5zcGxpY2UociwxKSwhMCk6ITF9Y2xlYXIoKXt0aGlzLmFycmF5Lmxlbmd0aD0wfWdldEFycmF5KCl7cmV0dXJuWy4uLnRoaXMuYXJyYXldfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuYXJyYXlbU3ltYm9sLml0ZXJhdG9yXSgpfX07dmFyIEFnPWNsYXNze3N0YXRpY3tvKHRoaXMsIkxvb3BUcmFja2VyIil9cmVmZXJlbmNlT2JqZWN0TWFwPW5ldyBMbjtjb25zdHJ1Y3Rvcigpe31jaGVja0FuZFRyYWNrKGUpe3JldHVybiB0aGlzLnJlZmVyZW5jZU9iamVjdE1hcC5jaGVja0Zvck9iamVjdChlKT8hMToodGhpcy5yZWZlcmVuY2VPYmplY3RNYXAuYWRkKGUpLCEwKX1yZXNldCgpe3RoaXMucmVmZXJlbmNlT2JqZWN0TWFwLndpcGUoKX1kZXN0cm95KCl7dGhpcy5yZWZlcmVuY2VPYmplY3RNYXAuZGVzdHJveSgpfX07dmFyIE1sPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN0cmluZ21hcCIpfV9zdHJpbmdBcnJheT1bXTtfdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXk9W107Y29uc3RydWN0b3IoKXt9YWRkU3RyaW5nKGUpe3RoaXMuX3N0cmluZ0FycmF5LnB1c2goZSksdGhpcy5ub3RpZnlUcmlnZ2VyKCl9YWRkU3RyaW5nQXJyYXkoZSl7Zm9yKGxldCByIG9mIGUpdGhpcy5hZGRTdHJpbmcocil9cmVtb3ZlU3RyaW5nKGUpe3RoaXMuX3N0cmluZ0FycmF5PXRoaXMuX3N0cmluZ0FycmF5LmZpbHRlcihyPT5yIT09ZSksdGhpcy5ub3RpZnlUcmlnZ2VyKCl9d2lwZSgpe3RoaXMuX3N0cmluZ0FycmF5PVtdLHRoaXMubm90aWZ5VHJpZ2dlcigpfWNoZWNrU3RyaW5nKGUpe3JldHVybiB0aGlzLl9zdHJpbmdBcnJheS5pbmRleE9mKGUpIT09LTF9Y2hlY2tNaW5pbWF0Y2goZSl7bGV0IHI9bmV3IHVsLlNtYXJ0TWF0Y2goZSksbj0hMTtmb3IobGV0IGkgb2YgdGhpcy5fc3RyaW5nQXJyYXkpci5tYXRjaChpKSYmKG49ITApO3JldHVybiBufWNoZWNrSXNFbXB0eSgpe3JldHVybiB0aGlzLl9zdHJpbmdBcnJheS5sZW5ndGg9PT0wfWdldFN0cmluZ0FycmF5KCl7bGV0IGU9W107Zm9yKGxldCByIG9mIHRoaXMuX3N0cmluZ0FycmF5KWUucHVzaChyKTtyZXR1cm4gZX1yZWdpc3RlclVudGlsVHJ1ZShlLHIpe2xldCBuPVouZGVmZXIoKTtyZXR1cm4gdGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkucHVzaCgoKT0+e2xldCBpPWUodGhpcy5nZXRTdHJpbmdBcnJheSgpKTtyZXR1cm4gaT09PSEwJiYociYmcigpLG4ucmVzb2x2ZSgpKSxpfSksdGhpcy5ub3RpZnlUcmlnZ2VyKCksbi5wcm9taXNlfW5vdGlmeVRyaWdnZXIoKXtsZXQgZT10aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheS5maWx0ZXIocj0+IXIoKSk7dGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXk9ZX1kZXN0cm95KCl7dGhpcy5fc3RyaW5nQXJyYXk9W10sdGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXk9W119fTt2YXIgT2w9Y2xhc3N7c3RhdGlje28odGhpcywiVGltZWRBZ2dyZWd0b3IiKX1vcHRpb25zO3N0b3JhZ2VBcnJheT1bXTtpc1N0b3BwZWQ9ITE7Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWV9YWdncmVnYXRpb25UaW1lcjtjaGVja0FnZ3JlZ2F0aW9uU3RhdHVzKCl7aWYodGhpcy5pc1N0b3BwZWQpcmV0dXJuO2xldCBlPW8oKCk9Pnt0aGlzLmFnZ3JlZ2F0aW9uVGltZXI9bmV3IHBvLlRpbWVyKHRoaXMub3B0aW9ucy5hZ2dyZWdhdGlvbkludGVydmFsSW5NaWxsaXMpLHRoaXMuYWdncmVnYXRpb25UaW1lci5jb21wbGV0ZWQudGhlbigoKT0+e2lmKHRoaXMuaXNTdG9wcGVkKXt0aGlzLmFnZ3JlZ2F0aW9uVGltZXI9bnVsbDtyZXR1cm59bGV0IHI9dGhpcy5zdG9yYWdlQXJyYXk7aWYoci5sZW5ndGg9PT0wKXt0aGlzLmFnZ3JlZ2F0aW9uVGltZXI9bnVsbDtyZXR1cm59dGhpcy5zdG9yYWdlQXJyYXk9W10sZSgpLHRoaXMub3B0aW9ucy5mdW5jdGlvbkZvckFnZ3JlZ2F0aW9uKHIpfSksdGhpcy5hZ2dyZWdhdGlvblRpbWVyLnN0YXJ0KCl9LCJhZGRBZ2dyZWdhdGlvblRpbWVyIik7dGhpcy5hZ2dyZWdhdGlvblRpbWVyfHxlKCl9YWRkKGUpe3RoaXMuaXNTdG9wcGVkfHwodGhpcy5zdG9yYWdlQXJyYXkucHVzaChlKSx0aGlzLmNoZWNrQWdncmVnYXRpb25TdGF0dXMoKSl9c3RvcChlPSExKXtpZih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLmFnZ3JlZ2F0aW9uVGltZXImJih0aGlzLmFnZ3JlZ2F0aW9uVGltZXIucmVzZXQoKSx0aGlzLmFnZ3JlZ2F0aW9uVGltZXI9bnVsbCksZSYmdGhpcy5zdG9yYWdlQXJyYXkubGVuZ3RoPjApe2xldCByPXRoaXMuc3RvcmFnZUFycmF5O3RoaXMuc3RvcmFnZUFycmF5PVtdLHRoaXMub3B0aW9ucy5mdW5jdGlvbkZvckFnZ3JlZ2F0aW9uKHIpfWVsc2UgdGhpcy5zdG9yYWdlQXJyYXk9W119cmVzdGFydCgpe3RoaXMuaXNTdG9wcGVkPSExfX07dmFyICRnPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRyZWUiKX1zeW1ib2xUcmVlO2NvbnN0cnVjdG9yKCl7dGhpcy5zeW1ib2xUcmVlPW5ldyBfcC5kZWZhdWx0fWluaXRpYWxpemUoZSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbml0aWFsaXplKGUpfWhhc0NoaWxkcmVuKGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUuaGFzQ2hpbGRyZW4oZSl9Zmlyc3RDaGlsZChlKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmZpcnN0Q2hpbGQoZSl9bGFzdENoaWxkKGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUubGFzdENoaWxkKGUpfXByZXZpb3VzU2libGluZyhlKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnByZXZpb3VzU2libGluZyhlKX1uZXh0U2libGluZyhlKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLm5leHRTaWJsaW5nKGUpfXBhcmVudChlKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnBhcmVudChlKX1sYXN0SW5jbHVzaXZlRGVzY2VuZGFudChlKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KGUpfXByZWNlZGluZyhlLHIpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUucHJlY2VkaW5nKGUscil9Zm9sbG93aW5nKGUscil7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5mb2xsb3dpbmcoZSxyKX1jaGlsZHJlblRvQXJyYXkoZSxyKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmNoaWxkcmVuVG9BcnJheShlLHIpfWFuY2VzdG9yc1RvQXJyYXkoZSxyKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmFuY2VzdG9yc1RvQXJyYXkoZSxyKX10cmVlVG9BcnJheShlLHIpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUudHJlZVRvQXJyYXkoZSxyKX1jaGlsZHJlbkl0ZXJhdG9yKGUscil7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKGUscil9cHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yKGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUucHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yKGUpfW5leHRTaWJsaW5nc0l0ZXJhdG9yKGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUubmV4dFNpYmxpbmdzSXRlcmF0b3IoZSl9YW5jZXN0b3JzSXRlcmF0b3IoZSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5hbmNlc3RvcnNJdGVyYXRvcihlKX10cmVlSXRlcmF0b3IoZSxyKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnRyZWVJdGVyYXRvcihlLHIpfWluZGV4KGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUuaW5kZXgoZSl9Y2hpbGRyZW5Db3VudChlKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmNoaWxkcmVuQ291bnQoZSl9Y29tcGFyZVRyZWVQb3NpdGlvbihlLHIpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUuY29tcGFyZVRyZWVQb3NpdGlvbihlLHIpfXJlbW92ZShlKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnJlbW92ZShlKX1pbnNlcnRCZWZvcmUoZSxyKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmluc2VydEJlZm9yZShlLHIpfWluc2VydEFmdGVyKGUscil7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbnNlcnRBZnRlcihlLHIpfXByZXBlbmRDaGlsZChlLHIpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUucHJlcGVuZENoaWxkKGUscil9YXBwZW5kQ2hpbGQoZSxyKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmFwcGVuZENoaWxkKGUscil9dG9Kc29uV2l0aEhpZXJhY2h5KGUpe2xldCByPW8obj0+e2xldCBpPVtdO2lmKHRoaXMuaGFzQ2hpbGRyZW4obikpe2xldCBzPXRoaXMuY2hpbGRyZW5Ub0FycmF5KG4se30pO2ZvcihsZXQgYSBvZiBzKWkucHVzaChyKGEpKX1yZXR1cm57ZGF0YTpuLGNoaWxkcmVuOml9fSwiYnVpbGROb2RlIik7cmV0dXJuIHIoZSl9ZnJvbUpzb25XaXRoSGllcmFjaHkoZSxyKXtsZXQgbj1vKChpLHMpPT57bGV0IGE9cj9yKGkuZGF0YSk6aS5kYXRhO3RoaXMuaW5pdGlhbGl6ZShhKSxzJiZ0aGlzLmFwcGVuZENoaWxkKHMsYSk7Zm9yKGxldCBsIG9mIGkuY2hpbGRyZW4pbihsLGEpO3JldHVybiBhfSwiYnVpbGRUcmVlIik7cmV0dXJuIG4oZSl9fTt2YXIgbnI9e307c2UobnIse2Jhc2U2NFRvVWludDhBcnJheTooKT0+ZkwsZW5zdXJlUHVyZVVpbnQ4QXJyYXk6KCk9PmRMLGlzQnVmZmVyTGlrZTooKT0+aEwsaXNVaW50OEFycmF5OigpPT5wTCx1SW50OEFycmF5RXh0cmFzOigpPT5jTCx1SW50OEFycmF5VG9CYXNlNjQ6KCk9PnVMfSk7dmFyIGtpPXt9O3NlKGtpLHthcmVVaW50OEFycmF5c0VxdWFsOigpPT5KUixhc3NlcnRVaW50OEFycmF5OigpPT52aSxhc3NlcnRVaW50OEFycmF5T3JBcnJheUJ1ZmZlcjooKT0+RDEsYmFzZTY0VG9TdHJpbmc6KCk9PnJMLGJhc2U2NFRvVWludDhBcnJheTooKT0+STEsY29tcGFyZVVpbnQ4QXJyYXlzOigpPT5LUixjb25jYXRVaW50OEFycmF5czooKT0+UVIsZ2V0VWludEJFOigpPT5zTCxoZXhUb1VpbnQ4QXJyYXk6KCk9Pm9MLGluY2x1ZGVzOigpPT5hTCxpbmRleE9mOigpPT5fMSxpc1VpbnQ4QXJyYXk6KCk9PkJnLHN0cmluZ1RvQmFzZTY0OigpPT50TCxzdHJpbmdUb1VpbnQ4QXJyYXk6KCk9Pk0xLHRvVWludDhBcnJheTooKT0+R1IsdWludDhBcnJheVRvQmFzZTY0OigpPT5PMSx1aW50OEFycmF5VG9IZXg6KCk9PmlMLHVpbnQ4QXJyYXlUb1N0cmluZzooKT0+QzF9KTt2YXIgV1I9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxxUj0iW29iamVjdCBVaW50OEFycmF5XSIsVVI9IltvYmplY3QgQXJyYXlCdWZmZXJdIjtmdW5jdGlvbiBrMSh0LGUscil7cmV0dXJuIHQ/dC5jb25zdHJ1Y3Rvcj09PWU/ITA6V1IuY2FsbCh0KT09PXI6ITF9byhrMSwiaXNUeXBlIik7ZnVuY3Rpb24gQmcodCl7cmV0dXJuIGsxKHQsVWludDhBcnJheSxxUil9byhCZywiaXNVaW50OEFycmF5Iik7ZnVuY3Rpb24gVlIodCl7cmV0dXJuIGsxKHQsQXJyYXlCdWZmZXIsVVIpfW8oVlIsImlzQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBZUih0KXtyZXR1cm4gQmcodCl8fFZSKHQpfW8oWVIsImlzVWludDhBcnJheU9yQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiB2aSh0KXtpZighQmcodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXGBVaW50OEFycmF5XGAsIGdvdCBcYCR7dHlwZW9mIHR9XGBgKX1vKHZpLCJhc3NlcnRVaW50OEFycmF5Iik7ZnVuY3Rpb24gRDEodCl7aWYoIVlSKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxgVWludDhBcnJheVxgIG9yIFxgQXJyYXlCdWZmZXJcYCwgZ290IFxgJHt0eXBlb2YgdH1cYGApfW8oRDEsImFzc2VydFVpbnQ4QXJyYXlPckFycmF5QnVmZmVyIik7ZnVuY3Rpb24gR1IodCl7aWYodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBuZXcgVWludDhBcnJheSh0KTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCkpcmV0dXJuIG5ldyBVaW50OEFycmF5KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpO3Rocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIHZhbHVlLCBnb3QgXGAke3R5cGVvZiB0fVxgLmApfW8oR1IsInRvVWludDhBcnJheSIpO2Z1bmN0aW9uIFFSKHQsZSl7aWYodC5sZW5ndGg9PT0wKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtlPz89dC5yZWR1Y2UoKGkscyk9Pmkrcy5sZW5ndGgsMCk7bGV0IHI9bmV3IFVpbnQ4QXJyYXkoZSksbj0wO2ZvcihsZXQgaSBvZiB0KXZpKGkpLHIuc2V0KGksbiksbis9aS5sZW5ndGg7cmV0dXJuIHJ9byhRUiwiY29uY2F0VWludDhBcnJheXMiKTtmdW5jdGlvbiBKUih0LGUpe2lmKHZpKHQpLHZpKGUpLHQ9PT1lKXJldHVybiEwO2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXSE9PWVbcl0pcmV0dXJuITE7cmV0dXJuITB9byhKUiwiYXJlVWludDhBcnJheXNFcXVhbCIpO2Z1bmN0aW9uIEtSKHQsZSl7dmkodCksdmkoZSk7bGV0IHI9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihsZXQgbj0wO248cjtuKyspe2xldCBpPXRbbl0tZVtuXTtpZihpIT09MClyZXR1cm4gTWF0aC5zaWduKGkpfXJldHVybiBNYXRoLnNpZ24odC5sZW5ndGgtZS5sZW5ndGgpfW8oS1IsImNvbXBhcmVVaW50OEFycmF5cyIpO3ZhciBTMT17dXRmODpuZXcgZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcigidXRmOCIpfTtmdW5jdGlvbiBDMSh0LGU9InV0ZjgiKXtyZXR1cm4gRDEodCksUzFbZV0/Pz1uZXcgZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcihlKSxTMVtlXS5kZWNvZGUodCl9byhDMSwidWludDhBcnJheVRvU3RyaW5nIik7ZnVuY3Rpb24gSWwodCl7aWYodHlwZW9mIHQhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxgc3RyaW5nXGAsIGdvdCBcYCR7dHlwZW9mIHR9XGBgKX1vKElsLCJhc3NlcnRTdHJpbmciKTt2YXIgWFI9bmV3IGdsb2JhbFRoaXMuVGV4dEVuY29kZXI7ZnVuY3Rpb24gTTEodCl7cmV0dXJuIElsKHQpLFhSLmVuY29kZSh0KX1vKE0xLCJzdHJpbmdUb1VpbnQ4QXJyYXkiKTtmdW5jdGlvbiBaUih0KXtyZXR1cm4gdC5yZXBsYWNlQWxsKCIrIiwiLSIpLnJlcGxhY2VBbGwoIi8iLCJfIikucmVwbGFjZSgvPSskLywiIil9byhaUiwiYmFzZTY0VG9CYXNlNjRVcmwiKTtmdW5jdGlvbiBlTCh0KXtsZXQgZT10LnJlcGxhY2VBbGwoIi0iLCIrIikucmVwbGFjZUFsbCgiXyIsIi8iKSxyPSg0LWUubGVuZ3RoJTQpJTQ7cmV0dXJuIGUrIj0iLnJlcGVhdChyKX1vKGVMLCJiYXNlNjRVcmxUb0Jhc2U2NCIpO3ZhciBUMT02NTUzNTtmdW5jdGlvbiBPMSh0LHt1cmxTYWZlOmU9ITF9PXt9KXt2aSh0KTtsZXQgcj0iIjtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rPVQxKXtsZXQgaT10LnN1YmFycmF5KG4sbitUMSk7cis9Z2xvYmFsVGhpcy5idG9hKFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KHZvaWQgMCxpKSl9cmV0dXJuIGU/WlIocik6cn1vKE8xLCJ1aW50OEFycmF5VG9CYXNlNjQiKTtmdW5jdGlvbiBJMSh0KXtyZXR1cm4gSWwodCksVWludDhBcnJheS5mcm9tKGdsb2JhbFRoaXMuYXRvYihlTCh0KSksZT0+ZS5jb2RlUG9pbnRBdCgwKSl9byhJMSwiYmFzZTY0VG9VaW50OEFycmF5Iik7ZnVuY3Rpb24gdEwodCx7dXJsU2FmZTplPSExfT17fSl7cmV0dXJuIElsKHQpLE8xKE0xKHQpLHt1cmxTYWZlOmV9KX1vKHRMLCJzdHJpbmdUb0Jhc2U2NCIpO2Z1bmN0aW9uIHJMKHQpe3JldHVybiBJbCh0KSxDMShJMSh0KSl9byhyTCwiYmFzZTY0VG9TdHJpbmciKTt2YXIgbkw9QXJyYXkuZnJvbSh7bGVuZ3RoOjI1Nn0sKHQsZSk9PmUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSk7ZnVuY3Rpb24gaUwodCl7dmkodCk7bGV0IGU9IiI7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspZSs9bkxbdFtyXV07cmV0dXJuIGV9byhpTCwidWludDhBcnJheVRvSGV4Iik7dmFyIEUxPXswOjAsMToxLDI6MiwzOjMsNDo0LDU6NSw2OjYsNzo3LDg6OCw5OjksYToxMCxiOjExLGM6MTIsZDoxMyxlOjE0LGY6MTUsQToxMCxCOjExLEM6MTIsRDoxMyxFOjE0LEY6MTV9O2Z1bmN0aW9uIG9MKHQpe2lmKElsKHQpLHQubGVuZ3RoJTIhPT0wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBIZXggc3RyaW5nIGxlbmd0aC4iKTtsZXQgZT10Lmxlbmd0aC8yLHI9bmV3IFVpbnQ4QXJyYXkoZSk7Zm9yKGxldCBuPTA7bjxlO24rKyl7bGV0IGk9RTFbdFtuKjJdXSxzPUUxW3RbbioyKzFdXTtpZihpPT09dm9pZCAwfHxzPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBIZXggY2hhcmFjdGVyIGVuY291bnRlcmVkIGF0IHBvc2l0aW9uICR7bioyfWApO3Jbbl09aTw8NHxzfXJldHVybiByfW8ob0wsImhleFRvVWludDhBcnJheSIpO2Z1bmN0aW9uIHNMKHQpe2xldHtieXRlTGVuZ3RoOmV9PXQ7aWYoZT09PTYpcmV0dXJuIHQuZ2V0VWludDE2KDApKjIqKjMyK3QuZ2V0VWludDMyKDIpO2lmKGU9PT01KXJldHVybiB0LmdldFVpbnQ4KDApKjIqKjMyK3QuZ2V0VWludDMyKDEpO2lmKGU9PT00KXJldHVybiB0LmdldFVpbnQzMigwKTtpZihlPT09MylyZXR1cm4gdC5nZXRVaW50OCgwKSoyKioxNit0LmdldFVpbnQxNigxKTtpZihlPT09MilyZXR1cm4gdC5nZXRVaW50MTYoMCk7aWYoZT09PTEpcmV0dXJuIHQuZ2V0VWludDgoMCl9byhzTCwiZ2V0VWludEJFIik7ZnVuY3Rpb24gXzEodCxlKXtsZXQgcj10Lmxlbmd0aCxuPWUubGVuZ3RoO2lmKG49PT0wfHxuPnIpcmV0dXJuLTE7bGV0IGk9ci1uO2ZvcihsZXQgcz0wO3M8PWk7cysrKXtsZXQgYT0hMDtmb3IobGV0IGw9MDtsPG47bCsrKWlmKHRbcytsXSE9PWVbbF0pe2E9ITE7YnJlYWt9aWYoYSlyZXR1cm4gc31yZXR1cm4tMX1vKF8xLCJpbmRleE9mIik7ZnVuY3Rpb24gYUwodCxlKXtyZXR1cm4gXzEodCxlKSE9PS0xfW8oYUwsImluY2x1ZGVzIik7dmFyIGNMPWtpO2Z1bmN0aW9uIHVMKHQpe3JldHVybiBraS51aW50OEFycmF5VG9CYXNlNjQodCl9byh1TCwidUludDhBcnJheVRvQmFzZTY0Iik7ZnVuY3Rpb24gZkwodCl7cmV0dXJuIGtpLmJhc2U2NFRvVWludDhBcnJheSh0KX1vKGZMLCJiYXNlNjRUb1VpbnQ4QXJyYXkiKTt2YXIgcEw9byh0PT5raS5pc1VpbnQ4QXJyYXkodCksImlzVWludDhBcnJheSIpO2Z1bmN0aW9uIGhMKHQpe3JldHVybiB0JiZ0eXBlb2YgdC5ieXRlTGVuZ3RoPT0ibnVtYmVyIj8hMDp0eXBlb2YgQnVmZmVyPCJ1IiYmQnVmZmVyLmlzQnVmZmVyP0J1ZmZlci5pc0J1ZmZlcih0KTohMX1vKGhMLCJpc0J1ZmZlckxpa2UiKTtmdW5jdGlvbiBkTCh0KXtsZXQgZT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCk7cmV0dXJuIGUuc2V0KHQpLGV9byhkTCwiZW5zdXJlUHVyZVVpbnQ4QXJyYXkiKTt2YXIgRm49e307c2UoRm4se0d1YXJkOigpPT5fbCxHdWFyZEVycm9yOigpPT5QbCxHdWFyZFNldDooKT0+TmwscGFzc0d1YXJkc09yUmVqZWN0OigpPT5tTH0pO3ZhciBfbD1jbGFzc3tzdGF0aWN7byh0aGlzLCJHdWFyZCIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5ndWFyZEZ1bmN0aW9uPWUsdGhpcy5vcHRpb25zPXJ8fHt9fWFzeW5jIGV4ZWMoZSl7cmV0dXJuIGF3YWl0IHRoaXMuZ3VhcmRGdW5jdGlvbihlKX1hc3luYyBnZXRGYWlsZWRIaW50KGUpe3JldHVybiBhd2FpdCB0aGlzLmV4ZWMoZSk/bnVsbDp0aGlzLm9wdGlvbnMuZmFpbGVkSGludHx8bnVsbH19O3ZhciBQbD1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIkd1YXJkRXJyb3IiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5hbWU9Ikd1YXJkRXJyb3IifX07dmFyIE5sPWNsYXNzIGV4dGVuZHMgX2x7c3RhdGlje28odGhpcywiR3VhcmRTZXQiKX1jb25zdHJ1Y3RvcihlPVtdKXtzdXBlcihhc3luYyByPT50aGlzLmFsbEd1YXJkc1Bhc3MocikpLHRoaXMuZ3VhcmRzPWV9YXN5bmMgZXhlY0FsbFdpdGhEYXRhKGUscj17bW9kZToicGFyYWxsZWwiLHN0b3BPbkZhaWw6ITF9KXtsZXQgbj1bXTtmb3IobGV0IHMgb2YgdGhpcy5ndWFyZHMpe2xldCBhPXMuZXhlYyhlKTtpZihyLm1vZGU9PT0ic2VyaWFsIiYmYXdhaXQgYSxuLnB1c2goYSksci5zdG9wT25GYWlsJiYhYXdhaXQgYSlyZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwobil9cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKG4pfWFzeW5jIGFsbEd1YXJkc1Bhc3MoZSxyPXttb2RlOiJwYXJhbGxlbCIsc3RvcE9uRmFpbDohMX0pe3JldHVybihhd2FpdCB0aGlzLmV4ZWNBbGxXaXRoRGF0YShlLHIpKS5ldmVyeShpPT5pKX1hc3luYyBhbnlHdWFyZHNQYXNzKGUpe3JldHVybihhd2FpdCB0aGlzLmV4ZWNBbGxXaXRoRGF0YShlLHttb2RlOiJwYXJhbGxlbCIsc3RvcE9uRmFpbDohMX0pKS5zb21lKG49Pm4pfWFzeW5jIGdldEZhaWxlZEhpbnQoZSl7Zm9yKGxldCByIG9mIHRoaXMuZ3VhcmRzKXtsZXQgbj1hd2FpdCByLmdldEZhaWxlZEhpbnQoZSk7aWYobilyZXR1cm4gbn1yZXR1cm4gbnVsbH19O3ZhciBtTD1vKGFzeW5jKHQsZSk9PntsZXQgcj1uZXcgTmwoZSk7aWYoIWF3YWl0IHIuYWxsR3VhcmRzUGFzcyh0KSl7bGV0IGk9YXdhaXQgci5nZXRGYWlsZWRIaW50KHQpO3Rocm93IG5ldyBQbChgR3VhcmRzIGZhaWxlZDoKJHtpfQogICAgYCl9fSwicGFzc0d1YXJkc09yUmVqZWN0Iik7dmFyIGlyPXt9O3NlKGlyLHtDYWNoZU1hbmFnZXI6KCk9PlVzLENhY2hlU3RvcmU6KCk9PmpzLEludGVyY2VwdG9yTWFuYWdlcjooKT0+QnMsUmVxdWVzdERlZHVwbGljYXRvcjooKT0+WXMsUmV0cnlNYW5hZ2VyOigpPT5WcyxXZWJyZXF1ZXN0Q2xpZW50OigpPT5nbyxjcmVhdGVDb25kaXRpb25hbEhlYWRlcnM6KCk9PlZwLGRlZmF1bHRDYWNoZU1heEVudHJpZXM6KCk9PkZsLGV4dHJhY3RDYWNoZU1ldGFkYXRhOigpPT5nbixoZWFkZXJzVG9PYmplY3Q6KCk9PllwLGlzRnJlc2g6KCk9PlVwLGlzV2VicmVxdWVzdFRpbWVvdXRFcnJvcjooKT0+QWwsb2JqZWN0VG9IZWFkZXJzOigpPT5KMSxyZXF1aXJlc1JldmFsaWRhdGlvbjooKT0+V3Msd2VicmVxdWVzdDooKT0+bXR9KTt2YXIgQnM9Y2xhc3N7c3RhdGlje28odGhpcywiSW50ZXJjZXB0b3JNYW5hZ2VyIil9Y29uc3RydWN0b3IoKXt0aGlzLnJlcXVlc3RJbnRlcmNlcHRvcnM9W10sdGhpcy5yZXNwb25zZUludGVyY2VwdG9ycz1bXSx0aGlzLmVycm9ySW50ZXJjZXB0b3JzPVtdfWFkZFJlcXVlc3RJbnRlcmNlcHRvcihlKXt0aGlzLnJlcXVlc3RJbnRlcmNlcHRvcnMucHVzaChlKX1hZGRSZXNwb25zZUludGVyY2VwdG9yKGUpe3RoaXMucmVzcG9uc2VJbnRlcmNlcHRvcnMucHVzaChlKX1hZGRFcnJvckludGVyY2VwdG9yKGUpe3RoaXMuZXJyb3JJbnRlcmNlcHRvcnMucHVzaChlKX1yZW1vdmVSZXF1ZXN0SW50ZXJjZXB0b3IoZSl7bGV0IHI9dGhpcy5yZXF1ZXN0SW50ZXJjZXB0b3JzLmluZGV4T2YoZSk7cj4tMSYmdGhpcy5yZXF1ZXN0SW50ZXJjZXB0b3JzLnNwbGljZShyLDEpfXJlbW92ZVJlc3BvbnNlSW50ZXJjZXB0b3IoZSl7bGV0IHI9dGhpcy5yZXNwb25zZUludGVyY2VwdG9ycy5pbmRleE9mKGUpO3I+LTEmJnRoaXMucmVzcG9uc2VJbnRlcmNlcHRvcnMuc3BsaWNlKHIsMSl9cmVtb3ZlRXJyb3JJbnRlcmNlcHRvcihlKXtsZXQgcj10aGlzLmVycm9ySW50ZXJjZXB0b3JzLmluZGV4T2YoZSk7cj4tMSYmdGhpcy5lcnJvckludGVyY2VwdG9ycy5zcGxpY2UociwxKX1jbGVhckFsbCgpe3RoaXMucmVxdWVzdEludGVyY2VwdG9ycz1bXSx0aGlzLnJlc3BvbnNlSW50ZXJjZXB0b3JzPVtdLHRoaXMuZXJyb3JJbnRlcmNlcHRvcnM9W119YXN5bmMgcHJvY2Vzc1JlcXVlc3QoZSl7bGV0IHI9ZTtmb3IobGV0IG4gb2YgdGhpcy5yZXF1ZXN0SW50ZXJjZXB0b3JzKXRyeXtyPWF3YWl0IG4ocil9Y2F0Y2goaSl7dGhyb3cgYXdhaXQgdGhpcy5wcm9jZXNzRXJyb3IoaSBpbnN0YW5jZW9mIEVycm9yP2k6bmV3IEVycm9yKFN0cmluZyhpKSkpfXJldHVybiByfWFzeW5jIHByb2Nlc3NSZXNwb25zZShlKXtsZXQgcj1lO2ZvcihsZXQgbiBvZiB0aGlzLnJlc3BvbnNlSW50ZXJjZXB0b3JzKXRyeXtyPWF3YWl0IG4ocil9Y2F0Y2goaSl7dGhyb3cgYXdhaXQgdGhpcy5wcm9jZXNzRXJyb3IoaSBpbnN0YW5jZW9mIEVycm9yP2k6bmV3IEVycm9yKFN0cmluZyhpKSkpfXJldHVybiByfWFzeW5jIHByb2Nlc3NFcnJvcihlKXtsZXQgcj1lO2ZvcihsZXQgbiBvZiB0aGlzLmVycm9ySW50ZXJjZXB0b3JzKXRyeXtyPWF3YWl0IG4ocil9Y2F0Y2goaSl7cj1pIGluc3RhbmNlb2YgRXJyb3I/aTpuZXcgRXJyb3IoU3RyaW5nKGkpKX1yZXR1cm4gcn1nZXRJbnRlcmNlcHRvckNvdW50cygpe3JldHVybntyZXF1ZXN0OnRoaXMucmVxdWVzdEludGVyY2VwdG9ycy5sZW5ndGgscmVzcG9uc2U6dGhpcy5yZXNwb25zZUludGVyY2VwdG9ycy5sZW5ndGgsZXJyb3I6dGhpcy5lcnJvckludGVyY2VwdG9ycy5sZW5ndGh9fX07dmFyIEZyPXt9O3NlKEZyLHtTbWFydGVudjooKT0+emd9KTt2YXIgemc9Y2xhc3N7c3RhdGlje28odGhpcywiU21hcnRlbnYiKX1jb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGVkU2NyaXB0cz1bXX1hc3luYyBnZXRFbnZBd2FyZU1vZHVsZShlKXtpZih0aGlzLmlzTm9kZSlyZXR1cm4gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZShlLm5vZGVNb2R1bGVOYW1lKTtpZih0aGlzLmlzQnJvd3NlcilyZXR1cm4gYXdhaXQgdGhpcy5nZXRTYWZlV2ViTW9kdWxlKGUud2ViVXJsQXJnLGUuZ2V0RnVuY3Rpb24pO2NvbnNvbGUuZXJyb3IoInBsYXRmb3JtIGZvciBsb2FkaW5nIG5vdCBzdXBwb3J0ZWQgYnkgc21hcnRlbnYiKX1hc3luYyBnZXRTYWZlTm9kZU1vZHVsZShlLHIpe2lmKCF0aGlzLmlzTm9kZSYmIXRoaXMuaXNEZW5vJiYhdGhpcy5pc0J1bil7Y29uc29sZS5lcnJvcihgWW91IHRyaWVkIHRvIGxvYWQgYSBzZXJ2ZXIgbW9kdWxlIGluIGEgd3JvbmcgY29udGV4dDogJHtlfS4gVGhpcyBkb2VzIG5vdCB0aHJvdy5gKTtyZXR1cm59bGV0IG49YXdhaXQgbmV3IEZ1bmN0aW9uKGByZXR1cm4gaW1wb3J0KCcke2V9JylgKSgpO3JldHVybiByJiZhd2FpdCByKG4pLG59YXN5bmMgZ2V0U2FmZVdlYk1vZHVsZShlLHIpe2lmKCF0aGlzLmlzQnJvd3Nlcil7Y29uc29sZS5lcnJvcigiWW91IHRyaWVkIHRvIGxvYWQgYSB3ZWIgbW9kdWxlIGluIGEgd3JvbmcgY29udGV4dCIpO3JldHVybn1pZih0aGlzLmxvYWRlZFNjcmlwdHMuaW5jbHVkZXMoZSkpcmV0dXJuIHIoKTt0aGlzLmxvYWRlZFNjcmlwdHMucHVzaChlKTtsZXQgbj1aLmRlZmVyKCksaT1nbG9iYWxUaGlzO2lmKGkuaW1wb3J0U2NyaXB0cylpLmltcG9ydFNjcmlwdHMoZSksbi5yZXNvbHZlKCk7ZWxzZXtsZXQgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtzLm9ubG9hZD0oKT0+e24ucmVzb2x2ZSgpfSxzLnNyYz1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocyl9cmV0dXJuIGF3YWl0IG4ucHJvbWlzZSxyKCl9Z2V0IHJ1bnRpbWVFbnYoKXtsZXQgZT1nbG9iYWxUaGlzO3JldHVybiB0eXBlb2YgZS5EZW5vPCJ1IiYmdHlwZW9mIGUuRGVuby52ZXJzaW9uPCJ1Ij8iZGVubyI6dHlwZW9mIGUuQnVuPCJ1IiYmdHlwZW9mIGUuQnVuLnZlcnNpb248InUiPyJidW4iOnR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3M8InUiJiZ0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzPy52ZXJzaW9ucz8ubm9kZTwidSI/Im5vZGUiOih0eXBlb2YgZ2xvYmFsVGhpcy53aW5kb3c8InUiJiZ0eXBlb2YgZ2xvYmFsVGhpcy5kb2N1bWVudDwidSIsImJyb3dzZXIiKX1nZXQgaXNCcm93c2VyKCl7cmV0dXJuIHRoaXMucnVudGltZUVudj09PSJicm93c2VyIn1nZXQgaXNOb2RlKCl7cmV0dXJuIHRoaXMucnVudGltZUVudj09PSJub2RlIn1nZXQgaXNEZW5vKCl7cmV0dXJuIHRoaXMucnVudGltZUVudj09PSJkZW5vIn1nZXQgaXNCdW4oKXtyZXR1cm4gdGhpcy5ydW50aW1lRW52PT09ImJ1biJ9Z2V0IHVzZXJBZ2VudCgpe3JldHVybiB0aGlzLmlzQnJvd3Nlcj9uYXZpZ2F0b3IudXNlckFnZW50OiJ1bmRlZmluZWQifWdldCBub2RlVmVyc2lvbigpe3JldHVybiB0aGlzLmlzTm9kZT9wcm9jZXNzLnZlcnNpb246InVuZGVmaW5lZCJ9Z2V0IGRlbm9WZXJzaW9uKCl7cmV0dXJuIHRoaXMuaXNEZW5vP2dsb2JhbFRoaXMuRGVubz8udmVyc2lvbj8uZGVubz8/InVuZGVmaW5lZCI6InVuZGVmaW5lZCJ9Z2V0IGJ1blZlcnNpb24oKXtyZXR1cm4gdGhpcy5pc0J1bj9nbG9iYWxUaGlzLkJ1bj8udmVyc2lvbj8/InVuZGVmaW5lZCI6InVuZGVmaW5lZCJ9YXN5bmMgZ2V0U2FmZU1vZHVsZUZvcihlLHIsbil7bGV0IGk7aWYoQXJyYXkuaXNBcnJheShlKT9pPWUuZmxhdE1hcChzPT5zPT09InNlcnZlciI/WyJub2RlIiwiZGVubyIsImJ1biJdOltzXSk6ZT09PSJzZXJ2ZXIiP2k9WyJub2RlIiwiZGVubyIsImJ1biJdOmk9W2VdLCFpLmluY2x1ZGVzKHRoaXMucnVudGltZUVudikpe2NvbnNvbGUud2FybihgTW9kdWxlICIke3J9IiByZXF1ZXN0ZWQgZm9yIHJ1bnRpbWUocykgWyR7aS5qb2luKCIsICIpfV0gYnV0IGN1cnJlbnQgcnVudGltZSBpcyAiJHt0aGlzLnJ1bnRpbWVFbnZ9Ii4gU2tpcHBpbmcgbG9hZC5gKTtyZXR1cm59aWYodGhpcy5pc05vZGV8fHRoaXMuaXNEZW5vfHx0aGlzLmlzQnVuKXJldHVybiBhd2FpdCB0aGlzLmdldFNhZmVOb2RlTW9kdWxlKHIpO2lmKHRoaXMuaXNCcm93c2VyKXtpZighbil7Y29uc29sZS5lcnJvcihgQnJvd3NlciBtb2R1bGUgbG9hZCByZXF1aXJlcyBnZXRGdW5jdGlvbiBwYXJhbWV0ZXIgZm9yICIke3J9ImApO3JldHVybn1yZXR1cm4gYXdhaXQgdGhpcy5nZXRTYWZlV2ViTW9kdWxlKHIsbil9fWdldCBpc0NJKCl7cmV0dXJuIHRoaXMuaXNOb2RlPyEhcHJvY2Vzcy5lbnYuQ0k6ITF9YXN5bmMgaXNNYWNBc3luYygpe3JldHVybiB0aGlzLmlzTm9kZXx8dGhpcy5pc0Rlbm98fHRoaXMuaXNCdW4/KGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUodGhpcy5pc0Rlbm8/Im5vZGU6b3MiOiJvcyIpKT8ucGxhdGZvcm0oKT09PSJkYXJ3aW4iOiExfWFzeW5jIGlzV2luZG93c0FzeW5jKCl7cmV0dXJuIHRoaXMuaXNOb2RlfHx0aGlzLmlzRGVub3x8dGhpcy5pc0J1bj8oYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSh0aGlzLmlzRGVubz8ibm9kZTpvcyI6Im9zIikpPy5wbGF0Zm9ybSgpPT09IndpbjMyIjohMX1hc3luYyBpc0xpbnV4QXN5bmMoKXtyZXR1cm4gdGhpcy5pc05vZGV8fHRoaXMuaXNEZW5vfHx0aGlzLmlzQnVuPyhhd2FpdCB0aGlzLmdldFNhZmVOb2RlTW9kdWxlKHRoaXMuaXNEZW5vPyJub2RlOm9zIjoib3MiKSk/LnBsYXRmb3JtKCk9PT0ibGludXgiOiExfWFzeW5jIHByaW50RW52KCl7dGhpcy5pc05vZGU/KGNvbnNvbGUubG9nKCJydW5uaW5nIG9uIE5PREUiKSxjb25zb2xlLmxvZygibm9kZSB2ZXJzaW9uIGlzICIrdGhpcy5ub2RlVmVyc2lvbikpOnRoaXMuaXNEZW5vPyhjb25zb2xlLmxvZygicnVubmluZyBvbiBERU5PIiksY29uc29sZS5sb2coImRlbm8gdmVyc2lvbiBpcyAiK3RoaXMuZGVub1ZlcnNpb24pKTp0aGlzLmlzQnVuPyhjb25zb2xlLmxvZygicnVubmluZyBvbiBCVU4iKSxjb25zb2xlLmxvZygiYnVuIHZlcnNpb24gaXMgIit0aGlzLmJ1blZlcnNpb24pKTooY29uc29sZS5sb2coInJ1bm5pbmcgb24gQlJPV1NFUiIpLGNvbnNvbGUubG9nKCJicm93c2VyIGlzICIrdGhpcy51c2VyQWdlbnQpKX19O3ZhciBsdD17fTtzZShsdCx7U21hcnRqc29uOigpPT5HZyxkZWVwRXF1YWxKc29uTFN0cmluZ3M6KCk9PmpMLGRlZXBFcXVhbE9iamVjdHM6KCk9PnExLGZvbGREZWM6KCk9PkhMLHBhcnNlOigpPT5IcCxwYXJzZUJhc2U2NDooKT0+ekwscGFyc2VKc29uTDooKT0+WWcsc3RhYmxlT25lV2F5U3RyaW5naWZ5OigpPT5BTCxzdHJpbmdpZnk6KCk9Pm1vLHN0cmluZ2lmeUJhc2U2NDooKT0+Qkwsc3RyaW5naWZ5SnNvbkw6KCk9PkZMLHN0cmluZ2lmeVByZXR0eTooKT0+JEx9KTt2YXIgbW49e307c2UobW4se0Jhc2U2NDooKT0+RnAsRG9tYWluOigpPT4kcCxHaXRSZXBvOigpPT5CcCxiYXNlNjQ6KCk9PnpzLGNyZWF0ZTooKT0+UHAsZG9ja2VyOigpPT5OcCxpbmRlbnQ6KCk9PlJwLG5vcm1hbGl6ZTooKT0+THAsdHlwZTooKT0+QXB9KTt2YXIgUHA9e307c2UoUHAse2NyZWF0ZUNyeXB0b1JhbmRvbVN0cmluZzooKT0+dkwsY3JlYXRlUmFuZG9tU3RyaW5nOigpPT53TH0pO3ZhciBIZz1kcih0bCgpLDEpO3ZhciB4TD1vKCh0LGUpPT57aWYodHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzLmNyeXB0byYmZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXtsZXQgcj1lLXQsbj1uZXcgVWludDMyQXJyYXkoMSk7cmV0dXJuIGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuKSx0K25bMF0lcn1lbHNlIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKGUtdCkpK3R9LCJnZXRSYW5kb21JbnQiKSxiTD1vKCh0LGUscik9PntsZXQgbj17QToiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiLGE6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiwwOiIwMTIzNDU2Nzg5IiwiISI6IiFAIyQlXiYqKClfKy09W117fXw7OiwuPD4/IiwiKiI6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IUAjJCVeJiooKV8rLT1bXXt9fDs6LC48Pj8ifSxpPXQ7ZSYmZT50Lmxlbmd0aD9pPXQucmVwZWF0KE1hdGguY2VpbChlL3QubGVuZ3RoKSkuc2xpY2UoMCxlKTplJiYoaT10LnNsaWNlKDAsZSkpO2xldCBzPSIiO2ZvcihsZXQgYSBvZiBpKWlmKG5bYV0pe2xldCBsPW5bYV0sYz14TCgwLGwubGVuZ3RoKTtzKz1sW2NdfWVsc2Ugcys9YTtyZXR1cm4gc30sImN1c3RvbVJhbmRvbWF0aWMiKSx3TD1vKCh0LGUscik9PmJMKHQsZSxyKSwiY3JlYXRlUmFuZG9tU3RyaW5nIiksdkw9bygoKT0+SGcudW5pKCksImNyZWF0ZUNyeXB0b1JhbmRvbVN0cmluZyIpO3ZhciBOcD17fTtzZShOcCx7bWFrZUVudk9iamVjdDooKT0+a0x9KTt2YXIga0w9byhmdW5jdGlvbih0KXtsZXQgZT17fSxyPS8oLiopPSguKikvO2lmKHR5cGVvZiB0PCJ1Iilmb3IobGV0IG4gb2YgdCl7bGV0IGk9ci5leGVjKG4pO2kmJihlW2lbMV1dPWlbMl0pfXJldHVybiBlfSwibWFrZUVudk9iamVjdCIpO3ZhciBScD17fTtzZShScCx7aW5kZW50OigpPT5UTCxpbmRlbnRXaXRoUHJlZml4OigpPT5FTCxub3JtYWxpemU6KCk9PkRMfSk7dmFyIGpnPW8odD0+e2xldCBlPXQuc3BsaXQoYApgKTtyZXR1cm4gU0woZSl9LCJzcGxpdFN0cmluZ0F0TGluZUJyZWFrIiksV2c9byh0PT57bGV0IGU9IiI7Zm9yKGxldCByIG9mIHQpZT1lK3IrYApgO3JldHVybiBlfSwiam9pblN0cmluZ1dpdGhMaW5lQnJlYWtzIiksU0w9byh0PT57bGV0IGU9L15bXHNdKiQvO3JldHVybiBlLnRlc3QodFswXSkmJnQuc2hpZnQoKSxlLnRlc3QodFt0Lmxlbmd0aC0xXSkmJnQucG9wKCksdH0sImNsZWFuU3RyaW5nQXJyYXkiKSxUTD1vKCh0LGUpPT57bGV0IHI9amcodCk7Zm9yKGxldCBpIG9mIHIpaT0iICIucmVwZWF0KGUpK2k7cmV0dXJuIFdnKHIpfSwiaW5kZW50IiksRUw9bygodCxlKT0+e2xldCByLG49amcodCksaT1bXTtmb3IobGV0IHMgb2YgbilpLnB1c2goZStzKTtyZXR1cm4gcj1XZyhpKSxyfSwiaW5kZW50V2l0aFByZWZpeCIpLERMPW8odD0+e2xldCBlLHI9amcodCksbixpPS9eKFxzKikvLHM9L14oXHMqKSQvO2ZvcihsZXQgYyBvZiByKXtsZXQgdT1pLmV4ZWMoYyksZj11P3VbMV06IiI7KHR5cGVvZiBuPiJ1Inx8Zi5sZW5ndGg8bikmJiFzLnRlc3QoYykmJihuPWYubGVuZ3RoKX1sZXQgYT1bXSxsPW58fDA7Zm9yKGxldCBjIG9mIHIpYS5wdXNoKGMuc3Vic3RyKGwpKTtyZXR1cm4gZT1XZyhhKSxlfSwibm9ybWFsaXplIik7dmFyIExwPXt9O3NlKExwLHtyZXBsYWNlQWxsOigpPT5QMSxzdGFuZGFyZDooKT0+TUx9KTt2YXIgUDE9bygodCxlLHIpPT50LnJlcGxhY2UobmV3IFJlZ0V4cChlLCJnIiksciksInJlcGxhY2VBbGwiKSxDTD1vKHQ9PntsZXQgZT10LnNwbGl0KGAKYCkscj0xLzA7Zm9yKGxldCBuIG9mIGUpaWYobi50cmltKCkubGVuZ3RoPjApe2xldCBpPW4ubWF0Y2goL14oXHMqKS8pO2kmJihyPU1hdGgubWluKHIsaVsxXS5sZW5ndGgpKX1yZXR1cm4gcj09PTEvMHx8cj09PTA/dDplLm1hcChuPT5uLmxlbmd0aD49cj9uLnNsaWNlKHIpOm4pLmpvaW4oYApgKX0sInN0cmlwSW5kZW50IiksTUw9bygodCxlKT0+e2xldCByPXQ7cmV0dXJuKCFlfHxlLnN0cmlwSW5kZW50KSYmKHI9Q0wocikpLCghZXx8ZS5ub3JtYWxpemVOZXdsaW5lKSYmKHI9ci5yZXBsYWNlKC9cclxuL2csYApgKSksKCFlfHxlLnJlcGxhY2VUYWJzKSYmKHI9UDEociwiCS8iLCIgIikpLCghZXx8ZS5zdHJpcExlYWRpbmdUcmFpbGluZ0VtcHR5TGluZXMpJiYocj1yLnJlcGxhY2UoL15ccypbXHJcbl0vZ20sIiIpLnJlcGxhY2UoL1xzKltcclxuXSQvZ20sIiIpKSwoIWV8fGUuc3RyaXBBbGxFbXB0eUxpbmVzKSYmKHI9ci5yZXBsYWNlKC9eXHMqW1xyXG5dL2dtLCIiKSkscn0sInN0YW5kYXJkIik7dmFyIEFwPXt9O3NlKEFwLHtpc0Jhc2U2NDooKT0+SUwsaXNVdGY4OigpPT5PTH0pO3ZhciBxZz17ZW5jb2RlOm8odD0+e2lmKHR5cGVvZiBCdWZmZXI8InUiKXJldHVybiBCdWZmZXIuZnJvbSh0LCJ1dGY4IikudG9TdHJpbmcoImJhc2U2NCIpO2lmKHR5cGVvZiBidG9hPCJ1Iil7bGV0IGU9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpLHI9QXJyYXkuZnJvbShlLG49PlN0cmluZy5mcm9tQ2hhckNvZGUobikpLmpvaW4oIiIpO3JldHVybiBidG9hKHIpfWVsc2V7bGV0IGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHI9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpLG49IiIsaT0wO2Zvcig7aTxyLmxlbmd0aDspe2xldCBzPXJbaSsrXSxhPWk8ci5sZW5ndGg/cltpKytdOjAsbD1pPHIubGVuZ3RoP3JbaSsrXTowLGM9czw8MTZ8YTw8OHxsO24rPWUuY2hhckF0KGM+PjE4JjYzKSxuKz1lLmNoYXJBdChjPj4xMiY2Myksbis9aS0yPHIubGVuZ3RoP2UuY2hhckF0KGM+PjYmNjMpOiI9IixuKz1pLTE8ci5sZW5ndGg/ZS5jaGFyQXQoYyY2Myk6Ij0ifXJldHVybiBufX0sImVuY29kZSIpLGRlY29kZTpvKHQ9PntsZXQgZT10LnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLnBhZEVuZCh0Lmxlbmd0aCsoNC10Lmxlbmd0aCU0KSU0LCI9Iik7aWYodHlwZW9mIEJ1ZmZlcjwidSIpcmV0dXJuIEJ1ZmZlci5mcm9tKGUsImJhc2U2NCIpLnRvU3RyaW5nKCJ1dGY4Iik7aWYodHlwZW9mIGF0b2I8InUiKXtsZXQgcj1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKW5baV09ci5jaGFyQ29kZUF0KGkpO3JldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUobil9ZWxzZXtsZXQgcj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsbj1bXSxpPTA7Zm9yKDtpPGUubGVuZ3RoOyl7bGV0IHM9ci5pbmRleE9mKGUuY2hhckF0KGkrKykpLGE9ci5pbmRleE9mKGUuY2hhckF0KGkrKykpLGw9ci5pbmRleE9mKGUuY2hhckF0KGkrKykpLGM9ci5pbmRleE9mKGUuY2hhckF0KGkrKykpLHU9czw8MTh8YTw8MTJ8bDw8NnxjO24ucHVzaCh1Pj4xNiYyNTUpLGwhPT02NCYmbi5wdXNoKHU+PjgmMjU1KSxjIT09NjQmJm4ucHVzaCh1JjI1NSl9cmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShuZXcgVWludDhBcnJheShuKSl9fSwiZGVjb2RlIil9LEZwPWNsYXNze3N0YXRpY3tvKHRoaXMsIkJhc2U2NCIpfWNvbnN0cnVjdG9yKGUscil7c3dpdGNoKHIpe2Nhc2Uic3RyaW5nIjp0aGlzLnJlZlN0cmluZz1lO2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnJlZlN0cmluZz16cy5kZWNvZGUoZSk7YnJlYWs7Y2FzZSJiYXNlNjR1cmkiOnRoaXMucmVmU3RyaW5nPXpzLmRlY29kZShlKX19Z2V0IHNpbXBsZVN0cmluZygpe3JldHVybiB0aGlzLnJlZlN0cmluZ31nZXQgYmFzZTY0U3RyaW5nKCl7cmV0dXJuIHpzLmVuY29kZSh0aGlzLnJlZlN0cmluZyl9Z2V0IGJhc2U2NFVyaVN0cmluZygpe3JldHVybiB6cy5lbmNvZGVVcmkodGhpcy5yZWZTdHJpbmcpfX0senM9e2VuY29kZTpvKHQ9PnFnLmVuY29kZSh0KSwiZW5jb2RlIiksZW5jb2RlVXJpOm8odD0+cWcuZW5jb2RlKHQpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPS9nLCIiKSwiZW5jb2RlVXJpIiksZGVjb2RlOm8odD0+cWcuZGVjb2RlKHQpLCJkZWNvZGUiKSxpc0Jhc2U2NDpvKHQ9Pi9eKFtBLVphLXowLTkrL117NH0pKihbQS1aYS16MC05Ky9dezN9PXxbQS1aYS16MC05Ky9dezJ9PT0pPyQvLnRlc3QodCksImlzQmFzZTY0Iil9O3ZhciBPTD1vKHQ9PntsZXQgcj1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodCksbj0wO2Zvcig7bjxyLmxlbmd0aDspe2lmKHJbbl09PT05fHxyW25dPT09MTB8fHJbbl09PT0xM3x8MzI8PXJbbl0mJnJbbl08PTEyNil7bis9MTtjb250aW51ZX1pZigxOTQ8PXJbbl0mJnJbbl08PTIyMyYmMTI4PD1yW24rMV0mJnJbbisxXTw9MTkxKXtuKz0yO2NvbnRpbnVlfWlmKHJbbl09PT0yMjQmJjE2MDw9cltuKzFdJiZyW24rMV08PTE5MSYmMTI4PD1yW24rMl0mJnJbbisyXTw9MTkxfHwoMjI1PD1yW25dJiZyW25dPD0yMzZ8fHJbbl09PT0yMzh8fHJbbl09PT0yMzkpJiYxMjg8PXJbbisxXSYmcltuKzFdPD0xOTEmJjEyODw9cltuKzJdJiZyW24rMl08PTE5MXx8cltuXT09PTIzNyYmMTI4PD1yW24rMV0mJnJbbisxXTw9MTU5JiYxMjg8PXJbbisyXSYmcltuKzJdPD0xOTEpe24rPTM7Y29udGludWV9aWYocltuXT09PTI0MCYmMTQ0PD1yW24rMV0mJnJbbisxXTw9MTkxJiYxMjg8PXJbbisyXSYmcltuKzJdPD0xOTEmJjEyODw9cltuKzNdJiZyW24rM108PTE5MXx8MjQxPD1yW25dJiZyW25dPD0yNDMmJjEyODw9cltuKzFdJiZyW24rMV08PTE5MSYmMTI4PD1yW24rMl0mJnJbbisyXTw9MTkxJiYxMjg8PXJbbiszXSYmcltuKzNdPD0xOTF8fHJbbl09PT0yNDQmJjEyODw9cltuKzFdJiZyW24rMV08PTE0MyYmMTI4PD1yW24rMl0mJnJbbisyXTw9MTkxJiYxMjg8PXJbbiszXSYmcltuKzNdPD0xOTEpe24rPTQ7Y29udGludWV9cmV0dXJuITF9cmV0dXJuITB9LCJpc1V0ZjgiKSxJTD1vKHQ9PntsZXQgZT0vW15BLVowLTkrXC89XS9pLHI9dC5sZW5ndGg7aWYoIXJ8fHIlNCE9PTB8fGUudGVzdCh0KSlyZXR1cm4hMTtsZXQgbj10LmluZGV4T2YoIj0iKTtyZXR1cm4gbj09PS0xfHxuPT09ci0xfHxuPT09ci0yJiZ0W3ItMV09PT0iPSJ9LCJpc0Jhc2U2NCIpO3ZhciAkcD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEb21haW4iKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnByb3RvY29sPXRoaXMuX3Byb3RvY29sUmVnZXgoZSksdGhpcy5wcm90b2NvbHx8KGU9YGh0dHBzOi8vJHtlfWApLHRoaXMubm9kZVBhcnNlZFVybD1uZXcgVVJMKGUpLHRoaXMucG9ydD10aGlzLm5vZGVQYXJzZWRVcmwucG9ydDtsZXQgcj10aGlzLl9kb21haW5SZWdleChlLnJlcGxhY2UodGhpcy5ub2RlUGFyc2VkVXJsLnBhdGhuYW1lLCIiKSk7W3RoaXMubGV2ZWwxLHRoaXMubGV2ZWwyLHRoaXMubGV2ZWwzLHRoaXMubGV2ZWw0LHRoaXMubGV2ZWw1XT1yLHRoaXMuZnVsbE5hbWU9IiI7Zm9yKGxldCBuIG9mIHIpdGhpcy5mdWxsTmFtZT09PSIiP3RoaXMuZnVsbE5hbWU9bjp0aGlzLmZ1bGxOYW1lPW4rIi4iK3RoaXMuZnVsbE5hbWU7dGhpcy56b25lTmFtZT1bdGhpcy5sZXZlbDIsdGhpcy5sZXZlbDFdLmZpbHRlcihCb29sZWFuKS5qb2luKCIuIiksdGhpcy50b3BMZXZlbD10aGlzLmxldmVsMSx0aGlzLmRvbWFpbk5hbWU9dGhpcy5sZXZlbDIsdGhpcy5zdWJEb21haW49dGhpcy5sZXZlbDN9X2RvbWFpblJlZ2V4KGUpe2xldCBuPS8oW2EtekEtWjAtOVwtXF9dKilcLnswLDF9KFthLXpBLVowLTlcLVxfXSopXC57MCwxfShbYS16QS1aMC05XC1cX10qKVwuezAsMX0oW2EtekEtWjAtOVwtXF9dKilcLnswLDF9KFthLXpBLVowLTlcLVxfXSopXC57MCwxfSQvLmV4ZWMoZSk7aWYoIW4pcmV0dXJuW107bGV0IGk9Wy4uLm5dLnJldmVyc2UoKTtyZXR1cm4gaS5wb3AoKSxpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYSE9PSIifSl9X3Byb3RvY29sUmVnZXgoZSl7bGV0IG49L14oW2EtekEtWjAtOV0qKTpcL1wvLy5leGVjKGUpO2lmKG4pcmV0dXJuIG5bMV19X3BvcnRSZWdleChlKXtsZXQgbj0vXihbYS16QS1aMC05XSopOlwvXC8vLmV4ZWMoZSk7aWYobilyZXR1cm4gblsxXX19O3ZhciBCcD1jbGFzc3tzdGF0aWN7byh0aGlzLCJHaXRSZXBvIil9Y29uc3RydWN0b3IoZSxyKXtsZXQgbj1fTChlKTtpZighbil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZ2l0IHJlcG9zaXRvcnkgVVJMOiAke2V9YCk7dGhpcy5ob3N0PW5bMV0sdGhpcy51c2VyPW5bMl0sdGhpcy5yZXBvPW5bM10sdGhpcy5hY2Nlc3NUb2tlbj1yLHRoaXMuc3NoVXJsPU4xKHRoaXMuaG9zdCx0aGlzLnVzZXIsdGhpcy5yZXBvLHRoaXMuYWNjZXNzVG9rZW4sInNzaCIpLHRoaXMuaHR0cHNVcmw9TjEodGhpcy5ob3N0LHRoaXMudXNlcix0aGlzLnJlcG8sdGhpcy5hY2Nlc3NUb2tlbiwiaHR0cHMiKX19LF9MPW8oZnVuY3Rpb24odCl7cmV0dXJuLyhbYS16QS1aMC05XC1fXC5dKikoPzpcL3xcOikoW2EtekEtWjAtOVwtX1wuXSopKD86XC8pKFthLXpBLVowLTlcLV9cLl0qKSg/OlwuZ2l0KS8uZXhlYyh0KX0sImdpdFJlZ2V4IiksTjE9byhmdW5jdGlvbih0LGUscixuPSIiLGkpe3N3aXRjaChuIT09IiImJihuPW4rIkAiKSxpKXtjYXNlImh0dHBzIjpyZXR1cm4iaHR0cHM6Ly8iK24rdCsiLyIrZSsiLyIrcisiLmdpdCI7Y2FzZSJzc2giOnJldHVybiJnaXRAIit0KyI6IitlKyIvIityKyIuZ2l0In19LCJnaXRMaW5rIik7dmFyIEYxPWRyKEwxKCksMSksSHM9RjEuZGVmYXVsdDt2YXIgJDE9bygoKT0+Z2xvYmFsVGhpcy5CdWZmZXIsImdldE5vZGVCdWZmZXIiKTtmdW5jdGlvbiBQTCh0KXtsZXQgZT0kMSgpO3JldHVybiBlP2UuZnJvbSh0KS50b1N0cmluZygiYmFzZTY0Iik6YnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLnQpKX1vKFBMLCJiYXNlNjRFbmNvZGUiKTtmdW5jdGlvbiBOTCh0KXtsZXQgZT0kMSgpO2lmKGUpe2xldCByPWUuZnJvbSh0LCJiYXNlNjQiKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoci5idWZmZXIsci5ieXRlT2Zmc2V0LHIuYnl0ZUxlbmd0aCl9cmV0dXJuIG5ldyBVaW50OEFycmF5KEFycmF5LmZyb20oYXRvYih0KSkubWFwKHI9PnIuY2hhckNvZGVBdCgwKSkpfW8oTkwsImJhc2U2NERlY29kZSIpO2Z1bmN0aW9uIFJsKHQsZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQsenAsZSl9byhSbCwic3RyaW5naWZ5Iik7ZnVuY3Rpb24gVmcodCl7cmV0dXJuIEpTT04ucGFyc2UodCxCMSl9byhWZywicGFyc2UiKTt2YXIgenA9bygodCxlKT0+e2lmKExMKGUpKXtsZXQgcjtpZigiZGF0YSJpbiBlJiZ6MShlLmRhdGEpKXI9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KXI9ZTtlbHNlIHJldHVybiBlO3JldHVybnt0eXBlOiJFbmNvZGVkQnVmZmVyIixkYXRhOiJiYXNlNjQ6IitQTChyKX19cmV0dXJuIGV9LCJyZXBsYWNlciIpLEIxPW8oKHQsZSk9PntpZihSTChlKSYmVWcoZS5kYXRhKSYmZS5kYXRhLnN0YXJ0c1dpdGgoImJhc2U2NDoiKSl7bGV0IHI9ZS5kYXRhLnNsaWNlKDcpO3JldHVybiBOTChyKX1yZXR1cm4gZX0sInJldml2ZXIiKTtmdW5jdGlvbiBSTCh0KXtyZXR1cm4gSDEodCkmJnQudHlwZT09PSJFbmNvZGVkQnVmZmVyIiYmVWcodC5kYXRhKX1vKFJMLCJpc0VuY29kZWRCdWZmZXIiKTtmdW5jdGlvbiBMTCh0KXtyZXR1cm4gSDEodCkmJnQudHlwZT09PSJCdWZmZXIiJiYoejEodC5kYXRhKXx8VWcodC5kYXRhKSl8fHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fW8oTEwsImlzQnVmZmVyTGlrZSIpO2Z1bmN0aW9uIHoxKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfW8oejEsImlzQXJyYXkiKTtmdW5jdGlvbiBVZyh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmcifW8oVWcsImlzU3RyaW5nIik7ZnVuY3Rpb24gSDEodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGx9byhIMSwiaXNPYmplY3QiKTt2YXIgVzE9byh0PT57bGV0IGU9SlNPTi5wYXJzZShSbCh0KSkscj0hMCxuPW8ocz0+e2lmKEFycmF5LmlzQXJyYXkocykpcmV0dXJuIHMubWFwKHU9Pm4odSkpO2lmKHM9PT1udWxsfHx0eXBlb2YgcyE9Im9iamVjdCIpcmV0dXJuIHM7bGV0IGE9T2JqZWN0LmtleXMocykuc29ydCgpLGw9e307Zm9yKGxldCB1IG9mIGEpe2xldCBmPW4oc1t1XSk7dSBpbiBsP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLHUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmYsd3JpdGFibGU6ITB9KTpsW3VdPWZ9bGV0IGM9T2JqZWN0LmtleXMobCk7cmV0dXJuKGMubGVuZ3RoIT09YS5sZW5ndGh8fGMuc29tZSgodSxmKT0+dSE9PWFbZl0pKSYmKHI9ITEpLGx9LCJjcmVhdGVTb3J0ZWRWYWx1ZSIpLGk9bihlKTtyZXR1cm4gcj9KU09OLnN0cmluZ2lmeShpKTpIcyhlLHt9KX0sInN0YWJsZVN0cmluZ2lmeSIpO3ZhciBIcD1WZyxZZz1vKHQ9PnQuc3BsaXQoYApgKS5yZWR1Y2UoKG4saSk9PntsZXQgcz1pLnRyaW0oKTtyZXR1cm4gcy5sZW5ndGg+MCYmbi5wdXNoKEhwKHMpKSxufSxbXSksInBhcnNlSnNvbkwiKSxGTD1vKHQ9PnQubWFwKGU9Pm1vKGUpKS5qb2luKGAKYCksInN0cmluZ2lmeUpzb25MIiksQUw9bygodCxlLHI9e30pPT57bGV0IG49bmV3IFdlYWtTZXQsaT1vKGw9PntpZihsPT09bnVsbHx8dHlwZW9mIGwhPSJvYmplY3QiKXJldHVybiBsO2xldCBjPXpwKCIiLGwpO2lmKGMmJmMudHlwZT09PSJFbmNvZGVkQnVmZmVyIiYmdHlwZW9mIGMuZGF0YT09InN0cmluZyIpcmV0dXJuIGM7aWYobi5oYXMobCkpcmV0dXJuIl9fY3ljbGVfXyI7aWYobi5hZGQobCksQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gbC5tYXAoZj0+aShmKSk7bGV0IHU9e307Zm9yKGxldCBmIG9mIE9iamVjdC5rZXlzKGwpKXRyeXt1W2ZdPWkobFtmXSl9Y2F0Y2h7dVtmXT0iX191bnNlcmlhbGl6YWJsZV9fIn1yZXR1cm4gdX0sInNhbml0aXplIikscz1pKHQpLGE9ey4uLnIsY3ljbGVzOiEwfTtpZihlJiYhYS5jbXApe2xldCBsPW5ldyBNYXA7ZS5mb3JFYWNoKChjLHUpPT5sLnNldChjLHUpKSxhLmNtcD0oYyx1KT0+e2xldCBmPWwuaGFzKGMua2V5KT9sLmdldChjLmtleSk6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHA9bC5oYXModS5rZXkpP2wuZ2V0KHUua2V5KTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIGYhPT1wP2YtcDpjLmtleTx1LmtleT8tMTpjLmtleT51LmtleT8xOjB9fXJldHVybiBIcyhzLGEpfSwic3RhYmxlT25lV2F5U3RyaW5naWZ5IiksbW89bygodCxlLHI9dm9pZCAwKT0+e2lmKHI9PT12b2lkIDAmJmU9PT12b2lkIDApcmV0dXJuIFcxKHQpO2xldCBuPVJsKHQpO3Q9SlNPTi5wYXJzZShuKTtsZXQgaT17Li4ucn07aWYoZSYmIWkuY21wKXtsZXQgYT1uZXcgTWFwO2UuZm9yRWFjaCgobCxjKT0+YS5zZXQobCxjKSksaS5jbXA9KGwsYyk9PntsZXQgdT1hLmhhcyhsLmtleSk/YS5nZXQobC5rZXkpOk51bWJlci5QT1NJVElWRV9JTkZJTklUWSxmPWEuaGFzKGMua2V5KT9hLmdldChjLmtleSk6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiB1IT09Zj91LWY6bC5rZXk8Yy5rZXk/LTE6bC5rZXk+Yy5rZXk/MTowfX1yZXR1cm4gSHModCxpKX0sInN0cmluZ2lmeSIpLCRMPW8odD0+e2xldCBlPW1vKHQpLHI9SlNPTi5wYXJzZShlKTtyZXR1cm4gSlNPTi5zdHJpbmdpZnkocixudWxsLDIpfSwic3RyaW5naWZ5UHJldHR5IiksQkw9bygoLi4udCk9PntsZXQgZT1tbyguLi50KTtyZXR1cm4gbW4uYmFzZTY0LmVuY29kZVVyaShlKX0sInN0cmluZ2lmeUJhc2U2NCIpLHpMPW8odD0+e2xldCBlPW1uLmJhc2U2NCxuPShlLmRlY29kZVVyaXx8ZS5kZWNvZGUpKHQpO3JldHVybiBIcChuKX0sInBhcnNlQmFzZTY0IiksR2c9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJTbWFydGpzb24iKX1zdGF0aWMgZW5mb2xkRnJvbU9iamVjdChlKXtsZXQgcj1uZXcgdGhpcyxuPXIuc2F2ZWFibGVQcm9wZXJ0aWVzfHxbXTtmb3IobGV0IGkgaW4gZSluLmluZGV4T2YoaSkhPT0tMSYmKHJbaV09ZVtpXSk7cmV0dXJuIHJ9c3RhdGljIGVuZm9sZEZyb21Kc29uKGUpe2xldCByPUhwKGUpO3JldHVybiB0aGlzLmVuZm9sZEZyb21PYmplY3Qocil9c2F2ZWFibGVQcm9wZXJ0aWVzPVtdO2ZvbGRUb09iamVjdCgpe2xldCBlPW5ldyBTZXQ7cmV0dXJuIGUuYWRkKHRoaXMpLHRoaXMuZm9sZFRvT2JqZWN0SW50ZXJuYWwoZSl9Zm9sZFRvT2JqZWN0SW50ZXJuYWwoZSl7bGV0IHI9e30sbj1vKHM9PntpZihzIGluc3RhbmNlb2YgdCl7aWYoZS5oYXMocykpdGhyb3cgbmV3IEVycm9yKCJjeWNsZSBkZXRlY3RlZCIpO3JldHVybiBlLmFkZChzKSxzLmZvbGRUb09iamVjdEludGVybmFsKGUpfXJldHVybiBBcnJheS5pc0FycmF5KHMpP3MubWFwKGE9Pm4oYSkpOnN0cnVjdHVyZWRDbG9uZShzKX0sImZvbGRWYWx1ZSIpLGk9dGhpcy5zYXZlYWJsZVByb3BlcnRpZXN8fFtdO2ZvcihsZXQgcyBvZiBpKXtsZXQgYT10aGlzW3NdO3Jbc109bihhKX1yZXR1cm4gcn1mb2xkVG9Kc29uKCl7bGV0IGU9dGhpcy5mb2xkVG9PYmplY3QoKTtyZXR1cm4gbW8oZSl9fSxITD1vKCgpPT4odCxlKT0+e2xldCByPVN0cmluZyhlLm5hbWUpO2UuYWRkSW5pdGlhbGl6ZXIoZnVuY3Rpb24oKXt0aGlzLnNhdmVhYmxlUHJvcGVydGllc3x8KHRoaXMuc2F2ZWFibGVQcm9wZXJ0aWVzPVtdKSx0aGlzLnNhdmVhYmxlUHJvcGVydGllcy5pbmNsdWRlcyhyKXx8dGhpcy5zYXZlYWJsZVByb3BlcnRpZXMucHVzaChyKX0pfSwiZm9sZERlYyIpLHExPW8oKHQsZSk9PntsZXQgcj1tbyh0KSxuPW1vKGUpO3JldHVybiByPT09bn0sImRlZXBFcXVhbE9iamVjdHMiKSxqTD1vKCh0LGUpPT57bGV0IHI9WWcodCksbj1ZZyhlKTtyZXR1cm4gcTEocixuKX0sImRlZXBFcXVhbEpzb25MU3RyaW5ncyIpO3ZhciBBcj17fTtzZShBcix7VHlwZWRyZXF1ZXN0Q2FjaGU6KCk9PlFnLFdlYlN0b3JlOigpPT5MbH0pO3ZhciBVMT17fTt2YXIganA9Y2xhc3N7c3RhdGlje28odGhpcywiV2ViU3RvcmVEYiIpfWNvbnN0cnVjdG9yKGUpe3RoaXMubmF0aXZlRGI9ZX1hc3luYyBnZXQoZSxyLG49e30pe3JldHVybiB0aGlzLnJ1bk9iamVjdFN0b3JlUmVxdWVzdChlLCJyZWFkb25seSIsaT0+aS5nZXQociksbil9YXN5bmMgZ2V0S2V5KGUscixuPXt9KXtyZXR1cm4gdGhpcy5ydW5PYmplY3RTdG9yZVJlcXVlc3QoZSwicmVhZG9ubHkiLGk9PmkuZ2V0S2V5KHIpLG4pfWFzeW5jIHB1dChlLHIsbixpPXt9KXtyZXR1cm4gdGhpcy5ydW5PYmplY3RTdG9yZVJlcXVlc3QoZSwicmVhZHdyaXRlIixzPT5uPT09dm9pZCAwP3MucHV0KHIpOnMucHV0KHIsbiksaSl9YXN5bmMgZGVsZXRlKGUscixuPXt9KXthd2FpdCB0aGlzLnJ1bk9iamVjdFN0b3JlUmVxdWVzdChlLCJyZWFkd3JpdGUiLGk9PmkuZGVsZXRlKHIpLG4pfWFzeW5jIGNsZWFyKGUscj17fSl7YXdhaXQgdGhpcy5ydW5PYmplY3RTdG9yZVJlcXVlc3QoZSwicmVhZHdyaXRlIixuPT5uLmNsZWFyKCkscil9YXN5bmMgZ2V0QWxsS2V5cyhlLHI9e30pe3JldHVybiB0aGlzLnJ1bk9iamVjdFN0b3JlUmVxdWVzdChlLCJyZWFkb25seSIsbj0+bi5nZXRBbGxLZXlzKCkscil9Y2xvc2UoKXt0aGlzLm5hdGl2ZURiLmNsb3NlKCl9YXN5bmMgcnVuT2JqZWN0U3RvcmVSZXF1ZXN0KGUscixuLGkpe2kuc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO2xldCBzPXRoaXMubmF0aXZlRGIudHJhbnNhY3Rpb24oZSxyKSxhPXMub2JqZWN0U3RvcmUoZSksbD1uKGEpLGMsdT1uZXcgUHJvbWlzZSgocCxoKT0+e2M9aH0pLGY9bygoKT0+e3RyeXtzLmFib3J0KCl9Y2F0Y2gocCl7aWYoIShwIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uKXx8cC5uYW1lIT09IkludmFsaWRTdGF0ZUVycm9yIil7YyhwKTtyZXR1cm59fWkuc2lnbmFsJiZjKGkuc2lnbmFsLnJlYXNvbil9LCJhYm9ydFRyYW5zYWN0aW9uIik7aS5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixmLHtvbmNlOiEwfSk7dHJ5e2xldFtwXT1hd2FpdCBQcm9taXNlLnJhY2UoW1Byb21pc2UuYWxsKFtXTChsKSxxTChzKV0pLHVdKTtyZXR1cm4gcH1jYXRjaChwKXt0aHJvdyBpLnNpZ25hbD8uYWJvcnRlZD9pLnNpZ25hbC5yZWFzb246cH1maW5hbGx5e2kuc2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsZil9fX0sWTE9byhhc3luYyh0LGUpPT57aWYoZT8udGhyb3dJZkFib3J0ZWQoKSwhZSlyZXR1cm4gdDtsZXQgcixuPW5ldyBQcm9taXNlKChzLGEpPT57cj1hfSksaT1vKCgpPT57cihlLnJlYXNvbil9LCJhYm9ydExpc3RlbmVyIik7ZS5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsaSx7b25jZTohMH0pO3RyeXtyZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKFt0LG5dKX1maW5hbGx5e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGkpfX0sImF3YWl0V2l0aFNpZ25hbCIpLFdMPW8odD0+bmV3IFByb21pc2UoKGUscik9Pnt0Lm9uc3VjY2Vzcz0oKT0+ZSh0LnJlc3VsdCksdC5vbmVycm9yPSgpPT5yKFdwKCJJbmRleGVkREIgcmVxdWVzdCBmYWlsZWQiLHQuZXJyb3IpKX0pLCJpbmRleGVkRGJSZXF1ZXN0VG9Qcm9taXNlIikscUw9byh0PT5uZXcgUHJvbWlzZSgoZSxyKT0+e3Qub25jb21wbGV0ZT0oKT0+ZSgpLHQub25hYm9ydD0oKT0+cihXcCgiSW5kZXhlZERCIHRyYW5zYWN0aW9uIGFib3J0ZWQiLHQuZXJyb3IpKSx0Lm9uZXJyb3I9KCk9PnIoV3AoIkluZGV4ZWREQiB0cmFuc2FjdGlvbiBmYWlsZWQiLHQuZXJyb3IpKX0pLCJpbmRleGVkRGJUcmFuc2FjdGlvblRvUHJvbWlzZSIpLFdwPW8oKHQsZSk9PmU/bmV3IEVycm9yKGAke3R9OiAke2UubWVzc2FnZX1gLHtjYXVzZTplfSk6bmV3IEVycm9yKHQpLCJjcmVhdGVJbmRleGVkRGJFcnJvciIpLEcxPW8oKHQsZSk9Pnt0Lm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoZSl8fHQuY3JlYXRlT2JqZWN0U3RvcmUoZSl9LCJlbnN1cmVPYmplY3RTdG9yZSIpLFExPW8oYXN5bmModCxlLHIpPT57aWYoIWdsb2JhbFRoaXMuaW5kZXhlZERCKXRocm93IG5ldyBFcnJvcigiSW5kZXhlZERCIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBydW50aW1lIik7cmV0dXJuIG5ldyBQcm9taXNlKChuLGkpPT57bGV0IHM9ITEsYT10eXBlb2YgZT09Im51bWJlciI/Z2xvYmFsVGhpcy5pbmRleGVkREIub3Blbih0LGUpOmdsb2JhbFRoaXMuaW5kZXhlZERCLm9wZW4odCksbD1vKGM9PntzfHwocz0hMCxpKGMgaW5zdGFuY2VvZiBFcnJvcj9jOm5ldyBFcnJvcihTdHJpbmcoYykpKSl9LCJyZWplY3RPbmNlIik7YS5vbnVwZ3JhZGVuZWVkZWQ9KCk9PntpZihyKXRyeXtyKGEucmVzdWx0KX1jYXRjaChjKXthLnRyYW5zYWN0aW9uPy5hYm9ydCgpLGwoYyl9fSxhLm9uc3VjY2Vzcz0oKT0+e2lmKHMpe2EucmVzdWx0LmNsb3NlKCk7cmV0dXJufXM9ITA7bGV0IGM9YS5yZXN1bHQ7Yy5vbnZlcnNpb25jaGFuZ2U9KCk9PmMuY2xvc2UoKSxuKGMpfSxhLm9uZXJyb3I9KCk9PmwoV3AoYEZhaWxlZCB0byBvcGVuIEluZGV4ZWREQiBkYXRhYmFzZSAiJHt0fSJgLGEuZXJyb3IpKSxhLm9uYmxvY2tlZD0oKT0+bChuZXcgRXJyb3IoYE9wZW5pbmcgSW5kZXhlZERCIGRhdGFiYXNlICIke3R9IiB3YXMgYmxvY2tlZCBieSBhbm90aGVyIGNvbm5lY3Rpb25gKSl9KX0sIm9wZW5OYXRpdmVEYiIpLFVMPW8oYXN5bmModCxlKT0+e2xldCByPWF3YWl0IFExKHQsdm9pZCAwLGk9PkcxKGksZSkpO2lmKHIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhlKSlyZXR1cm4gbmV3IGpwKHIpO2xldCBuPXIudmVyc2lvbisxO2lmKHIuY2xvc2UoKSxyPWF3YWl0IFExKHQsbixpPT5HMShpLGUpKSwhci5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKGUpKXRocm93IHIuY2xvc2UoKSxuZXcgRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgSW5kZXhlZERCIG9iamVjdCBzdG9yZSAiJHtlfSIgaW4gZGF0YWJhc2UgIiR7dH0iYCk7cmV0dXJuIG5ldyBqcChyKX0sIm9wZW5XZWJTdG9yZURiIiksTGw9Y2xhc3N7c3RhdGlje28odGhpcywiV2ViU3RvcmUiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmxpZmVjeWNsZUdlbmVyYXRpb249MCx0aGlzLmNsb3NlQ292ZXJlZEdlbmVyYXRpb249MCx0aGlzLmFjdGl2ZU9wZXJhdGlvbnM9bmV3IFNldCx0aGlzLm9wdGlvbnM9ZX10cmFja09wZXJhdGlvbihlKXt0aGlzLmxpZmVjeWNsZUdlbmVyYXRpb24rPTE7bGV0IHI7cmV0dXJuIHI9KGFzeW5jKCk9PmUoKSkoKS5maW5hbGx5KCgpPT57dGhpcy5hY3RpdmVPcGVyYXRpb25zLmRlbGV0ZShyKX0pLHRoaXMuYWN0aXZlT3BlcmF0aW9ucy5hZGQocikscn1pbml0KGU9e30pe3JldHVybiB0aGlzLnRyYWNrT3BlcmF0aW9uKCgpPT50aGlzLmluaXRGb3JPcGVyYXRpb24oZS5zaWduYWwpKX1hc3luYyBpbml0Rm9yT3BlcmF0aW9uKGUpe2U/LnRocm93SWZBYm9ydGVkKCk7bGV0IHI9dGhpcy5jbG9zZVByb21pc2U7cmV0dXJuIHImJihhd2FpdCBZMShyLGUpLGU/LnRocm93SWZBYm9ydGVkKCkpLHRoaXMuaW5pdFByb21pc2V8fCh0aGlzLmluaXRQcm9taXNlPXRoaXMucnVuSW5pdCgpLmNhdGNoKG49Pnt0aHJvdyB0aGlzLmluaXRQcm9taXNlPXZvaWQgMCxufSkpLFkxKHRoaXMuaW5pdFByb21pc2UsZSl9YXN5bmMgcnVuSW5pdCgpe2xldCBlPW5ldyBGci5TbWFydGVudjtpZighZS5pc0Jyb3dzZXImJiFnbG9iYWxUaGlzLmluZGV4ZWREQiYmKGF3YWl0IGUuZ2V0U2FmZU5vZGVNb2R1bGUoImZha2UtaW5kZXhlZGRiL2F1dG8iKSwhZ2xvYmFsVGhpcy5pbmRleGVkREIpKXtsZXQgcj1hd2FpdCBlLmdldFNhZmVOb2RlTW9kdWxlKCJmYWtlLWluZGV4ZWRkYiIpO2dsb2JhbFRoaXMuaW5kZXhlZERCPW5ldyByLklEQkZhY3Rvcnl9dGhpcy5kYj1hd2FpdCBVTCh0aGlzLm9wdGlvbnMuZGJOYW1lLHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpfXJ1bkRhdGFPcGVyYXRpb24oZSxyKXtyZXR1cm4gdGhpcy50cmFja09wZXJhdGlvbihhc3luYygpPT4oYXdhaXQgdGhpcy5pbml0Rm9yT3BlcmF0aW9uKHIuc2lnbmFsKSxyLnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKSxlKHRoaXMuZGIpKSl9Y2xvc2UoKXtsZXQgZT10aGlzLmxpZmVjeWNsZUdlbmVyYXRpb247aWYodGhpcy5jbG9zZVByb21pc2UmJmU8PXRoaXMuY2xvc2VDb3ZlcmVkR2VuZXJhdGlvbilyZXR1cm4gdGhpcy5jbG9zZVByb21pc2U7bGV0IHI9dGhpcy5jbG9zZVByb21pc2Usbj1bLi4udGhpcy5hY3RpdmVPcGVyYXRpb25zXTtpZighciYmIXRoaXMuaW5pdFByb21pc2UmJm4ubGVuZ3RoPT09MClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7bGV0IGk7cmV0dXJuIGk9KGFzeW5jKCk9Pnt0cnl7aWYocil0cnl7YXdhaXQgcn1jYXRjaHt9YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKG4pO2xldCBzPXRoaXMuaW5pdFByb21pc2U7aWYoIXMpcmV0dXJuO3RyeXthd2FpdCBzfWNhdGNoe3JldHVybn1maW5hbGx5e3RoaXMuaW5pdFByb21pc2U9PT1zJiYodGhpcy5pbml0UHJvbWlzZT12b2lkIDApfXRoaXMuZGIuY2xvc2UoKX1maW5hbGx5e3RoaXMuY2xvc2VQcm9taXNlPT09aSYmKHRoaXMuY2xvc2VQcm9taXNlPXZvaWQgMCl9fSkoKSx0aGlzLmNsb3NlUHJvbWlzZT1pLHRoaXMuY2xvc2VDb3ZlcmVkR2VuZXJhdGlvbj1lLGl9YXN5bmMgZ2V0KGUscj17fSl7cmV0dXJuIHRoaXMucnVuRGF0YU9wZXJhdGlvbihuPT5uLmdldCh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lLGUscikscil9YXN5bmMgY2hlY2soZSxyPXt9KXtyZXR1cm4gdGhpcy5ydW5EYXRhT3BlcmF0aW9uKGFzeW5jIG49PmF3YWl0IG4uZ2V0S2V5KHRoaXMub3B0aW9ucy5zdG9yZU5hbWUsZSxyKSE9PXZvaWQgMCxyKX1hc3luYyBzZXQoZSxyLG49e30pe3JldHVybiB0aGlzLnJ1bkRhdGFPcGVyYXRpb24oaT0+aS5wdXQodGhpcy5vcHRpb25zLnN0b3JlTmFtZSxyLGUsbiksbil9YXN5bmMgZGVsZXRlKGUscj17fSl7cmV0dXJuIHRoaXMucnVuRGF0YU9wZXJhdGlvbihuPT5uLmRlbGV0ZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lLGUscikscil9YXN5bmMgY2xlYXIoZT17fSl7cmV0dXJuIHRoaXMucnVuRGF0YU9wZXJhdGlvbihyPT5yLmNsZWFyKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUsZSksZSl9YXN5bmMga2V5cyhlPXt9KXtyZXR1cm4gdGhpcy5ydW5EYXRhT3BlcmF0aW9uKHI9PnIuZ2V0QWxsS2V5cyh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lLGUpLGUpfX07dmFyIFFnPWNsYXNze3N0YXRpY3tvKHRoaXMsIlR5cGVkcmVxdWVzdENhY2hlIil9Y29uc3RydWN0b3IoZT0iZGVmYXVsdCIpe3RoaXMud2Vic3RvcmU9bmV3IExsKHtkYk5hbWU6InRyU3RvcmUiLHN0b3JlTmFtZTpgdHJTdG9yZS0ke2V9YH0pfWJ1aWxkS2V5KGUpe3JldHVybiBsdC5zdHJpbmdpZnkoe21ldGhvZDplLm1ldGhvZCxyZXF1ZXN0OmUucmVxdWVzdH0pfWFzeW5jIHNldEJ5UmVxdWVzdChlKXtpZighZS5yZXNwb25zZSl0aHJvdyBuZXcgRXJyb3IoIllvdSBjYW5ub3Qgc3RvcmUgcmVxdWVzdHMgd2l0aG91dCBhIHJlc3BvbnNlIHByZXNlbnQiKTthd2FpdCB0aGlzLndlYnN0b3JlLnNldCh0aGlzLmJ1aWxkS2V5KGUpLGUpfWFzeW5jIGdldEJ5UmVxdWVzdChlKXtyZXR1cm4gYXdhaXQgdGhpcy53ZWJzdG9yZS5nZXQodGhpcy5idWlsZEtleShlKSl9fTt2YXIgRmw9MjU2LGpzPWNsYXNze3N0YXRpY3tvKHRoaXMsIkNhY2hlU3RvcmUiKX1jb25zdHJ1Y3RvcihlPSJ3ZWJyZXF1ZXN0LXY0IixyPSJjYWNoZSIpe3RoaXMubGlmZWN5Y2xlQ29udHJvbGxlcj1uZXcgQWJvcnRDb250cm9sbGVyLHRoaXMuY2xvc2VSZWFzb249bmV3IEVycm9yKCJXZWJyZXF1ZXN0IGNhY2hlIHN0b3JlIGlzIGNsb3NlZCIpLHRoaXMuZGlzcG9zZWQ9ITEsdGhpcy5wcnVuZUdlbmVyYXRpb249MCx0aGlzLnBydW5lV2FpdGVycz1uZXcgU2V0LHRoaXMuYWN0aXZlT3duZWRPcGVyYXRpb25zPW5ldyBTZXQsdGhpcy53ZWJzdG9yZT1uZXcgQXIuV2ViU3RvcmUoe2RiTmFtZTplLHN0b3JlTmFtZTpyfSksdGhpcy5pbml0UHJvbWlzZT10aGlzLmluaXQoKX1hc3luYyBpbml0KCl7fWdlbmVyYXRlQ2FjaGVLZXkoZSl7bGV0IHI9ZS51cmwsbj1lLm1ldGhvZDtyZXR1cm4gbj09PSJHRVQiP3I6YCR7bn06JHtyfWB9YXN5bmMgc2V0KGUscixuPXt9KXthd2FpdCB0aGlzLmluaXRQcm9taXNlO2xldCBpPXRoaXMuZ2V0T3BlcmF0aW9uU2lnbmFsKG4uc2lnbmFsKSxzPW4ubWF4RW50cmllcz8/Rmw7aWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHMpfHxzPD0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJ3ZWJyZXF1ZXN0IGNhY2hlIG1heEVudHJpZXMgbXVzdCBiZSBhIHBvc2l0aXZlIHNhZmUgaW50ZWdlciIpO2F3YWl0IHRoaXMud2Vic3RvcmUuc2V0KGUscix7c2lnbmFsOml9KSxhd2FpdCB0aGlzLnNjaGVkdWxlUHJ1bmUocyxpKX1hc3luYyBnZXQoZSxyPXt9KXthd2FpdCB0aGlzLmluaXRQcm9taXNlO2xldCBuPXRoaXMuZ2V0T3BlcmF0aW9uU2lnbmFsKHIuc2lnbmFsKTt0cnl7bGV0IGk9YXdhaXQgdGhpcy53ZWJzdG9yZS5nZXQoZSx7c2lnbmFsOm59KTtyZXR1cm4gaT09PXZvaWQgMD9udWxsOnRoaXMuaXNDYWNoZUVudHJ5KGkpP2k6KGF3YWl0IHRoaXMud2Vic3RvcmUuZGVsZXRlKGUse3NpZ25hbDpufSksbnVsbCl9Y2F0Y2h7aWYobi5hYm9ydGVkKXRocm93IG4ucmVhc29uO3JldHVybiBudWxsfX1hc3luYyBoYXMoZSxyPXt9KXtyZXR1cm4gYXdhaXQgdGhpcy5nZXQoZSxyKSE9PW51bGx9YXN5bmMgZGVsZXRlKGUscj17fSl7YXdhaXQgdGhpcy5pbml0UHJvbWlzZTtsZXQgbj10aGlzLmdldE9wZXJhdGlvblNpZ25hbChyLnNpZ25hbCk7YXdhaXQgdGhpcy53ZWJzdG9yZS5kZWxldGUoZSx7c2lnbmFsOm59KX1hc3luYyBjbGVhcihlPXt9KXthd2FpdCB0aGlzLmluaXRQcm9taXNlO2xldCByPXRoaXMuZ2V0T3BlcmF0aW9uU2lnbmFsKGUuc2lnbmFsKTthd2FpdCB0aGlzLndlYnN0b3JlLmNsZWFyKHtzaWduYWw6cn0pfXJlc3BvbnNlRnJvbUNhY2hlRW50cnkoZSl7bGV0IHI9bmV3IEhlYWRlcnMoZS5oZWFkZXJzKTtyZXR1cm4gbmV3IFJlc3BvbnNlKGUucmVzcG9uc2Use3N0YXR1czplLnN0YXR1cyxzdGF0dXNUZXh0OmUuc3RhdHVzVGV4dCxoZWFkZXJzOnJ9KX1jYWNoZUVudHJ5RnJvbVJlc3BvbnNlKGUscixuLGk9e30pe3JldHVybiB0aGlzLnRyYWNrT3duZWRPcGVyYXRpb24oYXN5bmMoKT0+e2xldCBzPXRoaXMuZ2V0T3BlcmF0aW9uU2lnbmFsKGkuc2lnbmFsKSxhPWkucHJlc2VydmVSZXNwb25zZSE9PSExLGw9YT9yLmNsb25lKCk6cixjPWF3YWl0IHRoaXMuY29uc3VtZUFycmF5QnVmZmVyKGwscyxhP3IuYm9keTp2b2lkIDAsaS5yZXNwb25zZVNpZ25hbCksdT17fTtyZXR1cm4gbC5oZWFkZXJzLmZvckVhY2goKGYscCk9Pnt1W3BdPWZ9KSx7cmVzcG9uc2U6YyxoZWFkZXJzOnUsdGltZXN0YW1wOkRhdGUubm93KCksZXRhZzpuPy5ldGFnfHxsLmhlYWRlcnMuZ2V0KCJldGFnIil8fHZvaWQgMCxsYXN0TW9kaWZpZWQ6bj8ubGFzdE1vZGlmaWVkfHxsLmhlYWRlcnMuZ2V0KCJsYXN0LW1vZGlmaWVkIil8fHZvaWQgMCxtYXhBZ2U6bj8ubWF4QWdlLHVybDplLHN0YXR1czpsLnN0YXR1cyxzdGF0dXNUZXh0Omwuc3RhdHVzVGV4dH19KX1hc3luYyBwcnVuZUV4cGlyZWQoZT17fSl7YXdhaXQgdGhpcy5pbml0UHJvbWlzZTtsZXQgcj10aGlzLmdldE9wZXJhdGlvblNpZ25hbChlLnNpZ25hbCksbj1hd2FpdCB0aGlzLmNvbGxlY3RFbnRyaWVzKHIpLGk9MDtmb3IobGV0IHMgb2YgbilyLnRocm93SWZBYm9ydGVkKCksIShzLnZhbGlkJiYhdGhpcy5pc0V4cGlyZWQocykpJiYoYXdhaXQgdGhpcy53ZWJzdG9yZS5kZWxldGUocy5rZXkse3NpZ25hbDpyfSksaSs9MSk7cmV0dXJuIGl9YXN5bmMgc2NoZWR1bGVQcnVuZShlLHIpe3I/LnRocm93SWZBYm9ydGVkKCk7bGV0IG49Kyt0aGlzLnBydW5lR2VuZXJhdGlvbjt0aGlzLnBlbmRpbmdQcnVuZU1heEVudHJpZXM9dGhpcy5wZW5kaW5nUHJ1bmVNYXhFbnRyaWVzPT09dm9pZCAwP2U6TWF0aC5taW4odGhpcy5wZW5kaW5nUHJ1bmVNYXhFbnRyaWVzLGUpO2xldCBpLHMsYT1uZXcgUHJvbWlzZSgoYyx1KT0+e2k9YyxzPXV9KSxsPXtnZW5lcmF0aW9uOm4scmVzb2x2ZTppLHJlamVjdDpzfTt0aGlzLnBydW5lV2FpdGVycy5hZGQobCksdGhpcy5lbnN1cmVQcnVuZUxvb3AoKTt0cnl7YXdhaXQgVkwoYSxyKX1maW5hbGx5e3RoaXMucHJ1bmVXYWl0ZXJzLmRlbGV0ZShsKX19ZW5zdXJlUHJ1bmVMb29wKCl7aWYodGhpcy5wcnVuZUxvb3BQcm9taXNlKXJldHVybiB0aGlzLnBydW5lTG9vcFByb21pc2U7bGV0IGU7cmV0dXJuIGU9dGhpcy5ydW5QcnVuZUxvb3AoKS5jYXRjaChyPT57dGhpcy5wZW5kaW5nUHJ1bmVNYXhFbnRyaWVzPXZvaWQgMCx0aGlzLnNldHRsZVBydW5lV2FpdGVycyh0aGlzLnBydW5lR2VuZXJhdGlvbixyKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLnBydW5lTG9vcFByb21pc2U9PT1lJiYodGhpcy5wcnVuZUxvb3BQcm9taXNlPXZvaWQgMCx0aGlzLnBlbmRpbmdQcnVuZU1heEVudHJpZXMhPT12b2lkIDAmJiF0aGlzLmRpc3Bvc2VkJiZ0aGlzLmVuc3VyZVBydW5lTG9vcCgpKX0pLHRoaXMucHJ1bmVMb29wUHJvbWlzZT1lLGV9YXN5bmMgcnVuUHJ1bmVMb29wKCl7Zm9yKDt0aGlzLnBlbmRpbmdQcnVuZU1heEVudHJpZXMhPT12b2lkIDA7KXtsZXQgZT10aGlzLnBlbmRpbmdQcnVuZU1heEVudHJpZXM7dGhpcy5wZW5kaW5nUHJ1bmVNYXhFbnRyaWVzPXZvaWQgMDtsZXQgcj10aGlzLnBydW5lR2VuZXJhdGlvbjthd2FpdCB0aGlzLnBydW5lVG9MaW1pdChlLHRoaXMubGlmZWN5Y2xlQ29udHJvbGxlci5zaWduYWwpLHRoaXMuc2V0dGxlUHJ1bmVXYWl0ZXJzKHIpfX1zZXR0bGVQcnVuZVdhaXRlcnMoZSxyKXtmb3IobGV0IG4gb2YgdGhpcy5wcnVuZVdhaXRlcnMpbi5nZW5lcmF0aW9uPmV8fCh0aGlzLnBydW5lV2FpdGVycy5kZWxldGUobikscj09PXZvaWQgMD9uLnJlc29sdmUoKTpuLnJlamVjdChyKSl9YXN5bmMgcHJ1bmVUb0xpbWl0KGUscil7bGV0IG49YXdhaXQgdGhpcy5jb2xsZWN0RW50cmllcyhyKSxpPW4uZmlsdGVyKGw9PiFsLnZhbGlkfHx0aGlzLmlzRXhwaXJlZChsKSk7Zm9yKGxldCBsIG9mIGkpcj8udGhyb3dJZkFib3J0ZWQoKSxhd2FpdCB0aGlzLndlYnN0b3JlLmRlbGV0ZShsLmtleSx7c2lnbmFsOnJ9KTtsZXQgcz1uLmZpbHRlcihsPT5sLnZhbGlkJiYhdGhpcy5pc0V4cGlyZWQobCkpLnNvcnQoKGwsYyk9PmwudGltZXN0YW1wPT09Yy50aW1lc3RhbXA/bC5rZXkubG9jYWxlQ29tcGFyZShjLmtleSk6KGwudGltZXN0YW1wPz8wKS0oYy50aW1lc3RhbXA/PzApKSxhPU1hdGgubWF4KDAscy5sZW5ndGgtZSk7Zm9yKGxldCBsIG9mIHMuc2xpY2UoMCxhKSlyPy50aHJvd0lmQWJvcnRlZCgpLGF3YWl0IHRoaXMud2Vic3RvcmUuZGVsZXRlKGwua2V5LHtzaWduYWw6cn0pfWFzeW5jIGNvbGxlY3RFbnRyaWVzKGUpe2U/LnRocm93SWZBYm9ydGVkKCk7bGV0IHI9YXdhaXQgdGhpcy53ZWJzdG9yZS5rZXlzKHtzaWduYWw6ZX0pLG49W107Zm9yKGxldCBpIG9mIHIpaWYoZT8udGhyb3dJZkFib3J0ZWQoKSx0eXBlb2YgaT09InN0cmluZyIpdHJ5e2xldCBzPWF3YWl0IHRoaXMud2Vic3RvcmUuZ2V0KGkse3NpZ25hbDplfSk7bi5wdXNoKHRoaXMuaXNDYWNoZUVudHJ5KHMpP3trZXk6aSx2YWxpZDohMCx0aW1lc3RhbXA6cy50aW1lc3RhbXAsbWF4QWdlOnMubWF4QWdlfTp7a2V5OmksdmFsaWQ6ITEsdGltZXN0YW1wOjB9KX1jYXRjaHtpZihlPy5hYm9ydGVkKXRocm93IGUucmVhc29uO2NvbnRpbnVlfXJldHVybiBufWlzQ2FjaGVFbnRyeShlKXtpZighZXx8dHlwZW9mIGUhPSJvYmplY3QiKXJldHVybiExO2xldCByPVJlZmxlY3QuZ2V0KGUsInJlc3BvbnNlIiksbj1SZWZsZWN0LmdldChlLCJoZWFkZXJzIiksaT1SZWZsZWN0LmdldChlLCJ0aW1lc3RhbXAiKSxzPVJlZmxlY3QuZ2V0KGUsInVybCIpLGE9UmVmbGVjdC5nZXQoZSwic3RhdHVzIiksbD1SZWZsZWN0LmdldChlLCJzdGF0dXNUZXh0Iik7cmV0dXJuIHIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmdHlwZW9mIG49PSJvYmplY3QiJiZuIT09bnVsbCYmTnVtYmVyLmlzRmluaXRlKGkpJiZ0eXBlb2Ygcz09InN0cmluZyImJk51bWJlci5pc0ludGVnZXIoYSkmJnR5cGVvZiBsPT0ic3RyaW5nIn1pc0V4cGlyZWQoZSl7cmV0dXJuIGUubWF4QWdlIT09dm9pZCAwJiZlLm1heEFnZT4wJiZEYXRlLm5vdygpLWUudGltZXN0YW1wPj1lLm1heEFnZX1nZXRPcGVyYXRpb25TaWduYWwoZSl7aWYodGhpcy5kaXNwb3NlZCl0aHJvdyB0aGlzLmNsb3NlUmVhc29uO3JldHVybiBlPy50aHJvd0lmQWJvcnRlZCgpLGU/QWJvcnRTaWduYWwuYW55KFtlLHRoaXMubGlmZWN5Y2xlQ29udHJvbGxlci5zaWduYWxdKTp0aGlzLmxpZmVjeWNsZUNvbnRyb2xsZXIuc2lnbmFsfXRyYWNrT3duZWRPcGVyYXRpb24oZSl7bGV0IHI7cmV0dXJuIHI9ZSgpLmZpbmFsbHkoKCk9Pnt0aGlzLmFjdGl2ZU93bmVkT3BlcmF0aW9ucy5kZWxldGUocil9KSx0aGlzLmFjdGl2ZU93bmVkT3BlcmF0aW9ucy5hZGQocikscn1jbG9zZSgpe2lmKHRoaXMuY2xvc2VQcm9taXNlKXJldHVybiB0aGlzLmNsb3NlUHJvbWlzZTt0aGlzLmRpc3Bvc2VkPSEwLHRoaXMubGlmZWN5Y2xlQ29udHJvbGxlci5hYm9ydCh0aGlzLmNsb3NlUmVhc29uKTtsZXQgZT10aGlzLnBydW5lTG9vcFByb21pc2Uscj1bLi4udGhpcy5hY3RpdmVPd25lZE9wZXJhdGlvbnNdO3JldHVybiB0aGlzLmNsb3NlUHJvbWlzZT0oYXN5bmMoKT0+e2F3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbLi4uciwuLi5lP1tlXTpbXV0pLGF3YWl0IHRoaXMud2Vic3RvcmUuY2xvc2UoKX0pKCksdGhpcy5jbG9zZVByb21pc2V9YXN5bmMgY29uc3VtZUFycmF5QnVmZmVyKGUscixuLGkpe2lmKHI/LnRocm93SWZBYm9ydGVkKCksIXIpcmV0dXJuIGUuYXJyYXlCdWZmZXIoKTtsZXQgcz1lLmJvZHk/LmdldFJlYWRlcigpO2lmKCFzKXJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7bGV0IGE9W10sbD0wLGMsdT1uZXcgUHJvbWlzZSgobSxnKT0+e2M9Z30pLGYscD1vKCgpPT57YyhyLnJlYXNvbiksaT8uYWJvcnRlZHx8KGY9UHJvbWlzZS5hbGwoW3MuY2FuY2VsKHIucmVhc29uKS5jYXRjaCgoKT0+e30pLG4/LmNhbmNlbChyLnJlYXNvbikuY2F0Y2goKCk9Pnt9KV0pLnRoZW4oKCk9Pnt9KSl9LCJhYm9ydExpc3RlbmVyIik7ci5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscCx7b25jZTohMH0pO3RyeXtmb3IoOzspe2xldCBtPWF3YWl0IFByb21pc2UucmFjZShbcy5yZWFkKCksdV0pO2lmKG0uZG9uZSlicmVhazthLnB1c2gobS52YWx1ZSksbCs9bS52YWx1ZS5ieXRlTGVuZ3RofX1maW5hbGx5e3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHApLGYmJmF3YWl0IGY7dHJ5e3MucmVsZWFzZUxvY2soKX1jYXRjaHt9fWxldCBoPW5ldyBVaW50OEFycmF5KGwpLGQ9MDtmb3IobGV0IG0gb2YgYSloLnNldChtLGQpLGQrPW0uYnl0ZUxlbmd0aDtyZXR1cm4gaC5idWZmZXJ9fSxWTD1vKGFzeW5jKHQsZSk9PntpZihlPy50aHJvd0lmQWJvcnRlZCgpLCFlKXJldHVybiB0O2xldCByLG49bmV3IFByb21pc2UoKHMsYSk9PntyPWF9KSxpPW8oKCk9PntyKGUucmVhc29uKX0sImFib3J0TGlzdGVuZXIiKTtlLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixpLHtvbmNlOiEwfSk7dHJ5e3JldHVybiBhd2FpdCBQcm9taXNlLnJhY2UoW3Qsbl0pfWZpbmFsbHl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsaSl9fSwiYXdhaXRXaXRoU2lnbmFsIik7ZnVuY3Rpb24gWUwodCl7bGV0IGU9e21heEFnZTowLGltbXV0YWJsZTohMSxub0NhY2hlOiExLG5vU3RvcmU6ITEsbXVzdFJldmFsaWRhdGU6ITF9O2lmKCF0KXJldHVybiBlO2xldCByPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgiLCIpLm1hcChuPT5uLnRyaW0oKSk7Zm9yKGxldCBuIG9mIHIpaWYobj09PSJuby1jYWNoZSIpZS5ub0NhY2hlPSEwO2Vsc2UgaWYobj09PSJuby1zdG9yZSIpZS5ub1N0b3JlPSEwO2Vsc2UgaWYobj09PSJpbW11dGFibGUiKWUuaW1tdXRhYmxlPSEwO2Vsc2UgaWYobj09PSJtdXN0LXJldmFsaWRhdGUiKWUubXVzdFJldmFsaWRhdGU9ITA7ZWxzZSBpZihuLnN0YXJ0c1dpdGgoIm1heC1hZ2U9Iikpe2xldCBpPXBhcnNlSW50KG4uc3BsaXQoIj0iKVsxXSwxMCk7aXNOYU4oaSl8fChlLm1heEFnZT1pKjFlMyl9cmV0dXJuIGV9byhZTCwicGFyc2VDYWNoZUNvbnRyb2wiKTtmdW5jdGlvbiBHTCh0KXtpZih0KXRyeXtyZXR1cm4gbmV3IERhdGUodCkuZ2V0VGltZSgpfWNhdGNoe3JldHVybn19byhHTCwicGFyc2VFeHBpcmVzIik7ZnVuY3Rpb24gZ24odCl7bGV0IGU9dC5nZXQoImNhY2hlLWNvbnRyb2wiKSxyPXQuZ2V0KCJleHBpcmVzIiksbj10LmdldCgiZXRhZyIpLGk9dC5nZXQoImxhc3QtbW9kaWZpZWQiKSxzPVlMKGUpO2lmKHMubWF4QWdlPT09MCYmcil7bGV0IGE9R0wocik7YSYmKHMubWF4QWdlPU1hdGgubWF4KDAsYS1EYXRlLm5vdygpKSl9cmV0dXJue21heEFnZTpzLm1heEFnZXx8MCxldGFnOm58fHZvaWQgMCxsYXN0TW9kaWZpZWQ6aXx8dm9pZCAwLGltbXV0YWJsZTpzLmltbXV0YWJsZXx8ITEsbm9DYWNoZTpzLm5vQ2FjaGV8fCExLG5vU3RvcmU6cy5ub1N0b3JlfHwhMSxtdXN0UmV2YWxpZGF0ZTpzLm11c3RSZXZhbGlkYXRlfHwhMX19byhnbiwiZXh0cmFjdENhY2hlTWV0YWRhdGEiKTtmdW5jdGlvbiBVcCh0LGUpe2lmKGUubm9TdG9yZSlyZXR1cm4hMTtpZihlLmltbXV0YWJsZSlyZXR1cm4hMDtsZXQgcj1EYXRlLm5vdygpLXQudGltZXN0YW1wLG49dC5tYXhBZ2V8fGUubWF4QWdlfHwwO3JldHVybiBuPT09MD8hMTpyPG59byhVcCwiaXNGcmVzaCIpO2Z1bmN0aW9uIFdzKHQpe3JldHVybiB0Lm5vQ2FjaGV8fHQubXVzdFJldmFsaWRhdGV9byhXcywicmVxdWlyZXNSZXZhbGlkYXRpb24iKTtmdW5jdGlvbiBWcCh0KXtsZXQgZT17fTtyZXR1cm4gdC5ldGFnJiYoZVsiaWYtbm9uZS1tYXRjaCJdPXQuZXRhZyksdC5sYXN0TW9kaWZpZWQmJihlWyJpZi1tb2RpZmllZC1zaW5jZSJdPXQubGFzdE1vZGlmaWVkKSxlfW8oVnAsImNyZWF0ZUNvbmRpdGlvbmFsSGVhZGVycyIpO2Z1bmN0aW9uIFlwKHQpe2xldCBlPXt9O3JldHVybiB0LmZvckVhY2goKHIsbik9PntlW25dPXJ9KSxlfW8oWXAsImhlYWRlcnNUb09iamVjdCIpO2Z1bmN0aW9uIEoxKHQpe2xldCBlPW5ldyBIZWFkZXJzO3JldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbcixuXSk9PntlLnNldChyLG4pfSksZX1vKEoxLCJvYmplY3RUb0hlYWRlcnMiKTtmdW5jdGlvbiBRTCh0KXtsZXQgZT1uZXcgQWJvcnRDb250cm9sbGVyLHI9ITEsbj0hMSxpPW5ldyBsZS5UaW1lb3V0KHQsbnVsbCk7cmV0dXJuIGkucHJvbWlzZS50aGVuKCgpPT57cj0hMCxlLmFib3J0KCl9KSx7Y29udHJvbGxlcjplLGNsZWFudXA6bygoKT0+e258fChuPSEwLGkuY2FuY2VsKCkpfSwiY2xlYW51cCIpLGRpZFRpbWVvdXQ6bygoKT0+ciwiZGlkVGltZW91dCIpfX1vKFFMLCJjcmVhdGVUaW1lb3V0Q29udHJvbGxlciIpO3ZhciBLMT1TeW1ib2woIndlYnJlcXVlc3RUaW1lb3V0RXJyb3IiKSxTaT1vKCh0LGUpPT57bGV0IHI9bmV3IEVycm9yKGBSZXF1ZXN0IHRpbWVvdXQgYWZ0ZXIgJHtlfW1zOiAke3R9YCk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLEsxLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx2YWx1ZTohMCx3cml0YWJsZTohMX0pLHJ9LCJjcmVhdGVUaW1lb3V0RXJyb3IiKSxBbD1vKHQ9PnQgaW5zdGFuY2VvZiBFcnJvciYmUmVmbGVjdC5nZXQodCxLMSk9PT0hMCwiaXNXZWJyZXF1ZXN0VGltZW91dEVycm9yIik7YXN5bmMgZnVuY3Rpb24gSmcodCxlLHIpe2xldCBuPXQgaW5zdGFuY2VvZiBSZXF1ZXN0P3QudXJsOlN0cmluZyh0KSx7Y29udHJvbGxlcjppLGNsZWFudXA6cyxkaWRUaW1lb3V0OmF9PVFMKHIpLGw9ZS5zaWduYWw/QWJvcnRTaWduYWwuYW55KFtlLnNpZ25hbCxpLnNpZ25hbF0pOmkuc2lnbmFsO3RyeXtsZXQgYz1hd2FpdCBmZXRjaCh0LHsuLi5lLHNpZ25hbDpsfSk7cmV0dXJuIHMoKSxjfWNhdGNoKGMpe3Rocm93IHMoKSxhKCk/U2kobixyKTpjfX1vKEpnLCJmZXRjaFdpdGhUaW1lb3V0Iik7dmFyIFgxPW8odD0+e2lmKHQucmVhc29uIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIHQucmVhc29uO2xldCBlPW5ldyBFcnJvcigiVGhlIHJlcXVlc3Qgd2FzIGFib3J0ZWQiKTtyZXR1cm4gZS5uYW1lPSJBYm9ydEVycm9yIixlfSwibm9ybWFsaXplQWJvcnRSZWFzb24iKTthc3luYyBmdW5jdGlvbiBaMSh0LGUpe2lmKGUuc2lnbmFsPy5hYm9ydGVkKXtsZXQgZj1YMShlLnNpZ25hbCk7dGhyb3cgYXdhaXQgdC5ib2R5Py5jYW5jZWwoZikuY2F0Y2goKCk9Pnt9KSxmfWlmKGUuYm9keVRpbWVvdXRNcyE9PXZvaWQgMCYmZS5ib2R5VGltZW91dE1zPD0wKXtsZXQgZj1TaShlLnVybCxlLnJlcG9ydGVkVGltZW91dE1zPz9lLmJvZHlUaW1lb3V0TXMpO3Rocm93IGF3YWl0IHQuYm9keT8uY2FuY2VsKGYpLmNhdGNoKCgpPT57fSksZn1pZihlLmJvZHlUaW1lb3V0TXM9PT12b2lkIDAmJiFlLnNpZ25hbClyZXR1cm4gYXdhaXQgdC5qc29uKCk7bGV0IHI9dC5ib2R5Py5nZXRSZWFkZXIoKTtpZighcilyZXR1cm4gSlNPTi5wYXJzZSgiIik7bGV0IG4saSxzLGE9bmV3IFByb21pc2UoKGYscCk9PntzPXB9KSxsPW8oZj0+e258fChuPWYsci5jYW5jZWwoZikuY2F0Y2goKCk9Pnt9KSxzKGYpKX0sInRlcm1pbmF0ZSIpLGM9bygoKT0+e2Uuc2lnbmFsJiZsKFgxKGUuc2lnbmFsKSl9LCJhYm9ydExpc3RlbmVyIik7aWYoZS5zaWduYWwmJihlLnNpZ25hbC5hYm9ydGVkP2MoKTplLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYyx7b25jZTohMH0pKSxlLmJvZHlUaW1lb3V0TXMhPT12b2lkIDApe2xldCBmPWUucmVwb3J0ZWRUaW1lb3V0TXM/P2UuYm9keVRpbWVvdXRNcztpPXNldFRpbWVvdXQoKCk9PntsKFNpKGUudXJsLGYpKX0sZS5ib2R5VGltZW91dE1zKX1sZXQgdT1vKGFzeW5jKCk9PntsZXQgZj1uZXcgVGV4dERlY29kZXIscD0iIjtmb3IoOzspe2xldCBoO3RyeXtoPWF3YWl0IHIucmVhZCgpfWNhdGNoKGQpe3Rocm93IG58fGR9aWYobil0aHJvdyBuO2lmKGguZG9uZSlicmVhaztwKz1mLmRlY29kZShoLnZhbHVlLHtzdHJlYW06ITB9KX1pZihwKz1mLmRlY29kZSgpLG4pdGhyb3cgbjtyZXR1cm4gSlNPTi5wYXJzZShwKX0sInJlYWRCb2R5Iik7dHJ5e3JldHVybiBhd2FpdCBQcm9taXNlLnJhY2UoW3UoKSxhXSl9ZmluYWxseXtpIT09dm9pZCAwJiZjbGVhclRpbWVvdXQoaSksZS5zaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixjKTt0cnl7ci5yZWxlYXNlTG9jaygpfWNhdGNoe319fW8oWjEsImNvbnN1bWVKc29uV2l0aFRpbWVvdXQiKTt2YXIgR3A9Y2xhc3N7c3RhdGlje28odGhpcywiTmV0d29ya0ZpcnN0U3RyYXRlZ3kiKX1hc3luYyBleGVjdXRlKGUpe2xldCByO3RyeXtyZXR1cm4gcj1hd2FpdCBlLmZldGNoRm4oZS5yZXF1ZXN0KSxyLm9rJiZhd2FpdCB0aGlzLmNhY2hlUmVzcG9uc2UoZSxyKSx7cmVzcG9uc2U6cixmcm9tQ2FjaGU6ITEscmV2YWxpZGF0ZWQ6ITF9fWNhdGNoKG4pe2lmKGF3YWl0IHFzKHIsbixlLnJlcXVlc3Quc2lnbmFsKSxlLnNpZ25hbD8uYWJvcnRlZCl0aHJvdyBlLnNpZ25hbC5yZWFzb247aWYoQWwobikpdGhyb3cgbjtlLmxvZ2dpbmcmJmNvbnNvbGUubG9nKCJbd2VicmVxdWVzdF0gTmV0d29yayBmYWlsZWQsIHRyeWluZyBjYWNoZToiLG4pO2xldCBpPWF3YWl0IGUuY2FjaGVTdG9yZS5nZXQoZS5jYWNoZUtleSx7c2lnbmFsOmUuc2lnbmFsfSk7aWYoaSlyZXR1cm57cmVzcG9uc2U6ZS5jYWNoZVN0b3JlLnJlc3BvbnNlRnJvbUNhY2hlRW50cnkoaSksZnJvbUNhY2hlOiEwLHJldmFsaWRhdGVkOiExfTt0aHJvdyBufX1hc3luYyBjYWNoZVJlc3BvbnNlKGUscil7bGV0IG49Z24oci5oZWFkZXJzKTtpZihuLm1heEFnZT0kbChuLm1heEFnZSxlLmNhY2hlTWF4QWdlKSxuLm5vU3RvcmUpcmV0dXJuO2xldCBpPWF3YWl0IGUuY2FjaGVTdG9yZS5jYWNoZUVudHJ5RnJvbVJlc3BvbnNlKGUucmVxdWVzdC51cmwscixuLHtzaWduYWw6ZS5zaWduYWwscmVzcG9uc2VTaWduYWw6ZS5yZXF1ZXN0LnNpZ25hbH0pO2F3YWl0IGUuY2FjaGVTdG9yZS5zZXQoZS5jYWNoZUtleSxpLHtzaWduYWw6ZS5zaWduYWwsbWF4RW50cmllczplLmNhY2hlTWF4RW50cmllc30pfX0sS2c9Y2xhc3N7c3RhdGlje28odGhpcywiQ2FjaGVGaXJzdFN0cmF0ZWd5Iil9YXN5bmMgZXhlY3V0ZShlKXtsZXQgcj1hd2FpdCBlLmNhY2hlU3RvcmUuZ2V0KGUuY2FjaGVLZXkse3NpZ25hbDplLnNpZ25hbH0pO2lmKHIpe2xldCBzPWduKG5ldyBIZWFkZXJzKHIuaGVhZGVycykpO2lmKGVUKGUscixzKSYmIVdzKHMpKXJldHVybiBlLmxvZ2dpbmcmJmNvbnNvbGUubG9nKCJbd2VicmVxdWVzdF0gQ2FjaGUgaGl0IChmcmVzaCk6IixlLnJlcXVlc3QudXJsKSx7cmVzcG9uc2U6ZS5jYWNoZVN0b3JlLnJlc3BvbnNlRnJvbUNhY2hlRW50cnkociksZnJvbUNhY2hlOiEwLHJldmFsaWRhdGVkOiExfTtpZihXcyhzKSYmKHIuZXRhZ3x8ci5sYXN0TW9kaWZpZWQpKXJldHVybiBhd2FpdCB0aGlzLnJldmFsaWRhdGUoZSxyKX1lLmxvZ2dpbmcmJmNvbnNvbGUubG9nKCJbd2VicmVxdWVzdF0gQ2FjaGUgbWlzcywgZmV0Y2hpbmc6IixlLnJlcXVlc3QudXJsKTtsZXQgbj1hd2FpdCBlLmZldGNoRm4oZS5yZXF1ZXN0KSxpPWduKG4uaGVhZGVycyk7aWYoaS5tYXhBZ2U9JGwoaS5tYXhBZ2UsZS5jYWNoZU1heEFnZSksIWkubm9TdG9yZSl0cnl7bGV0IHM9YXdhaXQgZS5jYWNoZVN0b3JlLmNhY2hlRW50cnlGcm9tUmVzcG9uc2UoZS5yZXF1ZXN0LnVybCxuLGkse3NpZ25hbDplLnNpZ25hbCxyZXNwb25zZVNpZ25hbDplLnJlcXVlc3Quc2lnbmFsfSk7YXdhaXQgZS5jYWNoZVN0b3JlLnNldChlLmNhY2hlS2V5LHMse3NpZ25hbDplLnNpZ25hbCxtYXhFbnRyaWVzOmUuY2FjaGVNYXhFbnRyaWVzfSl9Y2F0Y2gocyl7dGhyb3cgYXdhaXQgcXMobixzLGUucmVxdWVzdC5zaWduYWwpLHN9cmV0dXJue3Jlc3BvbnNlOm4sZnJvbUNhY2hlOiExLHJldmFsaWRhdGVkOiExfX1hc3luYyByZXZhbGlkYXRlKGUscil7bGV0IG49VnAociksaT1uZXcgUmVxdWVzdChlLnJlcXVlc3QudXJsLHttZXRob2Q6ZS5yZXF1ZXN0Lm1ldGhvZCxoZWFkZXJzOnsuLi5ZcChlLnJlcXVlc3QuaGVhZGVycyksLi4ubn0sc2lnbmFsOmUuc2lnbmFsfSksczt0cnl7aWYocz1hd2FpdCBlLmZldGNoRm4oaSkscy5zdGF0dXM9PT0zMDQpcmV0dXJuIGUubG9nZ2luZyYmY29uc29sZS5sb2coIlt3ZWJyZXF1ZXN0XSBDYWNoZSByZXZhbGlkYXRlZCAoMzA0KToiLGUucmVxdWVzdC51cmwpLHIudGltZXN0YW1wPURhdGUubm93KCksYXdhaXQgZS5jYWNoZVN0b3JlLnNldChlLmNhY2hlS2V5LHIse3NpZ25hbDplLnNpZ25hbCxtYXhFbnRyaWVzOmUuY2FjaGVNYXhFbnRyaWVzfSksYXdhaXQgcXMocywiMzA0IHJlc3BvbnNlIHJlcGxhY2VkIGJ5IGNhY2hlZCByZXNwb25zZSIsaS5zaWduYWwpLHtyZXNwb25zZTplLmNhY2hlU3RvcmUucmVzcG9uc2VGcm9tQ2FjaGVFbnRyeShyKSxmcm9tQ2FjaGU6ITAscmV2YWxpZGF0ZWQ6ITB9O2lmKHMub2spe2xldCBhPWduKHMuaGVhZGVycyk7aWYoYS5tYXhBZ2U9JGwoYS5tYXhBZ2UsZS5jYWNoZU1heEFnZSksIWEubm9TdG9yZSl7bGV0IGw9YXdhaXQgZS5jYWNoZVN0b3JlLmNhY2hlRW50cnlGcm9tUmVzcG9uc2UoZS5yZXF1ZXN0LnVybCxzLGEse3NpZ25hbDplLnNpZ25hbCxyZXNwb25zZVNpZ25hbDppLnNpZ25hbH0pO2F3YWl0IGUuY2FjaGVTdG9yZS5zZXQoZS5jYWNoZUtleSxsLHtzaWduYWw6ZS5zaWduYWwsbWF4RW50cmllczplLmNhY2hlTWF4RW50cmllc30pfX1yZXR1cm57cmVzcG9uc2U6cyxmcm9tQ2FjaGU6ITEscmV2YWxpZGF0ZWQ6ITB9fWNhdGNoKGEpe2lmKGF3YWl0IHFzKHMsYSxpLnNpZ25hbCksZS5zaWduYWw/LmFib3J0ZWQpdGhyb3cgZS5zaWduYWwucmVhc29uO2lmKEFsKGEpKXRocm93IGE7cmV0dXJuIGUubG9nZ2luZyYmY29uc29sZS5sb2coIlt3ZWJyZXF1ZXN0XSBSZXZhbGlkYXRpb24gZmFpbGVkLCB1c2luZyBjYWNoZToiLGEpLHtyZXNwb25zZTplLmNhY2hlU3RvcmUucmVzcG9uc2VGcm9tQ2FjaGVFbnRyeShyKSxmcm9tQ2FjaGU6ITAscmV2YWxpZGF0ZWQ6ITF9fX19LFhnPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN0YWxlV2hpbGVSZXZhbGlkYXRlU3RyYXRlZ3kiKX1hc3luYyBleGVjdXRlKGUpe2xldCByPWF3YWl0IGUuY2FjaGVTdG9yZS5nZXQoZS5jYWNoZUtleSx7c2lnbmFsOmUuc2lnbmFsfSk7aWYocil7bGV0IHM9ZS5jYWNoZVN0b3JlLnJlc3BvbnNlRnJvbUNhY2hlRW50cnkocik7cmV0dXJuIGUuc2NoZWR1bGVCYWNrZ3JvdW5kUmV2YWxpZGF0aW9uKGFzeW5jIGE9PntsZXQgbD17Li4uZSxyZXF1ZXN0Om5ldyBSZXF1ZXN0KGUucmVxdWVzdCx7c2lnbmFsOmF9KSxzaWduYWw6YX07YXdhaXQgdGhpcy5yZXZhbGlkYXRlSW5CYWNrZ3JvdW5kKGwscil9KSx7cmVzcG9uc2U6cyxmcm9tQ2FjaGU6ITAscmV2YWxpZGF0ZWQ6ITF9fWxldCBuPWF3YWl0IGUuZmV0Y2hGbihlLnJlcXVlc3QpLGk9Z24obi5oZWFkZXJzKTtpZihpLm1heEFnZT0kbChpLm1heEFnZSxlLmNhY2hlTWF4QWdlKSwhaS5ub1N0b3JlJiZuLm9rKXRyeXtsZXQgcz1hd2FpdCBlLmNhY2hlU3RvcmUuY2FjaGVFbnRyeUZyb21SZXNwb25zZShlLnJlcXVlc3QudXJsLG4saSx7c2lnbmFsOmUuc2lnbmFsLHJlc3BvbnNlU2lnbmFsOmUucmVxdWVzdC5zaWduYWx9KTthd2FpdCBlLmNhY2hlU3RvcmUuc2V0KGUuY2FjaGVLZXkscyx7c2lnbmFsOmUuc2lnbmFsLG1heEVudHJpZXM6ZS5jYWNoZU1heEVudHJpZXN9KX1jYXRjaChzKXt0aHJvdyBhd2FpdCBxcyhuLHMsZS5yZXF1ZXN0LnNpZ25hbCksc31yZXR1cm57cmVzcG9uc2U6bixmcm9tQ2FjaGU6ITEscmV2YWxpZGF0ZWQ6ITF9fWFzeW5jIHJldmFsaWRhdGVJbkJhY2tncm91bmQoZSxyKXtsZXQgbj1nbihuZXcgSGVhZGVycyhyLmhlYWRlcnMpKTtpZihlVChlLHIsbikmJiFXcyhuKSlyZXR1cm47bGV0IGk7dHJ5e2lmKGUuc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpLGk9YXdhaXQgZS5mZXRjaEZuKGUucmVxdWVzdCksaS5vayl7bGV0IHM9Z24oaS5oZWFkZXJzKTtpZihzLm1heEFnZT0kbChzLm1heEFnZSxlLmNhY2hlTWF4QWdlKSwhcy5ub1N0b3JlKXtsZXQgYT1hd2FpdCBlLmNhY2hlU3RvcmUuY2FjaGVFbnRyeUZyb21SZXNwb25zZShlLnJlcXVlc3QudXJsLGkscyx7c2lnbmFsOmUuc2lnbmFsLHJlc3BvbnNlU2lnbmFsOmUucmVxdWVzdC5zaWduYWwscHJlc2VydmVSZXNwb25zZTohMX0pO2F3YWl0IGUuY2FjaGVTdG9yZS5zZXQoZS5jYWNoZUtleSxhLHtzaWduYWw6ZS5zaWduYWwsbWF4RW50cmllczplLmNhY2hlTWF4RW50cmllc30pLGUubG9nZ2luZyYmY29uc29sZS5sb2coIlt3ZWJyZXF1ZXN0XSBCYWNrZ3JvdW5kIHJldmFsaWRhdGlvbiBjb21wbGV0ZToiLGUucmVxdWVzdC51cmwpfX19Y2F0Y2gocyl7aWYoZS5zaWduYWw/LmFib3J0ZWQpcmV0dXJuO2UubG9nZ2luZyYmY29uc29sZS53YXJuKCJbd2VicmVxdWVzdF0gQmFja2dyb3VuZCByZXZhbGlkYXRpb24gZmFpbGVkOiIscyl9ZmluYWxseXthd2FpdCBxcyhpLCJiYWNrZ3JvdW5kIHJldmFsaWRhdGlvbiByZXNwb25zZSBkaXNjYXJkZWQiLGUucmVxdWVzdC5zaWduYWwpfX19LFpnPWNsYXNze3N0YXRpY3tvKHRoaXMsIk5ldHdvcmtPbmx5U3RyYXRlZ3kiKX1hc3luYyBleGVjdXRlKGUpe3JldHVybntyZXNwb25zZTphd2FpdCBlLmZldGNoRm4oZS5yZXF1ZXN0KSxmcm9tQ2FjaGU6ITEscmV2YWxpZGF0ZWQ6ITF9fX0sZXk9Y2xhc3N7c3RhdGlje28odGhpcywiQ2FjaGVPbmx5U3RyYXRlZ3kiKX1hc3luYyBleGVjdXRlKGUpe2xldCByPWF3YWl0IGUuY2FjaGVTdG9yZS5nZXQoZS5jYWNoZUtleSx7c2lnbmFsOmUuc2lnbmFsfSk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBDYWNoZSBtaXNzIGZvciAke2UucmVxdWVzdC51cmx9IChjYWNoZS1vbmx5IG1vZGUpYCk7cmV0dXJue3Jlc3BvbnNlOmUuY2FjaGVTdG9yZS5yZXNwb25zZUZyb21DYWNoZUVudHJ5KHIpLGZyb21DYWNoZTohMCxyZXZhbGlkYXRlZDohMX19fSwkbD1vKCh0LGUpPT5lPT09dm9pZCAwP3Q6TWF0aC5taW4odCxlKSwicmVzb2x2ZUVmZmVjdGl2ZU1heEFnZSIpLGVUPW8oKHQsZSxyKT0+VXAoZSxyKT90LmNhY2hlTWF4QWdlPT09dm9pZCAwPyEwOkRhdGUubm93KCktZS50aW1lc3RhbXA8dC5jYWNoZU1heEFnZTohMSwiaXNGcmVzaEZvckNvbnRleHQiKSxxcz1vKGFzeW5jKHQsZSxyKT0+eyF0Py5ib2R5fHx0LmJvZHlVc2VkfHxyPy5hYm9ydGVkfHxhd2FpdCB0LmJvZHkuY2FuY2VsKGUpLmNhdGNoKCgpPT57fSl9LCJjYW5jZWxEaXNjYXJkZWRSZXNwb25zZSIpO2Z1bmN0aW9uIHRUKHQpe3N3aXRjaCh0KXtjYXNlIm5ldHdvcmstZmlyc3QiOnJldHVybiBuZXcgR3A7Y2FzZSJjYWNoZS1maXJzdCI6cmV0dXJuIG5ldyBLZztjYXNlInN0YWxlLXdoaWxlLXJldmFsaWRhdGUiOnJldHVybiBuZXcgWGc7Y2FzZSJuZXR3b3JrLW9ubHkiOnJldHVybiBuZXcgWmc7Y2FzZSJjYWNoZS1vbmx5IjpyZXR1cm4gbmV3IGV5O2RlZmF1bHQ6cmV0dXJuIG5ldyBHcH19byh0VCwiZ2V0U3RyYXRlZ3lIYW5kbGVyIik7dmFyIFVzPWNsYXNze3N0YXRpY3tvKHRoaXMsIkNhY2hlTWFuYWdlciIpfWNvbnN0cnVjdG9yKGUscixuKXt0aGlzLmxpZmVjeWNsZUNvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcix0aGlzLmNsb3NlUmVhc29uPW5ldyBFcnJvcigiV2VicmVxdWVzdCBjYWNoZSBtYW5hZ2VyIGlzIGNsb3NlZCIpLHRoaXMuZGlzcG9zZWQ9ITEsdGhpcy5iYWNrZ3JvdW5kUmV2YWxpZGF0aW9ucz1uZXcgTWFwLHRoaXMuY2FjaGVTdG9yZT1uPz9uZXcganMoZSxyKX1hc3luYyBleGVjdXRlKGUscixuKXtpZih0aGlzLmRpc3Bvc2VkKXRocm93IHRoaXMuY2xvc2VSZWFzb247ZS5zaWduYWwudGhyb3dJZkFib3J0ZWQoKTtsZXQgaT10aGlzLmRldGVybWluZVN0cmF0ZWd5KGUscik7aWYoaT09PSJuZXR3b3JrLW9ubHkiKXJldHVybntyZXNwb25zZTphd2FpdCBuKGUpLGZyb21DYWNoZTohMSxyZXZhbGlkYXRlZDohMX07bGV0IHM9ci5jYWNoZU1heEVudHJpZXM/P0ZsO2lmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihzKXx8czw9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigid2VicmVxdWVzdCBjYWNoZU1heEVudHJpZXMgbXVzdCBiZSBhIHBvc2l0aXZlIHNhZmUgaW50ZWdlciIpO2lmKHIuY2FjaGVNYXhBZ2UhPT12b2lkIDAmJighTnVtYmVyLmlzU2FmZUludGVnZXIoci5jYWNoZU1heEFnZSl8fHIuY2FjaGVNYXhBZ2U8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIndlYnJlcXVlc3QgY2FjaGVNYXhBZ2UgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBzYWZlIGludGVnZXIiKTtsZXQgYT1yLnRpbWVvdXQ/PzZlNCxsPW5ldyBBYm9ydENvbnRyb2xsZXIsYz1zZXRUaW1lb3V0KCgpPT57bC5hYm9ydChTaShlLnVybCxhKSl9LE1hdGgubWF4KDAsYSkpLHU9QWJvcnRTaWduYWwuYW55KFtlLnNpZ25hbCx0aGlzLmxpZmVjeWNsZUNvbnRyb2xsZXIuc2lnbmFsLGwuc2lnbmFsXSk7dHJ5e2xldCBmPXRoaXMuZ2VuZXJhdGVDYWNoZUtleShlLHIpLHA9dFQoaSksaD17cmVxdWVzdDplLGNhY2hlS2V5OmYsY2FjaGVTdG9yZTp0aGlzLmNhY2hlU3RvcmUsZmV0Y2hGbjpuLGxvZ2dpbmc6ci5sb2dnaW5nLHNpZ25hbDp1LGNhY2hlTWF4QWdlOnIuY2FjaGVNYXhBZ2UsY2FjaGVNYXhFbnRyaWVzOnMsc2NoZWR1bGVCYWNrZ3JvdW5kUmV2YWxpZGF0aW9uOm8oZD0+e3RoaXMuc2NoZWR1bGVCYWNrZ3JvdW5kUmV2YWxpZGF0aW9uKGYsZS51cmwsYSxkKX0sInNjaGVkdWxlQmFja2dyb3VuZFJldmFsaWRhdGlvbiIpfTtyZXR1cm4gYXdhaXQgcC5leGVjdXRlKGgpfWZpbmFsbHl7Y2xlYXJUaW1lb3V0KGMpfX1kZXRlcm1pbmVTdHJhdGVneShlLHIpe3JldHVybiByLmNhY2hlU3RyYXRlZ3k/ci5jYWNoZVN0cmF0ZWd5OnIuY2FjaGU/dGhpcy5tYXBDYWNoZU1vZGVUb1N0cmF0ZWd5KHIuY2FjaGUpOmUuY2FjaGU/dGhpcy5tYXBDYWNoZU1vZGVUb1N0cmF0ZWd5KGUuY2FjaGUpOiJuZXR3b3JrLWZpcnN0In1tYXBDYWNoZU1vZGVUb1N0cmF0ZWd5KGUpe3N3aXRjaChlKXtjYXNlImRlZmF1bHQiOnJldHVybiJuZXR3b3JrLWZpcnN0IjtjYXNlIm5vLXN0b3JlIjpjYXNlInJlbG9hZCI6cmV0dXJuIm5ldHdvcmstb25seSI7Y2FzZSJuby1jYWNoZSI6cmV0dXJuIm5ldHdvcmstZmlyc3QiO2Nhc2UiZm9yY2UtY2FjaGUiOnJldHVybiJjYWNoZS1maXJzdCI7Y2FzZSJvbmx5LWlmLWNhY2hlZCI6cmV0dXJuImNhY2hlLW9ubHkiO2RlZmF1bHQ6cmV0dXJuIm5ldHdvcmstZmlyc3QifX1nZW5lcmF0ZUNhY2hlS2V5KGUscil7cmV0dXJuIHIuY2FjaGVLZXk/dHlwZW9mIHIuY2FjaGVLZXk9PSJmdW5jdGlvbiI/ci5jYWNoZUtleShlKTpyLmNhY2hlS2V5OnRoaXMuY2FjaGVTdG9yZS5nZW5lcmF0ZUNhY2hlS2V5KGUpfWFzeW5jIGNsZWFyKCl7YXdhaXQgdGhpcy5jYWNoZVN0b3JlLmNsZWFyKCl9YXN5bmMgZGVsZXRlKGUpe2F3YWl0IHRoaXMuY2FjaGVTdG9yZS5kZWxldGUoZSl9YXN5bmMgaGFzKGUpe3JldHVybiBhd2FpdCB0aGlzLmNhY2hlU3RvcmUuaGFzKGUpfWdldFN0b3JlKCl7cmV0dXJuIHRoaXMuY2FjaGVTdG9yZX1zY2hlZHVsZUJhY2tncm91bmRSZXZhbGlkYXRpb24oZSxyLG4saSl7aWYodGhpcy5kaXNwb3NlZHx8dGhpcy5iYWNrZ3JvdW5kUmV2YWxpZGF0aW9ucy5oYXMoZSkpcmV0dXJuO2xldCBzPW5ldyBBYm9ydENvbnRyb2xsZXIsYT1BYm9ydFNpZ25hbC5hbnkoW3RoaXMubGlmZWN5Y2xlQ29udHJvbGxlci5zaWduYWwscy5zaWduYWxdKSxsPXNldFRpbWVvdXQoKCk9PntzLmFib3J0KFNpKHIsbikpfSxNYXRoLm1heCgwLG4pKSxjO2M9aShhKS5jYXRjaCgoKT0+e30pLmZpbmFsbHkoKCk9PntjbGVhclRpbWVvdXQobCksdGhpcy5iYWNrZ3JvdW5kUmV2YWxpZGF0aW9ucy5nZXQoZSk9PT1jJiZ0aGlzLmJhY2tncm91bmRSZXZhbGlkYXRpb25zLmRlbGV0ZShlKX0pLHRoaXMuYmFja2dyb3VuZFJldmFsaWRhdGlvbnMuc2V0KGUsYyl9Y2xvc2UoKXtpZih0aGlzLmNsb3NlUHJvbWlzZSlyZXR1cm4gdGhpcy5jbG9zZVByb21pc2U7dGhpcy5kaXNwb3NlZD0hMCx0aGlzLmxpZmVjeWNsZUNvbnRyb2xsZXIuYWJvcnQodGhpcy5jbG9zZVJlYXNvbik7bGV0IGU9Wy4uLnRoaXMuYmFja2dyb3VuZFJldmFsaWRhdGlvbnMudmFsdWVzKCldO3JldHVybiB0aGlzLmNsb3NlUHJvbWlzZT0oYXN5bmMoKT0+e2F3YWl0IFByb21pc2UuYWxsU2V0dGxlZChlKSxhd2FpdCB0aGlzLmNhY2hlU3RvcmUuY2xvc2UoKX0pKCksdGhpcy5jbG9zZVByb21pc2V9fTt2YXIgUXA9Y2xhc3N7c3RhdGlje28odGhpcywiRXhwb25lbnRpYWxCYWNrb2ZmIil9Y2FsY3VsYXRlKGUscixuKXtsZXQgaT1yKk1hdGgucG93KDIsZS0xKTtyZXR1cm4gTWF0aC5taW4oaSxuKX19LHR5PWNsYXNze3N0YXRpY3tvKHRoaXMsIkxpbmVhckJhY2tvZmYiKX1jYWxjdWxhdGUoZSxyLG4pe2xldCBpPXIqZTtyZXR1cm4gTWF0aC5taW4oaSxuKX19LHJ5PWNsYXNze3N0YXRpY3tvKHRoaXMsIkNvbnN0YW50QmFja29mZiIpfWNhbGN1bGF0ZShlLHIsbil7cmV0dXJuIE1hdGgubWluKHIsbil9fTtmdW5jdGlvbiByVCh0KXtzd2l0Y2godCl7Y2FzZSJleHBvbmVudGlhbCI6cmV0dXJuIG5ldyBRcDtjYXNlImxpbmVhciI6cmV0dXJuIG5ldyB0eTtjYXNlImNvbnN0YW50IjpyZXR1cm4gbmV3IHJ5O2RlZmF1bHQ6cmV0dXJuIG5ldyBRcH19byhyVCwiZ2V0QmFja29mZkNhbGN1bGF0b3IiKTtmdW5jdGlvbiBuVCh0LGU9LjEpe2xldCByPXQqZSpNYXRoLnJhbmRvbSgpO3JldHVybiB0K3J9byhuVCwiYWRkSml0dGVyIik7dmFyIFZzPWNsYXNze3N0YXRpY3tvKHRoaXMsIlJldHJ5TWFuYWdlciIpfWNvbnN0cnVjdG9yKGU9e30scil7dGhpcy5zaWduYWw9cix0aGlzLm9wdGlvbnM9e21heEF0dGVtcHRzOmUubWF4QXR0ZW1wdHM/PzMsYmFja29mZjplLmJhY2tvZmY/PyJleHBvbmVudGlhbCIsaW5pdGlhbERlbGF5OmUuaW5pdGlhbERlbGF5Pz8xZTMsbWF4RGVsYXk6ZS5tYXhEZWxheT8/M2U0LHJldHJ5T246ZS5yZXRyeU9uPz9bNDA4LDQyOSw1MDAsNTAyLDUwMyw1MDRdLG9uUmV0cnk6ZS5vblJldHJ5Pz8oKCk9Pnt9KX19YXN5bmMgZXhlY3V0ZShlLHIpe2xldCBuO2ZvcihsZXQgaT0xO2k8PXRoaXMub3B0aW9ucy5tYXhBdHRlbXB0cztpKyspe3RoaXMudGhyb3dJZkFib3J0ZWQoKTt0cnl7bGV0IHM9YXdhaXQgZSgpO2lmKHMgaW5zdGFuY2VvZiBSZXNwb25zZSYmdGhpcy5zaG91bGRSZXRyeVJlc3BvbnNlKHMpKXtpZihpPT09dGhpcy5vcHRpb25zLm1heEF0dGVtcHRzKXJldHVybiBzO2F3YWl0IHRoaXMuY2FuY2VsUmVzcG9uc2VCb2R5KHMsYFJldHJ5aW5nIGFmdGVyIEhUVFAgJHtzLnN0YXR1c31gKTtsZXQgYT10aGlzLmNhbGN1bGF0ZURlbGF5KGkpO3RoaXMub3B0aW9ucy5vblJldHJ5KGksbmV3IEVycm9yKGBIVFRQICR7cy5zdGF0dXN9YCksYSksYXdhaXQgdGhpcy5kZWxheShhKTtjb250aW51ZX1yZXR1cm4gc31jYXRjaChzKXtpZih0aGlzLnNpZ25hbD8uYWJvcnRlZCl0aHJvdyB0aGlzLmdldEFib3J0RXJyb3IoKTtuPXMgaW5zdGFuY2VvZiBFcnJvcj9zOm5ldyBFcnJvcihTdHJpbmcocykpO2xldCBhPXI/cihzLGkpOnRoaXMuc2hvdWxkUmV0cnlFcnJvcihzKTtpZihpPT09dGhpcy5vcHRpb25zLm1heEF0dGVtcHRzfHwhYSl0aHJvdyBuO2xldCBsPXRoaXMuY2FsY3VsYXRlRGVsYXkoaSk7dGhpcy5vcHRpb25zLm9uUmV0cnkoaSxuLGwpLGF3YWl0IHRoaXMuZGVsYXkobCl9fXRocm93IG58fG5ldyBFcnJvcigiTWF4IHJldHJ5IGF0dGVtcHRzIHJlYWNoZWQiKX1hc3luYyBleGVjdXRlV2l0aEZhbGxiYWNrcyhlLHIsbil7aWYoZS5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiTm8gVVJMcyBwcm92aWRlZCBmb3IgZmFsbGJhY2sgZXhlY3V0aW9uIik7bGV0IGkscz1bXTtmb3IobGV0IGEgb2YgZSl7dGhpcy50aHJvd0lmQWJvcnRlZCgpO3RyeXtsZXQgbD1hd2FpdCB0aGlzLmV4ZWN1dGUoYXN5bmMoKT0+YXdhaXQgbihhLHIpKTtpZihsLnN0YXR1czw0MDB8fGwuc3RhdHVzPj00MDAmJmwuc3RhdHVzPDUwMCYmbC5zdGF0dXMhPT00MDgpcmV0dXJuIGw7YXdhaXQgdGhpcy5jYW5jZWxSZXNwb25zZUJvZHkobCxgVHJ5aW5nIGZhbGxiYWNrIGFmdGVyIEhUVFAgJHtsLnN0YXR1c31gKSxzLnB1c2goYSksaT1uZXcgRXJyb3IoYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzICR7bC5zdGF0dXN9YCl9Y2F0Y2gobCl7aWYodGhpcy5zaWduYWw/LmFib3J0ZWQpdGhyb3cgdGhpcy5nZXRBYm9ydEVycm9yKCk7cy5wdXNoKGEpLGk9bCBpbnN0YW5jZW9mIEVycm9yP2w6bmV3IEVycm9yKFN0cmluZyhsKSl9fXRocm93IG5ldyBFcnJvcihgQWxsIFVSTHMgZmFpbGVkOiAke3Muam9pbigiLCAiKX0uIExhc3QgZXJyb3I6ICR7aT8ubWVzc2FnZXx8IlVua25vd24gZXJyb3IifWApfXNob3VsZFJldHJ5UmVzcG9uc2UoZSl7bGV0IHI9dGhpcy5vcHRpb25zLnJldHJ5T247cmV0dXJuIHR5cGVvZiByPT0iZnVuY3Rpb24iP3IoZSk6QXJyYXkuaXNBcnJheShyKT9yLmluY2x1ZGVzKGUuc3RhdHVzKTohMX1zaG91bGRSZXRyeUVycm9yKGUpe2lmKGUgaW5zdGFuY2VvZiBUeXBlRXJyb3ImJmUubWVzc2FnZS5pbmNsdWRlcygiZmV0Y2giKXx8ZS5uYW1lPT09IkFib3J0RXJyb3IifHxlLm1lc3NhZ2UuaW5jbHVkZXMoInRpbWVvdXQiKSlyZXR1cm4hMDtsZXQgcj10aGlzLm9wdGlvbnMucmV0cnlPbjtyZXR1cm4gdHlwZW9mIHI9PSJmdW5jdGlvbiI/cih2b2lkIDAsZSk6ITF9Y2FsY3VsYXRlRGVsYXkoZSl7bGV0IG49clQodGhpcy5vcHRpb25zLmJhY2tvZmYpLmNhbGN1bGF0ZShlLHRoaXMub3B0aW9ucy5pbml0aWFsRGVsYXksdGhpcy5vcHRpb25zLm1heERlbGF5KTtyZXR1cm4gblQobil9YXN5bmMgZGVsYXkoZSl7aWYoIXRoaXMuc2lnbmFsKXthd2FpdCBsZS5kZWxheUZvcihlKTtyZXR1cm59aWYodGhpcy5zaWduYWwuYWJvcnRlZCl0aHJvdyB0aGlzLmdldEFib3J0RXJyb3IoKTtsZXQgcj1uZXcgbGUuVGltZW91dChlLG51bGwpLG4saT1uZXcgUHJvbWlzZSgoYSxsKT0+e249bH0pLHM9bygoKT0+e3IuY2FuY2VsKCksbih0aGlzLmdldEFib3J0RXJyb3IoKSl9LCJhYm9ydExpc3RlbmVyIik7dHJ5e3RoaXMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixzLHtvbmNlOiEwfSksdGhpcy5zaWduYWwuYWJvcnRlZCYmcygpLGF3YWl0IFByb21pc2UucmFjZShbci5wcm9taXNlLGldKX1maW5hbGx5e3IuY2FuY2VsKCksdGhpcy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHMpfX1hc3luYyBjYW5jZWxSZXNwb25zZUJvZHkoZSxyKXthd2FpdCBlLmJvZHk/LmNhbmNlbChyKS5jYXRjaCgoKT0+e30pfXRocm93SWZBYm9ydGVkKCl7aWYodGhpcy5zaWduYWw/LmFib3J0ZWQpdGhyb3cgdGhpcy5nZXRBYm9ydEVycm9yKCl9Z2V0QWJvcnRFcnJvcigpe2lmKHRoaXMuc2lnbmFsPy5yZWFzb24gaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gdGhpcy5zaWduYWwucmVhc29uO2xldCBlPW5ldyBFcnJvcigiVGhlIHJlcXVlc3Qgd2FzIGFib3J0ZWQiKTtyZXR1cm4gZS5uYW1lPSJBYm9ydEVycm9yIixlfX07dmFyIFlzPWNsYXNze3N0YXRpY3tvKHRoaXMsIlJlcXVlc3REZWR1cGxpY2F0b3IiKX1jb25zdHJ1Y3Rvcigpe3RoaXMuaW5GbGlnaHRSZXF1ZXN0cz1uZXcgTWFwfWdlbmVyYXRlS2V5KGUpe2xldCByPWUudXJsLG49ZS5tZXRob2Q7cmV0dXJuIG49PT0iR0VUInx8bj09PSJIRUFEIj9gJHtufToke3J9YDpgJHtufToke3J9OiR7RGF0ZS5ub3coKX1gfWFzeW5jIGV4ZWN1dGUoZSxyKXtsZXQgbj10aGlzLmluRmxpZ2h0UmVxdWVzdHMuZ2V0KGUpO2lmKG4pe2xldCBzPWF3YWl0IG4ucHJvbWlzZTtyZXR1cm57cmVzcG9uc2U6dGhpcy5jbG9uZVZhbHVlKHMpLHdhc0RlZHVwbGljYXRlZDohMH19bGV0IGk9Wi5kZWZlcigpO3RoaXMuaW5GbGlnaHRSZXF1ZXN0cy5zZXQoZSxpKTt0cnl7bGV0IHM9YXdhaXQgcigpO3JldHVybiBpLnJlc29sdmUocyksdGhpcy5pbkZsaWdodFJlcXVlc3RzLmRlbGV0ZShlKSx7cmVzcG9uc2U6cyx3YXNEZWR1cGxpY2F0ZWQ6ITF9fWNhdGNoKHMpe3Rocm93IGkucmVqZWN0KHMpLHRoaXMuaW5GbGlnaHRSZXF1ZXN0cy5kZWxldGUoZSksc319aXNJbkZsaWdodChlKXtyZXR1cm4gdGhpcy5pbkZsaWdodFJlcXVlc3RzLmhhcyhlKX1nZXRJbkZsaWdodENvdW50KCl7cmV0dXJuIHRoaXMuaW5GbGlnaHRSZXF1ZXN0cy5zaXplfWNsZWFyKCl7dGhpcy5pbkZsaWdodFJlcXVlc3RzLmNsZWFyKCl9Y2xvbmVWYWx1ZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFJlc3BvbnNlP2UuY2xvbmUoKTp7Li4uZSxyZXNwb25zZTplLnJlc3BvbnNlLmNsb25lKCl9fX07dmFyIGdvPWNsYXNze3N0YXRpY3tvKHRoaXMsIldlYnJlcXVlc3RDbGllbnQiKX1jb25zdHJ1Y3RvcihlPXt9KXt0aGlzLmNsb3NlUmVhc29uPW5ldyBFcnJvcigiV2VicmVxdWVzdCBjbGllbnQgaXMgY2xvc2VkIiksdGhpcy5kaXNwb3NlZD0hMSx0aGlzLmRlZmF1bHRPcHRpb25zPWUsdGhpcy5pbnRlcmNlcHRvck1hbmFnZXI9bmV3IEJzLHRoaXMuY2FjaGVNYW5hZ2VyPW5ldyBVcyx0aGlzLmRlZHVwbGljYXRvcj1uZXcgWXN9YWRkUmVxdWVzdEludGVyY2VwdG9yKGUpe3RoaXMuaW50ZXJjZXB0b3JNYW5hZ2VyLmFkZFJlcXVlc3RJbnRlcmNlcHRvcihlKX1hZGRSZXNwb25zZUludGVyY2VwdG9yKGUpe3RoaXMuaW50ZXJjZXB0b3JNYW5hZ2VyLmFkZFJlc3BvbnNlSW50ZXJjZXB0b3IoZSl9YWRkRXJyb3JJbnRlcmNlcHRvcihlKXt0aGlzLmludGVyY2VwdG9yTWFuYWdlci5hZGRFcnJvckludGVyY2VwdG9yKGUpfXJlbW92ZVJlcXVlc3RJbnRlcmNlcHRvcihlKXt0aGlzLmludGVyY2VwdG9yTWFuYWdlci5yZW1vdmVSZXF1ZXN0SW50ZXJjZXB0b3IoZSl9cmVtb3ZlUmVzcG9uc2VJbnRlcmNlcHRvcihlKXt0aGlzLmludGVyY2VwdG9yTWFuYWdlci5yZW1vdmVSZXNwb25zZUludGVyY2VwdG9yKGUpfXJlbW92ZUVycm9ySW50ZXJjZXB0b3IoZSl7dGhpcy5pbnRlcmNlcHRvck1hbmFnZXIucmVtb3ZlRXJyb3JJbnRlcmNlcHRvcihlKX1jbGVhckludGVyY2VwdG9ycygpe3RoaXMuaW50ZXJjZXB0b3JNYW5hZ2VyLmNsZWFyQWxsKCl9YXN5bmMgY2xlYXJDYWNoZSgpe2F3YWl0IHRoaXMuY2FjaGVNYW5hZ2VyLmNsZWFyKCl9YXN5bmMgZGVsZXRlQ2FjaGUoZSl7YXdhaXQgdGhpcy5jYWNoZU1hbmFnZXIuZGVsZXRlKGUpfWFzeW5jIHJlcXVlc3QoZSxyPXt9KXtyZXR1cm4oYXdhaXQgdGhpcy5yZXF1ZXN0V2l0aE1ldGFkYXRhKGUscikpLnJlc3BvbnNlfWFzeW5jIHJlcXVlc3RXaXRoTWV0YWRhdGEoZSxyPXt9KXtpZih0aGlzLmRpc3Bvc2VkKXRocm93IHRoaXMuY2xvc2VSZWFzb247bGV0IG49ey4uLnRoaXMuZGVmYXVsdE9wdGlvbnMsLi4ucn0saTtpZih0eXBlb2YgZT09InN0cmluZyI/aT1uZXcgUmVxdWVzdChlLG4pOmk9ZSxpPWF3YWl0IHRoaXMuaW50ZXJjZXB0b3JNYW5hZ2VyLnByb2Nlc3NSZXF1ZXN0KGkpLG4uaW50ZXJjZXB0b3JzPy5yZXF1ZXN0KWZvcihsZXQgYSBvZiBuLmludGVyY2VwdG9ycy5yZXF1ZXN0KWk9YXdhaXQgYShpKTtpZihuLmRlZHVwbGljYXRlPz8hMSl7bGV0IGE9dGhpcy5kZWR1cGxpY2F0b3IuZ2VuZXJhdGVLZXkoaSk7cmV0dXJuKGF3YWl0IHRoaXMuZGVkdXBsaWNhdG9yLmV4ZWN1dGUoYSxhc3luYygpPT5hd2FpdCB0aGlzLmV4ZWN1dGVSZXF1ZXN0KGksbikpKS5yZXNwb25zZX1yZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdChpLG4pfWFzeW5jIGV4ZWN1dGVSZXF1ZXN0KGUscil7dHJ5e2xldCBuPXR5cGVvZiByLnJldHJ5PT0ib2JqZWN0Ij9yLnJldHJ5OnIucmV0cnk/e306dm9pZCAwLGk9byhhc3luYyBjPT57bGV0IHU9ci50aW1lb3V0Pz82ZTQsZj17Li4ucn07cmV0dXJuIGRlbGV0ZSBmLmJvZHksZGVsZXRlIGYuaGVhZGVycyxkZWxldGUgZi5tZXRob2QsZGVsZXRlIGYuc2lnbmFsLGF3YWl0IEpnKGMsey4uLmYsc2lnbmFsOmMuc2lnbmFsfSx1KX0sImZldGNoRm5Gb3JSZXF1ZXN0Iikscz1vKGFzeW5jKGMsdSk9PntsZXQgZj1yLnRpbWVvdXQ/PzZlNDtyZXR1cm4gYXdhaXQgSmcoYyx1LGYpfSwiZmV0Y2hGbkZvckZhbGxiYWNrcyIpLGE7aWYobil7bGV0IGM9bmV3IFZzKG4sci5zaWduYWwpO2lmKHIuZmFsbGJhY2tVcmxzJiZyLmZhbGxiYWNrVXJscy5sZW5ndGg+MCl7bGV0IHU9W2UudXJsLC4uLnIuZmFsbGJhY2tVcmxzXTthPXtyZXNwb25zZTphd2FpdCBjLmV4ZWN1dGVXaXRoRmFsbGJhY2tzKHUse21ldGhvZDplLm1ldGhvZCxoZWFkZXJzOmUuaGVhZGVycyxib2R5OmUuYm9keSwuLi5yfSxzKSxmcm9tQ2FjaGU6ITEscmV2YWxpZGF0ZWQ6ITF9fWVsc2V7bGV0IHUsZj1hd2FpdCBjLmV4ZWN1dGUoYXN5bmMoKT0+e2xldCBwPWF3YWl0IHRoaXMuY2FjaGVNYW5hZ2VyLmV4ZWN1dGUoZSxyLGkpO3JldHVybiB1PXAscC5yZXNwb25zZX0pO2E9dT8ucmVzcG9uc2U9PT1mP3U6e3Jlc3BvbnNlOmYsZnJvbUNhY2hlOiExLHJldmFsaWRhdGVkOiExfX19ZWxzZSBhPWF3YWl0IHRoaXMuY2FjaGVNYW5hZ2VyLmV4ZWN1dGUoZSxyLGkpO2xldCBsPWF3YWl0IHRoaXMuaW50ZXJjZXB0b3JNYW5hZ2VyLnByb2Nlc3NSZXNwb25zZShhLnJlc3BvbnNlKTtpZihyLmludGVyY2VwdG9ycz8ucmVzcG9uc2UpZm9yKGxldCBjIG9mIHIuaW50ZXJjZXB0b3JzLnJlc3BvbnNlKWw9YXdhaXQgYyhsKTtyZXR1cm4gSkwobCxhKX1jYXRjaChuKXt0aHJvdyBhd2FpdCB0aGlzLmludGVyY2VwdG9yTWFuYWdlci5wcm9jZXNzRXJyb3IobiBpbnN0YW5jZW9mIEVycm9yP246bmV3IEVycm9yKFN0cmluZyhuKSkpfX1hc3luYyBjbG9zZSgpe3JldHVybiB0aGlzLmNsb3NlUHJvbWlzZT90aGlzLmNsb3NlUHJvbWlzZToodGhpcy5kaXNwb3NlZD0hMCx0aGlzLmNsb3NlUHJvbWlzZT10aGlzLmNhY2hlTWFuYWdlci5jbG9zZSgpLHRoaXMuY2xvc2VQcm9taXNlKX1hc3luYyByZXF1ZXN0SnNvbldpdGhNZXRhZGF0YShlLHIpe2xldCBuPXsuLi50aGlzLmRlZmF1bHRPcHRpb25zLC4uLnJ9LGk9bi50aW1lb3V0Pz82ZTQscz1uLnJldHJ5P3ZvaWQgMDpwZXJmb3JtYW5jZS5ub3coKStpLGE9cz09PXZvaWQgMD92b2lkIDA6bmV3IEFib3J0Q29udHJvbGxlcixsPWE/bi5zaWduYWw/QWJvcnRTaWduYWwuYW55KFtuLnNpZ25hbCxhLnNpZ25hbF0pOmEuc2lnbmFsOm4uc2lnbmFsLGM9YT09PXZvaWQgMD92b2lkIDA6c2V0VGltZW91dCgoKT0+e2EuYWJvcnQoU2koZSxpKSl9LE1hdGgubWF4KDAsaSkpO3RyeXtsZXQgdT1hd2FpdCB0aGlzLnJlcXVlc3RXaXRoTWV0YWRhdGEoZSx7Li4ucixzaWduYWw6bH0pLGY9dS5yZXNwb25zZTtpZihsPy5hYm9ydGVkKXRocm93IGF3YWl0IGYuYm9keT8uY2FuY2VsKGwucmVhc29uKS5jYXRjaCgoKT0+e30pLGwucmVhc29uIGluc3RhbmNlb2YgRXJyb3I/bC5yZWFzb246bmV3IEVycm9yKCJUaGUgcmVxdWVzdCB3YXMgYWJvcnRlZCIpO2lmKCFmLm9rKXRocm93IGF3YWl0IGYuYm9keT8uY2FuY2VsKGBIVFRQICR7Zi5zdGF0dXN9YCkuY2F0Y2goKCk9Pnt9KSxuZXcgRXJyb3IoYEhUVFAgJHtmLnN0YXR1c306ICR7Zi5zdGF0dXNUZXh0fWApO2xldCBwPXM9PT12b2lkIDA/aTpzLXBlcmZvcm1hbmNlLm5vdygpLGg9YXdhaXQgWjEoZix7Ym9keVRpbWVvdXRNczpwLHJlcG9ydGVkVGltZW91dE1zOmksc2lnbmFsOmwsdXJsOmV9KTtyZXR1cm4gT2JqZWN0LmZyZWV6ZSh7ZGF0YTpoLHJlc3BvbnNlOmYsbWV0YWRhdGE6dS5tZXRhZGF0YX0pfWNhdGNoKHUpe3Rocm93IGw/LmFib3J0ZWQmJmwucmVhc29uIGluc3RhbmNlb2YgRXJyb3I/bC5yZWFzb246dX1maW5hbGx5e2MhPT12b2lkIDAmJmNsZWFyVGltZW91dChjKX19YXN5bmMgZ2V0SnNvbihlLHI9e30pe3JldHVybihhd2FpdCB0aGlzLmdldEpzb25XaXRoTWV0YWRhdGEoZSxyKSkuZGF0YX1hc3luYyBnZXRKc29uV2l0aE1ldGFkYXRhKGUscj17fSl7cmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdEpzb25XaXRoTWV0YWRhdGEoZSx7Li4ucixtZXRob2Q6IkdFVCIsaGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwuLi5yLmhlYWRlcnN8fHt9fX0pfWFzeW5jIHBvc3RKc29uKGUscixuPXt9KXtyZXR1cm4oYXdhaXQgdGhpcy5wb3N0SnNvbldpdGhNZXRhZGF0YShlLHIsbikpLmRhdGF9YXN5bmMgcG9zdEpzb25XaXRoTWV0YWRhdGEoZSxyLG49e30pe3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3RKc29uV2l0aE1ldGFkYXRhKGUsey4uLm4sbWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiIsQWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwuLi5uLmhlYWRlcnN8fHt9fSxib2R5OkpTT04uc3RyaW5naWZ5KHIpfSl9YXN5bmMgcHV0SnNvbihlLHIsbj17fSl7cmV0dXJuKGF3YWl0IHRoaXMucHV0SnNvbldpdGhNZXRhZGF0YShlLHIsbikpLmRhdGF9YXN5bmMgcHV0SnNvbldpdGhNZXRhZGF0YShlLHIsbj17fSl7cmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdEpzb25XaXRoTWV0YWRhdGEoZSx7Li4ubixtZXRob2Q6IlBVVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24iLEFjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsLi4ubi5oZWFkZXJzfHx7fX0sYm9keTpKU09OLnN0cmluZ2lmeShyKX0pfWFzeW5jIGRlbGV0ZUpzb24oZSxyPXt9KXtyZXR1cm4oYXdhaXQgdGhpcy5kZWxldGVKc29uV2l0aE1ldGFkYXRhKGUscikpLmRhdGF9YXN5bmMgZGVsZXRlSnNvbldpdGhNZXRhZGF0YShlLHI9e30pe3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3RKc29uV2l0aE1ldGFkYXRhKGUsey4uLnIsbWV0aG9kOiJERUxFVEUiLGhlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsLi4uci5oZWFkZXJzfHx7fX19KX19LEpMPW8oKHQsZSk9PntsZXQgcj1PYmplY3QuZnJlZXplKHtmcm9tQ2FjaGU6ZS5mcm9tQ2FjaGUscmV2YWxpZGF0ZWQ6ZS5yZXZhbGlkYXRlZH0pO3JldHVybiBPYmplY3QuZnJlZXplKHtyZXNwb25zZTp0LG1ldGFkYXRhOnJ9KX0sImNyZWF0ZVJlc3BvbnNlUmVzdWx0Iik7dmFyIE90PW5ldyBnbzthc3luYyBmdW5jdGlvbiBtdCh0LGUpe2xldCByPXQgaW5zdGFuY2VvZiBSZXF1ZXN0P3QudXJsOlN0cmluZyh0KSxuPXQgaW5zdGFuY2VvZiBSZXF1ZXN0P3Q6bmV3IFJlcXVlc3QocixlKTtyZXR1cm4gYXdhaXQgT3QucmVxdWVzdChuLGUpfW8obXQsIndlYnJlcXVlc3QiKSxtdC5yZXF1ZXN0V2l0aE1ldGFkYXRhPWFzeW5jIGZ1bmN0aW9uKHQsZSl7bGV0IHI9dCBpbnN0YW5jZW9mIFJlcXVlc3Q/dC51cmw6U3RyaW5nKHQpLG49dCBpbnN0YW5jZW9mIFJlcXVlc3Q/dDpuZXcgUmVxdWVzdChyLGUpO3JldHVybiBhd2FpdCBPdC5yZXF1ZXN0V2l0aE1ldGFkYXRhKG4sZSl9LG10LmdldEpzb249YXN5bmMgZnVuY3Rpb24odCxlKXtyZXR1cm4gYXdhaXQgT3QuZ2V0SnNvbih0LGUpfSxtdC5nZXRKc29uV2l0aE1ldGFkYXRhPWFzeW5jIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGF3YWl0IE90LmdldEpzb25XaXRoTWV0YWRhdGEodCxlKX0sbXQucG9zdEpzb249YXN5bmMgZnVuY3Rpb24odCxlLHIpe3JldHVybiBhd2FpdCBPdC5wb3N0SnNvbih0LGUscil9LG10LnBvc3RKc29uV2l0aE1ldGFkYXRhPWFzeW5jIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYXdhaXQgT3QucG9zdEpzb25XaXRoTWV0YWRhdGEodCxlLHIpfSxtdC5wdXRKc29uPWFzeW5jIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYXdhaXQgT3QucHV0SnNvbih0LGUscil9LG10LnB1dEpzb25XaXRoTWV0YWRhdGE9YXN5bmMgZnVuY3Rpb24odCxlLHIpe3JldHVybiBhd2FpdCBPdC5wdXRKc29uV2l0aE1ldGFkYXRhKHQsZSxyKX0sbXQuZGVsZXRlSnNvbj1hc3luYyBmdW5jdGlvbih0LGUpe3JldHVybiBhd2FpdCBPdC5kZWxldGVKc29uKHQsZSl9LG10LmRlbGV0ZUpzb25XaXRoTWV0YWRhdGE9YXN5bmMgZnVuY3Rpb24odCxlKXtyZXR1cm4gYXdhaXQgT3QuZGVsZXRlSnNvbldpdGhNZXRhZGF0YSh0LGUpfSxtdC5hZGRSZXF1ZXN0SW50ZXJjZXB0b3I9ZnVuY3Rpb24odCl7T3QuYWRkUmVxdWVzdEludGVyY2VwdG9yKHQpfSxtdC5hZGRSZXNwb25zZUludGVyY2VwdG9yPWZ1bmN0aW9uKHQpe090LmFkZFJlc3BvbnNlSW50ZXJjZXB0b3IodCl9LG10LmFkZEVycm9ySW50ZXJjZXB0b3I9ZnVuY3Rpb24odCl7T3QuYWRkRXJyb3JJbnRlcmNlcHRvcih0KX0sbXQuY2xlYXJJbnRlcmNlcHRvcnM9ZnVuY3Rpb24oKXtPdC5jbGVhckludGVyY2VwdG9ycygpfSxtdC5jbGVhckNhY2hlPWFzeW5jIGZ1bmN0aW9uKCl7YXdhaXQgT3QuY2xlYXJDYWNoZSgpfSxtdC5jcmVhdGVDbGllbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBnbyh0KX0sbXQuZ2V0RGVmYXVsdENsaWVudD1mdW5jdGlvbigpe3JldHVybiBPdH07dmFyIEJsPWRyKHRsKCksMSk7dmFyIEtMPTFlNCxpVD1uZXcgV2Vha1NldCxvVD1uZXcgV2Vha01hcCxueT1vKHQ9PntpVC5hZGQodCl9LCJhdXRob3JpemVWaXJ0dWFsU3RyZWFtQXBwbGljYXRpb25Vc2UiKSx5bz1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIlZpcnR1YWxTdHJlYW1DbG9zZWRFcnJvciIpfWNvbnN0cnVjdG9yKGU9IlZpcnR1YWxTdHJlYW0gaXMgY2xvc2VkIixyKXtzdXBlcihlLHIpLHRoaXMubmFtZT0iVmlydHVhbFN0cmVhbUNsb3NlZEVycm9yIn19LHhvPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiVmlydHVhbFN0cmVhbU9wZW5UaW1lb3V0RXJyb3IiKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGU+MD9gVmlydHVhbFN0cmVhbSB0cmFuc3BvcnQgc3RhZ2luZyB0aW1lZCBvdXQgYWZ0ZXIgJHtlfW1zYDoiVmlydHVhbFN0cmVhbSB0cmFuc3BvcnQgc3RhZ2luZyBkZWFkbGluZSBpcyBleGhhdXN0ZWQiKSx0aGlzLnRpbWVvdXRNcz1lLHRoaXMuZGVhZGxpbmVBdD1yLHRoaXMubmFtZT0iVmlydHVhbFN0cmVhbU9wZW5UaW1lb3V0RXJyb3IifX0sS3A9Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJWaXJ0dWFsU3RyZWFtTGlmZWN5Y2xlQ29udHJhY3RFcnJvciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGBWaXJ0dWFsU3RyZWFtIGVuZHBvaW50IGNsb3NlZCBiZWZvcmUgdGVybWluYWwgJHtlfSBwcm9kdWNlZCBhIHJlY2VpcHRgKSx0aGlzLm5hbWU9IlZpcnR1YWxTdHJlYW1MaWZlY3ljbGVDb250cmFjdEVycm9yIn19LEFuPWNsYXNze3N0YXRpY3tvKHRoaXMsIlZpcnR1YWxTdHJlYW1BY3RpdmF0aW9uU2NvcGUiKX1jb25zdHJ1Y3Rvcigpe3RoaXMudHJhY2tlZFN0cmVhbXM9bmV3IFNldCx0aGlzLmhhc0F1dGhvcml6ZWRUcmFja2VkU3RyZWFtcz0hMSx0aGlzLnB1Ymxpc2hlZD0hMSx0aGlzLnNldHRsZWQ9ITF9dHJhY2soZSl7aWYodGhpcy5zZXR0bGVkKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHRyYWNrIGEgVmlydHVhbFN0cmVhbSBpbiBhIHNldHRsZWQgYWN0aXZhdGlvbiBzY29wZSIpO2xldCByPW9ULmdldChlKTtpZihyJiZyIT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIlZpcnR1YWxTdHJlYW0gaXMgYWxyZWFkeSBvd25lZCBieSBhbm90aGVyIGFjdGl2YXRpb24gc2NvcGUiKTtyfHxvVC5zZXQoZSx0aGlzKSx0aGlzLnRyYWNrZWRTdHJlYW1zLmFkZChlKSx0aGlzLmhhc0F1dGhvcml6ZWRUcmFja2VkU3RyZWFtcyYmbnkoZSksdGhpcy5wdWJsaXNoZWQmJmUucHVibGlzaEFjdGl2YXRpb24oKX1hdXRob3JpemVBcHBsaWNhdGlvblVzZSgpe2lmKCEodGhpcy5zZXR0bGVkfHx0aGlzLmhhc0F1dGhvcml6ZWRUcmFja2VkU3RyZWFtcykpe3RoaXMuaGFzQXV0aG9yaXplZFRyYWNrZWRTdHJlYW1zPSEwO2ZvcihsZXQgZSBvZiB0aGlzLnRyYWNrZWRTdHJlYW1zKW55KGUpfX1wdWJsaXNoKCl7aWYoISh0aGlzLnNldHRsZWR8fHRoaXMucHVibGlzaGVkKSl7dGhpcy5wdWJsaXNoZWQ9ITA7Zm9yKGxldCBlIG9mIHRoaXMudHJhY2tlZFN0cmVhbXMpZS5wdWJsaXNoQWN0aXZhdGlvbigpfX1jb21taXQoKXt0aGlzLnB1Ymxpc2goKSx0aGlzLnNldHRsZWQ9ITAsdGhpcy50cmFja2VkU3RyZWFtcy5jbGVhcigpfWFzeW5jIHJvbGxiYWNrKGUpe2lmKHRoaXMuc2V0dGxlZClyZXR1cm47dGhpcy5zZXR0bGVkPSEwO2xldCByPVsuLi50aGlzLnRyYWNrZWRTdHJlYW1zXTt0aGlzLnRyYWNrZWRTdHJlYW1zLmNsZWFyKCksYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHIubWFwKG49Pm4ucm9sbGJhY2tBY3RpdmF0aW9uKGUpKSl9fSwkcj1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIlZpcnR1YWxTdHJlYW0iKX1zdGF0aWN7dGhpcy5tYXhpbXVtU3RyZWFtSWRMZW5ndGg9MjU2fXN0YXRpYyBmcm9tUmVnaXN0cmF0aW9uKGUpe2xldCByPWUucmVnaXN0cmF0aW9uPy5kaXNwb3NlLG49bygoKT0+e2xldCBpPXI7cj12b2lkIDAsaT8uKCl9LCJkaXNwb3NlT25jZSIpO3RyeXtpZih0LnZhbGlkYXRlVHJhbnNwb3J0KGUudHJhbnNwb3J0KSx0eXBlb2YgZS5yZWdpc3RyYXRpb24/LmRpc3Bvc2UhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVmlydHVhbFN0cmVhbSByZWdpc3RyYXRpb24gcmVxdWlyZXMgYSBzeW5jaHJvbm91cyBkaXNwb3NlciIpO3JldHVybiB0LnZhbGlkYXRlTmV0d29ya0Rlc2NyaXB0b3IoZS5yZWdpc3RyYXRpb24uZGVzY3JpcHRvciksdC52YWxpZGF0ZUVuZHBvaW50KGUucmVnaXN0cmF0aW9uLmVuZHBvaW50LGUucmVnaXN0cmF0aW9uLmRlc2NyaXB0b3IsZS5yZWdpc3RyYXRpb24uZGVzY3JpcHRvci5jcmVhdG9yRGlyZWN0aW9uKSxuZXcgdCh7dHJhbnNwb3J0OmUudHJhbnNwb3J0LGRlc2NyaXB0b3I6ZS5yZWdpc3RyYXRpb24uZGVzY3JpcHRvcixlbmRwb2ludDplLnJlZ2lzdHJhdGlvbi5lbmRwb2ludCxyZWdpc3RyYXRpb25EaXNwb3NlOm4sZXhwbGljaXRSZWdpc3RyYXRpb246ITB9KX1jYXRjaChpKXt0aHJvdyBuKCksaX19c3RhdGljIGVuY29kZVBheWxvYWRGb3JOZXR3b3JrKGUscil7bGV0IG49ZT8uY29ycmVsYXRpb24/LnBoYXNlPT09InJlc3BvbnNlIjtyZXR1cm4gdC5lbmNvZGVQYXlsb2FkVmFsdWUoZSxyLG4sITEsITAse3N0YW5kYXJkOm5ldyBXZWFrTWFwLG9taXR0aW5nUmVzcG9uc2VSZXF1ZXN0U3RyZWFtczpuZXcgV2Vha01hcH0pfXN0YXRpYyBlbmNvZGVQYXlsb2FkRm9yTmV0d29ya1dpdGhNZXRhZGF0YShlLHIpe2xldCBuPWU/LmNvcnJlbGF0aW9uPy5waGFzZT09PSJyZXNwb25zZSIsaT17c3RhbmRhcmQ6bmV3IFdlYWtNYXAsb21pdHRpbmdSZXNwb25zZVJlcXVlc3RTdHJlYW1zOm5ldyBXZWFrTWFwLGNvbnRhaW5zTmV0d29ya0Rlc2NyaXB0b3I6ITEscmVxdWlyZXNOZXR3b3JrRGVzY3JpcHRvclNjYW46ITF9LHM9dC5lbmNvZGVQYXlsb2FkVmFsdWUoZSxyLG4sITEsITAsaSksYT1pLnJlcXVpcmVzTmV0d29ya0Rlc2NyaXB0b3JTY2FufHx0LmVuY29kZWRDb250YWluZXJQcm90b3R5cGVzTWF5RXhwb3NlTmV0d29ya0Rlc2NyaXB0b3IoKTtyZXR1cm57cGF5bG9hZDpzLGNvbnRhaW5zTmV0d29ya0Rlc2NyaXB0b3I6YT90LmNvbnRhaW5zTmV0d29ya0Rlc2NyaXB0b3Iocyk6aS5jb250YWluc05ldHdvcmtEZXNjcmlwdG9yfX1zdGF0aWMgZW5jb2RlUGF5bG9hZFZhbHVlKGUscixuLGkscyxhKXtpZighZXx8bnIuaXNCdWZmZXJMaWtlKGUpKXJldHVybiBlO2lmKGUgaW5zdGFuY2VvZiB0KXJldHVybiBpP3tfT01JVFRFRF9WSVJUVUFMX1NUUkVBTTohMCxyZWFzb246IlN0cmVhbXMgYmVuZWF0aCBhbiBlY2hvZWQgcmVzcG9uc2UucmVxdWVzdCBhcmUgb21pdHRlZC4ifTooYS5jb250YWluc05ldHdvcmtEZXNjcmlwdG9yIT09dm9pZCAwJiYoYS5jb250YWluc05ldHdvcmtEZXNjcmlwdG9yPSEwKSxlLmFjdGl2YXRlRm9yRW5jb2RpbmcocikpO2lmKGUgaW5zdGFuY2VvZiBTZXR8fGUgaW5zdGFuY2VvZiBNYXB8fGUgaW5zdGFuY2VvZiBEYXRlfHxlIGluc3RhbmNlb2YgUmVnRXhwfHxlIGluc3RhbmNlb2YgRXJyb3J8fGUgaW5zdGFuY2VvZiBQcm9taXNlfHx0eXBlb2YgZS50aGVuPT0iZnVuY3Rpb24iKXJldHVybiBhLmNvbnRhaW5zTmV0d29ya0Rlc2NyaXB0b3IhPT12b2lkIDAmJnR5cGVvZiBlPT0ib2JqZWN0IiYmKGEucmVxdWlyZXNOZXR3b3JrRGVzY3JpcHRvclNjYW49ITApLGU7aWYodHlwZW9mIGUhPSJvYmplY3QiKXJldHVybiBlO2xldCBjPWk/YS5vbWl0dGluZ1Jlc3BvbnNlUmVxdWVzdFN0cmVhbXM6YS5zdGFuZGFyZCx1PWMuZ2V0KGUpO2lmKHUpcmV0dXJuIHU7aWYoQXJyYXkuaXNBcnJheShlKSl7bGV0IHA9W107Yy5zZXQoZSxwKTtmb3IobGV0IGg9MDtoPGUubGVuZ3RoO2grKylwLnB1c2godC5lbmNvZGVQYXlsb2FkVmFsdWUoZVtoXSxyLG4saSwhMSxhKSk7cmV0dXJuIGEuY29udGFpbnNOZXR3b3JrRGVzY3JpcHRvciE9PXZvaWQgMCYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHApIT09QXJyYXkucHJvdG90eXBlJiYoYS5yZXF1aXJlc05ldHdvcmtEZXNjcmlwdG9yU2Nhbj0hMCkscH1sZXQgZj17fTtjLnNldChlLGYpO2ZvcihsZXQgcCBvZiBPYmplY3Qua2V5cyhlKSl7bGV0IGg9aXx8biYmcyYmcD09PSJyZXF1ZXN0IjtmW3BdPXQuZW5jb2RlUGF5bG9hZFZhbHVlKGVbcF0scixuLGgsITEsYSl9cmV0dXJuIGEuY29udGFpbnNOZXR3b3JrRGVzY3JpcHRvciE9PXZvaWQgMCYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGYpIT09T2JqZWN0LnByb3RvdHlwZSYmKGEucmVxdWlyZXNOZXR3b3JrRGVzY3JpcHRvclNjYW49ITApLGEuY29udGFpbnNOZXR3b3JrRGVzY3JpcHRvciE9PXZvaWQgMCYmT2JqZWN0Lmhhc093bihmLCJfaXNWaXJ0dWFsU3RyZWFtIikmJmYuX2lzVmlydHVhbFN0cmVhbT09PSEwJiYoYS5jb250YWluc05ldHdvcmtEZXNjcmlwdG9yPSEwKSxmfXN0YXRpYyBhc3luYyBkZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmtBc3luYyhlLHIpe2xldCBuPW5ldyBNYXAsaT1bXSxzPVtdLGE9ci5hY3RpdmF0aW9uU2NvcGU/P25ldyBBbixsPSFyLmFjdGl2YXRpb25TY29wZSxjPXQucmVzb2x2ZU9wZW5EZWFkbGluZUF0KHIub3BlbkRlYWRsaW5lQXQpO3RyeXtsZXQgdT10LnByZXBhcmVQYXlsb2FkRnJvbU5ldHdvcmsoZSx7Li4ucixhY3RpdmF0aW9uU2NvcGU6YX0sbixpLHMsbmV3IFdlYWtNYXApO2lmKGkubGVuZ3RoPjApe2xldCBmPXIudmlydHVhbFN0cmVhbVRyYW5zcG9ydDtpZighZil0aHJvdyBuZXcgRXJyb3IoIlZpcnR1YWxTdHJlYW0gZGVzY3JpcHRvciByZXF1aXJlcyBhIHZpcnR1YWwgc3RyZWFtIHRyYW5zcG9ydCIpO3QudmFsaWRhdGVUcmFuc3BvcnQoZik7Zm9yKGxldCBwIG9mIGkpe2xldCBoPXQuZ2V0UmVtYWluaW5nT3BlblRpbWVvdXRNcyhjKSxkPWF3YWl0IHQub3BlblZpcnR1YWxTdHJlYW1XaXRoVGltZW91dChmLHAuZGVzY3JpcHRvcixoLGMsci5hYm9ydFNpZ25hbCk7cC5zdHJlYW0uYmluZE9wZW5lZEVuZHBvaW50KGQpfX1yZXR1cm4gbCYmKGEuYXV0aG9yaXplQXBwbGljYXRpb25Vc2UoKSxhLmNvbW1pdCgpKSx1fWNhdGNoKHUpe3Rocm93IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChzLm1hcChmPT5mLnJvbGxiYWNrQWN0aXZhdGlvbih1KSkpLHV9fXN0YXRpYyBjb250YWluc05ldHdvcmtEZXNjcmlwdG9yKGUscj1uZXcgV2Vha1NldCl7cmV0dXJuIWV8fG5yLmlzQnVmZmVyTGlrZShlKXx8dHlwZW9mIGUhPSJvYmplY3QiPyExOmUuX2lzVmlydHVhbFN0cmVhbT09PSEwPyEwOnIuaGFzKGUpPyExOihyLmFkZChlKSxBcnJheS5pc0FycmF5KGUpP2Uuc29tZShuPT50LmNvbnRhaW5zTmV0d29ya0Rlc2NyaXB0b3IobixyKSk6ZSBpbnN0YW5jZW9mIFNldHx8ZSBpbnN0YW5jZW9mIE1hcHx8ZSBpbnN0YW5jZW9mIERhdGV8fGUgaW5zdGFuY2VvZiBSZWdFeHB8fGUgaW5zdGFuY2VvZiBFcnJvcnx8ZSBpbnN0YW5jZW9mIFByb21pc2V8fHR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiI/ITE6T2JqZWN0LnZhbHVlcyhlKS5zb21lKG49PnQuY29udGFpbnNOZXR3b3JrRGVzY3JpcHRvcihuLHIpKSl9c3RhdGljIGVuY29kZWRDb250YWluZXJQcm90b3R5cGVzTWF5RXhwb3NlTmV0d29ya0Rlc2NyaXB0b3IoKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5wcm90b3R5cGUpIT09bnVsbHx8T2JqZWN0LmdldFByb3RvdHlwZU9mKEFycmF5LnByb3RvdHlwZSkhPT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsIl9pc1ZpcnR1YWxTdHJlYW0iKSE9PXZvaWQgMHx8T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihBcnJheS5wcm90b3R5cGUsIl9pc1ZpcnR1YWxTdHJlYW0iKSE9PXZvaWQgMH1zdGF0aWMgcHJlcGFyZVBheWxvYWRGcm9tTmV0d29yayhlLHIsbixpLHMsYSl7aWYobnIuaXNCdWZmZXJMaWtlKGUpfHxlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QifHxlIGluc3RhbmNlb2YgU2V0fHxlIGluc3RhbmNlb2YgTWFwfHxlIGluc3RhbmNlb2YgRGF0ZXx8ZSBpbnN0YW5jZW9mIFJlZ0V4cHx8ZSBpbnN0YW5jZW9mIEVycm9yfHxlIGluc3RhbmNlb2YgUHJvbWlzZXx8dHlwZW9mIGUudGhlbj09ImZ1bmN0aW9uIilyZXR1cm4gZTtpZihlLl9pc1ZpcnR1YWxTdHJlYW09PT0hMCl7dC52YWxpZGF0ZU5ldHdvcmtEZXNjcmlwdG9yKGUpO2xldCB1PWUsZj1uLmdldCh1LnN0cmVhbUlkKTtpZihmKXtpZighdC5kZXNjcmlwdG9yTWV0YWRhdGFNYXRjaGVzKGYuZGVzY3JpcHRvcix1KSl0aHJvdyBuZXcgVHlwZUVycm9yKGBDb25mbGljdGluZyBWaXJ0dWFsU3RyZWFtIG1ldGFkYXRhIGZvciBzdHJlYW1JZCAiJHt1LnN0cmVhbUlkfSJgKTtyZXR1cm4gZi5zdHJlYW19bGV0IHA9ci52aXJ0dWFsU3RyZWFtVHJhbnNwb3J0LGg9bmV3IHQoe3RyYW5zcG9ydDpwLGRlc2NyaXB0b3I6dSxleHBsaWNpdFJlZ2lzdHJhdGlvbjohMX0pO3JldHVybiBuLnNldCh1LnN0cmVhbUlkLHtzdHJlYW06aCxkZXNjcmlwdG9yOnV9KSxpLnB1c2goe3N0cmVhbTpoLGRlc2NyaXB0b3I6dX0pLHMucHVzaChoKSxyLmFjdGl2YXRpb25TY29wZT8udHJhY2soaCksaH1sZXQgbD1hLmdldChlKTtpZihsKXJldHVybiBsO2lmKEFycmF5LmlzQXJyYXkoZSkpe2xldCB1PVtdO2Euc2V0KGUsdSk7Zm9yKGxldCBmIG9mIGUpdS5wdXNoKHQucHJlcGFyZVBheWxvYWRGcm9tTmV0d29yayhmLHIsbixpLHMsYSkpO3JldHVybiB1fWxldCBjPXt9O2Euc2V0KGUsYyk7Zm9yKGxldCB1IG9mIE9iamVjdC5rZXlzKGUpKU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLHUse3ZhbHVlOnQucHJlcGFyZVBheWxvYWRGcm9tTmV0d29yayhlW3VdLHIsbixpLHMsYSksY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITB9KTtyZXR1cm4gY31zdGF0aWMgcmVzb2x2ZU9wZW5EZWFkbGluZUF0KGUpe2xldCByPXBlcmZvcm1hbmNlLm5vdygpK0tMO2lmKGU9PT12b2lkIDApcmV0dXJuIHI7aWYoIU51bWJlci5pc0Zpbml0ZShlKXx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJWaXJ0dWFsU3RyZWFtIG9wZW5EZWFkbGluZUF0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIG51bWJlciIpO3JldHVybiBNYXRoLm1pbihlLHIpfXN0YXRpYyBnZXRSZW1haW5pbmdPcGVuVGltZW91dE1zKGUpe2xldCByPU1hdGguY2VpbChlLXBlcmZvcm1hbmNlLm5vdygpKTtpZighTnVtYmVyLmlzU2FmZUludGVnZXIocil8fHI8PTApdGhyb3cgbmV3IHhvKDAsZSk7cmV0dXJuIHJ9c3RhdGljIGFzeW5jIG9wZW5WaXJ0dWFsU3RyZWFtV2l0aFRpbWVvdXQoZSxyLG4saSxzKXtsZXQgYT1uZXcgeG8obixpKSxsPW5ldyBBYm9ydENvbnRyb2xsZXIsYyx1LGYscD1Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5lLm9wZW5WaXJ0dWFsU3RyZWFtKHIse2Fib3J0U2lnbmFsOmwuc2lnbmFsLHRpbWVvdXRNczpufSkpO3AudGhlbihhc3luYyBkPT57YyE9PXZvaWQgMCYmYXdhaXQgdC5hYm9ydExhdGVPcGVuZWRFbmRwb2ludChkLGMpfSwoKT0+e30pO2xldCBoPW5ldyBQcm9taXNlKChkLG0pPT57dT1zZXRUaW1lb3V0KCgpPT57Yz1hLGwuYWJvcnQoYSksbShhKX0sbikscyYmKGY9bygoKT0+e2xldCBnPXMucmVhc29uPz9uZXcgRE9NRXhjZXB0aW9uKCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkIiwiQWJvcnRFcnJvciIpO2M9ZyxsLmFib3J0KGcpLG0oZyl9LCJwYXJlbnRBYm9ydExpc3RlbmVyIikscy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsZix7b25jZTohMH0pLHMuYWJvcnRlZCYmZigpKX0pO3RyeXtyZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKFtwLGhdKX1maW5hbGx5e3UmJmNsZWFyVGltZW91dCh1KSxzJiZmJiZzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixmKX19c3RhdGljIGFzeW5jIGFib3J0TGF0ZU9wZW5lZEVuZHBvaW50KGUscil7bGV0IG47dHJ5e249UHJvbWlzZS5yZXNvbHZlKGUuYWJvcnQocikpfWNhdGNoe31uPy5jYXRjaCgoKT0+e30pO3RyeXthd2FpdCBlLmNsb3NlZH1jYXRjaHt9fXN0YXRpYyB2YWxpZGF0ZVRyYW5zcG9ydChlKXtpZighZXx8dHlwZW9mIGUhPSJvYmplY3QifHx0eXBlb2YgZS5vcGVuVmlydHVhbFN0cmVhbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJWaXJ0dWFsU3RyZWFtIHRyYW5zcG9ydCBpcyBpbnZhbGlkIil9c3RhdGljIHZhbGlkYXRlTmV0d29ya0Rlc2NyaXB0b3IoZSl7aWYoIXQuaXNQbGFpbk9iamVjdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJWaXJ0dWFsU3RyZWFtIGRlc2NyaXB0b3IgbXVzdCBiZSBhIHBsYWluIG9iamVjdCIpO2xldCByPXQuZ2V0T3duRGF0YVByb3BlcnR5KGUsIl9pc1ZpcnR1YWxTdHJlYW0iKSxuPXQuZ2V0T3duRGF0YVByb3BlcnR5KGUsInByb3RvY29sIiksaT10LmdldE93bkRhdGFQcm9wZXJ0eShlLCJzdHJlYW1JZCIpLHM9dC5nZXRPd25EYXRhUHJvcGVydHkoZSwiY3JlYXRvckRpcmVjdGlvbiIpO2lmKHIhPT0hMHx8biE9PSJ2aXJ0dWFsLXN0cmVhbS12MSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVmlydHVhbFN0cmVhbSBkZXNjcmlwdG9yIHJlcXVpcmVzIHByb3RvY29sIHZpcnR1YWwtc3RyZWFtLXYxIik7aWYodHlwZW9mIGkhPSJzdHJpbmcifHxpLmxlbmd0aD09PTB8fGkubGVuZ3RoPnQubWF4aW11bVN0cmVhbUlkTGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoYFZpcnR1YWxTdHJlYW0gZGVzY3JpcHRvciBzdHJlYW1JZCBtdXN0IGNvbnRhaW4gMS0ke3QubWF4aW11bVN0cmVhbUlkTGVuZ3RofSBjaGFyYWN0ZXJzYCk7aWYocyE9PSJzZW5kIiYmcyE9PSJyZWNlaXZlIil0aHJvdyBuZXcgVHlwZUVycm9yKCJWaXJ0dWFsU3RyZWFtIGRlc2NyaXB0b3IgY3JlYXRvckRpcmVjdGlvbiBtdXN0IGJlIHNlbmQgb3IgcmVjZWl2ZSIpO2xldCBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwiY29udGVudFR5cGUiKTtpZihhJiYoISgidmFsdWUiaW4gYSl8fHR5cGVvZiBhLnZhbHVlIT0ic3RyaW5nInx8YS52YWx1ZS5sZW5ndGg9PT0wKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJWaXJ0dWFsU3RyZWFtIGRlc2NyaXB0b3IgY29udGVudFR5cGUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgbD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsImludGVncml0eSIpO2lmKGwpe2lmKCEoInZhbHVlImluIGwpKXRocm93IG5ldyBUeXBlRXJyb3IoIlZpcnR1YWxTdHJlYW0gZGVzY3JpcHRvciBpbnRlZ3JpdHkgbXVzdCBiZSBkYXRhIik7dC52YWxpZGF0ZUludGVncml0eShsLnZhbHVlKX1sZXQgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsInRyYW5zcG9ydCIpO2lmKCFjfHwhKCJ2YWx1ZSJpbiBjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJWaXJ0dWFsU3RyZWFtIGRlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb3duIHRyYW5zcG9ydCBwcm9wZXJ0eSIpO2lmKCF0LmlzSnNvbkNvbXBhdGlibGUoYy52YWx1ZSxuZXcgV2Vha1NldCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVmlydHVhbFN0cmVhbSBkZXNjcmlwdG9yIHRyYW5zcG9ydCBtdXN0IGJlIEpTT04tY29tcGF0aWJsZSIpfXN0YXRpYyB2YWxpZGF0ZUludGVncml0eShlKXtpZighdC5pc1BsYWluT2JqZWN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlZpcnR1YWxTdHJlYW0gaW50ZWdyaXR5IG11c3QgYmUgYSBwbGFpbiBvYmplY3QiKTtsZXQgcj10LmdldE93bkRhdGFQcm9wZXJ0eShlLCJhbGdvcml0aG0iKSxuPXQuZ2V0T3duRGF0YVByb3BlcnR5KGUsImJ5dGVMZW5ndGgiKSxpPXQuZ2V0T3duRGF0YVByb3BlcnR5KGUsImRpZ2VzdCIpO2lmKHIhPT0ic2hhMjU2Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJWaXJ0dWFsU3RyZWFtIGludGVncml0eSBhbGdvcml0aG0gbXVzdCBiZSBzaGEyNTYiKTtpZighTnVtYmVyLmlzU2FmZUludGVnZXIobil8fG48MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJWaXJ0dWFsU3RyZWFtIGludGVncml0eSBieXRlTGVuZ3RoIG11c3QgYmUgYSBub24tbmVnYXRpdmUgc2FmZSBpbnRlZ2VyIik7aWYodHlwZW9mIGkhPSJzdHJpbmcifHwhL15zaGEyNTY6WzAtOWEtZl17NjR9JC8udGVzdChpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJWaXJ0dWFsU3RyZWFtIGludGVncml0eSBkaWdlc3QgaXMgaW52YWxpZCIpfXN0YXRpYyB2YWxpZGF0ZUVuZHBvaW50KGUscixuKXtpZighZXx8dHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIlZpcnR1YWxTdHJlYW0gdHJhbnNwb3J0IHJldHVybmVkIGFuIGludmFsaWQgZW5kcG9pbnQiKTtsZXQgaT1lO2lmKGkucHJvdG9jb2whPT0idmlydHVhbC1zdHJlYW0tdjEifHxpLmRpcmVjdGlvbiE9PW58fGkuc3RyZWFtSWQhPT1yLnN0cmVhbUlkfHxpLmNvbnRlbnRUeXBlIT09ci5jb250ZW50VHlwZXx8IXQuaW50ZWdyaXR5TWF0Y2hlcyhpLmludGVncml0eSxyLmludGVncml0eSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVmlydHVhbFN0cmVhbSBlbmRwb2ludCBkaXJlY3Rpb24gb3IgbWV0YWRhdGEgZG9lcyBub3QgbWF0Y2ggaXRzIGRlc2NyaXB0b3IiKTtpZighKCJvcGVuZWQiaW4gaSl8fCEoImNvbXBsZXRpb24iaW4gaSl8fCFpLmNsb3NlZHx8dHlwZW9mIGkuY2xvc2VkLnRoZW4hPSJmdW5jdGlvbiJ8fHR5cGVvZiBpLmFib3J0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIlZpcnR1YWxTdHJlYW0gZW5kcG9pbnQgbGFja3MgbGlmZWN5Y2xlIGNvbnRyYWN0cyIpO2lmKG49PT0ic2VuZCIpe2lmKHR5cGVvZiBpLnNlbmQhPSJmdW5jdGlvbiJ8fHR5cGVvZiBpLmNsb3NlIT0iZnVuY3Rpb24ifHwhKCJ3cml0YWJsZSJpbiBpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJWaXJ0dWFsU3RyZWFtIHNlbmRlciBlbmRwb2ludCBpcyBpbnZhbGlkIil9ZWxzZSBpZih0eXBlb2YgaS5yZWNlaXZlIT0iZnVuY3Rpb24ifHx0eXBlb2YgaS5hY2NlcHQhPSJmdW5jdGlvbiJ8fHR5cGVvZiBpLnJlamVjdCE9ImZ1bmN0aW9uInx8ISgicmVhZGFibGUiaW4gaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVmlydHVhbFN0cmVhbSByZWNlaXZlciBlbmRwb2ludCBpcyBpbnZhbGlkIil9c3RhdGljIGRlc2NyaXB0b3JNZXRhZGF0YU1hdGNoZXMoZSxyKXtyZXR1cm4gZS5jcmVhdG9yRGlyZWN0aW9uPT09ci5jcmVhdG9yRGlyZWN0aW9uJiZlLmNvbnRlbnRUeXBlPT09ci5jb250ZW50VHlwZSYmdC5pbnRlZ3JpdHlNYXRjaGVzKGUuaW50ZWdyaXR5LHIuaW50ZWdyaXR5KX1zdGF0aWMgaW50ZWdyaXR5TWF0Y2hlcyhlLHIpe3JldHVybiFlfHwhcj9lPT09cjplLmFsZ29yaXRobT09PXIuYWxnb3JpdGhtJiZlLmJ5dGVMZW5ndGg9PT1yLmJ5dGVMZW5ndGgmJmUuZGlnZXN0PT09ci5kaWdlc3R9c3RhdGljIGdldE93bkRhdGFQcm9wZXJ0eShlLHIpe2xldCBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxyKTtpZighKCFufHwhKCJ2YWx1ZSJpbiBuKSkpcmV0dXJuIG4udmFsdWV9c3RhdGljIGlzUGxhaW5PYmplY3QoZSl7aWYoIWV8fHR5cGVvZiBlIT0ib2JqZWN0Inx8QXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMTtsZXQgcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIHI9PT1PYmplY3QucHJvdG90eXBlfHxyPT09bnVsbH1zdGF0aWMgaXNKc29uQ29tcGF0aWJsZShlLHIpe2lmKGU9PT1udWxsfHx0eXBlb2YgZT09InN0cmluZyJ8fHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuITA7aWYodHlwZW9mIGU9PSJudW1iZXIiKXJldHVybiBOdW1iZXIuaXNGaW5pdGUoZSk7aWYoIWV8fHR5cGVvZiBlIT0ib2JqZWN0Inx8ci5oYXMoZSkpcmV0dXJuITE7ci5hZGQoZSk7dHJ5e2lmKEFycmF5LmlzQXJyYXkoZSkpe2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsU3RyaW5nKG4pKTtpZighaXx8ISgidmFsdWUiaW4gaSl8fCF0LmlzSnNvbkNvbXBhdGlibGUoaS52YWx1ZSxyKSlyZXR1cm4hMX1yZXR1cm4gUmVmbGVjdC5vd25LZXlzKGUpLmV2ZXJ5KG49Pm49PT0ibGVuZ3RoInx8dHlwZW9mIG49PSJzdHJpbmciJiYvXigwfFsxLTldWzAtOV0qKSQvLnRlc3QobikmJk51bWJlcihuKTxlLmxlbmd0aCl9aWYoIXQuaXNQbGFpbk9iamVjdChlKSlyZXR1cm4hMTtmb3IobGV0IG4gb2YgUmVmbGVjdC5vd25LZXlzKGUpKXtpZih0eXBlb2YgbiE9InN0cmluZyIpcmV0dXJuITE7bGV0IGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG4pO2lmKCFpLmVudW1lcmFibGV8fCEoInZhbHVlImluIGkpfHwhdC5pc0pzb25Db21wYXRpYmxlKGkudmFsdWUscikpcmV0dXJuITF9cmV0dXJuITB9ZmluYWxseXtyLmRlbGV0ZShlKX19Y29uc3RydWN0b3IoZSl7dGhpcy5hY3RpdmF0aW9uUHVibGlzaGVkPSExLHRoaXMuZW5kcG9pbnRVc2VTdGFydGVkPSExLHRoaXMuZW5kcG9pbnRDbG9zZWQ9ITEsdGhpcy5sb2NhbGx5RGlzcG9zZWQ9ITEsdGhpcy50cmFuc3BvcnQ9ZS50cmFuc3BvcnQsdGhpcy5kZXNjcmlwdG9yPWUuZGVzY3JpcHRvcix0aGlzLmVuZHBvaW50PWUuZW5kcG9pbnQsdGhpcy5yZWdpc3RyYXRpb25EaXNwb3NlPWUucmVnaXN0cmF0aW9uRGlzcG9zZSx0aGlzLmV4cGxpY2l0UmVnaXN0cmF0aW9uPWUuZXhwbGljaXRSZWdpc3RyYXRpb24sdGhpcy5leHBsaWNpdFJlZ2lzdHJhdGlvbiYmbnkodGhpcyksdGhpcy5lbmRwb2ludCYmdGhpcy5vYnNlcnZlRW5kcG9pbnQodGhpcy5lbmRwb2ludCl9Z2V0IHByb3RvY29sKCl7cmV0dXJuInZpcnR1YWwtc3RyZWFtLXYxIn1nZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kcG9pbnQ/dGhpcy5lbmRwb2ludC5kaXJlY3Rpb246dGhpcy5kZXNjcmlwdG9yLmNyZWF0b3JEaXJlY3Rpb249PT0ic2VuZCI/InJlY2VpdmUiOiJzZW5kIn1nZXQgc3RyZWFtSWQoKXtyZXR1cm4gdGhpcy5kZXNjcmlwdG9yLnN0cmVhbUlkfWdldCBjb250ZW50VHlwZSgpe3JldHVybiB0aGlzLmRlc2NyaXB0b3IuY29udGVudFR5cGV9Z2V0IGludGVncml0eSgpe3JldHVybiB0aGlzLmRlc2NyaXB0b3IuaW50ZWdyaXR5fWdldCBvcGVuZWQoKXt0cnl7dGhpcy5hc3NlcnRBcHBsaWNhdGlvbk9wZXJhdGlvbnNBbGxvd2VkKCksdGhpcy5hc3NlcnROb3RDbG9zZWQoKSx0aGlzLmVuZHBvaW50VXNlU3RhcnRlZD0hMDtsZXQgZT10aGlzLnJlcXVpcmVFbmRwb2ludCgpLm9wZW5lZDtpZighZXx8dHlwZW9mIGUudGhlbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJWaXJ0dWFsU3RyZWFtIGVuZHBvaW50IG9wZW5lZCBjb250cmFjdCBpcyBpbnZhbGlkIik7cmV0dXJuIGV9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX1nZXQgY29tcGxldGlvbigpe2xldCBlPXRoaXMucmVxdWlyZUVuZHBvaW50KCkuY29tcGxldGlvbjtpZighZXx8dHlwZW9mIGUudGhlbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJWaXJ0dWFsU3RyZWFtIGVuZHBvaW50IGNvbXBsZXRpb24gY29udHJhY3QgaXMgaW52YWxpZCIpO3JldHVybiBlfWdldCBjbG9zZWQoKXtyZXR1cm4gdGhpcy5yZXF1aXJlRW5kcG9pbnQoKS5jbG9zZWR9Z2V0IHdyaXRhYmxlKCl7cmV0dXJuIHRoaXMuYXNzZXJ0QXBwbGljYXRpb25PcGVyYXRpb24oInNlbmQiKSx0aGlzLmVuZHBvaW50VXNlU3RhcnRlZD0hMCx0aGlzLnJlcXVpcmVFbmRwb2ludCgpLndyaXRhYmxlfWdldCByZWFkYWJsZSgpe3JldHVybiB0aGlzLmFzc2VydEFwcGxpY2F0aW9uT3BlcmF0aW9uKCJyZWNlaXZlIiksdGhpcy5lbmRwb2ludFVzZVN0YXJ0ZWQ9ITAsdGhpcy5yZXF1aXJlRW5kcG9pbnQoKS5yZWFkYWJsZX1wdWJsaXNoQWN0aXZhdGlvbigpe3RoaXMuZXhwbGljaXRSZWdpc3RyYXRpb24mJiF0aGlzLmxvY2FsbHlEaXNwb3NlZCYmKHRoaXMuYWN0aXZhdGlvblB1Ymxpc2hlZD0hMCl9YXN5bmMgcm9sbGJhY2tBY3RpdmF0aW9uKGUpe2lmKCF0aGlzLmxvY2FsbHlEaXNwb3NlZCl7aWYodGhpcy5leHBsaWNpdFJlZ2lzdHJhdGlvbiYmIXRoaXMuYWN0aXZhdGlvblB1Ymxpc2hlZCYmIXRoaXMuZW5kcG9pbnRVc2VTdGFydGVkKXt0aGlzLmRpc3Bvc2VVbnB1Ymxpc2hlZFJlZ2lzdHJhdGlvbigpO3JldHVybn10aGlzLmVuZHBvaW50JiZhd2FpdCB0aGlzLmFib3J0KGUpfX1hc3luYyBzZW5kKGUpe2lmKHRoaXMuYXNzZXJ0QXBwbGljYXRpb25PcGVyYXRpb24oInNlbmQiKSwhKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJWaXJ0dWFsU3RyZWFtLnNlbmQgYWNjZXB0cyBvbmx5IFVpbnQ4QXJyYXkgY2h1bmtzIik7dGhpcy5lbmRwb2ludFVzZVN0YXJ0ZWQ9ITAsYXdhaXQgdGhpcy5yZXF1aXJlRW5kcG9pbnQoKS5zZW5kKGUpfWFzeW5jIHJlY2VpdmUoKXtyZXR1cm4gdGhpcy5hc3NlcnRBcHBsaWNhdGlvbk9wZXJhdGlvbigicmVjZWl2ZSIpLHRoaXMuZW5kcG9pbnRVc2VTdGFydGVkPSEwLHRoaXMucmVxdWlyZUVuZHBvaW50KCkucmVjZWl2ZSgpfWNsb3NlKCl7aWYodGhpcy50ZXJtaW5hbFByb21pc2UpcmV0dXJuIHRoaXMuZm9sbG93VGVybWluYWwoImNsb3NlIik7dHJ5e3RoaXMuYXNzZXJ0QXBwbGljYXRpb25PcGVyYXRpb24oInNlbmQiKSx0aGlzLmVuZHBvaW50VXNlU3RhcnRlZD0hMDtsZXQgZT10aGlzLnJlcXVpcmVFbmRwb2ludCgpO3JldHVybiB0aGlzLnRlcm1pbmF0ZUVuZHBvaW50KCgpPT5lLmNsb3NlKCksImNsb3NlIil9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX1hY2NlcHQoKXtpZih0aGlzLnRlcm1pbmFsUHJvbWlzZSlyZXR1cm4gdGhpcy5mb2xsb3dUZXJtaW5hbCgiYWNjZXB0Iik7dHJ5e3RoaXMuYXNzZXJ0QXBwbGljYXRpb25PcGVyYXRpb24oInJlY2VpdmUiKSx0aGlzLmVuZHBvaW50VXNlU3RhcnRlZD0hMDtsZXQgZT10aGlzLnJlcXVpcmVFbmRwb2ludCgpO3JldHVybiB0aGlzLnRlcm1pbmF0ZUVuZHBvaW50KCgpPT5lLmFjY2VwdCgpLCJhY2NlcHQiKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fXJlamVjdChlKXtpZih0aGlzLnRlcm1pbmFsUHJvbWlzZSlyZXR1cm4gdGhpcy5mb2xsb3dUZXJtaW5hbCgicmVqZWN0Iik7dHJ5e3RoaXMuYXNzZXJ0QXBwbGljYXRpb25PcGVyYXRpb24oInJlY2VpdmUiKSx0aGlzLmVuZHBvaW50VXNlU3RhcnRlZD0hMDtsZXQgcj10aGlzLnJlcXVpcmVFbmRwb2ludCgpO3JldHVybiB0aGlzLnRlcm1pbmF0ZUVuZHBvaW50KCgpPT5yLnJlamVjdChlKSwicmVqZWN0Iil9Y2F0Y2gocil7cmV0dXJuIFByb21pc2UucmVqZWN0KHIpfX1hYm9ydChlKXtpZih0aGlzLnRlcm1pbmFsUHJvbWlzZSlyZXR1cm4gdGhpcy5mb2xsb3dUZXJtaW5hbCgiYWJvcnQiKTtpZih0aGlzLmxvY2FsbHlEaXNwb3NlZHx8dGhpcy5lbmRwb2ludENsb3NlZClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7bGV0IHI9dGhpcy5lbmRwb2ludDtyZXR1cm4gcj8odGhpcy5lbmRwb2ludFVzZVN0YXJ0ZWQ9ITAsdGhpcy50ZXJtaW5hdGVFbmRwb2ludCgoKT0+ci5hYm9ydChlKSwiYWJvcnQiKSk6UHJvbWlzZS5yZXNvbHZlKCl9YWN0aXZhdGVGb3JFbmNvZGluZyhlKXtlLmFjdGl2YXRpb25TY29wZT8udHJhY2sodGhpcyk7dHJ5e2lmKCFlLnZpcnR1YWxTdHJlYW1UcmFuc3BvcnQpdGhyb3cgbmV3IEVycm9yKCJWaXJ0dWFsU3RyZWFtIHJlcXVpcmVzIGEgdmlydHVhbCBzdHJlYW0gdHJhbnNwb3J0Iik7aWYodGhpcy50cmFuc3BvcnQhPT1lLnZpcnR1YWxTdHJlYW1UcmFuc3BvcnQpdGhyb3cgbmV3IEVycm9yKCJWaXJ0dWFsU3RyZWFtIGNhbm5vdCBiZSBlbmNvZGVkIHRocm91Z2ggYSBkaWZmZXJlbnQgdmlydHVhbCBzdHJlYW0gdHJhbnNwb3J0Iik7aWYodGhpcy5hc3NlcnROb3RDbG9zZWQoKSx0aGlzLnRlcm1pbmFsUHJvbWlzZSl0aHJvdyBuZXcgeW8oIlZpcnR1YWxTdHJlYW0gaGFzIGEgdGVybWluYWwgb3BlcmF0aW9uIik7cmV0dXJuIGUuYWN0aXZhdGlvblNjb3BlfHx0aGlzLnB1Ymxpc2hBY3RpdmF0aW9uKCksdGhpcy5kZXNjcmlwdG9yfWNhdGNoKHIpe3Rocm93IGUuYWN0aXZhdGlvblNjb3BlfHx0aGlzLnJvbGxiYWNrQWN0aXZhdGlvbihyKS5jYXRjaCgoKT0+e30pLHJ9fWJpbmRPcGVuZWRFbmRwb2ludChlKXt0aGlzLmVuZHBvaW50PWU7bGV0IHI9dGhpcy5kZXNjcmlwdG9yLmNyZWF0b3JEaXJlY3Rpb249PT0ic2VuZCI/InJlY2VpdmUiOiJzZW5kIjt0LnZhbGlkYXRlRW5kcG9pbnQoZSx0aGlzLmRlc2NyaXB0b3IsciksdGhpcy5vYnNlcnZlRW5kcG9pbnQoZSl9b2JzZXJ2ZUVuZHBvaW50KGUpe2xldCByPWUuY29tcGxldGlvbjtpZighcnx8dHlwZW9mIHIudGhlbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJWaXJ0dWFsU3RyZWFtIGVuZHBvaW50IGNvbXBsZXRpb24gY29udHJhY3QgaXMgaW52YWxpZCIpO3IudGhlbihuPT57dGhpcy5jb21wbGV0aW9uT3V0Y29tZT17c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOm59fSxuPT57dGhpcy5jb21wbGV0aW9uT3V0Y29tZT17c3RhdHVzOiJyZWplY3RlZCIsZXJyb3I6bn19KSxlLmNsb3NlZC50aGVuKCgpPT50aGlzLm1hcmtFbmRwb2ludENsb3NlZCgpLG49PnRoaXMubWFya0VuZHBvaW50Q2xvc2VkKG4pKX1tYXJrRW5kcG9pbnRDbG9zZWQoZSl7ZSE9PXZvaWQgMCYmdGhpcy5nZXRDbG9zZUVycm9yKGUpLHRoaXMuZW5kcG9pbnRDbG9zZWQ9ITAsdGhpcy5kaXNwb3NlUmVnaXN0cmF0aW9uKCl9ZGlzcG9zZVJlZ2lzdHJhdGlvbigpe2xldCBlPXRoaXMucmVnaXN0cmF0aW9uRGlzcG9zZTt0aGlzLnJlZ2lzdHJhdGlvbkRpc3Bvc2U9dm9pZCAwLGU/LigpfWRpc3Bvc2VVbnB1Ymxpc2hlZFJlZ2lzdHJhdGlvbigpe3RoaXMubG9jYWxseURpc3Bvc2VkfHwodGhpcy5sb2NhbGx5RGlzcG9zZWQ9ITAsdGhpcy5kaXNwb3NlUmVnaXN0cmF0aW9uKCkpfXJlcXVpcmVFbmRwb2ludCgpe2lmKCF0aGlzLmVuZHBvaW50KXRocm93IG5ldyBFcnJvcigiVmlydHVhbFN0cmVhbSBlbmRwb2ludCBpcyBub3Qgc3RhZ2VkIik7cmV0dXJuIHRoaXMuZW5kcG9pbnR9YXNzZXJ0QXBwbGljYXRpb25PcGVyYXRpb25zQWxsb3dlZCgpe2lmKCFpVC5oYXModGhpcykpdGhyb3cgbmV3IEVycm9yKCJWaXJ0dWFsU3RyZWFtIGFwcGxpY2F0aW9uIHVzZSBpcyBub3QgYXV0aG9yaXplZCIpfWFzc2VydEFwcGxpY2F0aW9uT3BlcmF0aW9uKGUpe2lmKHRoaXMuYXNzZXJ0QXBwbGljYXRpb25PcGVyYXRpb25zQWxsb3dlZCgpLHRoaXMuYXNzZXJ0Tm90Q2xvc2VkKCksdGhpcy50ZXJtaW5hbFByb21pc2UpdGhyb3cgbmV3IHlvKCJWaXJ0dWFsU3RyZWFtIGhhcyBhIHRlcm1pbmFsIG9wZXJhdGlvbiIpO2lmKHRoaXMuZGlyZWN0aW9uIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuZGlyZWN0aW9ufSBWaXJ0dWFsU3RyZWFtcyBjYW5ub3QgcGVyZm9ybSAke2V9IG9wZXJhdGlvbnNgKX1hc3NlcnROb3RDbG9zZWQoKXtpZih0aGlzLmVuZHBvaW50Q2xvc2VkfHx0aGlzLmxvY2FsbHlEaXNwb3NlZCl0aHJvdyB0aGlzLmdldENsb3NlRXJyb3IoKX1nZXRDbG9zZUVycm9yKGUpe3JldHVybiB0aGlzLmNsb3NlRXJyb3J8fCh0aGlzLmNsb3NlRXJyb3I9bmV3IHlvKCJWaXJ0dWFsU3RyZWFtIGlzIGNsb3NlZCIsZT09PXZvaWQgMD92b2lkIDA6e2NhdXNlOmV9KSksdGhpcy5jbG9zZUVycm9yfWZvbGxvd1Rlcm1pbmFsKGUpe2xldCByPXRoaXMudGVybWluYWxQcm9taXNlO2lmKHRoaXMudGVybWluYWxLaW5kPT09ZSlyZXR1cm4gcjtsZXQgbj1uZXcgeW8oYFZpcnR1YWxTdHJlYW0gdGVybWluYWwgJHt0aGlzLnRlcm1pbmFsS2luZH0gYWxyZWFkeSBjb21wbGV0ZWRgKTtyZXR1cm4gci50aGVuKCgpPT5Qcm9taXNlLnJlamVjdChuKSwoKT0+UHJvbWlzZS5yZWplY3QobikpfXRlcm1pbmF0ZUVuZHBvaW50KGUscil7aWYodGhpcy50ZXJtaW5hbFByb21pc2UpcmV0dXJuIHRoaXMuZm9sbG93VGVybWluYWwocik7bGV0IG49dGhpcy5yZXF1aXJlRW5kcG9pbnQoKTt0aGlzLnRlcm1pbmFsS2luZD1yO2xldCBpPWUscz1Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57bGV0IGY9aTtyZXR1cm4gaT12b2lkIDAsZigpfSk7cy5jYXRjaCgoKT0+e30pO2xldCBhPXMudGhlbihmPT4oe3N0YXR1czoiZnVsZmlsbGVkIix2YWx1ZTpmfSksZj0+KHtzdGF0dXM6InJlamVjdGVkIixlcnJvcjpmfSkpLGw7YS50aGVuKGY9PntsPWZ9KTtsZXQgYz1uLmNsb3NlZC50aGVuKCgpPT4oe3N0YXR1czoiY2xvc2VkIn0pLGY9Pih7c3RhdHVzOiJjbG9zZWRFcnJvciIsZXJyb3I6Zn0pKSx1PShhc3luYygpPT57bGV0IGY9YXdhaXQgUHJvbWlzZS5yYWNlKFthLGNdKTtpZihmLnN0YXR1cz09PSJmdWxmaWxsZWQifHxmLnN0YXR1cz09PSJyZWplY3RlZCIpe2xldCBwPWF3YWl0IGM7aWYodGhpcy5lbmRwb2ludENsb3NlZD0hMCx0aGlzLmRpc3Bvc2VSZWdpc3RyYXRpb24oKSxmLnN0YXR1cz09PSJyZWplY3RlZCIpdGhyb3cgZi5lcnJvcjtpZihwLnN0YXR1cz09PSJjbG9zZWRFcnJvciIpdGhyb3cgcC5lcnJvcjtyZXR1cm4gZi52YWx1ZX1pZih0aGlzLmVuZHBvaW50Q2xvc2VkPSEwLHRoaXMuZGlzcG9zZVJlZ2lzdHJhdGlvbigpLGYuc3RhdHVzPT09ImNsb3NlZEVycm9yIil0aHJvdyBmLmVycm9yO2lmKGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLGw/LnN0YXR1cz09PSJyZWplY3RlZCIpdGhyb3cgbC5lcnJvcjtpZihsPy5zdGF0dXM9PT0iZnVsZmlsbGVkIilyZXR1cm4gbC52YWx1ZTtpZihyPT09ImNsb3NlInx8cj09PSJhY2NlcHQiKXtpZih0aGlzLmNvbXBsZXRpb25PdXRjb21lPy5zdGF0dXM9PT0iZnVsZmlsbGVkIilyZXR1cm4gdGhpcy5jb21wbGV0aW9uT3V0Y29tZS52YWx1ZTt0aHJvdyB0aGlzLmNvbXBsZXRpb25PdXRjb21lPy5zdGF0dXM9PT0icmVqZWN0ZWQiP3RoaXMuY29tcGxldGlvbk91dGNvbWUuZXJyb3I6bmV3IEtwKHIpfX0pKCk7cmV0dXJuIHRoaXMudGVybWluYWxQcm9taXNlPXUsdX19O3ZhciBicj1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIlR5cGVkUmVzcG9uc2VFcnJvciIpfWNvbnN0cnVjdG9yKGUscil7c3VwZXIoZSksdGhpcy5uYW1lPSJUeXBlZFJlc3BvbnNlRXJyb3IiLHRoaXMuZXJyb3JUZXh0PWUsdGhpcy5lcnJvckRhdGE9cj8/e319fTt2YXIgR3M9T2JqZWN0LmZyZWV6ZSh7cmVkYWN0ZWQ6ITB9KTt2YXIgc1Q9T2JqZWN0LmZyZWV6ZShbIm9uT3V0Z29pbmdSZXF1ZXN0Iiwib25JbmNvbWluZ1Jlc3BvbnNlIiwib25JbmNvbWluZ1JlcXVlc3QiLCJvbk91dGdvaW5nUmVzcG9uc2UiXSksYVQ9U3ltYm9sLmZvcigiQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0Omdsb2JhbC1ob29rczozLjgiKSxsVD1vKHQ9Pih7cGF5bG9hZFByb2plY3Rvcjp0Py5wYXlsb2FkUHJvamVjdG9yLGVycm9yUHJvamVjdG9yOnQ/LmVycm9yUHJvamVjdG9yfSksImNvcHlQcm9qZWN0aW9uT3B0aW9ucyIpLFpwPW8oKHQ9e30pPT4oe2hvb2tzOnQscHJvamVjdGVkUmVnaXN0cmF0aW9uc0J5UGhhc2U6e319KSwiY3JlYXRlVHlwZWRSb3V0ZXJIb29rUmVnaXN0cmF0aW9uU3RhdGUiKSxYTD1vKHQ9PnNULmZpbHRlcihlPT5PYmplY3QuaGFzT3duKHQsZSkpLm1hcChlPT5bZSx0W2VdXSksImdldFN1cHBsaWVkSG9va0VudHJpZXMiKSxlaD1vKCh0LGUscik9PntsZXQgbj1YTChlKTt0Lmhvb2tzPXsuLi50Lmhvb2tzLC4uLmV9O2ZvcihsZXRbaV1vZiBuKXtsZXQgcz10Lmhvb2tzW2ldO2lmKHR5cGVvZiBzIT0iZnVuY3Rpb24iKXtkZWxldGUgdC5wcm9qZWN0ZWRSZWdpc3RyYXRpb25zQnlQaGFzZVtpXTtjb250aW51ZX10LnByb2plY3RlZFJlZ2lzdHJhdGlvbnNCeVBoYXNlW2ldPXtjYWxsYmFjazpzLHByb2plY3Rpb25PcHRpb25zOmxUKHIpfX19LCJtZXJnZVR5cGVkUm91dGVySG9va1JlZ2lzdHJhdGlvbnMiKSx0aD1vKCh0LGUpPT57dC5ob29rcz1lO2ZvcihsZXQgciBvZiBzVClkZWxldGUgdC5wcm9qZWN0ZWRSZWdpc3RyYXRpb25zQnlQaGFzZVtyXX0sInJlcGxhY2VUeXBlZFJvdXRlckhvb2tSZWdpc3RyYXRpb25zIiksUXM9bygoKT0+e2xldCB0PWdsb2JhbFRoaXNbYVRdO2lmKHQ/LnZlcnNpb249PT0iMy44IiYmdC5zdGF0ZVNoYXBlPT09ImNhbGxiYWNrLWJvdW5kLXByb2plY3Rpb25zLXYxIiYmdC5zdWJzY3JpYmVycyBpbnN0YW5jZW9mIE1hcClyZXR1cm4gdDtsZXQgZT17dmVyc2lvbjoiMy44IixzdGF0ZVNoYXBlOiJjYWxsYmFjay1ib3VuZC1wcm9qZWN0aW9ucy12MSIsbGVnYWN5OlpwKCksc3Vic2NyaWJlcnM6bmV3IE1hcH07cmV0dXJuIGdsb2JhbFRoaXNbYVRdPWUsZX0sImdldFJlYWxtR2xvYmFsSG9va1N0YXRlIiksdVQ9bygoKT0+UXMoKS5sZWdhY3kuaG9va3MsImdldExlZ2FjeUdsb2JhbEhvb2tzIiksZlQ9byh0PT57dGgoUXMoKS5sZWdhY3ksdCl9LCJyZXBsYWNlTGVnYWN5R2xvYmFsSG9va3MiKSxwVD1vKCh0LGUpPT57ZWgoUXMoKS5sZWdhY3ksdCxlKX0sIm1lcmdlTGVnYWN5R2xvYmFsSG9va3MiKSxoVD1vKCh0LGUpPT57bGV0IHI9UXMoKSxuPVN5bWJvbCgidHlwZWRyZXF1ZXN0LWhvb2stc3Vic2NyaWJlciIpLGk9WnAoKTtlaChpLHQsZSksci5zdWJzY3JpYmVycy5zZXQobixpKTtsZXQgcz0hMTtyZXR1cm4oKT0+e3N8fChzPSEwLHIuc3Vic2NyaWJlcnMuZGVsZXRlKG4pKX19LCJhZGRHbG9iYWxIb29rU3Vic2NyaWJlciIpLGRUPW8oKCk9PntsZXQgdD1RcygpO3RoKHQubGVnYWN5LHt9KSx0LnN1YnNjcmliZXJzLmNsZWFyKCl9LCJjbGVhckdsb2JhbEhvb2tSZWdpc3RyYXRpb25zIiksWHA9byh0PT57dHJ5e2NvbnNvbGUuZXJyb3IoYFR5cGVkUmVxdWVzdCBob29rIHByb2plY3Rpb24gZmFpbGVkICgke3R9KWApfWNhdGNoe319LCJsb2dQcm9qZWN0aW9uRmFpbHVyZSIpLGl5PW8odD0+e3RyeXtjb25zb2xlLmVycm9yKGBUeXBlZFJlcXVlc3QgaG9vayBjYWxsYmFjayBmYWlsZWQgKCR7dH0pYCl9Y2F0Y2h7fX0sImxvZ0NhbGxiYWNrRmFpbHVyZSIpLFpMPW8oKHQsZSk9PntsZXQgcj17Y29ycmVsYXRpb25JZDp0LmNvcnJlbGF0aW9uSWQsbWV0aG9kOnQubWV0aG9kLGRpcmVjdGlvbjp0LmRpcmVjdGlvbixwaGFzZTp0LnBoYXNlLHRpbWVzdGFtcDp0LnRpbWVzdGFtcCwuLi50LmR1cmF0aW9uTXM9PT12b2lkIDA/e306e2R1cmF0aW9uTXM6dC5kdXJhdGlvbk1zfSxoYXNFcnJvcjp0LmVycm9yVGV4dCE9PXZvaWQgMH07dHJ5e3JldHVybiBPYmplY3QuZnJlZXplKHIpfWNhdGNoe1hwKGUpO3JldHVybn19LCJjcmVhdGVNZXRhZGF0YSIpLGNUPW8odD0+dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPiJ1Ij8hMTp0IGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXJ8fE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IFNoYXJlZEFycmF5QnVmZmVyXSIsImlzU2hhcmVkQXJyYXlCdWZmZXIiKSxKcz1vKCh0LGU9bmV3IFNldCk9PntpZighKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCImJnR5cGVvZiB0IT0iZnVuY3Rpb24iKSl7aWYoY1QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVHlwZWRSZXF1ZXN0IGhvb2sgcHJvamVjdGlvbnMgY2Fubm90IGNvbnRhaW4gU2hhcmVkQXJyYXlCdWZmZXIiKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCkpe2lmKGNUKHQuYnVmZmVyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUeXBlZFJlcXVlc3QgaG9vayBwcm9qZWN0aW9ucyBjYW5ub3QgY29udGFpbiBTaGFyZWRBcnJheUJ1ZmZlci1iYWNrZWQgdmlld3MiKTtyZXR1cm59aWYoIWUuaGFzKHQpKXtpZihlLmFkZCh0KSx0IGluc3RhbmNlb2YgTWFwKXtmb3IobGV0W3Isbl1vZiB0KUpzKHIsZSksSnMobixlKTtyZXR1cm59aWYodCBpbnN0YW5jZW9mIFNldCl7Zm9yKGxldCByIG9mIHQpSnMocixlKTtyZXR1cm59Zm9yKGxldCByIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7bGV0IG49UmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTtpZihuKXtpZighT2JqZWN0Lmhhc093bihuLCJ2YWx1ZSIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlR5cGVkUmVxdWVzdCBob29rIHByb2plY3Rpb25zIGNhbm5vdCBjb250YWluIGFjY2Vzc29yIHByb3BlcnRpZXMiKTtKcyhuLnZhbHVlLGUpfX19fX0sImFzc2VydE5vU2hhcmVkQXJyYXlCdWZmZXIiKSxlMj1vKCh0LGUscixuKT0+e2lmKCFlfHwhci5wYXlsb2FkUHJvamVjdG9yKXJldHVybntwYXlsb2FkOkdzLHBheWxvYWRSZWRhY3RlZDohMH07dHJ5e2xldCBpPXIucGF5bG9hZFByb2plY3Rvcih0LGUpO0pzKGkpO2xldCBzPXN0cnVjdHVyZWRDbG9uZShpKTtyZXR1cm4gSnMocykscyE9PW51bGwmJih0eXBlb2Ygcz09Im9iamVjdCJ8fHR5cGVvZiBzPT0iZnVuY3Rpb24iKSYmT2JqZWN0LmZyZWV6ZShzKSx7cGF5bG9hZDpzLHBheWxvYWRSZWRhY3RlZDohMX19Y2F0Y2h7cmV0dXJuIFhwKG4pLHtwYXlsb2FkOkdzLHBheWxvYWRSZWRhY3RlZDohMH19fSwic25hcHNob3RQYXlsb2FkIiksdDI9bygodCxlLHIsbik9PntpZighKCFlfHx0LmVycm9yVGV4dD09PXZvaWQgMHx8IXIuZXJyb3JQcm9qZWN0b3IpKXRyeXtsZXQgaT1yLmVycm9yUHJvamVjdG9yKHQuZXJyb3JUZXh0LGUpO2lmKGk9PT12b2lkIDApcmV0dXJuO2xldCBzPXN0cnVjdHVyZWRDbG9uZShpKTtpZih0eXBlb2YgcyE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVHlwZWRSZXF1ZXN0IGVycm9yIHByb2plY3RvciBtdXN0IHJldHVybiBhIHN0cmluZyBvciB1bmRlZmluZWQiKTtyZXR1cm4gc31jYXRjaHtYcChuKTtyZXR1cm59fSwic25hcHNob3RFcnJvciIpLHIyPW8oKHQsZSxyKT0+e2xldCBuPVpMKHQsciksaT1lMih0LnBheWxvYWQsbixlLHIpLHM9dDIodCxuLGUsciksYT17Y29ycmVsYXRpb25JZDp0LmNvcnJlbGF0aW9uSWQsbWV0aG9kOnQubWV0aG9kLGRpcmVjdGlvbjp0LmRpcmVjdGlvbixwaGFzZTp0LnBoYXNlLHRpbWVzdGFtcDp0LnRpbWVzdGFtcCwuLi50LmR1cmF0aW9uTXM9PT12b2lkIDA/e306e2R1cmF0aW9uTXM6dC5kdXJhdGlvbk1zfSxoYXNFcnJvcjp0LmVycm9yVGV4dCE9PXZvaWQgMCwuLi5pLC4uLnM9PT12b2lkIDA/e306e2Vycm9yOnN9fTt0cnl7cmV0dXJuIE9iamVjdC5mcmVlemUoYSl9Y2F0Y2h7WHAocik7bGV0IGw9e2NvcnJlbGF0aW9uSWQ6dC5jb3JyZWxhdGlvbklkLG1ldGhvZDp0Lm1ldGhvZCxkaXJlY3Rpb246dC5kaXJlY3Rpb24scGhhc2U6dC5waGFzZSx0aW1lc3RhbXA6dC50aW1lc3RhbXAsLi4udC5kdXJhdGlvbk1zPT09dm9pZCAwP3t9OntkdXJhdGlvbk1zOnQuZHVyYXRpb25Nc30saGFzRXJyb3I6dC5lcnJvclRleHQhPT12b2lkIDAscGF5bG9hZDpHcyxwYXlsb2FkUmVkYWN0ZWQ6ITB9O3RyeXtyZXR1cm4gT2JqZWN0LmZyZWV6ZShsKX1jYXRjaHtyZXR1cm4gbH19fSwicHJvamVjdExvZ0VudHJ5Iiksb3k9bygodCxlKT0+e3RyeXtsZXQgcj10Lmhvb2tzW2VdO2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXJldHVybjtsZXQgbj10LnByb2plY3RlZFJlZ2lzdHJhdGlvbnNCeVBoYXNlW2VdO3JldHVybntjYWxsYmFjazpyLHByb2plY3Rpb25PcHRpb25zOm4/LmNhbGxiYWNrPT09cj9sVChuLnByb2plY3Rpb25PcHRpb25zKTp7fX19Y2F0Y2h7aXkoZSk7cmV0dXJufX0sInNuYXBzaG90RGlzcGF0Y2hSZWNpcGllbnQiKSxzeT1vKCh0LGUscik9PntsZXQgbj1yMihyLHQucHJvamVjdGlvbk9wdGlvbnMsZSk7dHJ5e2xldCBpPXQuY2FsbGJhY2sobik7aSYmdHlwZW9mIGkudGhlbj09ImZ1bmN0aW9uIiYmUHJvbWlzZS5yZXNvbHZlKGkpLmNhdGNoKCgpPT57aXkoZSl9KX1jYXRjaHtpeShlKX19LCJkaXNwYXRjaFRvUmVjaXBpZW50IiksS3M9bygodCxlLHIpPT57bGV0IG49UXMoKTtpZihuLnN1YnNjcmliZXJzLnNpemU9PT0wKXtsZXQgYT1veShuLmxlZ2FjeSx0KSxsPXI/b3kocix0KTp2b2lkIDA7aWYoIWEmJiFsKXJldHVybjthJiZzeShhLHQsZSksbCYmc3kobCx0LGUpO3JldHVybn1sZXQgcz1bbi5sZWdhY3ksLi4uQXJyYXkuZnJvbShuLnN1YnNjcmliZXJzLnZhbHVlcygpKSwuLi5yP1tyXTpbXV0ubWFwKGE9Pm95KGEsdCkpLmZpbHRlcihhPT4hIWEpO2ZvcihsZXQgYSBvZiBzKXN5KGEsdCxlKX0sImRpc3BhdGNoVHlwZWRSZXF1ZXN0SG9vayIpO3ZhciByaD1jbGFzc3tzdGF0aWN7byh0aGlzLCJUeXBlZFRvb2xzIil9Y29uc3RydWN0b3IoZSl7dGhpcy5sb2NhbERhdGE9e30sdGhpcy5hYm9ydFNpZ25hbD1lPz9uZXcgQWJvcnRDb250cm9sbGVyKCkuc2lnbmFsfWFzeW5jIHBhc3NHdWFyZHMoZSxyKXtsZXQgbj1uZXcgRm4uR3VhcmRTZXQoZSk7aWYoIWF3YWl0IG4uYWxsR3VhcmRzUGFzcyhyKSl7bGV0IHM9YXdhaXQgbi5nZXRGYWlsZWRIaW50KHIpO3Rocm93IG5ldyBicihgZ3VhcmQgZmFpbGVkOiAke3N9YCx7ZmFpbGVkSGludDpzfSl9fX07dmFyIGF5PWNsYXNzIHR7c3RhdGlje28odGhpcywiVHlwZWRIYW5kbGVyIil9c3RhdGlje3RoaXMuaW50ZXJuYWxFcnJvck1lc3NhZ2U9IkludGVybmFsIHNlcnZlciBlcnJvciJ9Y29uc3RydWN0b3IoZSxyKXt0aGlzLm1ldGhvZD1lLHRoaXMuaGFuZGxlckZ1bmN0aW9uPXJ9YXN5bmMgYWRkUmVzcG9uc2UoZSxyKXtpZihlLm1ldGhvZCE9PXRoaXMubWV0aG9kKXRocm93IG5ldyBFcnJvcigidGhpcyBoYW5kbGVyIGhhcyBiZWVuIGdpdmVuIGEgd3JvbmcgbWV0aG9kIHRvIGFuc3dlciB0by4gUGxlYXNlIHVzZSBhIFR5cGVkUm91dGVyIHRvIGZpbHRlciByZXF1ZXN0cyIpO2xldCBuLGk9bmV3IHJoKHIpO2UubG9jYWxEYXRhJiYoaS5sb2NhbERhdGE9ZS5sb2NhbERhdGEpO2xldCBzPWF3YWl0IHRoaXMuaGFuZGxlckZ1bmN0aW9uKGUucmVxdWVzdCxpKS5jYXRjaChhPT57YSBpbnN0YW5jZW9mIGJyP249YTooY29uc29sZS5lcnJvcihgVHlwZWRSZXF1ZXN0IGhhbmRsZXIgJyR7dGhpcy5tZXRob2R9JyBmYWlsZWRgKSxuPW5ldyBicih0LmludGVybmFsRXJyb3JNZXNzYWdlKSl9KTtyZXR1cm4gbiYmKGUuZXJyb3I9e3RleHQ6bi5lcnJvclRleHQsZGF0YTpuLmVycm9yRGF0YX0pLHMmJihlLnJlc3BvbnNlPXMpLGU/LmNvcnJlbGF0aW9uPy5waGFzZSYmKGUuY29ycmVsYXRpb24ucGhhc2U9InJlc3BvbnNlIiksZX19O2Z1bmN0aW9uIG5oKHQpe2xldCBlPXQ/Lm1ldGhvZCxyPXQ/LmNvcnJlbGF0aW9uPy5pZCxuPXQ/LnJlcXVlc3RJbnN0YW5jZUlkO2lmKCEodHlwZW9mIGUhPSJzdHJpbmcifHxlLmxlbmd0aD09PTB8fHR5cGVvZiByIT0ic3RyaW5nInx8ci5sZW5ndGg9PT0wfHx0eXBlb2YgbiE9InN0cmluZyJ8fG4ubGVuZ3RoPT09MCkpcmV0dXJuIEpTT04uc3RyaW5naWZ5KFtlLHIsbl0pfW8obmgsImdldFR5cGVkUmVxdWVzdFJlc3BvbnNlSW50ZXJlc3RLZXkiKTt2YXIgbHk9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJUeXBlZFJvdXRlciIpfWNvbnN0cnVjdG9yKCl7dGhpcy5ob29rUmVnaXN0cmF0aW9uU3RhdGU9WnAoKSx0aGlzLnJvdXRlck1hcD1uZXcgQWUuT2JqZWN0TWFwLHRoaXMuZmFsbGJhY2tSb3V0ZXJNYXA9bmV3IEFlLk9iamVjdE1hcCx0aGlzLmZhbGxiYWNrUGFyZW50Um91dGVycz1uZXcgU2V0LHRoaXMuaGFuZGxlck1hcD1uZXcgQWUuT2JqZWN0TWFwLHRoaXMubWlkZGxld2FyZXM9W10sdGhpcy5maXJlRXZlbnRJbnRlcmVzdE1hcD1uZXcgQWUuSW50ZXJlc3RNYXAoZT0+ZSl9c3RhdGlje3RoaXMuaW50ZXJuYWxFcnJvck1lc3NhZ2U9IkludGVybmFsIHNlcnZlciBlcnJvciJ9cmVnaXN0ZXJWaXJ0dWFsU3RyZWFtVHJhbnNwb3J0UmVzb2x2ZXIoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVHlwZWRSb3V0ZXIgdmlydHVhbCBzdHJlYW0gdHJhbnNwb3J0IHJlc29sdmVyIG11c3QgYmUgYSBmdW5jdGlvbiIpO2lmKHRoaXMudmlydHVhbFN0cmVhbVRyYW5zcG9ydFJlc29sdmVyKXRocm93IG5ldyBFcnJvcigiVHlwZWRSb3V0ZXIgYWxyZWFkeSBoYXMgYSB2aXJ0dWFsIHN0cmVhbSB0cmFuc3BvcnQgcmVzb2x2ZXIgb3duZXIiKTt0aGlzLnZpcnR1YWxTdHJlYW1UcmFuc3BvcnRSZXNvbHZlcj1lO2xldCByPSExO3JldHVybigpPT57cnx8KHI9ITAsdGhpcy52aXJ0dWFsU3RyZWFtVHJhbnNwb3J0UmVzb2x2ZXI9PT1lJiYodGhpcy52aXJ0dWFsU3RyZWFtVHJhbnNwb3J0UmVzb2x2ZXI9dm9pZCAwKSl9fXJlZ2lzdGVySW5jb21pbmdSZXF1ZXN0QXV0aG9yaXR5R3VhcmQoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVHlwZWRSb3V0ZXIgaW5jb21pbmcgcmVxdWVzdCBhdXRob3JpdHkgZ3VhcmQgbXVzdCBiZSBhIGZ1bmN0aW9uIik7aWYodGhpcy5pbmNvbWluZ1JlcXVlc3RBdXRob3JpdHlHdWFyZCl0aHJvdyBuZXcgRXJyb3IoIlR5cGVkUm91dGVyIGFscmVhZHkgaGFzIGFuIGluY29taW5nIHJlcXVlc3QgYXV0aG9yaXR5IGd1YXJkIG93bmVyIik7dGhpcy5pbmNvbWluZ1JlcXVlc3RBdXRob3JpdHlHdWFyZD1lO2xldCByPSExO3JldHVybigpPT57cnx8KHI9ITAsdGhpcy5pbmNvbWluZ1JlcXVlc3RBdXRob3JpdHlHdWFyZD09PWUmJih0aGlzLmluY29taW5nUmVxdWVzdEF1dGhvcml0eUd1YXJkPXZvaWQgMCkpfX1yZWdpc3RlckluY29taW5nUmVxdWVzdFNpZ25hbFJlc29sdmVyKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIlR5cGVkUm91dGVyIGluY29taW5nIHJlcXVlc3Qgc2lnbmFsIHJlc29sdmVyIG11c3QgYmUgYSBmdW5jdGlvbiIpO2lmKHRoaXMuaW5jb21pbmdSZXF1ZXN0U2lnbmFsUmVzb2x2ZXIpdGhyb3cgbmV3IEVycm9yKCJUeXBlZFJvdXRlciBhbHJlYWR5IGhhcyBhbiBpbmNvbWluZyByZXF1ZXN0IHNpZ25hbCByZXNvbHZlciBvd25lciIpO3RoaXMuaW5jb21pbmdSZXF1ZXN0U2lnbmFsUmVzb2x2ZXI9ZTtsZXQgcj0hMTtyZXR1cm4oKT0+e3J8fChyPSEwLHRoaXMuaW5jb21pbmdSZXF1ZXN0U2lnbmFsUmVzb2x2ZXI9PT1lJiYodGhpcy5pbmNvbWluZ1JlcXVlc3RTaWduYWxSZXNvbHZlcj12b2lkIDApKX19cmVnaXN0ZXJJbmNvbWluZ1Jlc3BvbnNlQXV0aG9yaXR5R3VhcmQoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVHlwZWRSb3V0ZXIgaW5jb21pbmcgcmVzcG9uc2UgYXV0aG9yaXR5IGd1YXJkIG11c3QgYmUgYSBmdW5jdGlvbiIpO2lmKHRoaXMuaW5jb21pbmdSZXNwb25zZUF1dGhvcml0eUd1YXJkKXRocm93IG5ldyBFcnJvcigiVHlwZWRSb3V0ZXIgYWxyZWFkeSBoYXMgYW4gaW5jb21pbmcgcmVzcG9uc2UgYXV0aG9yaXR5IGd1YXJkIG93bmVyIik7dGhpcy5pbmNvbWluZ1Jlc3BvbnNlQXV0aG9yaXR5R3VhcmQ9ZTtsZXQgcj0hMTtyZXR1cm4oKT0+e3J8fChyPSEwLHRoaXMuaW5jb21pbmdSZXNwb25zZUF1dGhvcml0eUd1YXJkPT09ZSYmKHRoaXMuaW5jb21pbmdSZXNwb25zZUF1dGhvcml0eUd1YXJkPXZvaWQgMCkpfX1zdGF0aWMgZ2V0IGdsb2JhbEhvb2tzKCl7cmV0dXJuIHVUKCl9c3RhdGljIHNldCBnbG9iYWxIb29rcyhlKXtmVChlKX1zdGF0aWMgc2V0R2xvYmFsSG9va3MoZSxyKXtwVChlLHIpfXN0YXRpYyBhZGRHbG9iYWxIb29rcyhlLHIpe3JldHVybiBoVChlLHIpfXN0YXRpYyBjbGVhckdsb2JhbEhvb2tzKCl7ZFQoKX1nZXQgaG9va3MoKXtyZXR1cm4gdGhpcy5ob29rUmVnaXN0cmF0aW9uU3RhdGUuaG9va3N9c2V0IGhvb2tzKGUpe3RoKHRoaXMuaG9va1JlZ2lzdHJhdGlvblN0YXRlLGUpfXNldEhvb2tzKGUscil7ZWgodGhpcy5ob29rUmVnaXN0cmF0aW9uU3RhdGUsZSxyKX1jYWxsSG9vayhlLHIpe0tzKGUscix0aGlzLmhvb2tSZWdpc3RyYXRpb25TdGF0ZSl9c2V0RXJyb3JGcm9tQ2F1Z2h0RXJyb3IoZSxyLG4pe2lmKHIgaW5zdGFuY2VvZiBicil7ZS5lcnJvcj17dGV4dDpyLmVycm9yVGV4dCxkYXRhOnIuZXJyb3JEYXRhPz97fX07cmV0dXJufWNvbnNvbGUuZXJyb3IoYFR5cGVkUmVxdWVzdCAke259IGZhaWxlZGApLGUuZXJyb3I9e3RleHQ6dC5pbnRlcm5hbEVycm9yTWVzc2FnZSxkYXRhOnt9fX1hZGRNaWRkbGV3YXJlKGUpe3RoaXMubWlkZGxld2FyZXMucHVzaChlKX1hZGRUeXBlZEhhbmRsZXIoZSl7aWYodGhpcy5nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QoZS5tZXRob2QpKXRocm93IG5ldyBFcnJvcihgYSBUeXBlZEhhbmRsZXIgZm9yICR7ZS5tZXRob2R9IGFscmVkeSBleGlzdHMhIENhbid0IGFkZCBhbm90aGVyIG9uZS5gKTt0aGlzLmhhbmRsZXJNYXAuYWRkKGUpO3RyeXt0aGlzLnZhbGlkYXRlQWZmZWN0ZWRDb21wb3NpdGlvblJvb3RzKCl9Y2F0Y2gobil7dGhyb3cgdGhpcy5oYW5kbGVyTWFwLnJlbW92ZShlKSxufX1hZGRUeXBlZFJvdXRlcihlKXtpZihlPT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgVHlwZWRSb3V0ZXIgY2Fubm90IGJlIGNvbXBvc2VkIHdpdGggaXRzZWxmLiIpO2lmKHRoaXMucm91dGVyTWFwLmZpbmRTeW5jKGE9PmE9PT1lKSlyZXR1cm4oKT0+e307bGV0IG49dGhpcy5jYW5SZWFjaFJvdXRlcihlKSxpPWUuY2FuUmVhY2hSb3V0ZXIodGhpcyk7aWYobiE9PWkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYWRkIGEgYmlkaXJlY3Rpb25hbCBUeXBlZFJvdXRlciBlZGdlIGFjcm9zcyBhbiBleGlzdGluZyBjb21wb3NpdGlvbiBib3VuZGFyeS4iKTt0aGlzLnJvdXRlck1hcC5hZGQoZSksZS5yb3V0ZXJNYXAuYWRkKHRoaXMpO3RyeXt0aGlzLnZhbGlkYXRlQWZmZWN0ZWRDb21wb3NpdGlvblJvb3RzKCl9Y2F0Y2goYSl7dGhyb3cgdGhpcy5yb3V0ZXJNYXAucmVtb3ZlKGUpLGUucm91dGVyTWFwLnJlbW92ZSh0aGlzKSxhfWxldCBzPSExO3JldHVybigpPT57c3x8KHM9ITAsdGhpcy5yb3V0ZXJNYXAucmVtb3ZlKGUpLGUucm91dGVyTWFwLnJlbW92ZSh0aGlzKSl9fWFkZEZhbGxiYWNrUm91dGVyKGUpe2lmKGU9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQSBUeXBlZFJvdXRlciBjYW5ub3QgdXNlIGl0c2VsZiBhcyBhIGZhbGxiYWNrLiIpO2lmKHRoaXMuZmFsbGJhY2tSb3V0ZXJNYXAuZmluZFN5bmMobj0+bj09PWUpKXJldHVybigpPT57fTtpZihlLmNhblJlYWNoUm91dGVyKHRoaXMpKXRocm93IG5ldyBFcnJvcigiQWRkaW5nIHRoaXMgZmFsbGJhY2sgd291bGQgY3JlYXRlIGEgVHlwZWRSb3V0ZXIgY29tcG9zaXRpb24gY3ljbGUuIik7dGhpcy5mYWxsYmFja1JvdXRlck1hcC5hZGQoZSksZS5mYWxsYmFja1BhcmVudFJvdXRlcnMuYWRkKHRoaXMpO3RyeXt0aGlzLnZhbGlkYXRlQWZmZWN0ZWRDb21wb3NpdGlvblJvb3RzKCl9Y2F0Y2gobil7dGhyb3cgdGhpcy5mYWxsYmFja1JvdXRlck1hcC5yZW1vdmUoZSksZS5mYWxsYmFja1BhcmVudFJvdXRlcnMuZGVsZXRlKHRoaXMpLG59bGV0IHI9ITE7cmV0dXJuKCk9PntyfHwocj0hMCx0aGlzLmZhbGxiYWNrUm91dGVyTWFwLnJlbW92ZShlKSxlLmZhbGxiYWNrUGFyZW50Um91dGVycy5kZWxldGUodGhpcykpfX1nZXRNZXRob2ROYW1lcygpe3JldHVyblsuLi50aGlzLmNvbGxlY3RSZWFjaGFibGVIYW5kbGVycygpLmtleXMoKV0uc29ydCgpfWNhblJlYWNoUm91dGVyKGUscj1uZXcgU2V0KXtpZih0aGlzPT09ZSlyZXR1cm4hMDtpZihyLmhhcyh0aGlzKSlyZXR1cm4hMTtyLmFkZCh0aGlzKTtmb3IobGV0IG4gb2ZbLi4udGhpcy5yb3V0ZXJNYXAuZ2V0QXJyYXkoKSwuLi50aGlzLmZhbGxiYWNrUm91dGVyTWFwLmdldEFycmF5KCldKWlmKG4uY2FuUmVhY2hSb3V0ZXIoZSxyKSlyZXR1cm4hMDtyZXR1cm4hMX1jb2xsZWN0UmVhY2hhYmxlSGFuZGxlcnMoZT1uZXcgU2V0LHI9bmV3IE1hcCl7aWYoZS5oYXModGhpcykpcmV0dXJuIHI7ZS5hZGQodGhpcyk7Zm9yKGxldCBuIG9mIHRoaXMuaGFuZGxlck1hcC5nZXRBcnJheSgpKXtsZXQgaT1yLmdldChuLm1ldGhvZCk7aXx8KGk9bmV3IFNldCxyLnNldChuLm1ldGhvZCxpKSksaS5hZGQodGhpcyl9Zm9yKGxldCBuIG9mWy4uLnRoaXMucm91dGVyTWFwLmdldEFycmF5KCksLi4udGhpcy5mYWxsYmFja1JvdXRlck1hcC5nZXRBcnJheSgpXSluLmNvbGxlY3RSZWFjaGFibGVIYW5kbGVycyhlLHIpO3JldHVybiByfWdldEFmZmVjdGVkQ29tcG9zaXRpb25Sb290cygpe2xldCBlPW5ldyBTZXQscj1bdGhpc107Zm9yKDtyLmxlbmd0aD4wOyl7bGV0IG49ci5wb3AoKTtlLmhhcyhuKXx8KGUuYWRkKG4pLHIucHVzaCguLi5uLnJvdXRlck1hcC5nZXRBcnJheSgpLC4uLm4uZmFsbGJhY2tQYXJlbnRSb3V0ZXJzKSl9cmV0dXJuIGV9dmFsaWRhdGVBZmZlY3RlZENvbXBvc2l0aW9uUm9vdHMoKXtmb3IobGV0IGUgb2YgdGhpcy5nZXRBZmZlY3RlZENvbXBvc2l0aW9uUm9vdHMoKSlmb3IobGV0W3Isbl1vZiBlLmNvbGxlY3RSZWFjaGFibGVIYW5kbGVycygpKWlmKG4uc2l6ZT4xKXRocm93IG5ldyBFcnJvcihgVHlwZWRSb3V0ZXIgY29tcG9zaXRpb24gZXhwb3NlcyBtb3JlIHRoYW4gb25lIGhhbmRsZXIgZm9yIG1ldGhvZCAiJHtyfSIuYCl9Y2hlY2tGb3JUeXBlZEhhbmRsZXIoZSl7cmV0dXJuISF0aGlzLmdldFR5cGVkSGFuZGxlckZvck1ldGhvZChlKX1nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QoZSxyPVtdKXtyLnB1c2godGhpcyk7bGV0IG47cmV0dXJuIG49dGhpcy5oYW5kbGVyTWFwLmZpbmRTeW5jKGk9PmkubWV0aG9kPT09ZSksbnx8dGhpcy5yb3V0ZXJNYXAuZ2V0QXJyYXkoKS5mb3JFYWNoKGk9PnshbiYmIXIuaW5jbHVkZXMoaSkmJihuPWkuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKGUscikpfSksbnx8dGhpcy5mYWxsYmFja1JvdXRlck1hcC5nZXRBcnJheSgpLmZvckVhY2goaT0+eyFuJiYhci5pbmNsdWRlcyhpKSYmKG49aS5nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QoZSxyKSl9KSxufWdldFR5cGVkSGFuZGxlckFuZFJvdXRlcihlLHI9W10pe3IucHVzaCh0aGlzKTtsZXQgbj10aGlzLmhhbmRsZXJNYXAuZmluZFN5bmMoaT0+aS5tZXRob2Q9PT1lKTtpZihuKXJldHVybntoYW5kbGVyOm4scm91dGVyOnRoaXN9O2ZvcihsZXQgaSBvZiB0aGlzLnJvdXRlck1hcC5nZXRBcnJheSgpKWlmKCFyLmluY2x1ZGVzKGkpKXtsZXQgcz1pLmdldFR5cGVkSGFuZGxlckFuZFJvdXRlcihlLHIpO2lmKHMpcmV0dXJuIHN9Zm9yKGxldCBpIG9mIHRoaXMuZmFsbGJhY2tSb3V0ZXJNYXAuZ2V0QXJyYXkoKSlpZighci5pbmNsdWRlcyhpKSl7bGV0IHM9aS5nZXRUeXBlZEhhbmRsZXJBbmRSb3V0ZXIoZSxyKTtpZihzKXJldHVybiBzfXJldHVybiBudWxsfXN0YXRpY3t0aGlzLmRlZmF1bHRSb3V0ZU9wdGlvbnM9e2xvY2FsUmVxdWVzdDohMSxza2lwSG9va3M6ITF9fWFzeW5jIHJvdXRlQW5kQWRkUmVzcG9uc2UoZSxyPXt9KXtpZighZXx8dHlwZW9mIGUhPSJvYmplY3QiKXJldHVybiBudWxsO2xldCBuO3RyeXtuPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCJsb2NhbERhdGEiKX1jYXRjaHtyZXR1cm4gbnVsbH1sZXQgaT17Li4udC5kZWZhdWx0Um91dGVPcHRpb25zLC4uLnJ9O2lmKCF0aGlzLnNhbml0aXplSW5jb21pbmdMb2NhbERhdGEoZSkpcmV0dXJuIG51bGw7bGV0IHM9T2JqZWN0LmZyZWV6ZSh7Li4uaS50cnVzdGVkTG9jYWxEYXRhPz97fX0pO2lmKGU/LmNvcnJlbGF0aW9uPy5waGFzZT09PSJyZXNwb25zZSIpe2xldCBtPW5oKGUpO2lmKCFtKXJldHVybiBudWxsO2lmKHRoaXMuaW5jb21pbmdSZXNwb25zZUF1dGhvcml0eUd1YXJkKXtsZXQgZz1PYmplY3QuZnJlZXplKHt0eXBlZFJvdXRlcjp0aGlzLHRydXN0ZWRMb2NhbERhdGE6cyx3aXJlTG9jYWxEYXRhUHJlc2VudDpufSkseT0hMTt0cnl7eT10aGlzLmluY29taW5nUmVzcG9uc2VBdXRob3JpdHlHdWFyZChlLGcpPT09ITB9Y2F0Y2h7fWlmKCF5KXJldHVybiBudWxsfXJldHVybiBpLnNraXBIb29rc3x8dGhpcy5jYWxsSG9vaygib25JbmNvbWluZ1Jlc3BvbnNlIix7Y29ycmVsYXRpb25JZDplLmNvcnJlbGF0aW9uLmlkLG1ldGhvZDplLm1ldGhvZCxkaXJlY3Rpb246ImluY29taW5nIixwaGFzZToicmVzcG9uc2UiLHRpbWVzdGFtcDpEYXRlLm5vdygpLHBheWxvYWQ6ZS5yZXNwb25zZSxlcnJvclRleHQ6ZS5lcnJvcj8udGV4dH0pLHRoaXMuZmlyZUV2ZW50SW50ZXJlc3RNYXAuZmluZEludGVyZXN0KG0pPy5mdWxsZmlsbEludGVyZXN0KGUpLG51bGx9aWYoZT8uY29ycmVsYXRpb24/LnBoYXNlIT09InJlcXVlc3QifHx0eXBlb2YgZS5jb3JyZWxhdGlvbi5pZCE9InN0cmluZyJ8fGUuY29ycmVsYXRpb24uaWQubGVuZ3RoPT09MHx8dHlwZW9mIGUubWV0aG9kIT0ic3RyaW5nInx8ZS5tZXRob2QubGVuZ3RoPT09MHx8IWUucmVxdWVzdHx8dHlwZW9mIGUucmVxdWVzdCE9Im9iamVjdCIpcmV0dXJuIGNvbnNvbGUubG9nKCJUeXBlZFJvdXRlciByZWNlaXZlZCBhIG1hbGZvcm1lZCByZXF1ZXN0IERUTyIpLG51bGw7aWYodGhpcy5pbmNvbWluZ1JlcXVlc3RBdXRob3JpdHlHdWFyZCl7bGV0IG09T2JqZWN0LmZyZWV6ZSh7dHlwZWRSb3V0ZXI6dGhpcyx0cnVzdGVkTG9jYWxEYXRhOnMsd2lyZUxvY2FsRGF0YVByZXNlbnQ6bn0pLGc9ITE7dHJ5e2c9dGhpcy5pbmNvbWluZ1JlcXVlc3RBdXRob3JpdHlHdWFyZChlLG0pPT09ITB9Y2F0Y2h7fWlmKCFnKXJldHVybiBudWxsfWxldCBhLGw9aS50cnVzdGVkQWJvcnRTaWduYWw7aWYobCE9PXZvaWQgMCYmIXRoaXMuaXNBYm9ydFNpZ25hbChsKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUeXBlZFJvdXRlciB0cnVzdGVkQWJvcnRTaWduYWwgbXVzdCBiZSBhbiBBYm9ydFNpZ25hbCIpO2lmKCFsJiZ0aGlzLmluY29taW5nUmVxdWVzdFNpZ25hbFJlc29sdmVyKXtpZih0eXBlb2YgZS5yZXF1ZXN0SW5zdGFuY2VJZCE9InN0cmluZyJ8fGUucmVxdWVzdEluc3RhbmNlSWQubGVuZ3RoPT09MClyZXR1cm4gbnVsbDtsZXQgbT1PYmplY3QuZnJlZXplKHt0eXBlZFJvdXRlcjp0aGlzLHRydXN0ZWRMb2NhbERhdGE6cyx3aXJlTG9jYWxEYXRhUHJlc2VudDpufSk7dHJ5e2E9dGhpcy5pbmNvbWluZ1JlcXVlc3RTaWduYWxSZXNvbHZlcihlLG0pfWNhdGNoe3JldHVybiBudWxsfWlmKGEmJighdGhpcy5pc0Fib3J0U2lnbmFsKGEuYWJvcnRTaWduYWwpfHx0eXBlb2YgYS5jb21wbGV0ZSE9ImZ1bmN0aW9uIikpe3RyeXthLmNvbXBsZXRlPy4oKX1jYXRjaHt9cmV0dXJuIG51bGx9bD1hPy5hYm9ydFNpZ25hbH1sZXQgYzt0cnl7Yz10aGlzLnZpcnR1YWxTdHJlYW1UcmFuc3BvcnRSZXNvbHZlcj8uKHMpfWNhdGNoKG0pe3RyeXthPy5jb21wbGV0ZSgpfWNhdGNoe310aHJvdyBtfWxldCB1PW5ldyBBbixmPW5ldyBBbixwPW8oYXN5bmMgbT0+e2F3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbdS5yb2xsYmFjayhtKSxmLnJvbGxiYWNrKG0pXSl9LCJyb2xsYmFja1JvdXRlQWN0aXZhdGlvbnMiKSxoPW8oKCk9Pnt1LmNvbW1pdCgpLGYuY29tbWl0KCl9LCJjb21taXRSb3V0ZUFjdGl2YXRpb25zIiksZD1vKGFzeW5jKCk9PihkZWxldGUgZS5sb2NhbERhdGEsJHIuZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsoZSx7c2lkZToicmVzcG9uZGluZyIsdmlydHVhbFN0cmVhbVRyYW5zcG9ydDpjLGFjdGl2YXRpb25TY29wZTpmfSkpLCJlbmNvZGVSZXNwb25zZSIpO3RyeXtpZihlPWF3YWl0ICRyLmRlY29kZVBheWxvYWRGcm9tTmV0d29ya0FzeW5jKGUse3NpZGU6InJlc3BvbmRpbmciLHZpcnR1YWxTdHJlYW1UcmFuc3BvcnQ6YyxhY3RpdmF0aW9uU2NvcGU6dSxhYm9ydFNpZ25hbDpsfSksZS5sb2NhbERhdGE9ey4uLnN9LGUubG9jYWxEYXRhLmZpcnN0VHlwZWRyb3V0ZXI9dGhpcyxlPy5jb3JyZWxhdGlvbj8ucGhhc2U9PT0icmVxdWVzdCIpe2xldCBtPURhdGUubm93KCk7aS5za2lwSG9va3N8fHRoaXMuY2FsbEhvb2soIm9uSW5jb21pbmdSZXF1ZXN0Iix7Y29ycmVsYXRpb25JZDplLmNvcnJlbGF0aW9uPy5pZHx8InVua25vd24iLG1ldGhvZDplLm1ldGhvZCxkaXJlY3Rpb246ImluY29taW5nIixwaGFzZToicmVxdWVzdCIsdGltZXN0YW1wOm0scGF5bG9hZDplLnJlcXVlc3R9KTtsZXQgZz10aGlzLmdldFR5cGVkSGFuZGxlckFuZFJvdXRlcihlLm1ldGhvZCk7aWYoIWcpcmV0dXJuIGNvbnNvbGUubG9nKGBDYW5ub3QgZmluZCBoYW5kbGVyIGZvciBtZXRob2RuYW1lICR7ZS5tZXRob2R9YCksZS5lcnJvcj17dGV4dDoiVGhlcmUgaXMgbm8gYXZhaWxhYmxlIG1ldGhvZCBmb3IgdGhpcyBjYWxsIG9uIHRoZSBzZXJ2ZXIgc2lkZSIsZGF0YTp7fX0sZS5jb3JyZWxhdGlvbi5waGFzZT0icmVzcG9uc2UiLGU9YXdhaXQgZCgpLGF3YWl0IHAoZS5lcnJvciksaS5za2lwSG9va3N8fHRoaXMuY2FsbEhvb2soIm9uT3V0Z29pbmdSZXNwb25zZSIse2NvcnJlbGF0aW9uSWQ6ZS5jb3JyZWxhdGlvbj8uaWR8fCJ1bmtub3duIixtZXRob2Q6ZS5tZXRob2QsZGlyZWN0aW9uOiJvdXRnb2luZyIscGhhc2U6InJlc3BvbnNlIix0aW1lc3RhbXA6RGF0ZS5ub3coKSxkdXJhdGlvbk1zOkRhdGUubm93KCktbSxwYXlsb2FkOmUucmVzcG9uc2UsZXJyb3JUZXh0OmUuZXJyb3I/LnRleHR9KSx0aGlzLmFzc2VydFRydXN0ZWRBYm9ydFNpZ25hbEFjdGl2ZShsKSxlO2xldHtoYW5kbGVyOnkscm91dGVyOnh9PWc7aWYoeC5taWRkbGV3YXJlcy5sZW5ndGg+MCl0cnl7Zm9yKGxldCBUIG9mIHgubWlkZGxld2FyZXMpYXdhaXQgVChlKX1jYXRjaChUKXtyZXR1cm4gdGhpcy5zZXRFcnJvckZyb21DYXVnaHRFcnJvcihlLFQsYG1pZGRsZXdhcmUgZm9yIG1ldGhvZCAnJHtlLm1ldGhvZH0nYCksZS5jb3JyZWxhdGlvbi5waGFzZT0icmVzcG9uc2UiLGU9YXdhaXQgZCgpLGF3YWl0IHAoVCksaS5za2lwSG9va3N8fHRoaXMuY2FsbEhvb2soIm9uT3V0Z29pbmdSZXNwb25zZSIse2NvcnJlbGF0aW9uSWQ6ZS5jb3JyZWxhdGlvbj8uaWR8fCJ1bmtub3duIixtZXRob2Q6ZS5tZXRob2QsZGlyZWN0aW9uOiJvdXRnb2luZyIscGhhc2U6InJlc3BvbnNlIix0aW1lc3RhbXA6RGF0ZS5ub3coKSxkdXJhdGlvbk1zOkRhdGUubm93KCktbSxwYXlsb2FkOmUucmVzcG9uc2UsZXJyb3JUZXh0OmUuZXJyb3I/LnRleHR9KSx0aGlzLmFzc2VydFRydXN0ZWRBYm9ydFNpZ25hbEFjdGl2ZShsKSxlfXUuYXV0aG9yaXplQXBwbGljYXRpb25Vc2UoKSxlPWF3YWl0IHkuYWRkUmVzcG9uc2UoZSxsKTtsZXQgaz0hIWUuZXJyb3I7cmV0dXJuIGU9YXdhaXQgZCgpLGsmJmF3YWl0IHAoZS5lcnJvciksaS5za2lwSG9va3N8fHRoaXMuY2FsbEhvb2soIm9uT3V0Z29pbmdSZXNwb25zZSIse2NvcnJlbGF0aW9uSWQ6ZS5jb3JyZWxhdGlvbj8uaWR8fCJ1bmtub3duIixtZXRob2Q6ZS5tZXRob2QsZGlyZWN0aW9uOiJvdXRnb2luZyIscGhhc2U6InJlc3BvbnNlIix0aW1lc3RhbXA6RGF0ZS5ub3coKSxkdXJhdGlvbk1zOkRhdGUubm93KCktbSxwYXlsb2FkOmUucmVzcG9uc2UsZXJyb3JUZXh0OmUuZXJyb3I/LnRleHR9KSxrfHwodGhpcy5hc3NlcnRUcnVzdGVkQWJvcnRTaWduYWxBY3RpdmUobCksaCgpKSx0aGlzLmFzc2VydFRydXN0ZWRBYm9ydFNpZ25hbEFjdGl2ZShsKSxlfXJldHVybiBhd2FpdCBwKG5ldyBFcnJvcigiVHlwZWRSb3V0ZXIgcmVjZWl2ZWQgYW4gdW5yb3V0YWJsZSByZXF1ZXN0IERUTyIpKSx0aGlzLmFzc2VydFRydXN0ZWRBYm9ydFNpZ25hbEFjdGl2ZShsKSxudWxsfWNhdGNoKG0pe3Rocm93IGF3YWl0IHAobSksbX1maW5hbGx5e3RyeXthPy5jb21wbGV0ZSgpfWNhdGNoe319fXNhbml0aXplSW5jb21pbmdMb2NhbERhdGEoZSl7dHJ5e2xldCByPVJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsImxvY2FsRGF0YSIpO2lmKHImJihyLmNvbmZpZ3VyYWJsZSE9PSEwfHwhUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShlLCJsb2NhbERhdGEiKSkpcmV0dXJuITE7aWYoIVJlZmxlY3QuaGFzKGUsImxvY2FsRGF0YSIpKXJldHVybiEwO2lmKCFSZWZsZWN0LmlzRXh0ZW5zaWJsZShlKXx8IVJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZSwibG9jYWxEYXRhIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6dm9pZCAwLHdyaXRhYmxlOiEwfSkpcmV0dXJuITE7bGV0IG49UmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwibG9jYWxEYXRhIik7cmV0dXJuISEobiYmbi5jb25maWd1cmFibGU9PT0hMCYmbi5lbnVtZXJhYmxlPT09ITEmJm4udmFsdWU9PT12b2lkIDAmJm4ud3JpdGFibGU9PT0hMCl9Y2F0Y2h7cmV0dXJuITF9fWlzQWJvcnRTaWduYWwoZSl7cmV0dXJuISEoZSYmdHlwZW9mIGU9PSJvYmplY3QiJiZ0eXBlb2YgUmVmbGVjdC5nZXQoZSwiYWJvcnRlZCIpPT0iYm9vbGVhbiImJnR5cGVvZiBSZWZsZWN0LmdldChlLCJhZGRFdmVudExpc3RlbmVyIik9PSJmdW5jdGlvbiImJnR5cGVvZiBSZWZsZWN0LmdldChlLCJyZW1vdmVFdmVudExpc3RlbmVyIik9PSJmdW5jdGlvbiIpfWFzc2VydFRydXN0ZWRBYm9ydFNpZ25hbEFjdGl2ZShlKXtpZihlPy5hYm9ydGVkKXRocm93IGUucmVhc29uPz9uZXcgRE9NRXhjZXB0aW9uKCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkIiwiQWJvcnRFcnJvciIpfX07dmFyIGN5PWNsYXNze3N0YXRpY3tvKHRoaXMsIlR5cGVkVGFyZ2V0Iil9Y29uc3RydWN0b3IoZSl7aWYodGhpcy5pc0FzeW5jPSExLGUucG9zdE1ldGhvZFdpdGhUeXBlZFJvdXRlciYmIWUudHlwZWRSb3V0ZXJSZWYpdGhyb3cgbmV3IEVycm9yKCJ5b3UgaGF2ZSB0byBzcGVjaWZ5IGEgdHlwZWRyb3V0ZXIgd2hlbiB1c2luZyBwb3N0bWV0aG9kIHdpdGggdHlwZWRyb3V0ZXIiKTtsZXQgcj1lLnJlc3BvbnNlVGltZW91dE1zPz8zZTQ7aWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHIpfHxyPD0wfHxyPjIxNDc0ODM2NDcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlR5cGVkVGFyZ2V0IHJlc3BvbnNlVGltZW91dE1zIG11c3QgYmUgYSBwb3NpdGl2ZSBzYWZlIGludGVnZXIgbm8gZ3JlYXRlciB0aGFuIDIxNDc0ODM2NDciKTt0aGlzLm9wdGlvbnM9ZSx0aGlzLnJlc3BvbnNlVGltZW91dE1zPXJ9YXN5bmMgcG9zdChlLHI9e30pe2lmKHIuc2lnbmFsJiZ0aGlzLm9wdGlvbnMuc3VwcG9ydHNBYm9ydFNpZ25hbCE9PSEwKXRocm93IG5ldyBFcnJvcigiVHlwZWRUYXJnZXQgZG9lcyBub3QgZGVjbGFyZSBBYm9ydFNpZ25hbCB0cmFuc3BvcnQgc3VwcG9ydCIpO2xldCBuPXRoaXMub3B0aW9ucy5wb3N0TWV0aG9kfHx0aGlzLm9wdGlvbnMucG9zdE1ldGhvZFdpdGhUeXBlZFJvdXRlcjtpZighbil0aHJvdyBuZXcgRXJyb3IoIlR5cGVkVGFyZ2V0IHJlcXVpcmVzIGEgcG9zdCBtZXRob2QiKTtsZXQgaTtpZih0aGlzLm9wdGlvbnMudHlwZWRSb3V0ZXJSZWYpe2xldCBmPW5oKGUpO2lmKCFmKXRocm93IG5ldyBUeXBlRXJyb3IoIlR5cGVkVGFyZ2V0IHJlcXVlc3QgcmVzcG9uc2UgaWRlbnRpdHkgaXMgbWFsZm9ybWVkIik7aT1hd2FpdCB0aGlzLm9wdGlvbnMudHlwZWRSb3V0ZXJSZWYuZmlyZUV2ZW50SW50ZXJlc3RNYXAuYWRkSW50ZXJlc3QoZixlKX1sZXQgcz1yLnNpZ25hbDtpZihzPy5hYm9ydGVkKXRocm93IGk/LmRlc3Ryb3koKSxzLnJlYXNvbj8/bmV3IERPTUV4Y2VwdGlvbigiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCIsIkFib3J0RXJyb3IiKTtsZXQgYSxsPXM/bmV3IFByb21pc2UoKGYscCk9PnthPW8oKCk9PntpPy5kZXN0cm95KCkscChzLnJlYXNvbj8/bmV3IERPTUV4Y2VwdGlvbigiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCIsIkFib3J0RXJyb3IiKSl9LCJhYm9ydExpc3RlbmVyIikscy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYSx7b25jZTohMH0pfSk6dm9pZCAwLGMsdT1pP25ldyBQcm9taXNlKChmLHApPT57Yz1zZXRUaW1lb3V0KCgpPT57cChuZXcgRXJyb3IoYFR5cGVkVGFyZ2V0IHJlc3BvbnNlIHRpbWVkIG91dCBhZnRlciAke3RoaXMucmVzcG9uc2VUaW1lb3V0TXN9bXNgKSl9LHRoaXMucmVzcG9uc2VUaW1lb3V0TXMpLGMudW5yZWY/LigpfSk6dm9pZCAwO3RyeXtsZXQgZj1Qcm9taXNlLnJlc29sdmUobihlLHIpKSxwPWF3YWl0IFByb21pc2UucmFjZShbZiwuLi51P1t1XTpbXSwuLi5sP1tsXTpbXV0pO3JldHVybiBpP2F3YWl0IFByb21pc2UucmFjZShbaS5pbnRlcmVzdEZ1bGxmaWxsZWQsdSwuLi5sP1tsXTpbXV0pOnB8fGV9ZmluYWxseXtjJiZjbGVhclRpbWVvdXQoYykscyYmYSYmcy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYSksaT8uZGVzdHJveSgpfX19O3ZhciBpaD1uZXcgaXIuV2VicmVxdWVzdENsaWVudCxvaD0yMTQ3NDgzNjQ3LHNoPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiVHlwZWRSZXF1ZXN0VGltZW91dEVycm9yIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihgVHlwZWQgcmVxdWVzdCAiJHtlfSIgdGltZWQgb3V0IGFmdGVyICR7cn1tc2ApLHRoaXMubmFtZT0iVHlwZWRSZXF1ZXN0VGltZW91dEVycm9yIix0aGlzLm1ldGhvZD1lLHRoaXMudGltZW91dE1zPXJ9fSxhaD1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIlR5cGVkUmVxdWVzdFJldHJ5TGltaXRFcnJvciIpfWNvbnN0cnVjdG9yKGUscil7c3VwZXIoYFR5cGVkIHJlcXVlc3QgIiR7ZX0iIGV4Y2VlZGVkIGl0cyAke3J9IHNlcnZlci1kaXJlY3RlZCByZXRyaWVzYCksdGhpcy5uYW1lPSJUeXBlZFJlcXVlc3RSZXRyeUxpbWl0RXJyb3IiLHRoaXMubWV0aG9kPWUsdGhpcy5tYXhSZXRyaWVzPXJ9fSx1eT1jbGFzc3tzdGF0aWN7byh0aGlzLCJUeXBlZFJlcXVlc3QiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuc2tpcEhvb2tzPSExLHR5cGVvZiBlPT0ic3RyaW5nIj90aGlzLnVybEVuZFBvaW50PWU6dGhpcy50eXBlZFRhcmdldD1lLHRoaXMubWV0aG9kPXJ9YXN5bmMgZmlyZShlLHI9ITEpe2xldCBuPURhdGUubm93KCksaT10aGlzLnJlc29sdmVGaXJlT3B0aW9ucyhyKSxzPXRoaXMuY3JlYXRlQWJvcnRDb250ZXh0KGkpO2kuYWJvcnRTaWduYWw9cy5zaWduYWw7bGV0IGE9bmV3IEFuLGw9e21ldGhvZDp0aGlzLm1ldGhvZCxyZXF1ZXN0OmUscmVzcG9uc2U6bnVsbCxyZXF1ZXN0SW5zdGFuY2VJZDpCbC51bmkoKSxjb3JyZWxhdGlvbjp7aWQ6QmwudW5pKCkscGhhc2U6InJlcXVlc3QifX07dHJ5e3RoaXMuYXNzZXJ0QWN0aXZlKGkpO2xldCBjPSRyLmVuY29kZVBheWxvYWRGb3JOZXR3b3JrV2l0aE1ldGFkYXRhKGwse3NpZGU6InJlcXVlc3RpbmciLGFjdGl2YXRpb25TY29wZTphLHZpcnR1YWxTdHJlYW1UcmFuc3BvcnQ6dGhpcy50eXBlZFRhcmdldD8ub3B0aW9ucy52aXJ0dWFsU3RyZWFtVHJhbnNwb3J0fSk7bD1jLnBheWxvYWQ7bGV0IHU9Yy5jb250YWluc05ldHdvcmtEZXNjcmlwdG9yO2lmKHUmJiF0aGlzLnVybEVuZFBvaW50JiZ0aGlzLnR5cGVkVGFyZ2V0Lm9wdGlvbnMuc3VwcG9ydHNBYm9ydFNpZ25hbCE9PSEwKXRocm93IG5ldyBFcnJvcigiVmlydHVhbFN0cmVhbXMgcmVxdWlyZSBUeXBlZFRhcmdldCBBYm9ydFNpZ25hbCB0cmFuc3BvcnQgc3VwcG9ydCIpO2lmKGkudXNlQ2FjaGUmJnUpdGhyb3cgbmV3IEVycm9yKCJUeXBlZFJlcXVlc3QgcmVzcG9uc2UgY2FjaGluZyBpcyBub3Qgc3VwcG9ydGVkIGZvciByZXF1ZXN0cyBjb250YWluaW5nIFZpcnR1YWxTdHJlYW1zIik7dGhpcy5hc3NlcnRBY3RpdmUoaSksaS51c2VDYWNoZSYmKGkuY2FjaGVLZXk9YXdhaXQgdGhpcy5jcmVhdGVDYWNoZUtleShsKSx0aGlzLmFzc2VydEFjdGl2ZShpKSksdGhpcy5za2lwSG9va3N8fEtzKCJvbk91dGdvaW5nUmVxdWVzdCIse2NvcnJlbGF0aW9uSWQ6bC5jb3JyZWxhdGlvbi5pZCxtZXRob2Q6dGhpcy5tZXRob2QsZGlyZWN0aW9uOiJvdXRnb2luZyIscGhhc2U6InJlcXVlc3QiLHRpbWVzdGFtcDpuLHBheWxvYWQ6ZX0pLGEucHVibGlzaCgpO2xldCBmPWF3YWl0IHRoaXMucG9zdFRyT2JqZWN0KGwsaSk7ZGVsZXRlIGYubG9jYWxEYXRhO2xldCBwPWYuZXJyb3I7aWYodGhpcy5hc3NlcnRBY3RpdmUoaSkscCl0aHJvdyB0aGlzLnNraXBIb29rc3x8S3MoIm9uSW5jb21pbmdSZXNwb25zZSIse2NvcnJlbGF0aW9uSWQ6bC5jb3JyZWxhdGlvbi5pZCxtZXRob2Q6dGhpcy5tZXRob2QsZGlyZWN0aW9uOiJpbmNvbWluZyIscGhhc2U6InJlc3BvbnNlIix0aW1lc3RhbXA6RGF0ZS5ub3coKSxkdXJhdGlvbk1zOkRhdGUubm93KCktbixwYXlsb2FkOmYucmVzcG9uc2UsZXJyb3JUZXh0OnAudGV4dH0pLHRoaXMuYXNzZXJ0QWN0aXZlKGkpLG5ldyBicihwLnRleHQscC5kYXRhKTtsZXQgaD1mLnJlc3BvbnNlO2lmKCF0aGlzLnVybEVuZFBvaW50JiZ0aGlzLnR5cGVkVGFyZ2V0Lm9wdGlvbnMuc3VwcG9ydHNBYm9ydFNpZ25hbCE9PSEwJiYkci5jb250YWluc05ldHdvcmtEZXNjcmlwdG9yKGgpKXRocm93IG5ldyBFcnJvcigiVmlydHVhbFN0cmVhbXMgcmVxdWlyZSBUeXBlZFRhcmdldCBBYm9ydFNpZ25hbCB0cmFuc3BvcnQgc3VwcG9ydCIpO3RyeXtoPWF3YWl0ICRyLmRlY29kZVBheWxvYWRGcm9tTmV0d29ya0FzeW5jKGgse3NpZGU6InJlcXVlc3RpbmciLGFjdGl2YXRpb25TY29wZTphLHZpcnR1YWxTdHJlYW1UcmFuc3BvcnQ6dGhpcy50eXBlZFRhcmdldD8ub3B0aW9ucy52aXJ0dWFsU3RyZWFtVHJhbnNwb3J0LG9wZW5EZWFkbGluZUF0OmkuZGVhZGxpbmVBdCxhYm9ydFNpZ25hbDppLmFib3J0U2lnbmFsfSl9Y2F0Y2goZCl7dGhyb3cgZCBpbnN0YW5jZW9mIHhvJiZpLmRlYWRsaW5lQXQhPT12b2lkIDAmJmQuZGVhZGxpbmVBdD09PWkuZGVhZGxpbmVBdD90aGlzLmNyZWF0ZVRpbWVvdXRFcnJvcihpKTpkfXJldHVybiB0aGlzLmFzc2VydEFjdGl2ZShpKSxhLmF1dGhvcml6ZUFwcGxpY2F0aW9uVXNlKCksdGhpcy5za2lwSG9va3N8fEtzKCJvbkluY29taW5nUmVzcG9uc2UiLHtjb3JyZWxhdGlvbklkOmwuY29ycmVsYXRpb24uaWQsbWV0aG9kOnRoaXMubWV0aG9kLGRpcmVjdGlvbjoiaW5jb21pbmciLHBoYXNlOiJyZXNwb25zZSIsdGltZXN0YW1wOkRhdGUubm93KCksZHVyYXRpb25NczpEYXRlLm5vdygpLW4scGF5bG9hZDpofSksdGhpcy5hc3NlcnRBY3RpdmUoaSksYS5jb21taXQoKSxofWNhdGNoKGMpe3Rocm93IGF3YWl0IGEucm9sbGJhY2soYyksY31maW5hbGx5e3MuY2xlYW51cCgpfX1hc3luYyBwb3N0VHJPYmplY3QoZSxyPXt1c2VDYWNoZTohMSxtYXhSZXRyaWVzOjN9KXtsZXQgbj0wO2Zvcig7Oyl7dGhpcy5hc3NlcnRBY3RpdmUocik7bGV0IGk9dGhpcy5jcmVhdGVSZXF1ZXN0SWRlbnRpdHlTbmFwc2hvdChlKSxzO2lmKHRoaXMudXJsRW5kUG9pbnQpe2xldCBhO3RyeXthPWF3YWl0IGloLnBvc3RKc29uV2l0aE1ldGFkYXRhKHRoaXMudXJsRW5kUG9pbnQsZSx7Y2FjaGVTdHJhdGVneTpyLnVzZUNhY2hlPyJjYWNoZS1maXJzdCI6Im5ldHdvcmstb25seSIsY2FjaGVLZXk6ci5jYWNoZUtleSx0aW1lb3V0OnRoaXMuZ2V0UmVtYWluaW5nVGltZW91dChyKSxzaWduYWw6ci5hYm9ydFNpZ25hbH0pfWNhdGNoKGwpe3Rocm93IHIuY2FjaGVLZXkmJmwgaW5zdGFuY2VvZiBTeW50YXhFcnJvciYmYXdhaXQgaWguZGVsZXRlQ2FjaGUoci5jYWNoZUtleSksci5hYm9ydFNpZ25hbD8uYWJvcnRlZD90aGlzLmdldEFib3J0UmVhc29uKHIpOnIudGltZW91dE1zIT09dm9pZCAwJiYodGhpcy5oYXNEZWFkbGluZUV4cGlyZWQocil8fGlyLmlzV2VicmVxdWVzdFRpbWVvdXRFcnJvcihsKSk/dGhpcy5jcmVhdGVUaW1lb3V0RXJyb3Iocik6bH1zPWEuZGF0YTt0cnl7YS5tZXRhZGF0YS5mcm9tQ2FjaGU/cz10aGlzLnJlY29uc3RydWN0Q2FjaGVkSHR0cFJlc3BvbnNlKHMsZSxpKTp0aGlzLmFzc2VydFJlc3BvbnNlRW52ZWxvcGUocyxpKX1jYXRjaChsKXt0aHJvdyByLmNhY2hlS2V5JiZhd2FpdCBpaC5kZWxldGVDYWNoZShyLmNhY2hlS2V5KSxsfXIuY2FjaGVLZXkmJiF0aGlzLmlzUmV1c2FibGVDYWNoZWRIdHRwRW52ZWxvcGUocykmJmF3YWl0IGloLmRlbGV0ZUNhY2hlKHIuY2FjaGVLZXkpfWVsc2Ugcz1hd2FpdCB0aGlzLnBvc3RUeXBlZFRhcmdldChlLHIpO2lmKHRoaXMuYXNzZXJ0UmVzcG9uc2VFbnZlbG9wZShzLGkpLHRoaXMuYXNzZXJ0QWN0aXZlKHIpLHMuZXJyb3ImJiFzLnJldHJ5fHwhcy5yZXRyeSlyZXR1cm4gcztpZihjb25zb2xlLmxvZyhgU2VydmVyIHJlcXVlc3RlZCBhIHJldHJ5IGZvciBUeXBlZFJlcXVlc3QgbWV0aG9kICcke3RoaXMubWV0aG9kfSdgKSxuPj1yLm1heFJldHJpZXMpdGhyb3cgbmV3IGFoKHRoaXMubWV0aG9kLHIubWF4UmV0cmllcyk7bis9MSxhd2FpdCB0aGlzLndhaXRGb3JSZXRyeShzLnJldHJ5LndhaXRGb3JNcyxyKSxlLnJlcXVlc3RJbnN0YW5jZUlkPUJsLnVuaSgpLGUuY29ycmVsYXRpb24ucGhhc2U9InJlcXVlc3QiLGUucmVzcG9uc2U9bnVsbCxkZWxldGUgZS5lcnJvcixkZWxldGUgZS5yZXRyeX19YXNzZXJ0UmVzcG9uc2VFbnZlbG9wZShlLHIpe2xldCBuPWU/LmVycm9yLGk9ZT8ucmVxdWVzdEluc3RhbmNlSWQscz1yLnJlcXVlc3RJbnN0YW5jZUlkO2lmKCFlfHx0eXBlb2YgZSE9Im9iamVjdCJ8fGUubWV0aG9kIT09ci5tZXRob2R8fGUuY29ycmVsYXRpb24/LnBoYXNlIT09InJlc3BvbnNlInx8dHlwZW9mIGUuY29ycmVsYXRpb24uaWQhPSJzdHJpbmcifHxlLmNvcnJlbGF0aW9uLmlkLmxlbmd0aD09PTB8fCFPYmplY3QuaGFzT3duKGUsInJlc3BvbnNlIil8fHR5cGVvZiBpIT0ic3RyaW5nInx8aS5sZW5ndGg9PT0wfHx0eXBlb2YgcyE9InN0cmluZyJ8fHMubGVuZ3RoPT09MHx8aSE9PXN8fG4hPT12b2lkIDAmJighbnx8dHlwZW9mIG4hPSJvYmplY3QifHx0eXBlb2Ygbi50ZXh0IT0ic3RyaW5nIil8fGUuY29ycmVsYXRpb24uaWQhPT1yLmNvcnJlbGF0aW9uSWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVHlwZWRSZXF1ZXN0IHJlY2VpdmVkIGFuIGludmFsaWQgcmVzcG9uc2UgZW52ZWxvcGUiKX1hc3luYyBwb3N0VHlwZWRUYXJnZXQoZSxyKXt0aGlzLmFzc2VydEFjdGl2ZShyKTt0cnl7cmV0dXJuIGF3YWl0IHRoaXMudHlwZWRUYXJnZXQucG9zdChlLHtzaWduYWw6ci5hYm9ydFNpZ25hbH0pfWNhdGNoKG4pe3Rocm93IHIuYWJvcnRTaWduYWw/LmFib3J0ZWQ/dGhpcy5nZXRBYm9ydFJlYXNvbihyKTpufX1yZXNvbHZlRmlyZU9wdGlvbnMoZSl7bGV0IHI9dHlwZW9mIGU9PSJib29sZWFuIj97dXNlQ2FjaGU6ZX06ZTtpZighcnx8dHlwZW9mIHIhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIlR5cGVkUmVxdWVzdCBmaXJlIG9wdGlvbnMgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYW4gb3B0aW9ucyBvYmplY3QiKTtpZihyLnVzZUNhY2hlIT09dm9pZCAwJiZ0eXBlb2Ygci51c2VDYWNoZSE9ImJvb2xlYW4iKXRocm93IG5ldyBUeXBlRXJyb3IoIlR5cGVkUmVxdWVzdCB1c2VDYWNoZSBtdXN0IGJlIGEgYm9vbGVhbiIpO2lmKHIudGltZW91dE1zIT09dm9pZCAwJiYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHIudGltZW91dE1zKXx8ci50aW1lb3V0TXM8PTB8fHIudGltZW91dE1zPm9oKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVHlwZWRSZXF1ZXN0IHRpbWVvdXRNcyBtdXN0IGJlIGEgcG9zaXRpdmUgc2FmZSBpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbiAke29ofWApO2lmKHIuYWJvcnRTaWduYWwhPT12b2lkIDAmJiF0aGlzLmlzQWJvcnRTaWduYWwoci5hYm9ydFNpZ25hbCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVHlwZWRSZXF1ZXN0IGFib3J0U2lnbmFsIG11c3QgYmUgYW4gQWJvcnRTaWduYWwiKTtpZihyLm1heFJldHJpZXMhPT12b2lkIDAmJighTnVtYmVyLmlzU2FmZUludGVnZXIoci5tYXhSZXRyaWVzKXx8ci5tYXhSZXRyaWVzPDB8fHIubWF4UmV0cmllcz4xZTMpKXRocm93IG5ldyBSYW5nZUVycm9yKCJUeXBlZFJlcXVlc3QgbWF4UmV0cmllcyBtdXN0IGJlIGEgc2FmZSBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMTAwMCIpO2lmKChyLnRpbWVvdXRNcyE9PXZvaWQgMHx8ci5hYm9ydFNpZ25hbCE9PXZvaWQgMCkmJiF0aGlzLnVybEVuZFBvaW50JiZ0aGlzLnR5cGVkVGFyZ2V0Lm9wdGlvbnMuc3VwcG9ydHNBYm9ydFNpZ25hbCE9PSEwKXRocm93IG5ldyBFcnJvcihyLmFib3J0U2lnbmFsPyJUeXBlZFJlcXVlc3QgY2FuY2VsbGF0aW9uIHJlcXVpcmVzIGFuIEhUVFAgVVJMIG9yIGEgVHlwZWRUYXJnZXQgd2l0aCBBYm9ydFNpZ25hbCBzdXBwb3J0IjoiVHlwZWRSZXF1ZXN0IHRpbWVvdXRNcyByZXF1aXJlcyBhbiBIVFRQIFVSTCBvciBhIFR5cGVkVGFyZ2V0IHdpdGggQWJvcnRTaWduYWwgc3VwcG9ydCIpO3JldHVybnt1c2VDYWNoZTpyLnVzZUNhY2hlPz8hMSx0aW1lb3V0TXM6ci50aW1lb3V0TXMsbWF4UmV0cmllczpyLm1heFJldHJpZXM/PzMsYWJvcnRTaWduYWw6ci5hYm9ydFNpZ25hbCxkZWFkbGluZUF0OnIudGltZW91dE1zPT09dm9pZCAwP3ZvaWQgMDpwZXJmb3JtYW5jZS5ub3coKStyLnRpbWVvdXRNc319Z2V0UmVtYWluaW5nVGltZW91dChlKXtpZihlLmRlYWRsaW5lQXQ9PT12b2lkIDB8fGUudGltZW91dE1zPT09dm9pZCAwKXJldHVybjtsZXQgcj1NYXRoLmNlaWwoZS5kZWFkbGluZUF0LXBlcmZvcm1hbmNlLm5vdygpKTtpZihyPD0wKXRocm93IHRoaXMuY3JlYXRlVGltZW91dEVycm9yKGUpO3JldHVybiByfWFzc2VydERlYWRsaW5lKGUpe3RoaXMuZ2V0UmVtYWluaW5nVGltZW91dChlKX1hc3NlcnRBY3RpdmUoZSl7aWYoZS5hYm9ydFNpZ25hbD8uYWJvcnRlZCl0aHJvdyB0aGlzLmdldEFib3J0UmVhc29uKGUpO3RoaXMuYXNzZXJ0RGVhZGxpbmUoZSl9aGFzRGVhZGxpbmVFeHBpcmVkKGUpe3JldHVybiBlLmRlYWRsaW5lQXQhPT12b2lkIDAmJnBlcmZvcm1hbmNlLm5vdygpPj1lLmRlYWRsaW5lQXR9Y3JlYXRlVGltZW91dEVycm9yKGUpe3JldHVybiBuZXcgc2godGhpcy5tZXRob2QsZS50aW1lb3V0TXMpfWFzeW5jIHdhaXRGb3JSZXRyeShlLHIpe2lmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihlKXx8ZTw9MHx8ZT5vaCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVHlwZWRSZXF1ZXN0IHJldHJ5IHdhaXRGb3JNcyBtdXN0IGJlIGEgcG9zaXRpdmUgc2FmZSBpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbiAke29ofWApO3RoaXMuYXNzZXJ0QWN0aXZlKHIpO2xldCBuPXRoaXMuZ2V0UmVtYWluaW5nVGltZW91dChyKTtpZihuPT09dm9pZCAwKXthd2FpdCB0aGlzLmRlbGF5V2l0aEFib3J0KGUscik7cmV0dXJufWlmKGU+PW4pdGhyb3cgYXdhaXQgdGhpcy5kZWxheVdpdGhBYm9ydChuLHIpLHRoaXMuY3JlYXRlVGltZW91dEVycm9yKHIpO2F3YWl0IHRoaXMuZGVsYXlXaXRoQWJvcnQoZSxyKSx0aGlzLmFzc2VydEFjdGl2ZShyKX1hc3luYyBkZWxheVdpdGhBYm9ydChlLHIpe2xldCBuPXIuYWJvcnRTaWduYWw7aWYoIW4pe2F3YWl0IGxlLmRlbGF5Rm9yKGUpO3JldHVybn1hd2FpdCBuZXcgUHJvbWlzZSgoaSxzKT0+e2xldCBhPXNldFRpbWVvdXQoKCk9PntuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixsKSxpKCl9LGUpLGw9bygoKT0+e2NsZWFyVGltZW91dChhKSxuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixsKSxzKHRoaXMuZ2V0QWJvcnRSZWFzb24ocikpfSwib25BYm9ydCIpO24uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwse29uY2U6ITB9KSxuLmFib3J0ZWQmJmwoKX0pfWNyZWF0ZUFib3J0Q29udGV4dChlKXtsZXQgcj1lLmFib3J0U2lnbmFsO2lmKGUudGltZW91dE1zPT09dm9pZCAwKXJldHVybntzaWduYWw6cixjbGVhbnVwOm8oKCk9Pnt9LCJjbGVhbnVwIil9O2xldCBuPW5ldyBBYm9ydENvbnRyb2xsZXIsaT1vKCgpPT57bi5hYm9ydChyPy5yZWFzb24/P25ldyBET01FeGNlcHRpb24oIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQiLCJBYm9ydEVycm9yIikpfSwib25DYWxsZXJBYm9ydCIpO3I/LmFib3J0ZWQ/aSgpOnI/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixpLHtvbmNlOiEwfSk7bGV0IHM9TWF0aC5tYXgoMCxNYXRoLmNlaWwoZS5kZWFkbGluZUF0LXBlcmZvcm1hbmNlLm5vdygpKSksYT1zZXRUaW1lb3V0KCgpPT57bi5hYm9ydCh0aGlzLmNyZWF0ZVRpbWVvdXRFcnJvcihlKSl9LHMpO3JldHVybiBhLnVucmVmPy4oKSx7c2lnbmFsOm4uc2lnbmFsLGNsZWFudXA6bygoKT0+e2NsZWFyVGltZW91dChhKSxyPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsaSl9LCJjbGVhbnVwIil9fWdldEFib3J0UmVhc29uKGUpe3JldHVybiBlLmFib3J0U2lnbmFsPy5yZWFzb24/P25ldyBET01FeGNlcHRpb24oIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQiLCJBYm9ydEVycm9yIil9cmVjb25zdHJ1Y3RDYWNoZWRIdHRwUmVzcG9uc2UoZSxyLG4pe2lmKCFlfHx0eXBlb2YgZSE9Im9iamVjdCJ8fEFycmF5LmlzQXJyYXkoZSl8fGUubWV0aG9kIT09bi5tZXRob2R8fCFPYmplY3QuaGFzT3duKGUsInJlc3BvbnNlIil8fCFlLnJlc3BvbnNlfHx0eXBlb2YgZS5yZXNwb25zZSE9Im9iamVjdCJ8fCF0aGlzLmlzUmV1c2FibGVDYWNoZWRIdHRwRW52ZWxvcGUoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVHlwZWRSZXF1ZXN0IHJlY2VpdmVkIGFuIGludmFsaWQgY2FjaGVkIHJlc3BvbnNlIGVudmVsb3BlIik7cmV0dXJue21ldGhvZDpuLm1ldGhvZCxyZXF1ZXN0OnIucmVxdWVzdCxyZXNwb25zZTplLnJlc3BvbnNlLHJlcXVlc3RJbnN0YW5jZUlkOm4ucmVxdWVzdEluc3RhbmNlSWQsY29ycmVsYXRpb246e2lkOm4uY29ycmVsYXRpb25JZCxwaGFzZToicmVzcG9uc2UifX19Y3JlYXRlUmVxdWVzdElkZW50aXR5U25hcHNob3QoZSl7cmV0dXJuIE9iamVjdC5mcmVlemUoe21ldGhvZDplLm1ldGhvZCxjb3JyZWxhdGlvbklkOmUuY29ycmVsYXRpb24/LmlkLHJlcXVlc3RJbnN0YW5jZUlkOmUucmVxdWVzdEluc3RhbmNlSWR9KX1pc1JldXNhYmxlQ2FjaGVkSHR0cEVudmVsb3BlKGUpe3JldHVybiFPYmplY3QuaGFzT3duKGUsImVycm9yIikmJiFPYmplY3QuaGFzT3duKGUsInJldHJ5IikmJiEkci5jb250YWluc05ldHdvcmtEZXNjcmlwdG9yKGUpfWlzQWJvcnRTaWduYWwoZSl7cmV0dXJuISEoZSYmdHlwZW9mIGU9PSJvYmplY3QiJiZ0eXBlb2YgUmVmbGVjdC5nZXQoZSwiYWJvcnRlZCIpPT0iYm9vbGVhbiImJnR5cGVvZiBSZWZsZWN0LmdldChlLCJhZGRFdmVudExpc3RlbmVyIik9PSJmdW5jdGlvbiImJnR5cGVvZiBSZWZsZWN0LmdldChlLCJyZW1vdmVFdmVudExpc3RlbmVyIik9PSJmdW5jdGlvbiIpfWFzeW5jIGNyZWF0ZUNhY2hlS2V5KGUpe2xldCByPUpTT04uc3RyaW5naWZ5KHtlbmRwb2ludDp0aGlzLnVybEVuZFBvaW50LG1ldGhvZDplLm1ldGhvZCxyZXF1ZXN0OmUucmVxdWVzdH0pLG49YXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShyKSk7cmV0dXJuYHR5cGVkcmVxdWVzdDp2MToke0FycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkobikscz0+cy50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1gfX07ZnVuY3Rpb24gbVQodCl7cmV0dXJuIHQmJnR5cGVvZiB0LnRoZW49PSJmdW5jdGlvbiJ9byhtVCwiaXNQcm9taXNlIik7dmFyIGdUPVByb21pc2UucmVzb2x2ZSghMSksRUllPVByb21pc2UucmVzb2x2ZSghMCkseW49UHJvbWlzZS5yZXNvbHZlKCk7ZnVuY3Rpb24gbGgodCxlKXtyZXR1cm4gdHx8KHQ9MCksbmV3IFByb21pc2UoZnVuY3Rpb24ocil7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gcihlKX0sdCl9KX1vKGxoLCJzbGVlcCIpO2Z1bmN0aW9uIHlUKHQsZSl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSooZS10KzEpK3QpfW8oeVQsInJhbmRvbUludCIpO2Z1bmN0aW9uIHpsKCl7cmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKX1vKHpsLCJyYW5kb21Ub2tlbiIpO3ZhciBmeT0wO2Z1bmN0aW9uICRuKCl7dmFyIHQ9RGF0ZS5ub3coKSoxZTM7cmV0dXJuIHQ8PWZ5JiYodD1meSsxKSxmeT10LHR9bygkbiwibWljcm9TZWNvbmRzIik7ZnVuY3Rpb24gREllKCl7cmV0dXJuIHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZ0eXBlb2YgbmF2aWdhdG9yLmxvY2tzPCJ1IiYmdHlwZW9mIG5hdmlnYXRvci5sb2Nrcy5yZXF1ZXN0PT0iZnVuY3Rpb24ifW8oREllLCJzdXBwb3J0c1dlYkxvY2tBUEkiKTt2YXIgbjI9JG4saTI9Im5hdGl2ZSI7ZnVuY3Rpb24gbzIodCl7dmFyIGU9e3RpbWU6JG4oKSxtZXNzYWdlc0NhbGxiYWNrOm51bGwsYmM6bmV3IEJyb2FkY2FzdENoYW5uZWwodCksc3ViRm5zOltdfTtyZXR1cm4gZS5iYy5vbm1lc3NhZ2U9ZnVuY3Rpb24ocil7ZS5tZXNzYWdlc0NhbGxiYWNrJiZlLm1lc3NhZ2VzQ2FsbGJhY2soci5kYXRhKX0sZX1vKG8yLCJjcmVhdGUiKTtmdW5jdGlvbiBzMih0KXt0LmJjLmNsb3NlKCksdC5zdWJGbnM9W119byhzMiwiY2xvc2UiKTtmdW5jdGlvbiBhMih0LGUpe3RyeXtyZXR1cm4gdC5iYy5wb3N0TWVzc2FnZShlLCExKSx5bn1jYXRjaChyKXtyZXR1cm4gUHJvbWlzZS5yZWplY3Qocil9fW8oYTIsInBvc3RNZXNzYWdlIik7ZnVuY3Rpb24gbDIodCxlKXt0Lm1lc3NhZ2VzQ2FsbGJhY2s9ZX1vKGwyLCJvbk1lc3NhZ2UiKTtmdW5jdGlvbiBjMigpe2lmKHR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpcy5EZW5vJiZnbG9iYWxUaGlzLkRlbm8uYXJncylyZXR1cm4hMDtpZigodHlwZW9mIHdpbmRvdzwidSJ8fHR5cGVvZiBzZWxmPCJ1IikmJnR5cGVvZiBCcm9hZGNhc3RDaGFubmVsPT0iZnVuY3Rpb24iKXtpZihCcm9hZGNhc3RDaGFubmVsLl9wdWJrZXkpdGhyb3cgbmV3IEVycm9yKCJCcm9hZGNhc3RDaGFubmVsOiBEbyBub3Qgb3ZlcndyaXRlIHdpbmRvdy5Ccm9hZGNhc3RDaGFubmVsIHdpdGggdGhpcyBtb2R1bGUsIHRoaXMgaXMgbm90IGEgcG9seWZpbGwiKTtyZXR1cm4hMH1lbHNlIHJldHVybiExfW8oYzIsImNhbkJlVXNlZCIpO2Z1bmN0aW9uIHUyKCl7cmV0dXJuIDE1MH1vKHUyLCJhdmVyYWdlUmVzcG9uc2VUaW1lIik7dmFyIHhUPXtjcmVhdGU6bzIsY2xvc2U6czIsb25NZXNzYWdlOmwyLHBvc3RNZXNzYWdlOmEyLGNhbkJlVXNlZDpjMix0eXBlOmkyLGF2ZXJhZ2VSZXNwb25zZVRpbWU6dTIsbWljcm9TZWNvbmRzOm4yfTt2YXIgWHM9Y2xhc3N7c3RhdGlje28odGhpcywiT2JsaXZpb3VzU2V0Iil9dHRsO21hcD1uZXcgTWFwO190bz0hMTtjb25zdHJ1Y3RvcihlKXt0aGlzLnR0bD1lfWhhcyhlKXtsZXQgcj10aGlzLm1hcC5nZXQoZSk7cmV0dXJuIHR5cGVvZiByPiJ1Ij8hMTpyPHB5KCktdGhpcy50dGw/KHRoaXMubWFwLmRlbGV0ZShlKSwhMSk6ITB9YWRkKGUpe3RoaXMubWFwLmRlbGV0ZShlKSx0aGlzLm1hcC5zZXQoZSxweSgpKSx0aGlzLl90b3x8KHRoaXMuX3RvPSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLl90bz0hMSxmMih0aGlzKX0sMCkpfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKX19O2Z1bmN0aW9uIGYyKHQpe2xldCBlPXB5KCktdC50dGwscj10Lm1hcFtTeW1ib2wuaXRlcmF0b3JdKCk7Zm9yKDs7KXtsZXQgbj1yLm5leHQoKS52YWx1ZTtpZighbilicmVhaztsZXQgaT1uWzBdO2lmKG5bMV08ZSl0Lm1hcC5kZWxldGUoaSk7ZWxzZSBicmVha319byhmMiwicmVtb3ZlVG9vT2xkVmFsdWVzIik7ZnVuY3Rpb24gcHkoKXtyZXR1cm4gRGF0ZS5ub3coKX1vKHB5LCJub3ciKTtmdW5jdGlvbiBibygpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fSxlPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpO3JldHVybiB0eXBlb2YgZS53ZWJXb3JrZXJTdXBwb3J0PiJ1IiYmKGUud2ViV29ya2VyU3VwcG9ydD0hMCksZS5pZGJ8fChlLmlkYj17fSksZS5pZGIudHRsfHwoZS5pZGIudHRsPTFlMyo0NSksZS5pZGIuZmFsbGJhY2tJbnRlcnZhbHx8KGUuaWRiLmZhbGxiYWNrSW50ZXJ2YWw9MTUwKSx0LmlkYiYmdHlwZW9mIHQuaWRiLm9uY2xvc2U9PSJmdW5jdGlvbiImJihlLmlkYi5vbmNsb3NlPXQuaWRiLm9uY2xvc2UpLGUubG9jYWxzdG9yYWdlfHwoZS5sb2NhbHN0b3JhZ2U9e30pLGUubG9jYWxzdG9yYWdlLnJlbW92ZVRpbWVvdXR8fChlLmxvY2Fsc3RvcmFnZS5yZW1vdmVUaW1lb3V0PTFlMyo2MCksdC5tZXRob2RzJiYoZS5tZXRob2RzPXQubWV0aG9kcyksZS5ub2RlfHwoZS5ub2RlPXt9KSxlLm5vZGUudHRsfHwoZS5ub2RlLnR0bD0xZTMqNjAqMiksZS5ub2RlLm1heFBhcmFsbGVsV3JpdGVzfHwoZS5ub2RlLm1heFBhcmFsbGVsV3JpdGVzPTIwNDgpLHR5cGVvZiBlLm5vZGUudXNlRmFzdFBhdGg+InUiJiYoZS5ub2RlLnVzZUZhc3RQYXRoPSEwKSxlfW8oYm8sImZpbGxPcHRpb25zV2l0aERlZmF1bHRzIik7dmFyIHAyPSRuLGgyPSJwdWJrZXkuYnJvYWRjYXN0LWNoYW5uZWwtMC0iLEJyPSJtZXNzYWdlcyIsSGw9e2R1cmFiaWxpdHk6InJlbGF4ZWQifSxkMj0iaWRiIjtmdW5jdGlvbiBiVCgpe2lmKHR5cGVvZiBpbmRleGVkREI8InUiKXJldHVybiBpbmRleGVkREI7aWYodHlwZW9mIHdpbmRvdzwidSIpe2lmKHR5cGVvZiB3aW5kb3cubW96SW5kZXhlZERCPCJ1IilyZXR1cm4gd2luZG93Lm1vekluZGV4ZWREQjtpZih0eXBlb2Ygd2luZG93LndlYmtpdEluZGV4ZWREQjwidSIpcmV0dXJuIHdpbmRvdy53ZWJraXRJbmRleGVkREI7aWYodHlwZW9mIHdpbmRvdy5tc0luZGV4ZWREQjwidSIpcmV0dXJuIHdpbmRvdy5tc0luZGV4ZWREQn1yZXR1cm4hMX1vKGJULCJnZXRJZGIiKTtmdW5jdGlvbiBjaCh0KXt0LmNvbW1pdCYmdC5jb21taXQoKX1vKGNoLCJjb21taXRJbmRleGVkREJUcmFuc2FjdGlvbiIpO2Z1bmN0aW9uIG0yKHQpe3ZhciBlPWJUKCkscj1oMit0LG49ZS5vcGVuKHIpO3JldHVybiBuLm9udXBncmFkZW5lZWRlZD1mdW5jdGlvbihpKXt2YXIgcz1pLnRhcmdldC5yZXN1bHQ7cy5jcmVhdGVPYmplY3RTdG9yZShCcix7a2V5UGF0aDoiaWQiLGF1dG9JbmNyZW1lbnQ6ITB9KX0sbmV3IFByb21pc2UoZnVuY3Rpb24oaSxzKXtuLm9uZXJyb3I9ZnVuY3Rpb24oYSl7cmV0dXJuIHMoYSl9LG4ub25zdWNjZXNzPWZ1bmN0aW9uKCl7aShuLnJlc3VsdCl9fSl9byhtMiwiY3JlYXRlRGF0YWJhc2UiKTtmdW5jdGlvbiBnMih0LGUscil7dmFyIG49RGF0ZS5ub3coKSxpPXt1dWlkOmUsdGltZTpuLGRhdGE6cn0scz10LnRyYW5zYWN0aW9uKFtCcl0sInJlYWR3cml0ZSIsSGwpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihhLGwpe3Mub25jb21wbGV0ZT1mdW5jdGlvbigpe3JldHVybiBhKCl9LHMub25lcnJvcj1mdW5jdGlvbih1KXtyZXR1cm4gbCh1KX07dmFyIGM9cy5vYmplY3RTdG9yZShCcik7Yy5hZGQoaSksY2gocyl9KX1vKGcyLCJ3cml0ZU1lc3NhZ2UiKTtmdW5jdGlvbiBCSWUodCl7dmFyIGU9dC50cmFuc2FjdGlvbihCciwicmVhZG9ubHkiLEhsKSxyPWUub2JqZWN0U3RvcmUoQnIpLG49W107cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGkpe3Iub3BlbkN1cnNvcigpLm9uc3VjY2Vzcz1mdW5jdGlvbihzKXt2YXIgYT1zLnRhcmdldC5yZXN1bHQ7YT8obi5wdXNoKGEudmFsdWUpLGEuY29udGludWUoKSk6KGNoKGUpLGkobikpfX0pfW8oQkllLCJnZXRBbGxNZXNzYWdlcyIpO2Z1bmN0aW9uIHkyKHQsZSl7dmFyIHI9dC50cmFuc2FjdGlvbihCciwicmVhZG9ubHkiLEhsKSxuPXIub2JqZWN0U3RvcmUoQnIpLGk9W10scz1JREJLZXlSYW5nZS5ib3VuZChlKzEsMS8wKTtpZihuLmdldEFsbCl7dmFyIGE9bi5nZXRBbGwocyk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsdSl7YS5vbmVycm9yPWZ1bmN0aW9uKGYpe3JldHVybiB1KGYpfSxhLm9uc3VjY2Vzcz1mdW5jdGlvbihmKXtjKGYudGFyZ2V0LnJlc3VsdCl9fSl9ZnVuY3Rpb24gbCgpe3RyeXtyZXR1cm4gcz1JREJLZXlSYW5nZS5ib3VuZChlKzEsMS8wKSxuLm9wZW5DdXJzb3Iocyl9Y2F0Y2h7cmV0dXJuIG4ub3BlbkN1cnNvcigpfX1yZXR1cm4gbyhsLCJvcGVuQ3Vyc29yIiksbmV3IFByb21pc2UoZnVuY3Rpb24oYyx1KXt2YXIgZj1sKCk7Zi5vbmVycm9yPWZ1bmN0aW9uKHApe3JldHVybiB1KHApfSxmLm9uc3VjY2Vzcz1mdW5jdGlvbihwKXt2YXIgaD1wLnRhcmdldC5yZXN1bHQ7aD9oLnZhbHVlLmlkPGUrMT9oLmNvbnRpbnVlKGUrMSk6KGkucHVzaChoLnZhbHVlKSxoLmNvbnRpbnVlKCkpOihjaChyKSxjKGkpKX19KX1vKHkyLCJnZXRNZXNzYWdlc0hpZ2hlclRoYW4iKTtmdW5jdGlvbiB4Mih0LGUpe2lmKHQuY2xvc2VkKXJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO3ZhciByPXQuZGIudHJhbnNhY3Rpb24oQnIsInJlYWR3cml0ZSIsSGwpLG49ci5vYmplY3RTdG9yZShCcik7cmV0dXJuIFByb21pc2UuYWxsKGUubWFwKGZ1bmN0aW9uKGkpe3ZhciBzPW4uZGVsZXRlKGkpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihhKXtzLm9uc3VjY2Vzcz1mdW5jdGlvbigpe3JldHVybiBhKCl9fSl9KSl9byh4MiwicmVtb3ZlTWVzc2FnZXNCeUlkIik7ZnVuY3Rpb24gYjIodCxlKXt2YXIgcj1EYXRlLm5vdygpLWUsbj10LnRyYW5zYWN0aW9uKEJyLCJyZWFkb25seSIsSGwpLGk9bi5vYmplY3RTdG9yZShCcikscz1bXTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYSl7aS5vcGVuQ3Vyc29yKCkub25zdWNjZXNzPWZ1bmN0aW9uKGwpe3ZhciBjPWwudGFyZ2V0LnJlc3VsdDtpZihjKXt2YXIgdT1jLnZhbHVlO3UudGltZTxyPyhzLnB1c2godSksYy5jb250aW51ZSgpKTooY2gobiksYShzKSl9ZWxzZSBhKHMpfX0pfW8oYjIsImdldE9sZE1lc3NhZ2VzIik7ZnVuY3Rpb24gdzIodCl7cmV0dXJuIGIyKHQuZGIsdC5vcHRpb25zLmlkYi50dGwpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIHgyKHQsZS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHIuaWR9KSl9KX1vKHcyLCJjbGVhbk9sZE1lc3NhZ2VzIik7ZnVuY3Rpb24gdjIodCxlKXtyZXR1cm4gZT1ibyhlKSxtMih0KS50aGVuKGZ1bmN0aW9uKHIpe3ZhciBuPXtjbG9zZWQ6ITEsbGFzdEN1cnNvcklkOjAsY2hhbm5lbE5hbWU6dCxvcHRpb25zOmUsdXVpZDp6bCgpLGVNSXM6bmV3IFhzKGUuaWRiLnR0bCoyKSx3cml0ZUJsb2NrUHJvbWlzZTp5bixtZXNzYWdlc0NhbGxiYWNrOm51bGwscmVhZFF1ZXVlUHJvbWlzZXM6W10sZGI6cn07cmV0dXJuIHIub25jbG9zZT1mdW5jdGlvbigpe24uY2xvc2VkPSEwLGUuaWRiLm9uY2xvc2UmJmUuaWRiLm9uY2xvc2UoKX0sd1Qobiksbn0pfW8odjIsImNyZWF0ZSIpO2Z1bmN0aW9uIHdUKHQpe3QuY2xvc2VkfHx2VCh0KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGxoKHQub3B0aW9ucy5pZGIuZmFsbGJhY2tJbnRlcnZhbCl9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHdUKHQpfSl9byh3VCwiX3JlYWRMb29wIik7ZnVuY3Rpb24gazIodCxlKXtyZXR1cm4hKHQudXVpZD09PWUudXVpZHx8ZS5lTUlzLmhhcyh0LmlkKXx8dC5kYXRhLnRpbWU8ZS5tZXNzYWdlc0NhbGxiYWNrVGltZSl9byhrMiwiX2ZpbHRlck1lc3NhZ2UiKTtmdW5jdGlvbiB2VCh0KXtyZXR1cm4gdC5jbG9zZWQ/eW46dC5tZXNzYWdlc0NhbGxiYWNrP3kyKHQuZGIsdC5sYXN0Q3Vyc29ySWQpLnRoZW4oZnVuY3Rpb24oZSl7dmFyIHI9ZS5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuISFufSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLmlkPnQubGFzdEN1cnNvcklkJiYodC5sYXN0Q3Vyc29ySWQ9bi5pZCksbn0pLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gazIobix0KX0pLnNvcnQoZnVuY3Rpb24obixpKXtyZXR1cm4gbi50aW1lLWkudGltZX0pO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obil7dC5tZXNzYWdlc0NhbGxiYWNrJiYodC5lTUlzLmFkZChuLmlkKSx0Lm1lc3NhZ2VzQ2FsbGJhY2sobi5kYXRhKSl9KSx5bn0pOnlufW8odlQsInJlYWROZXdNZXNzYWdlcyIpO2Z1bmN0aW9uIFMyKHQpe3QuY2xvc2VkPSEwLHQuZGIuY2xvc2UoKX1vKFMyLCJjbG9zZSIpO2Z1bmN0aW9uIFQyKHQsZSl7cmV0dXJuIHQud3JpdGVCbG9ja1Byb21pc2U9dC53cml0ZUJsb2NrUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGcyKHQuZGIsdC51dWlkLGUpfSkudGhlbihmdW5jdGlvbigpe3lUKDAsMTApPT09MCYmdzIodCl9KSx0LndyaXRlQmxvY2tQcm9taXNlfW8oVDIsInBvc3RNZXNzYWdlIik7ZnVuY3Rpb24gRTIodCxlLHIpe3QubWVzc2FnZXNDYWxsYmFja1RpbWU9cix0Lm1lc3NhZ2VzQ2FsbGJhY2s9ZSx2VCh0KX1vKEUyLCJvbk1lc3NhZ2UiKTtmdW5jdGlvbiBEMigpe3JldHVybiEhYlQoKX1vKEQyLCJjYW5CZVVzZWQiKTtmdW5jdGlvbiBDMih0KXtyZXR1cm4gdC5pZGIuZmFsbGJhY2tJbnRlcnZhbCoyfW8oQzIsImF2ZXJhZ2VSZXNwb25zZVRpbWUiKTt2YXIga1Q9e2NyZWF0ZTp2MixjbG9zZTpTMixvbk1lc3NhZ2U6RTIscG9zdE1lc3NhZ2U6VDIsY2FuQmVVc2VkOkQyLHR5cGU6ZDIsYXZlcmFnZVJlc3BvbnNlVGltZTpDMixtaWNyb1NlY29uZHM6cDJ9O3ZhciBNMj0kbixPMj0icHVia2V5LmJyb2FkY2FzdENoYW5uZWwtIixJMj0ibG9jYWxzdG9yYWdlIjtmdW5jdGlvbiBTVCgpe3ZhciB0O2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBudWxsO3RyeXt0PXdpbmRvdy5sb2NhbFN0b3JhZ2UsdD13aW5kb3dbImllOC1ldmVudGxpc3RlbmVyL3N0b3JhZ2UiXXx8d2luZG93LmxvY2FsU3RvcmFnZX1jYXRjaHt9cmV0dXJuIHR9byhTVCwiZ2V0TG9jYWxTdG9yYWdlIik7ZnVuY3Rpb24gVFQodCl7cmV0dXJuIE8yK3R9byhUVCwic3RvcmFnZUtleSIpO2Z1bmN0aW9uIF8yKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIpe2xoKCkudGhlbihmdW5jdGlvbigpe3ZhciBuPVRUKHQuY2hhbm5lbE5hbWUpLGk9e3Rva2VuOnpsKCksdGltZTpEYXRlLm5vdygpLGRhdGE6ZSx1dWlkOnQudXVpZH0scz1KU09OLnN0cmluZ2lmeShpKTtTVCgpLnNldEl0ZW0obixzKTt2YXIgYT1kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKTthLmluaXRFdmVudCgic3RvcmFnZSIsITAsITApLGEua2V5PW4sYS5uZXdWYWx1ZT1zLHdpbmRvdy5kaXNwYXRjaEV2ZW50KGEpLHIoKX0pfSl9byhfMiwicG9zdE1lc3NhZ2UiKTtmdW5jdGlvbiBQMih0LGUpe3ZhciByPVRUKHQpLG49byhmdW5jdGlvbihzKXtzLmtleT09PXImJmUoSlNPTi5wYXJzZShzLm5ld1ZhbHVlKSl9LCJsaXN0ZW5lciIpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic3RvcmFnZSIsbiksbn1vKFAyLCJhZGRTdG9yYWdlRXZlbnRMaXN0ZW5lciIpO2Z1bmN0aW9uIE4yKHQpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzdG9yYWdlIix0KX1vKE4yLCJyZW1vdmVTdG9yYWdlRXZlbnRMaXN0ZW5lciIpO2Z1bmN0aW9uIFIyKHQsZSl7aWYoZT1ibyhlKSwhRVQoKSl0aHJvdyBuZXcgRXJyb3IoIkJyb2FkY2FzdENoYW5uZWw6IGxvY2Fsc3RvcmFnZSBjYW5ub3QgYmUgdXNlZCIpO3ZhciByPXpsKCksbj1uZXcgWHMoZS5sb2NhbHN0b3JhZ2UucmVtb3ZlVGltZW91dCksaT17Y2hhbm5lbE5hbWU6dCx1dWlkOnIsZU1JczpufTtyZXR1cm4gaS5saXN0ZW5lcj1QMih0LGZ1bmN0aW9uKHMpe2kubWVzc2FnZXNDYWxsYmFjayYmcy51dWlkIT09ciYmKCFzLnRva2VufHxuLmhhcyhzLnRva2VuKXx8cy5kYXRhLnRpbWUmJnMuZGF0YS50aW1lPGkubWVzc2FnZXNDYWxsYmFja1RpbWV8fChuLmFkZChzLnRva2VuKSxpLm1lc3NhZ2VzQ2FsbGJhY2socy5kYXRhKSkpfSksaX1vKFIyLCJjcmVhdGUiKTtmdW5jdGlvbiBMMih0KXtOMih0Lmxpc3RlbmVyKX1vKEwyLCJjbG9zZSIpO2Z1bmN0aW9uIEYyKHQsZSxyKXt0Lm1lc3NhZ2VzQ2FsbGJhY2tUaW1lPXIsdC5tZXNzYWdlc0NhbGxiYWNrPWV9byhGMiwib25NZXNzYWdlIik7ZnVuY3Rpb24gRVQoKXt2YXIgdD1TVCgpO2lmKCF0KXJldHVybiExO3RyeXt2YXIgZT0iX19icm9hZGNhc3RjaGFubmVsX2NoZWNrIjt0LnNldEl0ZW0oZSwid29ya3MiKSx0LnJlbW92ZUl0ZW0oZSl9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9byhFVCwiY2FuQmVVc2VkIik7ZnVuY3Rpb24gQTIoKXt2YXIgdD0xMjAsZT1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7cmV0dXJuIGUuaW5jbHVkZXMoInNhZmFyaSIpJiYhZS5pbmNsdWRlcygiY2hyb21lIik/dCoyOnR9byhBMiwiYXZlcmFnZVJlc3BvbnNlVGltZSIpO3ZhciBEVD17Y3JlYXRlOlIyLGNsb3NlOkwyLG9uTWVzc2FnZTpGMixwb3N0TWVzc2FnZTpfMixjYW5CZVVzZWQ6RVQsdHlwZTpJMixhdmVyYWdlUmVzcG9uc2VUaW1lOkEyLG1pY3JvU2Vjb25kczpNMn07dmFyIENUPSRuLCQyPSJzaW11bGF0ZSIsaHk9bmV3IFNldDtmdW5jdGlvbiBCMih0KXt2YXIgZT17dGltZTpDVCgpLG5hbWU6dCxtZXNzYWdlc0NhbGxiYWNrOm51bGx9O3JldHVybiBoeS5hZGQoZSksZX1vKEIyLCJjcmVhdGUiKTtmdW5jdGlvbiB6Mih0KXtoeS5kZWxldGUodCl9byh6MiwiY2xvc2UiKTt2YXIgTVQ9NTtmdW5jdGlvbiBIMih0LGUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBuPUFycmF5LmZyb20oaHkpO24uZm9yRWFjaChmdW5jdGlvbihpKXtpLm5hbWU9PT10Lm5hbWUmJmkhPT10JiZpLm1lc3NhZ2VzQ2FsbGJhY2smJmkudGltZTxlLnRpbWUmJmkubWVzc2FnZXNDYWxsYmFjayhlKX0pLHIoKX0sTVQpfSl9byhIMiwicG9zdE1lc3NhZ2UiKTtmdW5jdGlvbiBqMih0LGUpe3QubWVzc2FnZXNDYWxsYmFjaz1lfW8oajIsIm9uTWVzc2FnZSIpO2Z1bmN0aW9uIFcyKCl7cmV0dXJuITB9byhXMiwiY2FuQmVVc2VkIik7ZnVuY3Rpb24gcTIoKXtyZXR1cm4gTVR9byhxMiwiYXZlcmFnZVJlc3BvbnNlVGltZSIpO3ZhciBPVD17Y3JlYXRlOkIyLGNsb3NlOnoyLG9uTWVzc2FnZTpqMixwb3N0TWVzc2FnZTpIMixjYW5CZVVzZWQ6VzIsdHlwZTokMixhdmVyYWdlUmVzcG9uc2VUaW1lOnEyLG1pY3JvU2Vjb25kczpDVH07dmFyIElUPVt4VCxrVCxEVF07ZnVuY3Rpb24gZHkodCl7dmFyIGU9W10uY29uY2F0KHQubWV0aG9kcyxJVCkuZmlsdGVyKEJvb2xlYW4pO2lmKHQudHlwZSl7aWYodC50eXBlPT09InNpbXVsYXRlIilyZXR1cm4gT1Q7dmFyIHI9ZS5maW5kKGZ1bmN0aW9uKGkpe3JldHVybiBpLnR5cGU9PT10LnR5cGV9KTtpZihyKXJldHVybiByO3Rocm93IG5ldyBFcnJvcigibWV0aG9kLXR5cGUgIit0LnR5cGUrIiBub3QgZm91bmQiKX10LndlYldvcmtlclN1cHBvcnR8fChlPWUuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpLnR5cGUhPT0iaWRiIn0pKTt2YXIgbj1lLmZpbmQoZnVuY3Rpb24oaSl7cmV0dXJuIGkuY2FuQmVVc2VkKCl9KTtpZihuKXJldHVybiBuO3Rocm93IG5ldyBFcnJvcigiTm8gdXNhYmxlIG1ldGhvZCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5KElULm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS50eXBlfSkpKX1vKGR5LCJjaG9vc2VNZXRob2QiKTt2YXIgZ3k9bmV3IFNldCxVMj0wLHdvPW8oZnVuY3Rpb24oZSxyKXt0aGlzLmlkPVUyKyssZ3kuYWRkKHRoaXMpLHRoaXMubmFtZT1lLG15JiYocj1teSksdGhpcy5vcHRpb25zPWJvKHIpLHRoaXMubWV0aG9kPWR5KHRoaXMub3B0aW9ucyksdGhpcy5faUw9ITEsdGhpcy5fb25NTD1udWxsLHRoaXMuX2FkZEVMPXttZXNzYWdlOltdLGludGVybmFsOltdfSx0aGlzLl91TVA9bmV3IFNldCx0aGlzLl9iZWZDPVtdLHRoaXMuX3ByZXBQPW51bGwsRzIodGhpcyl9LCJCcm9hZGNhc3RDaGFubmVsIik7d28uX3B1YmtleT0hMDtmdW5jdGlvbiBWMih0KXt0PWJvKHQpO3ZhciBlPWR5KHQpO3JldHVybiBlLnR5cGU9PT0ibm9kZSI/ZS5jbGVhck5vZGVGb2xkZXIoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KTpnVH1vKFYyLCJjbGVhck5vZGVGb2xkZXIiKTt2YXIgbXk7ZnVuY3Rpb24gWTIodCl7bXk9dH1vKFkyLCJlbmZvcmNlT3B0aW9ucyIpLHdvLnByb3RvdHlwZT17cG9zdE1lc3NhZ2U6byhmdW5jdGlvbihlKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgRXJyb3IoIkJyb2FkY2FzdENoYW5uZWwucG9zdE1lc3NhZ2UoKTogQ2Fubm90IHBvc3QgbWVzc2FnZSBhZnRlciBjaGFubmVsIGhhcyBjbG9zZWQgIitKU09OLnN0cmluZ2lmeShlKSk7cmV0dXJuIF9UKHRoaXMsIm1lc3NhZ2UiLGUpfSwicG9zdE1lc3NhZ2UiKSxwb3N0SW50ZXJuYWw6byhmdW5jdGlvbihlKXtyZXR1cm4gX1QodGhpcywiaW50ZXJuYWwiLGUpfSwicG9zdEludGVybmFsIiksc2V0IG9ubWVzc2FnZSh0KXt2YXIgZT10aGlzLm1ldGhvZC5taWNyb1NlY29uZHMoKSxyPXt0aW1lOmUsZm46dH07UlQodGhpcywibWVzc2FnZSIsdGhpcy5fb25NTCksdCYmdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KHRoaXMuX29uTUw9cixOVCh0aGlzLCJtZXNzYWdlIixyKSk6dGhpcy5fb25NTD1udWxsfSxhZGRFdmVudExpc3RlbmVyOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLm1ldGhvZC5taWNyb1NlY29uZHMoKSxpPXt0aW1lOm4sZm46cn07TlQodGhpcyxlLGkpfSwiYWRkRXZlbnRMaXN0ZW5lciIpLHJlbW92ZUV2ZW50TGlzdGVuZXI6byhmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuX2FkZEVMW2VdLmZpbmQoZnVuY3Rpb24oaSl7cmV0dXJuIGkuZm49PT1yfSk7UlQodGhpcyxlLG4pfSwicmVtb3ZlRXZlbnRMaXN0ZW5lciIpLGNsb3NlOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCF0aGlzLmNsb3NlZCl7Z3kuZGVsZXRlKHRoaXMpLHRoaXMuY2xvc2VkPSEwO3ZhciByPXRoaXMuX3ByZXBQP3RoaXMuX3ByZXBQOnluO3JldHVybiB0aGlzLl9vbk1MPW51bGwsdGhpcy5fYWRkRUwubWVzc2FnZT1bXSxyLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5hbGwoQXJyYXkuZnJvbShlLl91TVApKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5hbGwoZS5fYmVmQy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4oKX0pKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZS5tZXRob2QuY2xvc2UoZS5fc3RhdGUpfSl9fSwiY2xvc2UiKSxnZXQgdHlwZSgpe3JldHVybiB0aGlzLm1ldGhvZC50eXBlfSxnZXQgaXNDbG9zZWQoKXtyZXR1cm4gdGhpcy5jbG9zZWR9fTtmdW5jdGlvbiBfVCh0LGUscil7dmFyIG49dC5tZXRob2QubWljcm9TZWNvbmRzKCksaT17dGltZTpuLHR5cGU6ZSxkYXRhOnJ9LHM9dC5fcHJlcFA/dC5fcHJlcFA6eW47cmV0dXJuIHMudGhlbihmdW5jdGlvbigpe3ZhciBhPXQubWV0aG9kLnBvc3RNZXNzYWdlKHQuX3N0YXRlLGkpO3JldHVybiB0Ll91TVAuYWRkKGEpLGEuY2F0Y2goKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3VNUC5kZWxldGUoYSl9KSxhfSl9byhfVCwiX3Bvc3QiKTtmdW5jdGlvbiBHMih0KXt2YXIgZT10Lm1ldGhvZC5jcmVhdGUodC5uYW1lLHQub3B0aW9ucyk7bVQoZSk/KHQuX3ByZXBQPWUsZS50aGVuKGZ1bmN0aW9uKHIpe3QuX3N0YXRlPXJ9KSk6dC5fc3RhdGU9ZX1vKEcyLCJfcHJlcGFyZUNoYW5uZWwiKTtmdW5jdGlvbiBQVCh0KXtyZXR1cm4gdC5fYWRkRUwubWVzc2FnZS5sZW5ndGg+MHx8dC5fYWRkRUwuaW50ZXJuYWwubGVuZ3RoPjB9byhQVCwiX2hhc01lc3NhZ2VMaXN0ZW5lcnMiKTtmdW5jdGlvbiBOVCh0LGUscil7dC5fYWRkRUxbZV0ucHVzaChyKSxRMih0KX1vKE5ULCJfYWRkTGlzdGVuZXJPYmplY3QiKTtmdW5jdGlvbiBSVCh0LGUscil7dC5fYWRkRUxbZV09dC5fYWRkRUxbZV0uZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuIT09cn0pLEoyKHQpfW8oUlQsIl9yZW1vdmVMaXN0ZW5lck9iamVjdCIpO2Z1bmN0aW9uIFEyKHQpe2lmKCF0Ll9pTCYmUFQodCkpe3ZhciBlPW8oZnVuY3Rpb24oaSl7dC5fYWRkRUxbaS50eXBlXS5mb3JFYWNoKGZ1bmN0aW9uKHMpe2kudGltZT49cy50aW1lJiZzLmZuKGkuZGF0YSl9KX0sImxpc3RlbmVyRm4iKSxyPXQubWV0aG9kLm1pY3JvU2Vjb25kcygpO3QuX3ByZXBQP3QuX3ByZXBQLnRoZW4oZnVuY3Rpb24oKXt0Ll9pTD0hMCx0Lm1ldGhvZC5vbk1lc3NhZ2UodC5fc3RhdGUsZSxyKX0pOih0Ll9pTD0hMCx0Lm1ldGhvZC5vbk1lc3NhZ2UodC5fc3RhdGUsZSxyKSl9fW8oUTIsIl9zdGFydExpc3RlbmluZyIpO2Z1bmN0aW9uIEoyKHQpe2lmKHQuX2lMJiYhUFQodCkpe3QuX2lMPSExO3ZhciBlPXQubWV0aG9kLm1pY3JvU2Vjb25kcygpO3QubWV0aG9kLm9uTWVzc2FnZSh0Ll9zdGF0ZSxudWxsLGUpfX1vKEoyLCJfc3RvcExpc3RlbmluZyIpO3ZhciB5eT1nbG9iYWxUaGlzLkJyb2FkY2FzdENoYW5uZWw7eXl8fCh5eT13byk7dmFyIHh5PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZXNDb21tcyIpfWNvbnN0cnVjdG9yKCl7dGhpcy5icm9hZGNhc3RDaGFubmVsPW5ldyB5eSgiZGVlcy1jb21tcyIpLHRoaXMudHlwZWRyb3V0ZXI9bmV3IFRpLlR5cGVkUm91dGVyLHRoaXMudHlwZWR0YXJnZXQ9bmV3IFRpLlR5cGVkVGFyZ2V0KHtwb3N0TWV0aG9kV2l0aFR5cGVkUm91dGVyOm8oYXN5bmMgZT0+e3RoaXMucG9zdE1lc3NhZ2UoZSl9LCJwb3N0TWV0aG9kV2l0aFR5cGVkUm91dGVyIiksdHlwZWRSb3V0ZXJSZWY6dGhpcy50eXBlZHJvdXRlcn0pLHRoaXMuYnJvYWRjYXN0Q2hhbm5lbC5vbm1lc3NhZ2U9YXN5bmMgZT0+e2xldCByPWUubWV0aG9kP2U6ZS5kYXRhLG49YXdhaXQgdGhpcy50eXBlZHJvdXRlci5yb3V0ZUFuZEFkZFJlc3BvbnNlKHIse3NraXBIb29rczohMH0pO24mJiFuLmVycm9yJiZ0aGlzLnBvc3RNZXNzYWdlKG4pfX1jcmVhdGVUeXBlZFJlcXVlc3QoZSl7cmV0dXJuIG5ldyBUaS5UeXBlZFJlcXVlc3QodGhpcy50eXBlZHRhcmdldCxlKX1hc3luYyBwb3N0TWVzc2FnZShlKXt0aGlzLmJyb2FkY2FzdENoYW5uZWwucG9zdE1lc3NhZ2UoZSl9YXN5bmMgY3JlYXRlVHlwZWRIYW5kbGVyKGUscil7dGhpcy50eXBlZHJvdXRlci5hZGRUeXBlZEhhbmRsZXIobmV3IFRpLlR5cGVkSGFuZGxlcihlLHIpKX19O3ZhciB2bz17fTtzZSh2byx7VFlQRURfUkVRVUVTVF9SRURBQ1RFRF9QQVlMT0FEOigpPT5acyxUeXBlZEhhbmRsZXI6KCk9PmJ5LFR5cGVkUmVxdWVzdDooKT0+VWwsVHlwZWRSZXF1ZXN0UmV0cnlMaW1pdEVycm9yOigpPT54aCxUeXBlZFJlcXVlc3RUaW1lb3V0RXJyb3I6KCk9PnloLFR5cGVkUmVzcG9uc2VFcnJvcjooKT0+d3IsVHlwZWRSb3V0ZXI6KCk9PldsLFR5cGVkVGFyZ2V0OigpPT52eSxWaXJ0dWFsU3RyZWFtOigpPT5vcixWaXJ0dWFsU3RyZWFtQWN0aXZhdGlvblNjb3BlOigpPT5xbCxWaXJ0dWFsU3RyZWFtQ2xvc2VkRXJyb3I6KCk9PkVpfSk7dmFyIExUPXt9O3ZhciBCbj1kcih0bCgpLDEpO3ZhciB3cj1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIlR5cGVkUmVzcG9uc2VFcnJvciIpfWNvbnN0cnVjdG9yKGUscil7c3VwZXIoZSksdGhpcy5uYW1lPSJUeXBlZFJlc3BvbnNlRXJyb3IiLHRoaXMuZXJyb3JUZXh0PWUsdGhpcy5lcnJvckRhdGE9cj8/e319fTt2YXIgZmg9Y2xhc3N7c3RhdGlje28odGhpcywiVHlwZWRUb29scyIpfWNvbnN0cnVjdG9yKCl7dGhpcy5sb2NhbERhdGE9e319YXN5bmMgcGFzc0d1YXJkcyhlLHIpe2xldCBuPW5ldyBGbi5HdWFyZFNldChlKTtpZighYXdhaXQgbi5hbGxHdWFyZHNQYXNzKHIpKXtsZXQgcz1hd2FpdCBuLmdldEZhaWxlZEhpbnQocik7dGhyb3cgbmV3IHdyKGBndWFyZCBmYWlsZWQ6ICR7c31gLHtmYWlsZWRIaW50OnN9KX19fTt2YXIgYnk9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJUeXBlZEhhbmRsZXIiKX1zdGF0aWN7dGhpcy5pbnRlcm5hbEVycm9yTWVzc2FnZT0iSW50ZXJuYWwgc2VydmVyIGVycm9yIn1jb25zdHJ1Y3RvcihlLHIpe3RoaXMubWV0aG9kPWUsdGhpcy5oYW5kbGVyRnVuY3Rpb249cn1hc3luYyBhZGRSZXNwb25zZShlKXtpZihlLm1ldGhvZCE9PXRoaXMubWV0aG9kKXRocm93IG5ldyBFcnJvcigidGhpcyBoYW5kbGVyIGhhcyBiZWVuIGdpdmVuIGEgd3JvbmcgbWV0aG9kIHRvIGFuc3dlciB0by4gUGxlYXNlIHVzZSBhIFR5cGVkUm91dGVyIHRvIGZpbHRlciByZXF1ZXN0cyIpO2xldCByLG49bmV3IGZoO2UubG9jYWxEYXRhJiYobi5sb2NhbERhdGE9ZS5sb2NhbERhdGEpO2xldCBpPWF3YWl0IHRoaXMuaGFuZGxlckZ1bmN0aW9uKGUucmVxdWVzdCxuKS5jYXRjaChzPT57cyBpbnN0YW5jZW9mIHdyP3I9czooY29uc29sZS5lcnJvcihgVHlwZWRSZXF1ZXN0IGhhbmRsZXIgJyR7dGhpcy5tZXRob2R9JyBmYWlsZWRgKSxyPW5ldyB3cih0LmludGVybmFsRXJyb3JNZXNzYWdlKSl9KTtyZXR1cm4gciYmKGUuZXJyb3I9e3RleHQ6ci5lcnJvclRleHQsZGF0YTpyLmVycm9yRGF0YX0pLGkmJihlLnJlc3BvbnNlPWkpLGU/LmNvcnJlbGF0aW9uPy5waGFzZSYmKGUuY29ycmVsYXRpb24ucGhhc2U9InJlc3BvbnNlIiksZX19O3ZhciBacz1PYmplY3QuZnJlZXplKHtyZWRhY3RlZDohMH0pO3ZhciBGVD1PYmplY3QuZnJlZXplKFsib25PdXRnb2luZ1JlcXVlc3QiLCJvbkluY29taW5nUmVzcG9uc2UiLCJvbkluY29taW5nUmVxdWVzdCIsIm9uT3V0Z29pbmdSZXNwb25zZSJdKSxBVD1TeW1ib2wuZm9yKCJAYXBpLmdsb2JhbC90eXBlZHJlcXVlc3Q6Z2xvYmFsLWhvb2tzOjMuOCIpLCRUPW8odD0+KHtwYXlsb2FkUHJvamVjdG9yOnQ/LnBheWxvYWRQcm9qZWN0b3IsZXJyb3JQcm9qZWN0b3I6dD8uZXJyb3JQcm9qZWN0b3J9KSwiY29weVByb2plY3Rpb25PcHRpb25zIiksaGg9bygodD17fSk9Pih7aG9va3M6dCxwcm9qZWN0ZWRSZWdpc3RyYXRpb25zQnlQaGFzZTp7fX0pLCJjcmVhdGVUeXBlZFJvdXRlckhvb2tSZWdpc3RyYXRpb25TdGF0ZSIpLFgyPW8odD0+RlQuZmlsdGVyKGU9Pk9iamVjdC5oYXNPd24odCxlKSkubWFwKGU9PltlLHRbZV1dKSwiZ2V0U3VwcGxpZWRIb29rRW50cmllcyIpLGRoPW8oKHQsZSxyKT0+e2xldCBuPVgyKGUpO3QuaG9va3M9ey4uLnQuaG9va3MsLi4uZX07Zm9yKGxldFtpXW9mIG4pe2xldCBzPXQuaG9va3NbaV07aWYodHlwZW9mIHMhPSJmdW5jdGlvbiIpe2RlbGV0ZSB0LnByb2plY3RlZFJlZ2lzdHJhdGlvbnNCeVBoYXNlW2ldO2NvbnRpbnVlfXQucHJvamVjdGVkUmVnaXN0cmF0aW9uc0J5UGhhc2VbaV09e2NhbGxiYWNrOnMscHJvamVjdGlvbk9wdGlvbnM6JFQocil9fX0sIm1lcmdlVHlwZWRSb3V0ZXJIb29rUmVnaXN0cmF0aW9ucyIpLG1oPW8oKHQsZSk9Pnt0Lmhvb2tzPWU7Zm9yKGxldCByIG9mIEZUKWRlbGV0ZSB0LnByb2plY3RlZFJlZ2lzdHJhdGlvbnNCeVBoYXNlW3JdfSwicmVwbGFjZVR5cGVkUm91dGVySG9va1JlZ2lzdHJhdGlvbnMiKSxlYT1vKCgpPT57bGV0IHQ9Z2xvYmFsVGhpc1tBVF07aWYodD8udmVyc2lvbj09PSIzLjgiJiZ0LnN0YXRlU2hhcGU9PT0iY2FsbGJhY2stYm91bmQtcHJvamVjdGlvbnMtdjEiJiZ0LnN1YnNjcmliZXJzIGluc3RhbmNlb2YgTWFwKXJldHVybiB0O2xldCBlPXt2ZXJzaW9uOiIzLjgiLHN0YXRlU2hhcGU6ImNhbGxiYWNrLWJvdW5kLXByb2plY3Rpb25zLXYxIixsZWdhY3k6aGgoKSxzdWJzY3JpYmVyczpuZXcgTWFwfTtyZXR1cm4gZ2xvYmFsVGhpc1tBVF09ZSxlfSwiZ2V0UmVhbG1HbG9iYWxIb29rU3RhdGUiKSx6VD1vKCgpPT5lYSgpLmxlZ2FjeS5ob29rcywiZ2V0TGVnYWN5R2xvYmFsSG9va3MiKSxIVD1vKHQ9PnttaChlYSgpLmxlZ2FjeSx0KX0sInJlcGxhY2VMZWdhY3lHbG9iYWxIb29rcyIpLGpUPW8oKHQsZSk9PntkaChlYSgpLmxlZ2FjeSx0LGUpfSwibWVyZ2VMZWdhY3lHbG9iYWxIb29rcyIpLFdUPW8oKHQsZSk9PntsZXQgcj1lYSgpLG49U3ltYm9sKCJ0eXBlZHJlcXVlc3QtaG9vay1zdWJzY3JpYmVyIiksaT1oaCgpO2RoKGksdCxlKSxyLnN1YnNjcmliZXJzLnNldChuLGkpO2xldCBzPSExO3JldHVybigpPT57c3x8KHM9ITAsci5zdWJzY3JpYmVycy5kZWxldGUobikpfX0sImFkZEdsb2JhbEhvb2tTdWJzY3JpYmVyIikscVQ9bygoKT0+e2xldCB0PWVhKCk7bWgodC5sZWdhY3kse30pLHQuc3Vic2NyaWJlcnMuY2xlYXIoKX0sImNsZWFyR2xvYmFsSG9va1JlZ2lzdHJhdGlvbnMiKSxwaD1vKHQ9Pnt0cnl7Y29uc29sZS5lcnJvcihgVHlwZWRSZXF1ZXN0IGhvb2sgcHJvamVjdGlvbiBmYWlsZWQgKCR7dH0pYCl9Y2F0Y2h7fX0sImxvZ1Byb2plY3Rpb25GYWlsdXJlIiksd3k9byh0PT57dHJ5e2NvbnNvbGUuZXJyb3IoYFR5cGVkUmVxdWVzdCBob29rIGNhbGxiYWNrIGZhaWxlZCAoJHt0fSlgKX1jYXRjaHt9fSwibG9nQ2FsbGJhY2tGYWlsdXJlIiksWjI9bygodCxlKT0+e2xldCByPXtjb3JyZWxhdGlvbklkOnQuY29ycmVsYXRpb25JZCxtZXRob2Q6dC5tZXRob2QsZGlyZWN0aW9uOnQuZGlyZWN0aW9uLHBoYXNlOnQucGhhc2UsdGltZXN0YW1wOnQudGltZXN0YW1wLC4uLnQuZHVyYXRpb25Ncz09PXZvaWQgMD97fTp7ZHVyYXRpb25Nczp0LmR1cmF0aW9uTXN9LGhhc0Vycm9yOnQuZXJyb3JUZXh0IT09dm9pZCAwfTt0cnl7cmV0dXJuIE9iamVjdC5mcmVlemUocil9Y2F0Y2h7cGgoZSk7cmV0dXJufX0sImNyZWF0ZU1ldGFkYXRhIiksQlQ9byh0PT50eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI+InUiPyExOnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcnx8T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPT09IltvYmplY3QgU2hhcmVkQXJyYXlCdWZmZXJdIiwiaXNTaGFyZWRBcnJheUJ1ZmZlciIpLHRhPW8oKHQsZT1uZXcgU2V0KT0+e2lmKCEodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IiYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpKXtpZihCVCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUeXBlZFJlcXVlc3QgaG9vayBwcm9qZWN0aW9ucyBjYW5ub3QgY29udGFpbiBTaGFyZWRBcnJheUJ1ZmZlciIpO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KSl7aWYoQlQodC5idWZmZXIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlR5cGVkUmVxdWVzdCBob29rIHByb2plY3Rpb25zIGNhbm5vdCBjb250YWluIFNoYXJlZEFycmF5QnVmZmVyLWJhY2tlZCB2aWV3cyIpO3JldHVybn1pZighZS5oYXModCkpe2lmKGUuYWRkKHQpLHQgaW5zdGFuY2VvZiBNYXApe2ZvcihsZXRbcixuXW9mIHQpdGEocixlKSx0YShuLGUpO3JldHVybn1pZih0IGluc3RhbmNlb2YgU2V0KXtmb3IobGV0IHIgb2YgdCl0YShyLGUpO3JldHVybn1mb3IobGV0IHIgb2YgUmVmbGVjdC5vd25LZXlzKHQpKXtsZXQgbj1SZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpO2lmKG4pe2lmKCFPYmplY3QuaGFzT3duKG4sInZhbHVlIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVHlwZWRSZXF1ZXN0IGhvb2sgcHJvamVjdGlvbnMgY2Fubm90IGNvbnRhaW4gYWNjZXNzb3IgcHJvcGVydGllcyIpO3RhKG4udmFsdWUsZSl9fX19fSwiYXNzZXJ0Tm9TaGFyZWRBcnJheUJ1ZmZlciIpLGVGPW8oKHQsZSxyLG4pPT57aWYoIWV8fCFyLnBheWxvYWRQcm9qZWN0b3IpcmV0dXJue3BheWxvYWQ6WnMscGF5bG9hZFJlZGFjdGVkOiEwfTt0cnl7bGV0IGk9ci5wYXlsb2FkUHJvamVjdG9yKHQsZSk7dGEoaSk7bGV0IHM9c3RydWN0dXJlZENsb25lKGkpO3JldHVybiB0YShzKSxzIT09bnVsbCYmKHR5cGVvZiBzPT0ib2JqZWN0Inx8dHlwZW9mIHM9PSJmdW5jdGlvbiIpJiZPYmplY3QuZnJlZXplKHMpLHtwYXlsb2FkOnMscGF5bG9hZFJlZGFjdGVkOiExfX1jYXRjaHtyZXR1cm4gcGgobikse3BheWxvYWQ6WnMscGF5bG9hZFJlZGFjdGVkOiEwfX19LCJzbmFwc2hvdFBheWxvYWQiKSx0Rj1vKCh0LGUscixuKT0+e2lmKCEoIWV8fHQuZXJyb3JUZXh0PT09dm9pZCAwfHwhci5lcnJvclByb2plY3RvcikpdHJ5e2xldCBpPXIuZXJyb3JQcm9qZWN0b3IodC5lcnJvclRleHQsZSk7aWYoaT09PXZvaWQgMClyZXR1cm47bGV0IHM9c3RydWN0dXJlZENsb25lKGkpO2lmKHR5cGVvZiBzIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJUeXBlZFJlcXVlc3QgZXJyb3IgcHJvamVjdG9yIG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIHVuZGVmaW5lZCIpO3JldHVybiBzfWNhdGNoe3BoKG4pO3JldHVybn19LCJzbmFwc2hvdEVycm9yIiksckY9bygodCxlLHIpPT57bGV0IG49WjIodCxyKSxpPWVGKHQucGF5bG9hZCxuLGUscikscz10Rih0LG4sZSxyKSxhPXtjb3JyZWxhdGlvbklkOnQuY29ycmVsYXRpb25JZCxtZXRob2Q6dC5tZXRob2QsZGlyZWN0aW9uOnQuZGlyZWN0aW9uLHBoYXNlOnQucGhhc2UsdGltZXN0YW1wOnQudGltZXN0YW1wLC4uLnQuZHVyYXRpb25Ncz09PXZvaWQgMD97fTp7ZHVyYXRpb25Nczp0LmR1cmF0aW9uTXN9LGhhc0Vycm9yOnQuZXJyb3JUZXh0IT09dm9pZCAwLC4uLmksLi4ucz09PXZvaWQgMD97fTp7ZXJyb3I6c319O3RyeXtyZXR1cm4gT2JqZWN0LmZyZWV6ZShhKX1jYXRjaHtwaChyKTtsZXQgbD17Y29ycmVsYXRpb25JZDp0LmNvcnJlbGF0aW9uSWQsbWV0aG9kOnQubWV0aG9kLGRpcmVjdGlvbjp0LmRpcmVjdGlvbixwaGFzZTp0LnBoYXNlLHRpbWVzdGFtcDp0LnRpbWVzdGFtcCwuLi50LmR1cmF0aW9uTXM9PT12b2lkIDA/e306e2R1cmF0aW9uTXM6dC5kdXJhdGlvbk1zfSxoYXNFcnJvcjp0LmVycm9yVGV4dCE9PXZvaWQgMCxwYXlsb2FkOlpzLHBheWxvYWRSZWRhY3RlZDohMH07dHJ5e3JldHVybiBPYmplY3QuZnJlZXplKGwpfWNhdGNoe3JldHVybiBsfX19LCJwcm9qZWN0TG9nRW50cnkiKSxuRj1vKCh0LGUpPT57dHJ5e2xldCByPXQuaG9va3NbZV07aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpcmV0dXJuO2xldCBuPXQucHJvamVjdGVkUmVnaXN0cmF0aW9uc0J5UGhhc2VbZV07cmV0dXJue2NhbGxiYWNrOnIscHJvamVjdGlvbk9wdGlvbnM6bj8uY2FsbGJhY2s9PT1yPyRUKG4ucHJvamVjdGlvbk9wdGlvbnMpOnt9fX1jYXRjaHt3eShlKTtyZXR1cm59fSwic25hcHNob3REaXNwYXRjaFJlY2lwaWVudCIpLGlGPW8oKHQsZSxyKT0+e2xldCBuPXJGKHIsdC5wcm9qZWN0aW9uT3B0aW9ucyxlKTt0cnl7bGV0IGk9dC5jYWxsYmFjayhuKTtpJiZ0eXBlb2YgaS50aGVuPT0iZnVuY3Rpb24iJiZQcm9taXNlLnJlc29sdmUoaSkuY2F0Y2goKCk9Pnt3eShlKX0pfWNhdGNoe3d5KGUpfX0sImRpc3BhdGNoVG9SZWNpcGllbnQiKSxyYT1vKCh0LGUscik9PntsZXQgbj1lYSgpLHM9W24ubGVnYWN5LC4uLkFycmF5LmZyb20obi5zdWJzY3JpYmVycy52YWx1ZXMoKSksLi4ucj9bcl06W11dLm1hcChhPT5uRihhLHQpKS5maWx0ZXIoYT0+ISFhKTtmb3IobGV0IGEgb2YgcylpRihhLHQsZSl9LCJkaXNwYXRjaFR5cGVkUmVxdWVzdEhvb2siKTt2YXIgV2w9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJUeXBlZFJvdXRlciIpfWNvbnN0cnVjdG9yKCl7dGhpcy5ob29rUmVnaXN0cmF0aW9uU3RhdGU9aGgoKSx0aGlzLnJvdXRlck1hcD1uZXcgQWUuT2JqZWN0TWFwLHRoaXMuZmFsbGJhY2tSb3V0ZXJNYXA9bmV3IEFlLk9iamVjdE1hcCx0aGlzLmZhbGxiYWNrUGFyZW50Um91dGVycz1uZXcgU2V0LHRoaXMuaGFuZGxlck1hcD1uZXcgQWUuT2JqZWN0TWFwLHRoaXMucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zPW5ldyBBZS5PYmplY3RNYXAsdGhpcy5taWRkbGV3YXJlcz1bXSx0aGlzLmZpcmVFdmVudEludGVyZXN0TWFwPW5ldyBBZS5JbnRlcmVzdE1hcChlPT5lKX1zdGF0aWN7dGhpcy5pbnRlcm5hbEVycm9yTWVzc2FnZT0iSW50ZXJuYWwgc2VydmVyIGVycm9yIn1zdGF0aWMgZ2V0IGdsb2JhbEhvb2tzKCl7cmV0dXJuIHpUKCl9c3RhdGljIHNldCBnbG9iYWxIb29rcyhlKXtIVChlKX1zdGF0aWMgc2V0R2xvYmFsSG9va3MoZSxyKXtqVChlLHIpfXN0YXRpYyBhZGRHbG9iYWxIb29rcyhlLHIpe3JldHVybiBXVChlLHIpfXN0YXRpYyBjbGVhckdsb2JhbEhvb2tzKCl7cVQoKX1nZXQgaG9va3MoKXtyZXR1cm4gdGhpcy5ob29rUmVnaXN0cmF0aW9uU3RhdGUuaG9va3N9c2V0IGhvb2tzKGUpe21oKHRoaXMuaG9va1JlZ2lzdHJhdGlvblN0YXRlLGUpfXNldEhvb2tzKGUscil7ZGgodGhpcy5ob29rUmVnaXN0cmF0aW9uU3RhdGUsZSxyKX1jYWxsSG9vayhlLHIpe3JhKGUscix0aGlzLmhvb2tSZWdpc3RyYXRpb25TdGF0ZSl9c2V0RXJyb3JGcm9tQ2F1Z2h0RXJyb3IoZSxyLG4pe2lmKHIgaW5zdGFuY2VvZiB3cil7ZS5lcnJvcj17dGV4dDpyLmVycm9yVGV4dCxkYXRhOnIuZXJyb3JEYXRhPz97fX07cmV0dXJufWNvbnNvbGUuZXJyb3IoYFR5cGVkUmVxdWVzdCAke259IGZhaWxlZGApLGUuZXJyb3I9e3RleHQ6dC5pbnRlcm5hbEVycm9yTWVzc2FnZSxkYXRhOnt9fX1nZXRSZWdpc3RlcmVkVmlydHVhbFN0cmVhbUJ5SWQoZSl7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zLmZpbmRTeW5jKHI9PnIuc3RyZWFtSWQ9PT1lKX1yZWdpc3RlclZpcnR1YWxTdHJlYW0oZSl7bGV0IHI9dGhpcy5nZXRSZWdpc3RlcmVkVmlydHVhbFN0cmVhbUJ5SWQoZS5zdHJlYW1JZCk7cmV0dXJuIHJ8fCh0aGlzLnJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtcy5hZGQoZSksZSl9dW5yZWdpc3RlclZpcnR1YWxTdHJlYW0oZSl7dGhpcy5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMucmVtb3ZlKGUpfWFkZE1pZGRsZXdhcmUoZSl7dGhpcy5taWRkbGV3YXJlcy5wdXNoKGUpfWFkZFR5cGVkSGFuZGxlcihlKXtpZih0aGlzLmdldFR5cGVkSGFuZGxlckZvck1ldGhvZChlLm1ldGhvZCkpdGhyb3cgbmV3IEVycm9yKGBhIFR5cGVkSGFuZGxlciBmb3IgJHtlLm1ldGhvZH0gYWxyZWR5IGV4aXN0cyEgQ2FuJ3QgYWRkIGFub3RoZXIgb25lLmApO3RoaXMuaGFuZGxlck1hcC5hZGQoZSk7dHJ5e3RoaXMudmFsaWRhdGVBZmZlY3RlZENvbXBvc2l0aW9uUm9vdHMoKX1jYXRjaChuKXt0aHJvdyB0aGlzLmhhbmRsZXJNYXAucmVtb3ZlKGUpLG59fWFkZFR5cGVkUm91dGVyKGUpe2lmKGU9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQSBUeXBlZFJvdXRlciBjYW5ub3QgYmUgY29tcG9zZWQgd2l0aCBpdHNlbGYuIik7aWYoIXRoaXMucm91dGVyTWFwLmZpbmRTeW5jKG49Pm49PT1lKSl7bGV0IG49dGhpcy5jYW5SZWFjaFJvdXRlcihlKSxpPWUuY2FuUmVhY2hSb3V0ZXIodGhpcyk7aWYobiE9PWkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYWRkIGEgYmlkaXJlY3Rpb25hbCBUeXBlZFJvdXRlciBlZGdlIGFjcm9zcyBhbiBleGlzdGluZyBjb21wb3NpdGlvbiBib3VuZGFyeS4iKTt0aGlzLnJvdXRlck1hcC5hZGQoZSksZS5yb3V0ZXJNYXAuYWRkKHRoaXMpO3RyeXt0aGlzLnZhbGlkYXRlQWZmZWN0ZWRDb21wb3NpdGlvblJvb3RzKCl9Y2F0Y2gocyl7dGhyb3cgdGhpcy5yb3V0ZXJNYXAucmVtb3ZlKGUpLGUucm91dGVyTWFwLnJlbW92ZSh0aGlzKSxzfX19YWRkRmFsbGJhY2tSb3V0ZXIoZSl7aWYoZT09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIFR5cGVkUm91dGVyIGNhbm5vdCB1c2UgaXRzZWxmIGFzIGEgZmFsbGJhY2suIik7aWYodGhpcy5mYWxsYmFja1JvdXRlck1hcC5maW5kU3luYyhuPT5uPT09ZSkpcmV0dXJuKCk9Pnt9O2lmKGUuY2FuUmVhY2hSb3V0ZXIodGhpcykpdGhyb3cgbmV3IEVycm9yKCJBZGRpbmcgdGhpcyBmYWxsYmFjayB3b3VsZCBjcmVhdGUgYSBUeXBlZFJvdXRlciBjb21wb3NpdGlvbiBjeWNsZS4iKTt0aGlzLmZhbGxiYWNrUm91dGVyTWFwLmFkZChlKSxlLmZhbGxiYWNrUGFyZW50Um91dGVycy5hZGQodGhpcyk7dHJ5e3RoaXMudmFsaWRhdGVBZmZlY3RlZENvbXBvc2l0aW9uUm9vdHMoKX1jYXRjaChuKXt0aHJvdyB0aGlzLmZhbGxiYWNrUm91dGVyTWFwLnJlbW92ZShlKSxlLmZhbGxiYWNrUGFyZW50Um91dGVycy5kZWxldGUodGhpcyksbn1sZXQgcj0hMTtyZXR1cm4oKT0+e3J8fChyPSEwLHRoaXMuZmFsbGJhY2tSb3V0ZXJNYXAucmVtb3ZlKGUpLGUuZmFsbGJhY2tQYXJlbnRSb3V0ZXJzLmRlbGV0ZSh0aGlzKSl9fWdldE1ldGhvZE5hbWVzKCl7cmV0dXJuWy4uLnRoaXMuY29sbGVjdFJlYWNoYWJsZUhhbmRsZXJzKCkua2V5cygpXS5zb3J0KCl9Y2FuUmVhY2hSb3V0ZXIoZSxyPW5ldyBTZXQpe2lmKHRoaXM9PT1lKXJldHVybiEwO2lmKHIuaGFzKHRoaXMpKXJldHVybiExO3IuYWRkKHRoaXMpO2ZvcihsZXQgbiBvZlsuLi50aGlzLnJvdXRlck1hcC5nZXRBcnJheSgpLC4uLnRoaXMuZmFsbGJhY2tSb3V0ZXJNYXAuZ2V0QXJyYXkoKV0paWYobi5jYW5SZWFjaFJvdXRlcihlLHIpKXJldHVybiEwO3JldHVybiExfWNvbGxlY3RSZWFjaGFibGVIYW5kbGVycyhlPW5ldyBTZXQscj1uZXcgTWFwKXtpZihlLmhhcyh0aGlzKSlyZXR1cm4gcjtlLmFkZCh0aGlzKTtmb3IobGV0IG4gb2YgdGhpcy5oYW5kbGVyTWFwLmdldEFycmF5KCkpe2xldCBpPXIuZ2V0KG4ubWV0aG9kKTtpfHwoaT1uZXcgU2V0LHIuc2V0KG4ubWV0aG9kLGkpKSxpLmFkZCh0aGlzKX1mb3IobGV0IG4gb2ZbLi4udGhpcy5yb3V0ZXJNYXAuZ2V0QXJyYXkoKSwuLi50aGlzLmZhbGxiYWNrUm91dGVyTWFwLmdldEFycmF5KCldKW4uY29sbGVjdFJlYWNoYWJsZUhhbmRsZXJzKGUscik7cmV0dXJuIHJ9Z2V0QWZmZWN0ZWRDb21wb3NpdGlvblJvb3RzKCl7bGV0IGU9bmV3IFNldCxyPVt0aGlzXTtmb3IoO3IubGVuZ3RoPjA7KXtsZXQgbj1yLnBvcCgpO2UuaGFzKG4pfHwoZS5hZGQobiksci5wdXNoKC4uLm4ucm91dGVyTWFwLmdldEFycmF5KCksLi4ubi5mYWxsYmFja1BhcmVudFJvdXRlcnMpKX1yZXR1cm4gZX12YWxpZGF0ZUFmZmVjdGVkQ29tcG9zaXRpb25Sb290cygpe2ZvcihsZXQgZSBvZiB0aGlzLmdldEFmZmVjdGVkQ29tcG9zaXRpb25Sb290cygpKWZvcihsZXRbcixuXW9mIGUuY29sbGVjdFJlYWNoYWJsZUhhbmRsZXJzKCkpaWYobi5zaXplPjEpdGhyb3cgbmV3IEVycm9yKGBUeXBlZFJvdXRlciBjb21wb3NpdGlvbiBleHBvc2VzIG1vcmUgdGhhbiBvbmUgaGFuZGxlciBmb3IgbWV0aG9kICIke3J9Ii5gKX1jaGVja0ZvclR5cGVkSGFuZGxlcihlKXtyZXR1cm4hIXRoaXMuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKGUpfWdldFR5cGVkSGFuZGxlckZvck1ldGhvZChlLHI9W10pe3IucHVzaCh0aGlzKTtsZXQgbjtyZXR1cm4gbj10aGlzLmhhbmRsZXJNYXAuZmluZFN5bmMoaT0+aS5tZXRob2Q9PT1lKSxufHx0aGlzLnJvdXRlck1hcC5nZXRBcnJheSgpLmZvckVhY2goaT0+eyFuJiYhci5pbmNsdWRlcyhpKSYmKG49aS5nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QoZSxyKSl9KSxufHx0aGlzLmZhbGxiYWNrUm91dGVyTWFwLmdldEFycmF5KCkuZm9yRWFjaChpPT57IW4mJiFyLmluY2x1ZGVzKGkpJiYobj1pLmdldFR5cGVkSGFuZGxlckZvck1ldGhvZChlLHIpKX0pLG59Z2V0VHlwZWRIYW5kbGVyQW5kUm91dGVyKGUscj1bXSl7ci5wdXNoKHRoaXMpO2xldCBuPXRoaXMuaGFuZGxlck1hcC5maW5kU3luYyhpPT5pLm1ldGhvZD09PWUpO2lmKG4pcmV0dXJue2hhbmRsZXI6bixyb3V0ZXI6dGhpc307Zm9yKGxldCBpIG9mIHRoaXMucm91dGVyTWFwLmdldEFycmF5KCkpaWYoIXIuaW5jbHVkZXMoaSkpe2xldCBzPWkuZ2V0VHlwZWRIYW5kbGVyQW5kUm91dGVyKGUscik7aWYocylyZXR1cm4gc31mb3IobGV0IGkgb2YgdGhpcy5mYWxsYmFja1JvdXRlck1hcC5nZXRBcnJheSgpKWlmKCFyLmluY2x1ZGVzKGkpKXtsZXQgcz1pLmdldFR5cGVkSGFuZGxlckFuZFJvdXRlcihlLHIpO2lmKHMpcmV0dXJuIHN9cmV0dXJuIG51bGx9c3RhdGlje3RoaXMuZGVmYXVsdFJvdXRlT3B0aW9ucz17bG9jYWxSZXF1ZXN0OiExLHNraXBIb29rczohMX19YXN5bmMgcm91dGVBbmRBZGRSZXNwb25zZShlLHI9e30pe2xldCBuPXsuLi50LmRlZmF1bHRSb3V0ZU9wdGlvbnMsLi4ucn07aWYoZT1vci5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsoZSx7dHlwZWRyb3V0ZXI6dGhpc30pLGUubG9jYWxEYXRhPW4udHJ1c3RlZExvY2FsRGF0YT97Li4ubi50cnVzdGVkTG9jYWxEYXRhfTplLmxvY2FsRGF0YXx8e30sZS5sb2NhbERhdGEuZmlyc3RUeXBlZHJvdXRlcj10aGlzLGUubWV0aG9kPT09IiMjVmlydHVhbFN0cmVhbSMjIil7bGV0IGk9YXdhaXQgdGhpcy5oYW5kbGVTdHJlYW1UeXBlZFJlcXVlc3QoZSk7cmV0dXJuIGkubG9jYWxEYXRhPW51bGwsaX1pZihlPy5jb3JyZWxhdGlvbj8ucGhhc2U9PT0icmVxdWVzdCJ8fG4ubG9jYWxSZXF1ZXN0KXtsZXQgaT1EYXRlLm5vdygpO24uc2tpcEhvb2tzfHx0aGlzLmNhbGxIb29rKCJvbkluY29taW5nUmVxdWVzdCIse2NvcnJlbGF0aW9uSWQ6ZS5jb3JyZWxhdGlvbj8uaWR8fCJ1bmtub3duIixtZXRob2Q6ZS5tZXRob2QsZGlyZWN0aW9uOiJpbmNvbWluZyIscGhhc2U6InJlcXVlc3QiLHRpbWVzdGFtcDppLHBheWxvYWQ6ZS5yZXF1ZXN0fSk7bGV0IHM9dGhpcy5nZXRUeXBlZEhhbmRsZXJBbmRSb3V0ZXIoZS5tZXRob2QpO2lmKCFzKXJldHVybiBjb25zb2xlLmxvZyhgQ2Fubm90IGZpbmQgaGFuZGxlciBmb3IgbWV0aG9kbmFtZSAke2UubWV0aG9kfWApLGUuZXJyb3I9e3RleHQ6IlRoZXJlIGlzIG5vIGF2YWlsYWJsZSBtZXRob2QgZm9yIHRoaXMgY2FsbCBvbiB0aGUgc2VydmVyIHNpZGUiLGRhdGE6e319LGUuY29ycmVsYXRpb24ucGhhc2U9InJlc3BvbnNlIixlLmxvY2FsRGF0YT12b2lkIDAsZT1vci5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayhlLHt0eXBlZHJvdXRlcjp0aGlzfSksbi5za2lwSG9va3N8fHRoaXMuY2FsbEhvb2soIm9uT3V0Z29pbmdSZXNwb25zZSIse2NvcnJlbGF0aW9uSWQ6ZS5jb3JyZWxhdGlvbj8uaWR8fCJ1bmtub3duIixtZXRob2Q6ZS5tZXRob2QsZGlyZWN0aW9uOiJvdXRnb2luZyIscGhhc2U6InJlc3BvbnNlIix0aW1lc3RhbXA6RGF0ZS5ub3coKSxkdXJhdGlvbk1zOkRhdGUubm93KCktaSxwYXlsb2FkOmUucmVzcG9uc2UsZXJyb3JUZXh0OmUuZXJyb3I/LnRleHR9KSxlO2xldHtoYW5kbGVyOmEscm91dGVyOmx9PXM7aWYobC5taWRkbGV3YXJlcy5sZW5ndGg+MCl0cnl7Zm9yKGxldCBjIG9mIGwubWlkZGxld2FyZXMpYXdhaXQgYyhlKX1jYXRjaChjKXtyZXR1cm4gdGhpcy5zZXRFcnJvckZyb21DYXVnaHRFcnJvcihlLGMsYG1pZGRsZXdhcmUgZm9yIG1ldGhvZCAnJHtlLm1ldGhvZH0nYCksZS5jb3JyZWxhdGlvbi5waGFzZT0icmVzcG9uc2UiLGUubG9jYWxEYXRhPXZvaWQgMCxlPW9yLmVuY29kZVBheWxvYWRGb3JOZXR3b3JrKGUse3R5cGVkcm91dGVyOnRoaXN9KSxuLnNraXBIb29rc3x8dGhpcy5jYWxsSG9vaygib25PdXRnb2luZ1Jlc3BvbnNlIix7Y29ycmVsYXRpb25JZDplLmNvcnJlbGF0aW9uPy5pZHx8InVua25vd24iLG1ldGhvZDplLm1ldGhvZCxkaXJlY3Rpb246Im91dGdvaW5nIixwaGFzZToicmVzcG9uc2UiLHRpbWVzdGFtcDpEYXRlLm5vdygpLGR1cmF0aW9uTXM6RGF0ZS5ub3coKS1pLHBheWxvYWQ6ZS5yZXNwb25zZSxlcnJvclRleHQ6ZS5lcnJvcj8udGV4dH0pLGV9cmV0dXJuIGU9YXdhaXQgYS5hZGRSZXNwb25zZShlKSxlLmxvY2FsRGF0YT12b2lkIDAsZT1vci5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayhlLHt0eXBlZHJvdXRlcjp0aGlzfSksbi5za2lwSG9va3N8fHRoaXMuY2FsbEhvb2soIm9uT3V0Z29pbmdSZXNwb25zZSIse2NvcnJlbGF0aW9uSWQ6ZS5jb3JyZWxhdGlvbj8uaWR8fCJ1bmtub3duIixtZXRob2Q6ZS5tZXRob2QsZGlyZWN0aW9uOiJvdXRnb2luZyIscGhhc2U6InJlc3BvbnNlIix0aW1lc3RhbXA6RGF0ZS5ub3coKSxkdXJhdGlvbk1zOkRhdGUubm93KCktaSxwYXlsb2FkOmUucmVzcG9uc2UsZXJyb3JUZXh0OmUuZXJyb3I/LnRleHR9KSxlfWVsc2UgcmV0dXJuIGU/LmNvcnJlbGF0aW9uPy5waGFzZT09PSJyZXNwb25zZSI/KG4uc2tpcEhvb2tzfHx0aGlzLmNhbGxIb29rKCJvbkluY29taW5nUmVzcG9uc2UiLHtjb3JyZWxhdGlvbklkOmUuY29ycmVsYXRpb24/LmlkfHwidW5rbm93biIsbWV0aG9kOmUubWV0aG9kLGRpcmVjdGlvbjoiaW5jb21pbmciLHBoYXNlOiJyZXNwb25zZSIsdGltZXN0YW1wOkRhdGUubm93KCkscGF5bG9hZDplLnJlc3BvbnNlLGVycm9yVGV4dDplLmVycm9yPy50ZXh0fSksdGhpcy5maXJlRXZlbnRJbnRlcmVzdE1hcC5maW5kSW50ZXJlc3QoZS5jb3JyZWxhdGlvbi5pZCk/LmZ1bGxmaWxsSW50ZXJlc3QoZSksbnVsbCk6KGNvbnNvbGUubG9nKCJUeXBlZFJvdXRlciByZWNlaXZlZCBhIG1hbGZvcm1lZCByZXF1ZXN0IERUTyIpLG51bGwpfWFzeW5jIGhhbmRsZVN0cmVhbVR5cGVkUmVxdWVzdChlKXtsZXQgcj10aGlzLmdldFJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtQnlJZChlLnJlcXVlc3Quc3RyZWFtSWQpO3JldHVybiByP3IuaGFuZGxlU3RyZWFtVHIoZSk6KGUucmVzcG9uc2U9e3N0cmVhbUlkOmUucmVxdWVzdC5zdHJlYW1JZCxjeWNsZUlkOmUucmVxdWVzdC5jeWNsZUlkLGN5Y2xlOiJyZXNwb25zZSIsbWFpblB1cnBvc2U6ImVuZCIsa2VlcEFsaXZlOiExLG5leHQ6ITEsYmFja3ByZXNzdXJlOiExfSxlKX19O3ZhciBuYT0iIyMjIyMjIyMjIyMjI0NMT1NJTkcgQklUIyMjIyMjIyMjIyMjIyIsRWk9Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJWaXJ0dWFsU3RyZWFtQ2xvc2VkRXJyb3IiKX1jb25zdHJ1Y3RvcihlPSJWaXJ0dWFsU3RyZWFtIGlzIGNsb3NlZCIscil7c3VwZXIoZSxyKSx0aGlzLm5hbWU9IlZpcnR1YWxTdHJlYW1DbG9zZWRFcnJvciJ9fSxxbD1jbGFzc3tzdGF0aWN7byh0aGlzLCJWaXJ0dWFsU3RyZWFtQWN0aXZhdGlvblNjb3BlIil9Y29uc3RydWN0b3IoKXt0aGlzLnRyYWNrZWRTdHJlYW1zPW5ldyBTZXQsdGhpcy5zZXR0bGVkPSExfXRyYWNrKGUpe3RoaXMuc2V0dGxlZHx8dGhpcy50cmFja2VkU3RyZWFtcy5hZGQoZSl9Y29tbWl0KCl7bGV0IGU9Wy4uLnRoaXMudHJhY2tlZFN0cmVhbXNdO3RoaXMuc2V0dGxlZD0hMCx0aGlzLnRyYWNrZWRTdHJlYW1zLmNsZWFyKCk7Zm9yKGxldCByIG9mIGUpci5jb21taXRBY3RpdmF0aW9uKCl9YXN5bmMgcm9sbGJhY2soZSl7aWYodGhpcy5zZXR0bGVkKXJldHVybjt0aGlzLnNldHRsZWQ9ITA7bGV0IHI9Wy4uLnRoaXMudHJhY2tlZFN0cmVhbXNdO3RoaXMudHJhY2tlZFN0cmVhbXMuY2xlYXIoKSxhd2FpdCBQcm9taXNlLmFsbChyLm1hcChuPT5uLmFib3J0KGUpKSl9fSxvcj1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIlZpcnR1YWxTdHJlYW0iKX1jb25zdHJ1Y3Rvcigpe3RoaXMuc3RyZWFtSWQ9Qm4udW5pKCksdGhpcy5saWZlY3ljbGVTdGF0ZUludGVybmFsPSJpZGxlIix0aGlzLmtlZXBBbGl2ZT0hMCx0aGlzLnNlbmRBZG1pc3Npb25UYWlsPVByb21pc2UucmVzb2x2ZSgpLHRoaXMuZnJhbWVBZG1pc3Npb25UYWlsPVByb21pc2UucmVzb2x2ZSgpLHRoaXMuY2xvc2VTdGFydGVkPSExLHRoaXMuYWN0aXZhdGlvbkNvbW1pdHRlZD0hMSx0aGlzLmFjdGl2YXRpb25SZXNvbHZlcnM9bmV3IFNldCx0aGlzLnJlc3BvbmRpbmdEcmFpblJlc29sdmVycz1uZXcgU2V0LHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheT1uZXcgQWUuQmFja3ByZXNzdXJlZEFycmF5KDE2KSx0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXk9bmV3IEFlLkJhY2twcmVzc3VyZWRBcnJheSgxNil9c3RhdGlje3RoaXMucmVzcG9uZGluZ1JlZ2lzdHJhdGlvbklkbGVUaW1lb3V0TXM9MTVlM31zdGF0aWN7dGhpcy5ncmFjZWZ1bENsb3NlVGltZW91dE1zPTFlNH1zdGF0aWMgZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsoZSxyLG4saT1bXSl7cmV0dXJuIWV8fG5yLmlzQnVmZmVyTGlrZShlKT9lOmUgaW5zdGFuY2VvZiB0PyhlLmFjdGl2YXRlKHIpLCFuPy5yZXNwb25zZXx8aS5pbmNsdWRlcygicmVzcG9uc2UiKT97X2lzVmlydHVhbFN0cmVhbTohMCxzdHJlYW1JZDplLnN0cmVhbUlkfTp7X09CTUlUVEVEX1ZJUlRVQUxfU1RSRUFNOiEwLHJlYXNvbjoicGF0aCBpcyB1bmRlciAucmVxdWVzdDogb21pdHRlZCBmb3IgZGVkdXBsaWNhdGlvbiByZWFzb25zIGluIHJlc3BvbnNlIGN5Y2xlLiJ9KTpBcnJheS5pc0FycmF5KGUpP2UubWFwKChzLGEpPT50LmVuY29kZVBheWxvYWRGb3JOZXR3b3JrKHMscixufHxlLGkuY29uY2F0KFN0cmluZyhhKSkpKTplIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiP2UgaW5zdGFuY2VvZiBTZXR8fGUgaW5zdGFuY2VvZiBNYXB8fGUgaW5zdGFuY2VvZiBEYXRlfHxlIGluc3RhbmNlb2YgUmVnRXhwfHxlIGluc3RhbmNlb2YgRXJyb3J8fGUgaW5zdGFuY2VvZiBQcm9taXNlfHx0eXBlb2YgZS50aGVuPT0iZnVuY3Rpb24iP2U6T2JqZWN0LmVudHJpZXMoZSkucmVkdWNlKChzLFthLGxdKT0+KHNbYV09dC5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayhsLHIsbnx8ZSxpLmNvbmNhdChhKSkscykse30pOmV9c3RhdGljIGRlY29kZVBheWxvYWRGcm9tTmV0d29yayhlLHIpe3JldHVybiB0LmRlY29kZVBheWxvYWRGcm9tTmV0d29ya0ludGVybmFsKGUscixuZXcgTWFwKX1zdGF0aWMgY29udGFpbnNOZXR3b3JrRGVzY3JpcHRvcihlKXtyZXR1cm4hZXx8bnIuaXNCdWZmZXJMaWtlKGUpfHx0eXBlb2YgZSE9Im9iamVjdCI/ITE6ZS5faXNWaXJ0dWFsU3RyZWFtPT09ITA/ITA6QXJyYXkuaXNBcnJheShlKT9lLnNvbWUocj0+dC5jb250YWluc05ldHdvcmtEZXNjcmlwdG9yKHIpKTpPYmplY3QudmFsdWVzKGUpLnNvbWUocj0+dC5jb250YWluc05ldHdvcmtEZXNjcmlwdG9yKHIpKX1zdGF0aWMgZGVjb2RlUGF5bG9hZEZyb21OZXR3b3JrSW50ZXJuYWwoZSxyLG4pe2lmKG5yLmlzQnVmZmVyTGlrZShlKXx8ZSBpbnN0YW5jZW9mIFdsfHxlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QifHxlIGluc3RhbmNlb2YgU2V0fHxlIGluc3RhbmNlb2YgTWFwfHxlIGluc3RhbmNlb2YgRGF0ZXx8ZSBpbnN0YW5jZW9mIFJlZ0V4cHx8ZSBpbnN0YW5jZW9mIEVycm9yfHxlIGluc3RhbmNlb2YgUHJvbWlzZXx8dHlwZW9mIGUudGhlbj09ImZ1bmN0aW9uIilyZXR1cm4gZTtpZihlLl9pc1ZpcnR1YWxTdHJlYW09PT0hMCl7aWYodHlwZW9mIGUuc3RyZWFtSWQhPSJzdHJpbmcifHxlLnN0cmVhbUlkLmxlbmd0aD09PTApdGhyb3cgbmV3IFR5cGVFcnJvcigiVmlydHVhbFN0cmVhbSBuZXR3b3JrIGRlc2NyaXB0b3IgcmVxdWlyZXMgYSBub24tZW1wdHkgc3RyZWFtSWQiKTtsZXQgaT1uLmdldChlLnN0cmVhbUlkKTtpZihpKXJldHVybiBpO2xldCBzPXIudHlwZWRyb3V0ZXI/LmdldFJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtQnlJZChlLnN0cmVhbUlkKTtpZihzKXJldHVybiBzLnJlZnJlc2hSZXNwb25kaW5nUmVnaXN0cmF0aW9uKCksbi5zZXQoZS5zdHJlYW1JZCxzKSxzO2xldCBhPW5ldyB0O3JldHVybiBhLnN0cmVhbUlkPWUuc3RyZWFtSWQsYS5hY3RpdmF0ZShyKSxuLnNldChlLnN0cmVhbUlkLGEpLGF9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5tYXAoaT0+dC5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmtJbnRlcm5hbChpLHIsbikpOk9iamVjdC5rZXlzKGUpLnJlZHVjZSgoaSxzKT0+KGlbc109dC5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmtJbnRlcm5hbChlW3NdLHIsbiksaSkse30pfWdldCBsaWZlY3ljbGVTdGF0ZSgpe3JldHVybiB0aGlzLmxpZmVjeWNsZVN0YXRlSW50ZXJuYWx9YWN0aXZhdGUoZSl7aWYodGhpcy5saWZlY3ljbGVTdGF0ZUludGVybmFsPT09ImNsb3NlZCIpdGhyb3cgdGhpcy5nZXRDbG9zZUVycm9yKCk7bGV0IHI9ZS5zZW5kTWV0aG9kPyJyZXF1ZXN0aW5nIjplLnR5cGVkcm91dGVyPyJyZXNwb25kaW5nIjp2b2lkIDA7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJWaXJ0dWFsU3RyZWFtIHJlcXVpcmVzIGEgc2VuZCBtZXRob2Qgb3IgVHlwZWRSb3V0ZXIiKTtpZih0aGlzLmxpZmVjeWNsZVN0YXRlSW50ZXJuYWw9PT0iYWN0aXZlIiYmdGhpcy5zaWRlIT09cil0aHJvdyBuZXcgRXJyb3IoYFZpcnR1YWxTdHJlYW0gJHt0aGlzLnN0cmVhbUlkfSBpcyBhbHJlYWR5IGFjdGl2ZSBvbiB0aGUgJHt0aGlzLnNpZGV9IHNpZGVgKTtsZXQgbj10aGlzLmxpZmVjeWNsZVN0YXRlSW50ZXJuYWw9PT0iaWRsZSI7aWYodGhpcy5saWZlY3ljbGVTdGF0ZUludGVybmFsPSJhY3RpdmUiLHRoaXMua2VlcEFsaXZlPSEwLHRoaXMuc2lkZT1yLHI9PT0icmVxdWVzdGluZyIpdGhpcy5zZW5kTWV0aG9kPWUuc2VuZE1ldGhvZDtlbHNle2lmKHRoaXMudHlwZWRyb3V0ZXI9ZS50eXBlZHJvdXRlcix0aGlzLnR5cGVkcm91dGVyLnJlZ2lzdGVyVmlydHVhbFN0cmVhbSh0aGlzKSE9PXRoaXMpdGhyb3cgdGhpcy5saWZlY3ljbGVTdGF0ZUludGVybmFsPSJpZGxlIix0aGlzLnR5cGVkcm91dGVyPXZvaWQgMCxuZXcgRXJyb3IoYFZpcnR1YWxTdHJlYW0gJHt0aGlzLnN0cmVhbUlkfSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgb24gdGhpcyByb3V0ZXJgKTt0aGlzLnJlZnJlc2hSZXNwb25kaW5nUmVnaXN0cmF0aW9uKCl9biYmKGUuYWN0aXZhdGlvblNjb3BlP2UuYWN0aXZhdGlvblNjb3BlLnRyYWNrKHRoaXMpOnRoaXMuY29tbWl0QWN0aXZhdGlvbigpKX1jb21taXRBY3RpdmF0aW9uKCl7aWYodGhpcy5saWZlY3ljbGVTdGF0ZUludGVybmFsPT09ImFjdGl2ZSImJnRoaXMuc2lkZT09PSJyZXF1ZXN0aW5nIil7dGhpcy5hY3RpdmF0aW9uQ29tbWl0dGVkPSEwO2xldCBlPVsuLi50aGlzLmFjdGl2YXRpb25SZXNvbHZlcnNdO3RoaXMuYWN0aXZhdGlvblJlc29sdmVycy5jbGVhcigpO2ZvcihsZXQgciBvZiBlKXIoKTt0aGlzLnN0YXJ0S2VlcEFsaXZlTG9vcCgpLHRoaXMuZW5zdXJlUXVldWVXb3JrKCl9fWdldENsb3NlRXJyb3IoZSl7cmV0dXJuIHRoaXMuY2xvc2VFcnJvcnx8KHRoaXMuY2xvc2VFcnJvcj1uZXcgRWkoIlZpcnR1YWxTdHJlYW0gaXMgY2xvc2VkIixlPT09dm9pZCAwP3ZvaWQgMDp7Y2F1c2U6ZX0pKSx0aGlzLmNsb3NlRXJyb3J9YXNzZXJ0Tm90Q2xvc2VkKCl7aWYodGhpcy5saWZlY3ljbGVTdGF0ZUludGVybmFsPT09ImNsb3NlZCIpdGhyb3cgdGhpcy5nZXRDbG9zZUVycm9yKCl9YXNzZXJ0Q2FuU2VuZCgpe2lmKHRoaXMuYXNzZXJ0Tm90Q2xvc2VkKCksdGhpcy5jbG9zZVN0YXJ0ZWQpdGhyb3cgbmV3IEVpKCJWaXJ0dWFsU3RyZWFtIGlzIGNsb3NpbmciKX1hc3luYyBhY3F1aXJlU2VuZEFkbWlzc2lvbigpe2xldCBlPXRoaXMuc2VuZEFkbWlzc2lvblRhaWwscjtyZXR1cm4gdGhpcy5zZW5kQWRtaXNzaW9uVGFpbD1uZXcgUHJvbWlzZShuPT57cj1ufSksYXdhaXQgZSxyfWFzeW5jIGFjcXVpcmVGcmFtZUFkbWlzc2lvbigpe2xldCBlPXRoaXMuZnJhbWVBZG1pc3Npb25UYWlsLHI7cmV0dXJuIHRoaXMuZnJhbWVBZG1pc3Npb25UYWlsPW5ldyBQcm9taXNlKG49PntyPW59KSxhd2FpdCBlLHJ9YXN5bmMgd2FpdEZvck91dGJvdW5kRHJhaW4oKXtmb3IoO3RoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aD4wfHx0aGlzLnF1ZXVlV29ya1Byb21pc2U7KXt0aGlzLmFzc2VydE5vdENsb3NlZCgpLHRoaXMuZW5zdXJlUXVldWVXb3JrKCk7bGV0IGU9dGhpcy5xdWV1ZVdvcmtQcm9taXNlO2U/YXdhaXQgZTp0aGlzLmFjdGl2YXRpb25Db21taXR0ZWR8fGF3YWl0IG5ldyBQcm9taXNlKHI9Pnt0aGlzLmFjdGl2YXRpb25SZXNvbHZlcnMuYWRkKHIpfSl9dGhpcy5hc3NlcnROb3RDbG9zZWQoKX1hc3luYyB3YWl0V2l0aGluR3JhY2VmdWxDbG9zZURlYWRsaW5lKGUpe2xldCByLG49bmV3IFByb21pc2UoKGkscyk9PntyPXNldFRpbWVvdXQoKCk9PntzKG5ldyBFaSgiVmlydHVhbFN0cmVhbSBncmFjZWZ1bCBjbG9zZSB0aW1lZCBvdXQiKSl9LHQuZ3JhY2VmdWxDbG9zZVRpbWVvdXRNcyksci51bnJlZj8uKCl9KTt0cnl7YXdhaXQgUHJvbWlzZS5yYWNlKFtlLG5dKX1maW5hbGx5e3ImJmNsZWFyVGltZW91dChyKX19YXN5bmMgd2FpdEZvclJlc3BvbmRpbmdEcmFpbigpe3RoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCE9PTAmJmF3YWl0IG5ldyBQcm9taXNlKGU9Pnt0aGlzLnJlc3BvbmRpbmdEcmFpblJlc29sdmVycy5hZGQoZSl9KX1yZXNvbHZlUmVzcG9uZGluZ0RyYWluKCl7aWYodGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoPjApcmV0dXJuO2xldCBlPVsuLi50aGlzLnJlc3BvbmRpbmdEcmFpblJlc29sdmVyc107dGhpcy5yZXNwb25kaW5nRHJhaW5SZXNvbHZlcnMuY2xlYXIoKTtmb3IobGV0IHIgb2YgZSlyKCl9c3RhdGljIHJlY29uc3RpdHV0ZUJpbmFyeURhdGEoZSl7aWYoZT09bnVsbHx8ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHR5cGVvZiBCdWZmZXI8InUiJiZCdWZmZXIuaXNCdWZmZXIoZSkpcmV0dXJuIGU7aWYodHlwZW9mIGU9PSJvYmplY3QiKXtpZihlLnR5cGU9PT0iRW5jb2RlZEJ1ZmZlciImJnR5cGVvZiBlLmRhdGE9PSJzdHJpbmciJiZlLmRhdGEuc3RhcnRzV2l0aCgiYmFzZTY0OiIpKXtsZXQgbj1lLmRhdGEuc2xpY2UoNyk7aWYodHlwZW9mIEJ1ZmZlcjwidSIpe2xldCBpPUJ1ZmZlci5mcm9tKG4sImJhc2U2NCIpO3JldHVybiBuZXcgVWludDhBcnJheShpLmJ1ZmZlcixpLmJ5dGVPZmZzZXQsaS5ieXRlTGVuZ3RoKX1yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQXJyYXkuZnJvbShhdG9iKG4pKS5tYXAoaT0+aS5jaGFyQ29kZUF0KDApKSl9aWYoZS50eXBlPT09IkJ1ZmZlciImJkFycmF5LmlzQXJyYXkoZS5kYXRhKSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZS5kYXRhKTtsZXQgcj1PYmplY3Qua2V5cyhlKTtpZihyLmxlbmd0aD4wJiZyLmV2ZXJ5KG49Pi9eXGQrJC8udGVzdChuKSkpe2xldCBuPW5ldyBBcnJheShyLmxlbmd0aCk7Zm9yKGxldCBpIG9mIHIpbltOdW1iZXIoaSldPWVbaV07aWYobi5ldmVyeShpPT50eXBlb2YgaT09Im51bWJlciIpKXJldHVybiBuZXcgVWludDhBcnJheShuKX19cmV0dXJuIGV9ZW5zdXJlUXVldWVXb3JrKCl7dGhpcy5saWZlY3ljbGVTdGF0ZUludGVybmFsPT09ImNsb3NlZCJ8fHRoaXMuc2lkZSE9PSJyZXF1ZXN0aW5nInx8IXRoaXMuYWN0aXZhdGlvbkNvbW1pdHRlZHx8dGhpcy5xdWV1ZVdvcmtQcm9taXNlfHwodGhpcy5xdWV1ZVdvcmtQcm9taXNlPXRoaXMud29ya09uUXVldWUoKS5jYXRjaChhc3luYyBlPT57YXdhaXQgdGhpcy5hYm9ydChlKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLnF1ZXVlV29ya1Byb21pc2U9dm9pZCAwLHRoaXMubGlmZWN5Y2xlU3RhdGVJbnRlcm5hbD09PSJhY3RpdmUiJiZ0aGlzLnNpZGU9PT0icmVxdWVzdGluZyImJnRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aD4wJiZ0aGlzLmVuc3VyZVF1ZXVlV29yaygpfSkpfWFzeW5jIHdvcmtPblF1ZXVlKCl7dGhpcy5hc3NlcnROb3RDbG9zZWQoKTtsZXQgZT0hdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKSxyPSExLG49ITEsaT1vKGFzeW5jKCk9PntsZXQgcz1hd2FpdCB0aGlzLnNlbmRTdHJlYW1SZXF1ZXN0KHtzdHJlYW1JZDp0aGlzLnN0cmVhbUlkLGN5Y2xlSWQ6Qm4udW5pKCksY3ljbGU6InJlcXVlc3QiLG1haW5QdXJwb3NlOiJmZWVkYmFjayIsbmV4dDp0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGg+MCxiYWNrcHJlc3N1cmU6IXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCl9KTt0aGlzLmFjY2VwdFJlbW90ZVJlc3BvbnNlKHMpJiYobj0hIXMucmVzcG9uc2U/LmJhY2twcmVzc3VyZSxyPSEhcy5yZXNwb25zZT8ubmV4dCl9LCJnZXRGZWVkYmFjayIpO2Zvcihhd2FpdCBpKCk7dGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoPjB8fHI7KXtmb3IodGhpcy5hc3NlcnROb3RDbG9zZWQoKSxyJiZ0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGg9PT0wJiYhdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKSYmKGF3YWl0IHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS53YWl0Rm9yU3BhY2UoKSx0aGlzLmFzc2VydE5vdENsb3NlZCgpLGU9IXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCkpO247KWF3YWl0IGxlLmRlbGF5Rm9yKDUwKSx0aGlzLmFzc2VydE5vdENsb3NlZCgpLGF3YWl0IGkoKTtsZXQgcz10aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGg+MD90aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuc2hpZnQoKTp2b2lkIDAsYT1hd2FpdCB0aGlzLnNlbmRTdHJlYW1SZXF1ZXN0KHtzdHJlYW1JZDp0aGlzLnN0cmVhbUlkLGN5Y2xlSWQ6Qm4udW5pKCksY3ljbGU6InJlcXVlc3QiLG1haW5QdXJwb3NlOnM9PT12b2lkIDA/InJlYWQiOiJjaHVuayIsYmFja3ByZXNzdXJlOmUsbmV4dDp0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGg+MCwuLi5zPT09dm9pZCAwP3t9OntjaHVua0RhdGE6c319KTtpZighdGhpcy5hY2NlcHRSZW1vdGVSZXNwb25zZShhKSlyZXR1cm47bj0hIWEucmVzcG9uc2U/LmJhY2twcmVzc3VyZSxlPSF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpLHI9ISFhLnJlc3BvbnNlPy5uZXh0fX1hc3luYyBzZW5kU3RyZWFtUmVxdWVzdChlKXtsZXQgcj1hd2FpdCB0aGlzLmFjcXVpcmVGcmFtZUFkbWlzc2lvbigpO3RyeXtpZih0aGlzLmFzc2VydE5vdENsb3NlZCgpLCF0aGlzLnNlbmRNZXRob2QpdGhyb3cgbmV3IEVycm9yKCJWaXJ0dWFsU3RyZWFtIGlzIG1pc3NpbmcgYSBzZW5kIG1ldGhvZCIpO3JldHVybiBhd2FpdCB0aGlzLnNlbmRNZXRob2Qoe21ldGhvZDoiIyNWaXJ0dWFsU3RyZWFtIyMiLHJlcXVlc3Q6ZSxyZXNwb25zZTpudWxsfSl9ZmluYWxseXtyKCl9fWFjY2VwdFJlbW90ZVJlc3BvbnNlKGUpe2lmKHRoaXMubGlmZWN5Y2xlU3RhdGVJbnRlcm5hbD09PSJjbG9zZWQiKXJldHVybiExO2xldCByPWUucmVzcG9uc2U/LmNodW5rRGF0YTtyZXR1cm4gciE9PXZvaWQgMCYmdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LnB1c2godC5yZWNvbnN0aXR1dGVCaW5hcnlEYXRhKHIpKSxlLnJlc3BvbnNlPy5rZWVwQWxpdmU9PT0hMXx8ZS5yZXNwb25zZT8ubWFpblB1cnBvc2U9PT0iZW5kIj8odGhpcy50ZXJtaW5hdGUobmV3IEVpKCJSZW1vdGUgVmlydHVhbFN0cmVhbSBpcyBjbG9zZWQiKSxyPT09bmEpLCExKTohMH1hc3luYyBoYW5kbGVTdHJlYW1UcihlKXtpZih0aGlzLmxpZmVjeWNsZVN0YXRlSW50ZXJuYWw9PT0iY2xvc2VkIilyZXR1cm4gZS5yZXNwb25zZT10aGlzLmNyZWF0ZUNsb3NlZFJlc3BvbnNlKGUpLGU7aWYodGhpcy5yZWZyZXNoUmVzcG9uZGluZ1JlZ2lzdHJhdGlvbigpLGUucmVxdWVzdC5rZWVwQWxpdmU9PT0hMXx8ZS5yZXF1ZXN0Lm1haW5QdXJwb3NlPT09ImVuZCIpcmV0dXJuIGUucmVzcG9uc2U9dGhpcy5jcmVhdGVDbG9zZWRSZXNwb25zZShlKSxhd2FpdCB0aGlzLmFib3J0KCksZTtsZXQgcj1lLnJlcXVlc3QuY2h1bmtEYXRhPT09bmE7ZS5yZXF1ZXN0LmNodW5rRGF0YSE9PXZvaWQgMCYmdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LnB1c2godC5yZWNvbnN0aXR1dGVCaW5hcnlEYXRhKGUucmVxdWVzdC5jaHVua0RhdGEpKTtsZXQgbj0hIWUucmVxdWVzdC5iYWNrcHJlc3N1cmUsaT0hciYmIW4mJnRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aD4wP3RoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5zaGlmdCgpOnZvaWQgMDt0aGlzLnJlc29sdmVSZXNwb25kaW5nRHJhaW4oKTtsZXQgcz1pPT09bmE7cmV0dXJuIGUucmVzcG9uc2U9e3N0cmVhbUlkOnRoaXMuc3RyZWFtSWQsY3ljbGVJZDplLnJlcXVlc3QuY3ljbGVJZCxjeWNsZToicmVzcG9uc2UiLG1haW5QdXJwb3NlOnM/ImVuZCI6aSE9PXZvaWQgMD8iY2h1bmsiOmUucmVxdWVzdC5tYWluUHVycG9zZT09PSJrZWVwQWxpdmUiPyJrZWVwQWxpdmUiOiJmZWVkYmFjayIsa2VlcEFsaXZlOiFzLG5leHQ6dGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoPjAsYmFja3ByZXNzdXJlOiF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpLC4uLmk9PT12b2lkIDA/e306e2NodW5rRGF0YTppfX0sKHJ8fHMpJiYoZS5yZXNwb25zZS5tYWluUHVycG9zZT0iZW5kIixlLnJlc3BvbnNlLmtlZXBBbGl2ZT0hMSx0aGlzLnRlcm1pbmF0ZSh2b2lkIDAscikpLGV9Y3JlYXRlQ2xvc2VkUmVzcG9uc2UoZSl7cmV0dXJue3N0cmVhbUlkOmUucmVxdWVzdC5zdHJlYW1JZCxjeWNsZUlkOmUucmVxdWVzdC5jeWNsZUlkLGN5Y2xlOiJyZXNwb25zZSIsbWFpblB1cnBvc2U6ImVuZCIsa2VlcEFsaXZlOiExLG5leHQ6ITEsYmFja3ByZXNzdXJlOiExfX1yZWZyZXNoUmVzcG9uZGluZ1JlZ2lzdHJhdGlvbigpe3RoaXMuc2lkZSE9PSJyZXNwb25kaW5nInx8dGhpcy5saWZlY3ljbGVTdGF0ZUludGVybmFsIT09ImFjdGl2ZSJ8fCh0aGlzLnJlc3BvbmRpbmdFeHBpcnlUaW1lciYmY2xlYXJUaW1lb3V0KHRoaXMucmVzcG9uZGluZ0V4cGlyeVRpbWVyKSx0aGlzLnJlc3BvbmRpbmdFeHBpcnlUaW1lcj1zZXRUaW1lb3V0KCgpPT57dGhpcy5hYm9ydChuZXcgRWkoIlJlc3BvbmRpbmcgVmlydHVhbFN0cmVhbSByZWdpc3RyYXRpb24gZXhwaXJlZCIpKX0sdC5yZXNwb25kaW5nUmVnaXN0cmF0aW9uSWRsZVRpbWVvdXRNcyksdGhpcy5yZXNwb25kaW5nRXhwaXJ5VGltZXIudW5yZWY/LigpKX1hc3luYyBjbGVhbnVwKCl7YXdhaXQgdGhpcy5hYm9ydCgpfWNsZWFudXBSZWdpc3RyYXRpb24oKXtpZih0aGlzLnJlc3BvbmRpbmdFeHBpcnlUaW1lciYmKGNsZWFyVGltZW91dCh0aGlzLnJlc3BvbmRpbmdFeHBpcnlUaW1lciksdGhpcy5yZXNwb25kaW5nRXhwaXJ5VGltZXI9dm9pZCAwKSx0aGlzLnR5cGVkcm91dGVyKXtsZXQgZT10aGlzLnR5cGVkcm91dGVyO3RoaXMudHlwZWRyb3V0ZXI9dm9pZCAwLGUudW5yZWdpc3RlclZpcnR1YWxTdHJlYW0odGhpcyl9fXN0YXJ0S2VlcEFsaXZlTG9vcCgpe3RoaXMuc2lkZSE9PSJyZXF1ZXN0aW5nInx8dGhpcy5saWZlY3ljbGVTdGF0ZUludGVybmFsPT09ImNsb3NlZCJ8fHRoaXMua2VlcEFsaXZlTG9vcFByb21pc2V8fCh0aGlzLmtlZXBBbGl2ZUxvb3BQcm9taXNlPXRoaXMucnVuS2VlcEFsaXZlTG9vcCgpLmNhdGNoKGFzeW5jIGU9Pnthd2FpdCB0aGlzLmFib3J0KGUpfSkuZmluYWxseSgoKT0+e3RoaXMua2VlcEFsaXZlTG9vcFByb21pc2U9dm9pZCAwfSkpfWFzeW5jIHJ1bktlZXBBbGl2ZUxvb3AoKXtmb3IoYXdhaXQgbGUuZGVsYXlGb3IoMCk7dGhpcy5rZWVwQWxpdmUmJnRoaXMubGlmZWN5Y2xlU3RhdGVJbnRlcm5hbD09PSJhY3RpdmUiOylhd2FpdCB0aGlzLnRyaWdnZXJLZWVwQWxpdmUoKSx0aGlzLmtlZXBBbGl2ZSYmdGhpcy5saWZlY3ljbGVTdGF0ZUludGVybmFsPT09ImFjdGl2ZSImJmF3YWl0IGxlLmRlbGF5Rm9yKDFlMyl9YXN5bmMgdHJpZ2dlcktlZXBBbGl2ZSgpe2xldCBlPWF3YWl0IHRoaXMuc2VuZFN0cmVhbVJlcXVlc3Qoe3N0cmVhbUlkOnRoaXMuc3RyZWFtSWQsY3ljbGVJZDpCbi51bmkoKSxjeWNsZToicmVxdWVzdCIsbWFpblB1cnBvc2U6ImtlZXBBbGl2ZSIsa2VlcEFsaXZlOiEwLGJhY2twcmVzc3VyZTohdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKX0pO3RoaXMuYWNjZXB0UmVtb3RlUmVzcG9uc2UoZSkmJmUucmVzcG9uc2U/Lm5leHQmJnRoaXMuZW5zdXJlUXVldWVXb3JrKCl9YXN5bmMgc2VuZERhdGEoZSl7bGV0IHI9YXdhaXQgdGhpcy5hY3F1aXJlU2VuZEFkbWlzc2lvbigpO3RyeXt0aGlzLmFzc2VydENhblNlbmQoKSxhd2FpdCB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkud2FpdEZvclNwYWNlKCksdGhpcy5hc3NlcnRDYW5TZW5kKCksdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LnB1c2goZSksdGhpcy5lbnN1cmVRdWV1ZVdvcmsoKSxhd2FpdCB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkud2FpdEZvclNwYWNlKCksdGhpcy5hc3NlcnRDYW5TZW5kKCl9ZmluYWxseXtyKCl9fWFzeW5jIGZldGNoRGF0YSgpe2lmKHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja0hhc0l0ZW1zKCkpcmV0dXJuIHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5zaGlmdCgpO2lmKHRoaXMuYXNzZXJ0Tm90Q2xvc2VkKCksYXdhaXQgdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LndhaXRGb3JJdGVtcygpLCF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tIYXNJdGVtcygpKXRocm93IHRoaXMuZ2V0Q2xvc2VFcnJvcigpO3JldHVybiB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuc2hpZnQoKX1hc3luYyByZWFkRnJvbVdlYnN0cmVhbShlLHI9ITApe2xldCBuPWUuZ2V0UmVhZGVyKCk7dHJ5e2xldCBpPSExO2Zvcig7IWk7KXtsZXR7dmFsdWU6cyxkb25lOmF9PWF3YWl0IG4ucmVhZCgpO3MhPT12b2lkIDAmJmF3YWl0IHRoaXMuc2VuZERhdGEocyksaT1hfXImJmF3YWl0IHRoaXMuY2xvc2UoITApfWZpbmFsbHl7bi5yZWxlYXNlTG9jaygpfX1hc3luYyB3cml0ZVRvV2Vic3RyZWFtKGUpe2xldCByPWUuZ2V0V3JpdGVyKCk7dHJ5e2Zvcig7dGhpcy5saWZlY3ljbGVTdGF0ZUludGVybmFsIT09ImNsb3NlZCJ8fHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja0hhc0l0ZW1zKCk7KXtsZXQgbj1hd2FpdCB0aGlzLmZldGNoRGF0YSgpO2lmKG49PT1uYSlicmVhazthd2FpdCByLndyaXRlKG4pfWF3YWl0IHIuY2xvc2UoKX1maW5hbGx5e3IucmVsZWFzZUxvY2soKX19YXN5bmMgY2xvc2UoZT0hMSl7aWYodGhpcy5saWZlY3ljbGVTdGF0ZUludGVybmFsIT09ImNsb3NlZCIpe2lmKHRoaXMuY2xvc2VTdGFydGVkPSEwLGUpe2lmKHRoaXMuc2lkZT09PSJyZXF1ZXN0aW5nIiYmdGhpcy5zZW5kTWV0aG9kKXRyeXthd2FpdCB0aGlzLndhaXRXaXRoaW5HcmFjZWZ1bENsb3NlRGVhZGxpbmUodGhpcy53YWl0Rm9yT3V0Ym91bmREcmFpbigpKSxhd2FpdCB0aGlzLnNlbmRTdHJlYW1SZXF1ZXN0KHtzdHJlYW1JZDp0aGlzLnN0cmVhbUlkLGN5Y2xlSWQ6Qm4udW5pKCksY3ljbGU6InJlcXVlc3QiLG1haW5QdXJwb3NlOiJjaHVuayIsY2h1bmtEYXRhOm5hLG5leHQ6ITEsYmFja3ByZXNzdXJlOiExfSl9Y2F0Y2h7fWVsc2UgaWYodGhpcy5zaWRlPT09InJlc3BvbmRpbmciKXt0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkucHVzaChuYSk7dHJ5e2F3YWl0IHRoaXMud2FpdFdpdGhpbkdyYWNlZnVsQ2xvc2VEZWFkbGluZSh0aGlzLndhaXRGb3JSZXNwb25kaW5nRHJhaW4oKSl9Y2F0Y2h7fX19YXdhaXQgdGhpcy5hYm9ydCgpfX1hc3luYyBhYm9ydChlKXt0aGlzLnRlcm1pbmF0ZShlKX10ZXJtaW5hdGUoZSxyPSExKXtpZih0aGlzLmxpZmVjeWNsZVN0YXRlSW50ZXJuYWw9PT0iY2xvc2VkIilyZXR1cm47dGhpcy5nZXRDbG9zZUVycm9yKGUpLHRoaXMubGlmZWN5Y2xlU3RhdGVJbnRlcm5hbD0iY2xvc2VkIix0aGlzLmtlZXBBbGl2ZT0hMSx0aGlzLmFjdGl2YXRpb25Db21taXR0ZWQ9ITEsdGhpcy5zZW5kTWV0aG9kPXZvaWQgMCx0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGg9MCxyfHwodGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoPTApLHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kZXN0cm95KCksdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmRlc3Ryb3koKTtsZXQgbj1bLi4udGhpcy5hY3RpdmF0aW9uUmVzb2x2ZXJzXTt0aGlzLmFjdGl2YXRpb25SZXNvbHZlcnMuY2xlYXIoKTtmb3IobGV0IHMgb2YgbilzKCk7bGV0IGk9Wy4uLnRoaXMucmVzcG9uZGluZ0RyYWluUmVzb2x2ZXJzXTt0aGlzLnJlc3BvbmRpbmdEcmFpblJlc29sdmVycy5jbGVhcigpO2ZvcihsZXQgcyBvZiBpKXMoKTt0aGlzLmNsZWFudXBSZWdpc3RyYXRpb24oKX19O3ZhciB2eT1jbGFzc3tzdGF0aWN7byh0aGlzLCJUeXBlZFRhcmdldCIpfWNvbnN0cnVjdG9yKGUpe2lmKHRoaXMuaXNBc3luYz0hMSxlLnBvc3RNZXRob2RXaXRoVHlwZWRSb3V0ZXImJiFlLnR5cGVkUm91dGVyUmVmKXRocm93IG5ldyBFcnJvcigieW91IGhhdmUgdG8gc3BlY2lmeSBhIHR5cGVkcm91dGVyIHdoZW4gdXNpbmcgcG9zdG1ldGhvZCB3aXRoIHR5cGVkcm91dGVyIik7bGV0IHI9ZS5yZXNwb25zZVRpbWVvdXRNcz8/M2U0O2lmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihyKXx8cjw9MHx8cj4yMTQ3NDgzNjQ3KXRocm93IG5ldyBSYW5nZUVycm9yKCJUeXBlZFRhcmdldCByZXNwb25zZVRpbWVvdXRNcyBtdXN0IGJlIGEgcG9zaXRpdmUgc2FmZSBpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbiAyMTQ3NDgzNjQ3Iik7dGhpcy5vcHRpb25zPWUsdGhpcy5yZXNwb25zZVRpbWVvdXRNcz1yfWFzeW5jIHBvc3QoZSxyPXt9KXtpZihyLnNpZ25hbCYmdGhpcy5vcHRpb25zLnN1cHBvcnRzQWJvcnRTaWduYWwhPT0hMCl0aHJvdyBuZXcgRXJyb3IoIlR5cGVkVGFyZ2V0IGRvZXMgbm90IGRlY2xhcmUgQWJvcnRTaWduYWwgdHJhbnNwb3J0IHN1cHBvcnQiKTtsZXQgbj10aGlzLm9wdGlvbnMucG9zdE1ldGhvZHx8dGhpcy5vcHRpb25zLnBvc3RNZXRob2RXaXRoVHlwZWRSb3V0ZXI7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJUeXBlZFRhcmdldCByZXF1aXJlcyBhIHBvc3QgbWV0aG9kIik7bGV0IGk7dGhpcy5vcHRpb25zLnR5cGVkUm91dGVyUmVmJiYoaT1hd2FpdCB0aGlzLm9wdGlvbnMudHlwZWRSb3V0ZXJSZWYuZmlyZUV2ZW50SW50ZXJlc3RNYXAuYWRkSW50ZXJlc3QoZS5jb3JyZWxhdGlvbi5pZCxlKSk7bGV0IHM9ci5zaWduYWw7aWYocz8uYWJvcnRlZCl0aHJvdyBpPy5kZXN0cm95KCkscy5yZWFzb24/P25ldyBET01FeGNlcHRpb24oIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQiLCJBYm9ydEVycm9yIik7bGV0IGEsbD1zP25ldyBQcm9taXNlKChmLHApPT57YT1vKCgpPT57aT8uZGVzdHJveSgpLHAocy5yZWFzb24/P25ldyBET01FeGNlcHRpb24oIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQiLCJBYm9ydEVycm9yIikpfSwiYWJvcnRMaXN0ZW5lciIpLHMuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEse29uY2U6ITB9KX0pOnZvaWQgMCxjLHU9aT9uZXcgUHJvbWlzZSgoZixwKT0+e2M9c2V0VGltZW91dCgoKT0+e3AobmV3IEVycm9yKGBUeXBlZFRhcmdldCByZXNwb25zZSB0aW1lZCBvdXQgYWZ0ZXIgJHt0aGlzLnJlc3BvbnNlVGltZW91dE1zfW1zYCkpfSx0aGlzLnJlc3BvbnNlVGltZW91dE1zKSxjLnVucmVmPy4oKX0pOnZvaWQgMDt0cnl7bGV0IGY9UHJvbWlzZS5yZXNvbHZlKG4oZSxyKSkscD1hd2FpdCBQcm9taXNlLnJhY2UoW2YsLi4udT9bdV06W10sLi4ubD9bbF06W11dKTtyZXR1cm4gaT9hd2FpdCBQcm9taXNlLnJhY2UoW2kuaW50ZXJlc3RGdWxsZmlsbGVkLHUsLi4ubD9bbF06W11dKTpwfHxlfWZpbmFsbHl7YyYmY2xlYXJUaW1lb3V0KGMpLHMmJmEmJnMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpLGk/LmRlc3Ryb3koKX19fTt2YXIgVVQ9bmV3IGlyLldlYnJlcXVlc3RDbGllbnQsZ2g9MjE0NzQ4MzY0NyxWVD0xZTQseWg9Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJUeXBlZFJlcXVlc3RUaW1lb3V0RXJyb3IiKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGBUeXBlZCByZXF1ZXN0ICIke2V9IiB0aW1lZCBvdXQgYWZ0ZXIgJHtyfW1zYCksdGhpcy5uYW1lPSJUeXBlZFJlcXVlc3RUaW1lb3V0RXJyb3IiLHRoaXMubWV0aG9kPWUsdGhpcy50aW1lb3V0TXM9cn19LHhoPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiVHlwZWRSZXF1ZXN0UmV0cnlMaW1pdEVycm9yIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihgVHlwZWQgcmVxdWVzdCAiJHtlfSIgZXhjZWVkZWQgaXRzICR7cn0gc2VydmVyLWRpcmVjdGVkIHJldHJpZXNgKSx0aGlzLm5hbWU9IlR5cGVkUmVxdWVzdFJldHJ5TGltaXRFcnJvciIsdGhpcy5tZXRob2Q9ZSx0aGlzLm1heFJldHJpZXM9cn19LFVsPWNsYXNze3N0YXRpY3tvKHRoaXMsIlR5cGVkUmVxdWVzdCIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5za2lwSG9va3M9ITEsdHlwZW9mIGU9PSJzdHJpbmciP3RoaXMudXJsRW5kUG9pbnQ9ZTp0aGlzLnR5cGVkVGFyZ2V0PWUsdGhpcy5tZXRob2Q9cn1hc3luYyBmaXJlKGUscj0hMSl7bGV0IG49RGF0ZS5ub3coKSxpPXRoaXMucmVzb2x2ZUZpcmVPcHRpb25zKHIpLHM9bmV3IHFsLGE9e21ldGhvZDp0aGlzLm1ldGhvZCxyZXF1ZXN0OmUscmVzcG9uc2U6bnVsbCxjb3JyZWxhdGlvbjp7aWQ6Qm4udW5pKCkscGhhc2U6InJlcXVlc3QifX07dHJ5e2E9b3IuZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsoYSx7c2VuZE1ldGhvZDpvKHA9PnRoaXMucG9zdFN0cmVhbVRyT2JqZWN0KHApLCJzZW5kTWV0aG9kIiksYWN0aXZhdGlvblNjb3BlOnN9KTtsZXQgbD1vci5jb250YWluc05ldHdvcmtEZXNjcmlwdG9yKGEpO2lmKGwmJiF0aGlzLnVybEVuZFBvaW50JiZ0aGlzLnR5cGVkVGFyZ2V0Lm9wdGlvbnMuc3VwcG9ydHNBYm9ydFNpZ25hbCE9PSEwKXRocm93IG5ldyBFcnJvcigiVmlydHVhbFN0cmVhbXMgcmVxdWlyZSBUeXBlZFRhcmdldCBBYm9ydFNpZ25hbCB0cmFuc3BvcnQgc3VwcG9ydCIpO2lmKGkudXNlQ2FjaGUmJmwpdGhyb3cgbmV3IEVycm9yKCJUeXBlZFJlcXVlc3QgcmVzcG9uc2UgY2FjaGluZyBpcyBub3Qgc3VwcG9ydGVkIGZvciByZXF1ZXN0cyBjb250YWluaW5nIFZpcnR1YWxTdHJlYW1zIik7dGhpcy5hc3NlcnREZWFkbGluZShpKSxpLnVzZUNhY2hlJiYoaS5jYWNoZUtleT1hd2FpdCB0aGlzLmNyZWF0ZUNhY2hlS2V5KGEpLHRoaXMuYXNzZXJ0RGVhZGxpbmUoaSkpLHRoaXMuc2tpcEhvb2tzfHxyYSgib25PdXRnb2luZ1JlcXVlc3QiLHtjb3JyZWxhdGlvbklkOmEuY29ycmVsYXRpb24uaWQsbWV0aG9kOnRoaXMubWV0aG9kLGRpcmVjdGlvbjoib3V0Z29pbmciLHBoYXNlOiJyZXF1ZXN0Iix0aW1lc3RhbXA6bixwYXlsb2FkOmV9KTtsZXQgYz1hd2FpdCB0aGlzLnBvc3RUck9iamVjdChhLGkpLHU9Yy5lcnJvcjtpZih0aGlzLmFzc2VydERlYWRsaW5lKGkpLHUpdGhyb3cgdGhpcy5za2lwSG9va3N8fHJhKCJvbkluY29taW5nUmVzcG9uc2UiLHtjb3JyZWxhdGlvbklkOmEuY29ycmVsYXRpb24uaWQsbWV0aG9kOnRoaXMubWV0aG9kLGRpcmVjdGlvbjoiaW5jb21pbmciLHBoYXNlOiJyZXNwb25zZSIsdGltZXN0YW1wOkRhdGUubm93KCksZHVyYXRpb25NczpEYXRlLm5vdygpLW4scGF5bG9hZDpjLnJlc3BvbnNlLGVycm9yVGV4dDp1LnRleHR9KSx0aGlzLmFzc2VydERlYWRsaW5lKGkpLG5ldyB3cih1LnRleHQsdS5kYXRhKTtsZXQgZj1vci5jb250YWluc05ldHdvcmtEZXNjcmlwdG9yKGMpO2lmKGYmJiF0aGlzLnVybEVuZFBvaW50JiZ0aGlzLnR5cGVkVGFyZ2V0Lm9wdGlvbnMuc3VwcG9ydHNBYm9ydFNpZ25hbCE9PSEwKXRocm93IG5ldyBFcnJvcigiVmlydHVhbFN0cmVhbXMgcmVxdWlyZSBUeXBlZFRhcmdldCBBYm9ydFNpZ25hbCB0cmFuc3BvcnQgc3VwcG9ydCIpO3JldHVybiBpLnVzZUNhY2hlJiZpLmNhY2hlS2V5JiZmJiYoYXdhaXQgVVQuZGVsZXRlQ2FjaGUoaS5jYWNoZUtleSksdGhpcy5hc3NlcnREZWFkbGluZShpKSksYz1vci5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsoYyx7c2VuZE1ldGhvZDpvKHA9PnRoaXMucG9zdFN0cmVhbVRyT2JqZWN0KHApLCJzZW5kTWV0aG9kIiksYWN0aXZhdGlvblNjb3BlOnN9KSx0aGlzLmFzc2VydERlYWRsaW5lKGkpLHRoaXMuc2tpcEhvb2tzfHxyYSgib25JbmNvbWluZ1Jlc3BvbnNlIix7Y29ycmVsYXRpb25JZDphLmNvcnJlbGF0aW9uLmlkLG1ldGhvZDp0aGlzLm1ldGhvZCxkaXJlY3Rpb246ImluY29taW5nIixwaGFzZToicmVzcG9uc2UiLHRpbWVzdGFtcDpEYXRlLm5vdygpLGR1cmF0aW9uTXM6RGF0ZS5ub3coKS1uLHBheWxvYWQ6Yz8ucmVzcG9uc2V9KSx0aGlzLmFzc2VydERlYWRsaW5lKGkpLHMuY29tbWl0KCksYy5yZXNwb25zZX1jYXRjaChsKXt0aHJvdyBhd2FpdCBzLnJvbGxiYWNrKGwpLGx9fWFzeW5jIHBvc3RUck9iamVjdChlLHI9e3VzZUNhY2hlOiExLG1heFJldHJpZXM6M30pe2xldCBuPTA7Zm9yKDs7KXt0aGlzLmFzc2VydERlYWRsaW5lKHIpO2xldCBpO2lmKHRoaXMudXJsRW5kUG9pbnQpdHJ5e2k9YXdhaXQgVVQucG9zdEpzb24odGhpcy51cmxFbmRQb2ludCxlLHtjYWNoZUtleTpyLmNhY2hlS2V5LGNhY2hlU3RyYXRlZ3k6ci51c2VDYWNoZT8iY2FjaGUtZmlyc3QiOiJuZXR3b3JrLW9ubHkiLHRpbWVvdXQ6dGhpcy5nZXRSZW1haW5pbmdUaW1lb3V0KHIpfSl9Y2F0Y2gocyl7dGhyb3cgci50aW1lb3V0TXMhPT12b2lkIDAmJih0aGlzLmhhc0RlYWRsaW5lRXhwaXJlZChyKXx8aXIuaXNXZWJyZXF1ZXN0VGltZW91dEVycm9yKHMpKT90aGlzLmNyZWF0ZVRpbWVvdXRFcnJvcihyKTpzfWVsc2UgaT1hd2FpdCB0aGlzLnBvc3RUeXBlZFRhcmdldChlLHIpO2lmKHRoaXMuYXNzZXJ0RGVhZGxpbmUociksaS5lcnJvciYmIWkucmV0cnl8fCFpLnJldHJ5KXJldHVybiBpO2lmKGNvbnNvbGUubG9nKGBTZXJ2ZXIgcmVxdWVzdGVkIGEgcmV0cnkgZm9yIFR5cGVkUmVxdWVzdCBtZXRob2QgJyR7dGhpcy5tZXRob2R9J2ApLG4+PXIubWF4UmV0cmllcyl0aHJvdyBuZXcgeGgodGhpcy5tZXRob2Qsci5tYXhSZXRyaWVzKTtuKz0xLGF3YWl0IHRoaXMud2FpdEZvclJldHJ5KGkucmV0cnkud2FpdEZvck1zLHIpfX1hc3luYyBwb3N0U3RyZWFtVHJPYmplY3QoZSl7bGV0IHI9e3VzZUNhY2hlOiExLG1heFJldHJpZXM6Myx0aW1lb3V0TXM6VlQsZGVhZGxpbmVBdDpwZXJmb3JtYW5jZS5ub3coKStWVH07cmV0dXJuIHRoaXMucG9zdFRyT2JqZWN0KGUscil9YXN5bmMgcG9zdFR5cGVkVGFyZ2V0KGUscil7bGV0IG49dGhpcy5nZXRSZW1haW5pbmdUaW1lb3V0KHIpO2lmKG49PT12b2lkIDApcmV0dXJuIHRoaXMudHlwZWRUYXJnZXQucG9zdChlKTtsZXQgaT1uZXcgQWJvcnRDb250cm9sbGVyLHM9c2V0VGltZW91dCgoKT0+e2kuYWJvcnQodGhpcy5jcmVhdGVUaW1lb3V0RXJyb3IocikpfSxuKTtzLnVucmVmPy4oKTt0cnl7cmV0dXJuIGF3YWl0IHRoaXMudHlwZWRUYXJnZXQucG9zdChlLHtzaWduYWw6aS5zaWduYWx9KX1jYXRjaChhKXt0aHJvdyBpLnNpZ25hbC5hYm9ydGVkP3RoaXMuY3JlYXRlVGltZW91dEVycm9yKHIpOmF9ZmluYWxseXtjbGVhclRpbWVvdXQocyl9fXJlc29sdmVGaXJlT3B0aW9ucyhlKXtsZXQgcj10eXBlb2YgZT09ImJvb2xlYW4iP3t1c2VDYWNoZTplfTplO2lmKCFyfHx0eXBlb2YgciE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVHlwZWRSZXF1ZXN0IGZpcmUgb3B0aW9ucyBtdXN0IGJlIGEgYm9vbGVhbiBvciBhbiBvcHRpb25zIG9iamVjdCIpO2lmKHIudXNlQ2FjaGUhPT12b2lkIDAmJnR5cGVvZiByLnVzZUNhY2hlIT0iYm9vbGVhbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVHlwZWRSZXF1ZXN0IHVzZUNhY2hlIG11c3QgYmUgYSBib29sZWFuIik7aWYoci50aW1lb3V0TXMhPT12b2lkIDAmJighTnVtYmVyLmlzU2FmZUludGVnZXIoci50aW1lb3V0TXMpfHxyLnRpbWVvdXRNczw9MHx8ci50aW1lb3V0TXM+Z2gpKXRocm93IG5ldyBSYW5nZUVycm9yKGBUeXBlZFJlcXVlc3QgdGltZW91dE1zIG11c3QgYmUgYSBwb3NpdGl2ZSBzYWZlIGludGVnZXIgbm8gZ3JlYXRlciB0aGFuICR7Z2h9YCk7aWYoci5tYXhSZXRyaWVzIT09dm9pZCAwJiYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHIubWF4UmV0cmllcyl8fHIubWF4UmV0cmllczwwfHxyLm1heFJldHJpZXM+MWUzKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHlwZWRSZXF1ZXN0IG1heFJldHJpZXMgbXVzdCBiZSBhIHNhZmUgaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDEwMDAiKTtpZihyLnRpbWVvdXRNcyE9PXZvaWQgMCYmIXRoaXMudXJsRW5kUG9pbnQmJnRoaXMudHlwZWRUYXJnZXQub3B0aW9ucy5zdXBwb3J0c0Fib3J0U2lnbmFsIT09ITApdGhyb3cgbmV3IEVycm9yKCJUeXBlZFJlcXVlc3QgdGltZW91dE1zIHJlcXVpcmVzIGFuIEhUVFAgVVJMIG9yIGEgVHlwZWRUYXJnZXQgd2l0aCBBYm9ydFNpZ25hbCBzdXBwb3J0Iik7cmV0dXJue3VzZUNhY2hlOnIudXNlQ2FjaGU/PyExLHRpbWVvdXRNczpyLnRpbWVvdXRNcyxtYXhSZXRyaWVzOnIubWF4UmV0cmllcz8/MyxkZWFkbGluZUF0OnIudGltZW91dE1zPT09dm9pZCAwP3ZvaWQgMDpwZXJmb3JtYW5jZS5ub3coKStyLnRpbWVvdXRNc319Z2V0UmVtYWluaW5nVGltZW91dChlKXtpZihlLmRlYWRsaW5lQXQ9PT12b2lkIDB8fGUudGltZW91dE1zPT09dm9pZCAwKXJldHVybjtsZXQgcj1NYXRoLmNlaWwoZS5kZWFkbGluZUF0LXBlcmZvcm1hbmNlLm5vdygpKTtpZihyPD0wKXRocm93IHRoaXMuY3JlYXRlVGltZW91dEVycm9yKGUpO3JldHVybiByfWFzc2VydERlYWRsaW5lKGUpe3RoaXMuZ2V0UmVtYWluaW5nVGltZW91dChlKX1oYXNEZWFkbGluZUV4cGlyZWQoZSl7cmV0dXJuIGUuZGVhZGxpbmVBdCE9PXZvaWQgMCYmcGVyZm9ybWFuY2Uubm93KCk+PWUuZGVhZGxpbmVBdH1jcmVhdGVUaW1lb3V0RXJyb3IoZSl7cmV0dXJuIG5ldyB5aCh0aGlzLm1ldGhvZCxlLnRpbWVvdXRNcyl9YXN5bmMgd2FpdEZvclJldHJ5KGUscil7aWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGUpfHxlPD0wfHxlPmdoKXRocm93IG5ldyBSYW5nZUVycm9yKGBUeXBlZFJlcXVlc3QgcmV0cnkgd2FpdEZvck1zIG11c3QgYmUgYSBwb3NpdGl2ZSBzYWZlIGludGVnZXIgbm8gZ3JlYXRlciB0aGFuICR7Z2h9YCk7bGV0IG49dGhpcy5nZXRSZW1haW5pbmdUaW1lb3V0KHIpO2lmKG49PT12b2lkIDApe2F3YWl0IGxlLmRlbGF5Rm9yKGUpO3JldHVybn1pZihlPj1uKXRocm93IGF3YWl0IGxlLmRlbGF5Rm9yKG4pLHRoaXMuY3JlYXRlVGltZW91dEVycm9yKHIpO2F3YWl0IGxlLmRlbGF5Rm9yKGUpLHRoaXMuYXNzZXJ0RGVhZGxpbmUocil9YXN5bmMgY3JlYXRlQ2FjaGVLZXkoZSl7bGV0IHI9SlNPTi5zdHJpbmdpZnkoe2VuZHBvaW50OnRoaXMudXJsRW5kUG9pbnQsbWV0aG9kOmUubWV0aG9kLHJlcXVlc3Q6ZS5yZXF1ZXN0fSksbj1hd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgiU0hBLTI1NiIsbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHIpKTtyZXR1cm5gdHlwZWRyZXF1ZXN0OnYxOiR7QXJyYXkuZnJvbShuZXcgVWludDhBcnJheShuKSxzPT5zLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpLmpvaW4oIiIpfWB9fTt2YXIgcWM9e307c2UocWMse1NtYXJ0TWFya2Rvd246KCk9PmZ3LHBhcnNlQ29tbWVudEZyb250bWF0dGVyOigpPT5aTSxwYXJzZUZyb250bWF0dGVyOigpPT5YTSxwYXJzZU1hcmtkb3duOigpPT5WTSxzdHJpbmdpZnlGcm9udG1hdHRlcjooKT0+ZU99KTt2YXJ7ZGVmaW5lUHJvcGVydHk6b0Z9PU9iamVjdCxZVD10eXBlb2Ygc2VsZj09Im9iamVjdCI/c2VsZjpnbG9iYWxUaGlzLEdUPW8oKHQsZSk9Pntzd2l0Y2godCl7Y2FzZSJGdW5jdGlvbiI6Y2FzZSJTaGFyZWRXb3JrZXIiOmNhc2UiV29ya2VyIjpjYXNlImV2YWwiOmNhc2Uic2V0SW50ZXJ2YWwiOmNhc2Uic2V0VGltZW91dCI6dGhyb3cgbmV3IFR5cGVFcnJvcigidW5hYmxlIHRvIGRlc2VyaWFsaXplICIrdCl9cmV0dXJuIG5ldyBZVFt0XShlKX0sImd1YXJkIiksc0Y9bygodCxlKT0+e2xldCByPW8oKGkscyk9Pih0LnNldChzLGkpLGkpLCJhcyIpLG49byhpPT57aWYodC5oYXMoaSkpcmV0dXJuIHQuZ2V0KGkpO2xldFtzLGFdPWVbaV07c3dpdGNoKHMpe2Nhc2UgMDpjYXNlLTE6cmV0dXJuIHIoYSxpKTtjYXNlIDE6e2xldCBsPXIoW10saSk7Zm9yKGxldCBjIG9mIGEpbC5wdXNoKG4oYykpO3JldHVybiBsfWNhc2UgMjp7bGV0IGw9cih7fSxpKTtmb3IobGV0W2MsdV1vZiBhKXtsZXQgZj1uKGMpLHA9bih1KTtmPT09Il9fcHJvdG9fXyI/b0YobCxmLHt2YWx1ZTpwLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bFtmXT1wfXJldHVybiBsfWNhc2UgMzpyZXR1cm4gcihuZXcgRGF0ZShhKSxpKTtjYXNlIDQ6e2xldHtzb3VyY2U6bCxmbGFnczpjfT1hO3JldHVybiByKG5ldyBSZWdFeHAobCxjKSxpKX1jYXNlIDU6e2xldCBsPXIobmV3IE1hcCxpKTtmb3IobGV0W2MsdV1vZiBhKWwuc2V0KG4oYyksbih1KSk7cmV0dXJuIGx9Y2FzZSA2OntsZXQgbD1yKG5ldyBTZXQsaSk7Zm9yKGxldCBjIG9mIGEpbC5hZGQobihjKSk7cmV0dXJuIGx9Y2FzZSA3OntsZXR7bmFtZTpsLG1lc3NhZ2U6Y309YTtyZXR1cm4gcih0eXBlb2YgWVRbbF09PSJmdW5jdGlvbiI/R1QobCxjKTpuZXcgRXJyb3IoYyksaSl9Y2FzZSA4OnJldHVybiByKEJpZ0ludChhKSxpKTtjYXNlIkJpZ0ludCI6cmV0dXJuIHIoT2JqZWN0KEJpZ0ludChhKSksaSk7Y2FzZSJBcnJheUJ1ZmZlciI6cmV0dXJuIHIobmV3IFVpbnQ4QXJyYXkoYSkuYnVmZmVyLGEpO2Nhc2UiRGF0YVZpZXciOntsZXR7YnVmZmVyOmx9PW5ldyBVaW50OEFycmF5KGEpO3JldHVybiByKG5ldyBEYXRhVmlldyhsKSxhKX1jYXNlIi0wIjpyZXR1cm4tMH1yZXR1cm4gcihHVChzLGEpLGkpfSwidW5wYWlyIik7cmV0dXJuIG59LCJkZXNlcmlhbGl6ZXIiKSxTaD1vKHQ9PnNGKG5ldyBNYXAsdCkoMCksImRlc2VyaWFsaXplIik7dmFyIGtvPSIiLHt0b1N0cmluZzphRn09e30se2tleXM6bEYsaXM6Y0Z9PU9iamVjdCxHbD1vKHQ9PntsZXQgZT10eXBlb2YgdDtpZihlIT09Im9iamVjdCJ8fCF0KXJldHVyblswLGVdO2xldCByPWFGLmNhbGwodCkuc2xpY2UoOCwtMSk7c3dpdGNoKHIpe2Nhc2UiQXJyYXkiOnJldHVyblsxLGtvXTtjYXNlIk9iamVjdCI6cmV0dXJuWzIsa29dO2Nhc2UiRGF0ZSI6cmV0dXJuWzMsa29dO2Nhc2UiUmVnRXhwIjpyZXR1cm5bNCxrb107Y2FzZSJNYXAiOnJldHVybls1LGtvXTtjYXNlIlNldCI6cmV0dXJuWzYsa29dO2Nhc2UiRGF0YVZpZXciOnJldHVyblsxLHJdfXJldHVybiByLmluY2x1ZGVzKCJBcnJheSIpP1sxLHJdOnQgaW5zdGFuY2VvZiBFcnJvcj9bNyx0Lm5hbWV8fCJFcnJvciJdOlsyLHJdfSwidHlwZU9mIiksVGg9bygoW3QsZV0pPT50PT09MCYmKGU9PT0iZnVuY3Rpb24ifHxlPT09InN5bWJvbCIpLCJzaG91bGRTa2lwIiksdUY9bygodCxlLHIsbik9PntsZXQgaT1vKChhLGwpPT57bGV0IGM9bi5wdXNoKGEpLTE7cmV0dXJuIHIuc2V0KGwsYyksY30sImFzIikscz1vKGE9PntpZihyLmhhcyhhKSlyZXR1cm4gci5nZXQoYSk7bGV0W2wsY109R2woYSk7c3dpdGNoKGwpe2Nhc2UgMDp7bGV0IGY9YTtzd2l0Y2goYyl7Y2FzZSJiaWdpbnQiOmw9OCxmPWEudG9TdHJpbmcoKTticmVhaztjYXNlIm51bWJlciI6aWYoIWEmJmNGKGEsLTApKXJldHVybiBuLnB1c2goWyItMCJdKS0xO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmNhc2Uic3ltYm9sIjppZih0KXRocm93IG5ldyBUeXBlRXJyb3IoInVuYWJsZSB0byBzZXJpYWxpemUgIitjKTtmPW51bGw7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBpKFstMV0sYSl9cmV0dXJuIGkoW2wsZl0sYSl9Y2FzZSAxOntpZihjKXtsZXQgaD1hO3JldHVybiBjPT09IkRhdGFWaWV3Ij9oPW5ldyBVaW50OEFycmF5KGEuYnVmZmVyKTpjPT09IkFycmF5QnVmZmVyIiYmKGg9bmV3IFVpbnQ4QXJyYXkoYSkpLGkoW2MsWy4uLmhdXSxhKX1sZXQgZj1bXSxwPWkoW2wsZl0sYSk7Zm9yKGxldCBoIG9mIGEpZi5wdXNoKHMoaCkpO3JldHVybiBwfWNhc2UgMjp7aWYoYylzd2l0Y2goYyl7Y2FzZSJCaWdJbnQiOnJldHVybiBpKFtjLGEudG9TdHJpbmcoKV0sYSk7Y2FzZSJCb29sZWFuIjpjYXNlIk51bWJlciI6Y2FzZSJTdHJpbmciOnJldHVybiBpKFtjLGEudmFsdWVPZigpXSxhKX1pZihlJiYidG9KU09OImluIGEpcmV0dXJuIHMoYS50b0pTT04oKSk7bGV0IGY9W10scD1pKFtsLGZdLGEpO2ZvcihsZXQgaCBvZiBsRihhKSkodHx8IVRoKEdsKGFbaF0pKSkmJmYucHVzaChbcyhoKSxzKGFbaF0pXSk7cmV0dXJuIHB9Y2FzZSAzOnJldHVybiBpKFtsLGlzTmFOKGEuZ2V0VGltZSgpKT9rbzphLnRvSVNPU3RyaW5nKCldLGEpO2Nhc2UgNDp7bGV0e3NvdXJjZTpmLGZsYWdzOnB9PWE7cmV0dXJuIGkoW2wse3NvdXJjZTpmLGZsYWdzOnB9XSxhKX1jYXNlIDU6e2xldCBmPVtdLHA9aShbbCxmXSxhKTtmb3IobGV0W2gsZF1vZiBhKSh0fHwhKFRoKEdsKGgpKXx8VGgoR2woZCkpKSkmJmYucHVzaChbcyhoKSxzKGQpXSk7cmV0dXJuIHB9Y2FzZSA2OntsZXQgZj1bXSxwPWkoW2wsZl0sYSk7Zm9yKGxldCBoIG9mIGEpKHR8fCFUaChHbChoKSkpJiZmLnB1c2gocyhoKSk7cmV0dXJuIHB9fWxldHttZXNzYWdlOnV9PWE7cmV0dXJuIGkoW2wse25hbWU6YyxtZXNzYWdlOnV9XSxhKX0sInBhaXIiKTtyZXR1cm4gc30sInNlcmlhbGl6ZXIiKSxFaD1vKCh0LHtqc29uOmUsbG9zc3k6cn09e30pPT57bGV0IG49W107cmV0dXJuIHVGKCEoZXx8ciksISFlLG5ldyBNYXAsbikodCksbn0sInNlcmlhbGl6ZSIpO3ZhciBEaT10eXBlb2Ygc3RydWN0dXJlZENsb25lPT0iZnVuY3Rpb24iPyh0LGUpPT5lJiYoImpzb24iaW4gZXx8Imxvc3N5ImluIGUpP1NoKEVoKHQsZSkpOnN0cnVjdHVyZWRDbG9uZSh0KToodCxlKT0+U2goRWgodCxlKSk7dmFyIERoPVFUKCJlbmQiKSxDaD1RVCgic3RhcnQiKTtmdW5jdGlvbiBRVCh0KXtyZXR1cm4gZTtmdW5jdGlvbiBlKHIpe2xldCBuPXImJnIucG9zaXRpb24mJnIucG9zaXRpb25bdF18fHt9O2lmKHR5cGVvZiBuLmxpbmU9PSJudW1iZXIiJiZuLmxpbmU+MCYmdHlwZW9mIG4uY29sdW1uPT0ibnVtYmVyIiYmbi5jb2x1bW4+MClyZXR1cm57bGluZTpuLmxpbmUsY29sdW1uOm4uY29sdW1uLG9mZnNldDp0eXBlb2Ygbi5vZmZzZXQ9PSJudW1iZXIiJiZuLm9mZnNldD4tMT9uLm9mZnNldDp2b2lkIDB9fX1vKFFULCJwb2ludCIpO2Z1bmN0aW9uIFFsKHQpe2xldCBlPUNoKHQpLHI9RGgodCk7aWYoZSYmcilyZXR1cm57c3RhcnQ6ZSxlbmQ6cn19byhRbCwicG9zaXRpb24iKTt2YXIgU289WyJhcmlhRGVzY3JpYmVkQnkiLCJhcmlhTGFiZWwiLCJhcmlhTGFiZWxsZWRCeSJdLE1oPXthbmNlc3RvcnM6e3Rib2R5OlsidGFibGUiXSx0ZDpbInRhYmxlIl0sdGg6WyJ0YWJsZSJdLHRoZWFkOlsidGFibGUiXSx0Zm9vdDpbInRhYmxlIl0sdHI6WyJ0YWJsZSJdfSxhdHRyaWJ1dGVzOnthOlsuLi5TbywiZGF0YUZvb3Rub3RlQmFja3JlZiIsImRhdGFGb290bm90ZVJlZiIsWyJjbGFzc05hbWUiLCJkYXRhLWZvb3Rub3RlLWJhY2tyZWYiXSwiaHJlZiJdLGJsb2NrcXVvdGU6WyJjaXRlIl0sY29kZTpbWyJjbGFzc05hbWUiLC9ebGFuZ3VhZ2UtLi9dXSxkZWw6WyJjaXRlIl0sZGl2OlsiaXRlbVNjb3BlIiwiaXRlbVR5cGUiXSxkbDpbLi4uU29dLGgyOltbImNsYXNzTmFtZSIsInNyLW9ubHkiXV0saW1nOlsuLi5TbywibG9uZ0Rlc2MiLCJzcmMiXSxpbnB1dDpbWyJkaXNhYmxlZCIsITBdLFsidHlwZSIsImNoZWNrYm94Il1dLGluczpbImNpdGUiXSxsaTpbWyJjbGFzc05hbWUiLCJ0YXNrLWxpc3QtaXRlbSJdXSxvbDpbLi4uU28sWyJjbGFzc05hbWUiLCJjb250YWlucy10YXNrLWxpc3QiXV0scTpbImNpdGUiXSxzZWN0aW9uOlsiZGF0YUZvb3Rub3RlcyIsWyJjbGFzc05hbWUiLCJmb290bm90ZXMiXV0sc291cmNlOlsic3JjU2V0Il0sc3VtbWFyeTpbLi4uU29dLHRhYmxlOlsuLi5Tb10sdWw6Wy4uLlNvLFsiY2xhc3NOYW1lIiwiY29udGFpbnMtdGFzay1saXN0Il1dLCIqIjpbImFiYnIiLCJhY2NlcHQiLCJhY2NlcHRDaGFyc2V0IiwiYWNjZXNzS2V5IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJheGlzIiwiYm9yZGVyIiwiY2VsbFBhZGRpbmciLCJjZWxsU3BhY2luZyIsImNoYXIiLCJjaGFyT2ZmIiwiY2hhclNldCIsImNoZWNrZWQiLCJjbGVhciIsImNvbFNwYW4iLCJjb2xvciIsImNvbHMiLCJjb21wYWN0IiwiY29vcmRzIiwiZGF0ZVRpbWUiLCJkaXIiLCJlbmNUeXBlIiwiZnJhbWUiLCJoU3BhY2UiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaHJlZkxhbmciLCJodG1sRm9yIiwiaWQiLCJpc01hcCIsIml0ZW1Qcm9wIiwibGFiZWwiLCJsYW5nIiwibWF4TGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtdWx0aXBsZSIsIm5hbWUiLCJub0hyZWYiLCJub1NoYWRlIiwibm9XcmFwIiwib3BlbiIsInByb21wdCIsInJlYWRPbmx5IiwicmV2Iiwicm93U3BhbiIsInJvd3MiLCJydWxlcyIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzcGFuIiwic3RhcnQiLCJzdW1tYXJ5IiwidGFiSW5kZXgiLCJ0aXRsZSIsInVzZU1hcCIsInZBbGlnbiIsInZhbHVlIiwid2lkdGgiXX0sY2xvYmJlcjpbImFyaWFEZXNjcmliZWRCeSIsImFyaWFMYWJlbGxlZEJ5IiwiaWQiLCJuYW1lIl0sY2xvYmJlclByZWZpeDoidXNlci1jb250ZW50LSIscHJvdG9jb2xzOntjaXRlOlsiaHR0cCIsImh0dHBzIl0saHJlZjpbImh0dHAiLCJodHRwcyIsImlyYyIsImlyY3MiLCJtYWlsdG8iLCJ4bXBwIl0sbG9uZ0Rlc2M6WyJodHRwIiwiaHR0cHMiXSxzcmM6WyJodHRwIiwiaHR0cHMiXX0scmVxdWlyZWQ6e2lucHV0OntkaXNhYmxlZDohMCx0eXBlOiJjaGVja2JveCJ9fSxzdHJpcDpbInNjcmlwdCJdLHRhZ05hbWVzOlsiYSIsImIiLCJibG9ja3F1b3RlIiwiYnIiLCJjb2RlIiwiZGQiLCJkZWwiLCJkZXRhaWxzIiwiZGl2IiwiZGwiLCJkdCIsImVtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaHIiLCJpIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJsaSIsIm9sIiwicCIsInBpY3R1cmUiLCJwcmUiLCJxIiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzb3VyY2UiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRmb290IiwidGgiLCJ0aGVhZCIsInRyIiwidHQiLCJ1bCIsInZhciJdfTt2YXIgQ2k9e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gRXkodCxlKXtsZXQgcj17dHlwZToicm9vdCIsY2hpbGRyZW46W119LG49e3NjaGVtYTplP3suLi5NaCwuLi5lfTpNaCxzdGFjazpbXX0saT1KVChuLHQpO3JldHVybiBpJiYoQXJyYXkuaXNBcnJheShpKT9pLmxlbmd0aD09PTE/cj1pWzBdOnIuY2hpbGRyZW49aTpyPWkpLHJ9byhFeSwic2FuaXRpemUiKTtmdW5jdGlvbiBKVCh0LGUpe2lmKGUmJnR5cGVvZiBlPT0ib2JqZWN0Iil7bGV0IHI9ZTtzd2l0Y2godHlwZW9mIHIudHlwZT09InN0cmluZyI/ci50eXBlOiIiKXtjYXNlImNvbW1lbnQiOnJldHVybiBmRih0LHIpO2Nhc2UiZG9jdHlwZSI6cmV0dXJuIHBGKHQscik7Y2FzZSJlbGVtZW50IjpyZXR1cm4gaEYodCxyKTtjYXNlInJvb3QiOnJldHVybiBkRih0LHIpO2Nhc2UidGV4dCI6cmV0dXJuIG1GKHQscik7ZGVmYXVsdDp9fX1vKEpULCJ0cmFuc2Zvcm0iKTtmdW5jdGlvbiBmRih0LGUpe2lmKHQuc2NoZW1hLmFsbG93Q29tbWVudHMpe2xldCByPXR5cGVvZiBlLnZhbHVlPT0ic3RyaW5nIj9lLnZhbHVlOiIiLG49ci5pbmRleE9mKCItLT4iKSxzPXt0eXBlOiJjb21tZW50Iix2YWx1ZTpuPDA/cjpyLnNsaWNlKDAsbil9O3JldHVybiBKbChzLGUpLHN9fW8oZkYsImNvbW1lbnQiKTtmdW5jdGlvbiBwRih0LGUpe2lmKHQuc2NoZW1hLmFsbG93RG9jdHlwZXMpe2xldCByPXt0eXBlOiJkb2N0eXBlIn07cmV0dXJuIEpsKHIsZSkscn19byhwRiwiZG9jdHlwZSIpO2Z1bmN0aW9uIGhGKHQsZSl7bGV0IHI9dHlwZW9mIGUudGFnTmFtZT09InN0cmluZyI/ZS50YWdOYW1lOiIiO3Quc3RhY2sucHVzaChyKTtsZXQgbj1LVCh0LGUuY2hpbGRyZW4pLGk9Z0YodCxlLnByb3BlcnRpZXMpO3Quc3RhY2sucG9wKCk7bGV0IHM9ITE7aWYociYmciE9PSIqIiYmKCF0LnNjaGVtYS50YWdOYW1lc3x8dC5zY2hlbWEudGFnTmFtZXMuaW5jbHVkZXMocikpJiYocz0hMCx0LnNjaGVtYS5hbmNlc3RvcnMmJkNpLmNhbGwodC5zY2hlbWEuYW5jZXN0b3JzLHIpKSl7bGV0IGw9dC5zY2hlbWEuYW5jZXN0b3JzW3JdLGM9LTE7Zm9yKHM9ITE7KytjPGwubGVuZ3RoOyl0LnN0YWNrLmluY2x1ZGVzKGxbY10pJiYocz0hMCl9aWYoIXMpcmV0dXJuIHQuc2NoZW1hLnN0cmlwJiYhdC5zY2hlbWEuc3RyaXAuaW5jbHVkZXMocik/bjp2b2lkIDA7bGV0IGE9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6cixwcm9wZXJ0aWVzOmksY2hpbGRyZW46bn07cmV0dXJuIEpsKGEsZSksYX1vKGhGLCJlbGVtZW50Iik7ZnVuY3Rpb24gZEYodCxlKXtsZXQgbj17dHlwZToicm9vdCIsY2hpbGRyZW46S1QodCxlLmNoaWxkcmVuKX07cmV0dXJuIEpsKG4sZSksbn1vKGRGLCJyb290Iik7ZnVuY3Rpb24gbUYodCxlKXtsZXQgbj17dHlwZToidGV4dCIsdmFsdWU6dHlwZW9mIGUudmFsdWU9PSJzdHJpbmciP2UudmFsdWU6IiJ9O3JldHVybiBKbChuLGUpLG59byhtRiwidGV4dCIpO2Z1bmN0aW9uIEtUKHQsZSl7bGV0IHI9W107aWYoQXJyYXkuaXNBcnJheShlKSl7bGV0IG49ZSxpPS0xO2Zvcig7KytpPG4ubGVuZ3RoOyl7bGV0IHM9SlQodCxuW2ldKTtzJiYoQXJyYXkuaXNBcnJheShzKT9yLnB1c2goLi4ucyk6ci5wdXNoKHMpKX19cmV0dXJuIHJ9byhLVCwiY2hpbGRyZW4iKTtmdW5jdGlvbiBnRih0LGUpe2xldCByPXQuc3RhY2tbdC5zdGFjay5sZW5ndGgtMV0sbj10LnNjaGVtYS5hdHRyaWJ1dGVzLGk9dC5zY2hlbWEucmVxdWlyZWQscz1uJiZDaS5jYWxsKG4scik/bltyXTp2b2lkIDAsYT1uJiZDaS5jYWxsKG4sIioiKT9uWyIqIl06dm9pZCAwLGw9ZSYmdHlwZW9mIGU9PSJvYmplY3QiP2U6e30sYz17fSx1O2Zvcih1IGluIGwpaWYoQ2kuY2FsbChsLHUpKXtsZXQgZj1sW3VdLHA9WFQodCxlRShzLHUpLHUsZik7cD09bnVsbCYmKHA9WFQodCxlRShhLHUpLHUsZikpLHAhPW51bGwmJihjW3VdPXApfWlmKGkmJkNpLmNhbGwoaSxyKSl7bGV0IGY9aVtyXTtmb3IodSBpbiBmKUNpLmNhbGwoZix1KSYmIUNpLmNhbGwoYyx1KSYmKGNbdV09Zlt1XSl9cmV0dXJuIGN9byhnRiwicHJvcGVydGllcyIpO2Z1bmN0aW9uIFhUKHQsZSxyLG4pe3JldHVybiBlP0FycmF5LmlzQXJyYXkobik/eUYodCxlLHIsbik6WlQodCxlLHIsbik6dm9pZCAwfW8oWFQsInByb3BlcnR5VmFsdWUiKTtmdW5jdGlvbiB5Rih0LGUscixuKXtsZXQgaT0tMSxzPVtdO2Zvcig7KytpPG4ubGVuZ3RoOyl7bGV0IGE9WlQodCxlLHIsbltpXSk7KHR5cGVvZiBhPT0ibnVtYmVyInx8dHlwZW9mIGE9PSJzdHJpbmciKSYmcy5wdXNoKGEpfXJldHVybiBzfW8oeUYsInByb3BlcnR5VmFsdWVNYW55Iik7ZnVuY3Rpb24gWlQodCxlLHIsbil7aWYoISh0eXBlb2YgbiE9ImJvb2xlYW4iJiZ0eXBlb2YgbiE9Im51bWJlciImJnR5cGVvZiBuIT0ic3RyaW5nIikmJnhGKHQscixuKSl7aWYodHlwZW9mIGU9PSJvYmplY3QiJiZlLmxlbmd0aD4xKXtsZXQgaT0hMSxzPTA7Zm9yKDsrK3M8ZS5sZW5ndGg7KXtsZXQgYT1lW3NdO2lmKGEmJnR5cGVvZiBhPT0ib2JqZWN0IiYmImZsYWdzImluIGEpe2lmKGEudGVzdChTdHJpbmcobikpKXtpPSEwO2JyZWFrfX1lbHNlIGlmKGE9PT1uKXtpPSEwO2JyZWFrfX1pZighaSlyZXR1cm59cmV0dXJuIHQuc2NoZW1hLmNsb2JiZXImJnQuc2NoZW1hLmNsb2JiZXJQcmVmaXgmJnQuc2NoZW1hLmNsb2JiZXIuaW5jbHVkZXMocik/dC5zY2hlbWEuY2xvYmJlclByZWZpeCtuOm59fW8oWlQsInByb3BlcnR5VmFsdWVQcmltaXRpdmUiKTtmdW5jdGlvbiB4Rih0LGUscil7bGV0IG49dC5zY2hlbWEucHJvdG9jb2xzJiZDaS5jYWxsKHQuc2NoZW1hLnByb3RvY29scyxlKT90LnNjaGVtYS5wcm90b2NvbHNbZV06dm9pZCAwO2lmKCFufHxuLmxlbmd0aD09PTApcmV0dXJuITA7bGV0IGk9U3RyaW5nKHIpLHM9aS5pbmRleE9mKCI6IiksYT1pLmluZGV4T2YoIj8iKSxsPWkuaW5kZXhPZigiIyIpLGM9aS5pbmRleE9mKCIvIik7aWYoczwwfHxjPi0xJiZzPmN8fGE+LTEmJnM+YXx8bD4tMSYmcz5sKXJldHVybiEwO2xldCB1PS0xO2Zvcig7Kyt1PG4ubGVuZ3RoOyl7bGV0IGY9blt1XTtpZihzPT09Zi5sZW5ndGgmJmkuc2xpY2UoMCxmLmxlbmd0aCk9PT1mKXJldHVybiEwfXJldHVybiExfW8oeEYsInNhZmVQcm90b2NvbCIpO2Z1bmN0aW9uIEpsKHQsZSl7bGV0IHI9UWwoZSk7ZS5kYXRhJiYodC5kYXRhPURpKGUuZGF0YSkpLHImJih0LnBvc2l0aW9uPXIpfW8oSmwsInBhdGNoIik7ZnVuY3Rpb24gZUUodCxlKXtsZXQgcixuPS0xO2lmKHQpZm9yKDsrK248dC5sZW5ndGg7KXtsZXQgaT10W25dLHM9dHlwZW9mIGk9PSJzdHJpbmciP2k6aVswXTtpZihzPT09ZSlyZXR1cm4gaTtzPT09ImRhdGEqIiYmKHI9aSl9aWYoZS5sZW5ndGg+NCYmZS5zbGljZSgwLDQpLnRvTG93ZXJDYXNlKCk9PT0iZGF0YSIpcmV0dXJuIHJ9byhlRSwiZmluZERlZmluaXRpb24iKTtmdW5jdGlvbiB0RSh0LGUpe2xldCByPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJibG9ja3F1b3RlIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQud3JhcCh0LmFsbChlKSwhMCl9O3JldHVybiB0LnBhdGNoKGUsciksdC5hcHBseURhdGEoZSxyKX1vKHRFLCJibG9ja3F1b3RlIik7ZnVuY3Rpb24gckUodCxlKXtsZXQgcj17dHlwZToiZWxlbWVudCIsdGFnTmFtZToiYnIiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46W119O3JldHVybiB0LnBhdGNoKGUsciksW3QuYXBwbHlEYXRhKGUscikse3R5cGU6InRleHQiLHZhbHVlOmAKYH1dfW8ockUsImhhcmRCcmVhayIpO2Z1bmN0aW9uIG5FKHQsZSl7bGV0IHI9ZS52YWx1ZT9lLnZhbHVlK2AKYDoiIixuPXt9LGk9ZS5sYW5nP2UubGFuZy5zcGxpdCgvXHMrLyk6W107aS5sZW5ndGg+MCYmKG4uY2xhc3NOYW1lPVsibGFuZ3VhZ2UtIitpWzBdXSk7bGV0IHM9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImNvZGUiLHByb3BlcnRpZXM6bixjaGlsZHJlbjpbe3R5cGU6InRleHQiLHZhbHVlOnJ9XX07cmV0dXJuIGUubWV0YSYmKHMuZGF0YT17bWV0YTplLm1ldGF9KSx0LnBhdGNoKGUscykscz10LmFwcGx5RGF0YShlLHMpLHM9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6InByZSIscHJvcGVydGllczp7fSxjaGlsZHJlbjpbc119LHQucGF0Y2goZSxzKSxzfW8obkUsImNvZGUiKTtmdW5jdGlvbiBpRSh0LGUpe2xldCByPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJkZWwiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46dC5hbGwoZSl9O3JldHVybiB0LnBhdGNoKGUsciksdC5hcHBseURhdGEoZSxyKX1vKGlFLCJzdHJpa2V0aHJvdWdoIik7ZnVuY3Rpb24gb0UodCxlKXtsZXQgcj17dHlwZToiZWxlbWVudCIsdGFnTmFtZToiZW0iLHByb3BlcnRpZXM6e30sY2hpbGRyZW46dC5hbGwoZSl9O3JldHVybiB0LnBhdGNoKGUsciksdC5hcHBseURhdGEoZSxyKX1vKG9FLCJlbXBoYXNpcyIpO3ZhciBjdD1NaSgvW0EtWmEtel0vKSxRZT1NaSgvW1xkQS1aYS16XS8pLHNFPU1pKC9bIy0nKitcLS05PT9BLVpeLX5dLyk7ZnVuY3Rpb24gVG8odCl7cmV0dXJuIHQhPT1udWxsJiYodDwzMnx8dD09PTEyNyl9byhUbywiYXNjaWlDb250cm9sIik7dmFyIEtsPU1pKC9cZC8pLGFFPU1pKC9bXGRBLUZhLWZdLyksbEU9TWkoL1shLS86LUBbLWB7LX5dLyk7ZnVuY3Rpb24gWSh0KXtyZXR1cm4gdCE9PW51bGwmJnQ8LTJ9byhZLCJtYXJrZG93bkxpbmVFbmRpbmciKTtmdW5jdGlvbiB5ZSh0KXtyZXR1cm4gdCE9PW51bGwmJih0PDB8fHQ9PT0zMil9byh5ZSwibWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZSIpO2Z1bmN0aW9uIGVlKHQpe3JldHVybiB0PT09LTJ8fHQ9PT0tMXx8dD09PTMyfW8oZWUsIm1hcmtkb3duU3BhY2UiKTt2YXIgRW89TWkoL1xwe1B9fFxwe1N9L3UpLHhuPU1pKC9ccy8pO2Z1bmN0aW9uIE1pKHQpe3JldHVybiBlO2Z1bmN0aW9uIGUocil7cmV0dXJuIHIhPT1udWxsJiZyPi0xJiZ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShyKSl9fW8oTWksInJlZ2V4Q2hlY2siKTt2YXIgYkY9eyciJzoicXVvdCIsIiYiOiJhbXAiLCI8IjoibHQiLCI+IjoiZ3QifTtmdW5jdGlvbiBPaCh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bIiY8Pl0vZyxlKTtmdW5jdGlvbiBlKHIpe3JldHVybiImIitiRltyXSsiOyJ9fW8oT2gsImVuY29kZSIpO2Z1bmN0aW9uIGJuKHQsZSl7bGV0IHI9T2goc3IodHx8IiIpKTtpZighZSlyZXR1cm4gcjtsZXQgbj1yLmluZGV4T2YoIjoiKSxpPXIuaW5kZXhPZigiPyIpLHM9ci5pbmRleE9mKCIjIiksYT1yLmluZGV4T2YoIi8iKTtyZXR1cm4gbjwwfHxhPi0xJiZuPmF8fGk+LTEmJm4+aXx8cz4tMSYmbj5zfHxlLnRlc3Qoci5zbGljZSgwLG4pKT9yOiIifW8oYm4sInNhbml0aXplVXJpIik7ZnVuY3Rpb24gc3IodCl7bGV0IGU9W10scj0tMSxuPTAsaT0wO2Zvcig7KytyPHQubGVuZ3RoOyl7bGV0IHM9dC5jaGFyQ29kZUF0KHIpLGE9IiI7aWYocz09PTM3JiZRZSh0LmNoYXJDb2RlQXQocisxKSkmJlFlKHQuY2hhckNvZGVBdChyKzIpKSlpPTI7ZWxzZSBpZihzPDEyOCkvWyEjJCYtOz0/LVpfYS16fl0vLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShzKSl8fChhPVN0cmluZy5mcm9tQ2hhckNvZGUocykpO2Vsc2UgaWYocz41NTI5NSYmczw1NzM0NCl7bGV0IGw9dC5jaGFyQ29kZUF0KHIrMSk7czw1NjMyMCYmbD41NjMxOSYmbDw1NzM0ND8oYT1TdHJpbmcuZnJvbUNoYXJDb2RlKHMsbCksaT0xKTphPSJcdUZGRkQifWVsc2UgYT1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpO2EmJihlLnB1c2godC5zbGljZShuLHIpLGVuY29kZVVSSUNvbXBvbmVudChhKSksbj1yK2krMSxhPSIiKSxpJiYocis9aSxpPTApfXJldHVybiBlLmpvaW4oIiIpK3Quc2xpY2Uobil9byhzciwibm9ybWFsaXplVXJpIik7ZnVuY3Rpb24gY0UodCxlKXtsZXQgcj10eXBlb2YgdC5vcHRpb25zLmNsb2JiZXJQcmVmaXg9PSJzdHJpbmciP3Qub3B0aW9ucy5jbG9iYmVyUHJlZml4OiJ1c2VyLWNvbnRlbnQtIixuPVN0cmluZyhlLmlkZW50aWZpZXIpLnRvVXBwZXJDYXNlKCksaT1zcihuLnRvTG93ZXJDYXNlKCkpLHM9dC5mb290bm90ZU9yZGVyLmluZGV4T2YobiksYSxsPXQuZm9vdG5vdGVDb3VudHMuZ2V0KG4pO2w9PT12b2lkIDA/KGw9MCx0LmZvb3Rub3RlT3JkZXIucHVzaChuKSxhPXQuZm9vdG5vdGVPcmRlci5sZW5ndGgpOmE9cysxLGwrPTEsdC5mb290bm90ZUNvdW50cy5zZXQobixsKTtsZXQgYz17dHlwZToiZWxlbWVudCIsdGFnTmFtZToiYSIscHJvcGVydGllczp7aHJlZjoiIyIrcisiZm4tIitpLGlkOnIrImZucmVmLSIraSsobD4xPyItIitsOiIiKSxkYXRhRm9vdG5vdGVSZWY6ITAsYXJpYURlc2NyaWJlZEJ5OlsiZm9vdG5vdGUtbGFiZWwiXX0sY2hpbGRyZW46W3t0eXBlOiJ0ZXh0Iix2YWx1ZTpTdHJpbmcoYSl9XX07dC5wYXRjaChlLGMpO2xldCB1PXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJzdXAiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46W2NdfTtyZXR1cm4gdC5wYXRjaChlLHUpLHQuYXBwbHlEYXRhKGUsdSl9byhjRSwiZm9vdG5vdGVSZWZlcmVuY2UiKTtmdW5jdGlvbiB1RSh0LGUpe2xldCByPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJoIitlLmRlcHRoLHByb3BlcnRpZXM6e30sY2hpbGRyZW46dC5hbGwoZSl9O3JldHVybiB0LnBhdGNoKGUsciksdC5hcHBseURhdGEoZSxyKX1vKHVFLCJoZWFkaW5nIik7ZnVuY3Rpb24gZkUodCxlKXtpZih0Lm9wdGlvbnMuYWxsb3dEYW5nZXJvdXNIdG1sKXtsZXQgcj17dHlwZToicmF3Iix2YWx1ZTplLnZhbHVlfTtyZXR1cm4gdC5wYXRjaChlLHIpLHQuYXBwbHlEYXRhKGUscil9fW8oZkUsImh0bWwiKTtmdW5jdGlvbiBJaCh0LGUpe2xldCByPWUucmVmZXJlbmNlVHlwZSxuPSJdIjtpZihyPT09ImNvbGxhcHNlZCI/bis9IltdIjpyPT09ImZ1bGwiJiYobis9IlsiKyhlLmxhYmVsfHxlLmlkZW50aWZpZXIpKyJdIiksZS50eXBlPT09ImltYWdlUmVmZXJlbmNlIilyZXR1cm5be3R5cGU6InRleHQiLHZhbHVlOiIhWyIrZS5hbHQrbn1dO2xldCBpPXQuYWxsKGUpLHM9aVswXTtzJiZzLnR5cGU9PT0idGV4dCI/cy52YWx1ZT0iWyIrcy52YWx1ZTppLnVuc2hpZnQoe3R5cGU6InRleHQiLHZhbHVlOiJbIn0pO2xldCBhPWlbaS5sZW5ndGgtMV07cmV0dXJuIGEmJmEudHlwZT09PSJ0ZXh0Ij9hLnZhbHVlKz1uOmkucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6bn0pLGl9byhJaCwicmV2ZXJ0Iik7ZnVuY3Rpb24gcEUodCxlKXtsZXQgcj1TdHJpbmcoZS5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpLG49dC5kZWZpbml0aW9uQnlJZC5nZXQocik7aWYoIW4pcmV0dXJuIEloKHQsZSk7bGV0IGk9e3NyYzpzcihuLnVybHx8IiIpLGFsdDplLmFsdH07bi50aXRsZSE9PW51bGwmJm4udGl0bGUhPT12b2lkIDAmJihpLnRpdGxlPW4udGl0bGUpO2xldCBzPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJpbWciLHByb3BlcnRpZXM6aSxjaGlsZHJlbjpbXX07cmV0dXJuIHQucGF0Y2goZSxzKSx0LmFwcGx5RGF0YShlLHMpfW8ocEUsImltYWdlUmVmZXJlbmNlIik7ZnVuY3Rpb24gaEUodCxlKXtsZXQgcj17c3JjOnNyKGUudXJsKX07ZS5hbHQhPT1udWxsJiZlLmFsdCE9PXZvaWQgMCYmKHIuYWx0PWUuYWx0KSxlLnRpdGxlIT09bnVsbCYmZS50aXRsZSE9PXZvaWQgMCYmKHIudGl0bGU9ZS50aXRsZSk7bGV0IG49e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImltZyIscHJvcGVydGllczpyLGNoaWxkcmVuOltdfTtyZXR1cm4gdC5wYXRjaChlLG4pLHQuYXBwbHlEYXRhKGUsbil9byhoRSwiaW1hZ2UiKTtmdW5jdGlvbiBkRSh0LGUpe2xldCByPXt0eXBlOiJ0ZXh0Iix2YWx1ZTplLnZhbHVlLnJlcGxhY2UoL1xyP1xufFxyL2csIiAiKX07dC5wYXRjaChlLHIpO2xldCBuPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJjb2RlIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOltyXX07cmV0dXJuIHQucGF0Y2goZSxuKSx0LmFwcGx5RGF0YShlLG4pfW8oZEUsImlubGluZUNvZGUiKTtmdW5jdGlvbiBtRSh0LGUpe2xldCByPVN0cmluZyhlLmlkZW50aWZpZXIpLnRvVXBwZXJDYXNlKCksbj10LmRlZmluaXRpb25CeUlkLmdldChyKTtpZighbilyZXR1cm4gSWgodCxlKTtsZXQgaT17aHJlZjpzcihuLnVybHx8IiIpfTtuLnRpdGxlIT09bnVsbCYmbi50aXRsZSE9PXZvaWQgMCYmKGkudGl0bGU9bi50aXRsZSk7bGV0IHM9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImEiLHByb3BlcnRpZXM6aSxjaGlsZHJlbjp0LmFsbChlKX07cmV0dXJuIHQucGF0Y2goZSxzKSx0LmFwcGx5RGF0YShlLHMpfW8obUUsImxpbmtSZWZlcmVuY2UiKTtmdW5jdGlvbiBnRSh0LGUpe2xldCByPXtocmVmOnNyKGUudXJsKX07ZS50aXRsZSE9PW51bGwmJmUudGl0bGUhPT12b2lkIDAmJihyLnRpdGxlPWUudGl0bGUpO2xldCBuPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJhIixwcm9wZXJ0aWVzOnIsY2hpbGRyZW46dC5hbGwoZSl9O3JldHVybiB0LnBhdGNoKGUsbiksdC5hcHBseURhdGEoZSxuKX1vKGdFLCJsaW5rIik7ZnVuY3Rpb24geEUodCxlLHIpe2xldCBuPXQuYWxsKGUpLGk9cj93RihyKTp5RShlKSxzPXt9LGE9W107aWYodHlwZW9mIGUuY2hlY2tlZD09ImJvb2xlYW4iKXtsZXQgZj1uWzBdLHA7ZiYmZi50eXBlPT09ImVsZW1lbnQiJiZmLnRhZ05hbWU9PT0icCI/cD1mOihwPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJwIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOltdfSxuLnVuc2hpZnQocCkpLHAuY2hpbGRyZW4ubGVuZ3RoPjAmJnAuY2hpbGRyZW4udW5zaGlmdCh7dHlwZToidGV4dCIsdmFsdWU6IiAifSkscC5jaGlsZHJlbi51bnNoaWZ0KHt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJpbnB1dCIscHJvcGVydGllczp7dHlwZToiY2hlY2tib3giLGNoZWNrZWQ6ZS5jaGVja2VkLGRpc2FibGVkOiEwfSxjaGlsZHJlbjpbXX0pLHMuY2xhc3NOYW1lPVsidGFzay1saXN0LWl0ZW0iXX1sZXQgbD0tMTtmb3IoOysrbDxuLmxlbmd0aDspe2xldCBmPW5bbF07KGl8fGwhPT0wfHxmLnR5cGUhPT0iZWxlbWVudCJ8fGYudGFnTmFtZSE9PSJwIikmJmEucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6YApgfSksZi50eXBlPT09ImVsZW1lbnQiJiZmLnRhZ05hbWU9PT0icCImJiFpP2EucHVzaCguLi5mLmNoaWxkcmVuKTphLnB1c2goZil9bGV0IGM9bltuLmxlbmd0aC0xXTtjJiYoaXx8Yy50eXBlIT09ImVsZW1lbnQifHxjLnRhZ05hbWUhPT0icCIpJiZhLnB1c2goe3R5cGU6InRleHQiLHZhbHVlOmAKYH0pO2xldCB1PXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJsaSIscHJvcGVydGllczpzLGNoaWxkcmVuOmF9O3JldHVybiB0LnBhdGNoKGUsdSksdC5hcHBseURhdGEoZSx1KX1vKHhFLCJsaXN0SXRlbSIpO2Z1bmN0aW9uIHdGKHQpe2xldCBlPSExO2lmKHQudHlwZT09PSJsaXN0Iil7ZT10LnNwcmVhZHx8ITE7bGV0IHI9dC5jaGlsZHJlbixuPS0xO2Zvcig7IWUmJisrbjxyLmxlbmd0aDspZT15RShyW25dKX1yZXR1cm4gZX1vKHdGLCJsaXN0TG9vc2UiKTtmdW5jdGlvbiB5RSh0KXtsZXQgZT10LnNwcmVhZDtyZXR1cm4gZT8/dC5jaGlsZHJlbi5sZW5ndGg+MX1vKHlFLCJsaXN0SXRlbUxvb3NlIik7ZnVuY3Rpb24gYkUodCxlKXtsZXQgcj17fSxuPXQuYWxsKGUpLGk9LTE7Zm9yKHR5cGVvZiBlLnN0YXJ0PT0ibnVtYmVyIiYmZS5zdGFydCE9PTEmJihyLnN0YXJ0PWUuc3RhcnQpOysraTxuLmxlbmd0aDspe2xldCBhPW5baV07aWYoYS50eXBlPT09ImVsZW1lbnQiJiZhLnRhZ05hbWU9PT0ibGkiJiZhLnByb3BlcnRpZXMmJkFycmF5LmlzQXJyYXkoYS5wcm9wZXJ0aWVzLmNsYXNzTmFtZSkmJmEucHJvcGVydGllcy5jbGFzc05hbWUuaW5jbHVkZXMoInRhc2stbGlzdC1pdGVtIikpe3IuY2xhc3NOYW1lPVsiY29udGFpbnMtdGFzay1saXN0Il07YnJlYWt9fWxldCBzPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOmUub3JkZXJlZD8ib2wiOiJ1bCIscHJvcGVydGllczpyLGNoaWxkcmVuOnQud3JhcChuLCEwKX07cmV0dXJuIHQucGF0Y2goZSxzKSx0LmFwcGx5RGF0YShlLHMpfW8oYkUsImxpc3QiKTtmdW5jdGlvbiB3RSh0LGUpe2xldCByPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJwIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLHIpLHQuYXBwbHlEYXRhKGUscil9byh3RSwicGFyYWdyYXBoIik7ZnVuY3Rpb24gdkUodCxlKXtsZXQgcj17dHlwZToicm9vdCIsY2hpbGRyZW46dC53cmFwKHQuYWxsKGUpKX07cmV0dXJuIHQucGF0Y2goZSxyKSx0LmFwcGx5RGF0YShlLHIpfW8odkUsInJvb3QiKTtmdW5jdGlvbiBrRSh0LGUpe2xldCByPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJzdHJvbmciLHByb3BlcnRpZXM6e30sY2hpbGRyZW46dC5hbGwoZSl9O3JldHVybiB0LnBhdGNoKGUsciksdC5hcHBseURhdGEoZSxyKX1vKGtFLCJzdHJvbmciKTtmdW5jdGlvbiBTRSh0LGUpe2xldCByPXQuYWxsKGUpLG49ci5zaGlmdCgpLGk9W107aWYobil7bGV0IGE9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6InRoZWFkIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQud3JhcChbbl0sITApfTt0LnBhdGNoKGUuY2hpbGRyZW5bMF0sYSksaS5wdXNoKGEpfWlmKHIubGVuZ3RoPjApe2xldCBhPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJ0Ym9keSIscHJvcGVydGllczp7fSxjaGlsZHJlbjp0LndyYXAociwhMCl9LGw9Q2goZS5jaGlsZHJlblsxXSksYz1EaChlLmNoaWxkcmVuW2UuY2hpbGRyZW4ubGVuZ3RoLTFdKTtsJiZjJiYoYS5wb3NpdGlvbj17c3RhcnQ6bCxlbmQ6Y30pLGkucHVzaChhKX1sZXQgcz17dHlwZToiZWxlbWVudCIsdGFnTmFtZToidGFibGUiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46dC53cmFwKGksITApfTtyZXR1cm4gdC5wYXRjaChlLHMpLHQuYXBwbHlEYXRhKGUscyl9byhTRSwidGFibGUiKTtmdW5jdGlvbiBURSh0LGUscil7bGV0IG49cj9yLmNoaWxkcmVuOnZvaWQgMCxzPShuP24uaW5kZXhPZihlKToxKT09PTA/InRoIjoidGQiLGE9ciYmci50eXBlPT09InRhYmxlIj9yLmFsaWduOnZvaWQgMCxsPWE/YS5sZW5ndGg6ZS5jaGlsZHJlbi5sZW5ndGgsYz0tMSx1PVtdO2Zvcig7KytjPGw7KXtsZXQgcD1lLmNoaWxkcmVuW2NdLGg9e30sZD1hP2FbY106dm9pZCAwO2QmJihoLmFsaWduPWQpO2xldCBtPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOnMscHJvcGVydGllczpoLGNoaWxkcmVuOltdfTtwJiYobS5jaGlsZHJlbj10LmFsbChwKSx0LnBhdGNoKHAsbSksbT10LmFwcGx5RGF0YShwLG0pKSx1LnB1c2gobSl9bGV0IGY9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6InRyIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQud3JhcCh1LCEwKX07cmV0dXJuIHQucGF0Y2goZSxmKSx0LmFwcGx5RGF0YShlLGYpfW8oVEUsInRhYmxlUm93Iik7ZnVuY3Rpb24gRUUodCxlKXtsZXQgcj17dHlwZToiZWxlbWVudCIsdGFnTmFtZToidGQiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46dC5hbGwoZSl9O3JldHVybiB0LnBhdGNoKGUsciksdC5hcHBseURhdGEoZSxyKX1vKEVFLCJ0YWJsZUNlbGwiKTt2YXIgRk5lPTksQU5lPTMyO2Z1bmN0aW9uIENFKHQpe2xldCBlPVN0cmluZyh0KSxyPS9ccj9cbnxcci9nLG49ci5leGVjKGUpLGk9MCxzPVtdO2Zvcig7bjspcy5wdXNoKERFKGUuc2xpY2UoaSxuLmluZGV4KSxpPjAsITApLG5bMF0pLGk9bi5pbmRleCtuWzBdLmxlbmd0aCxuPXIuZXhlYyhlKTtyZXR1cm4gcy5wdXNoKERFKGUuc2xpY2UoaSksaT4wLCExKSkscy5qb2luKCIiKX1vKENFLCJ0cmltTGluZXMiKTtmdW5jdGlvbiBERSh0LGUscil7bGV0IG49MCxpPXQubGVuZ3RoO2lmKGUpe2xldCBzPXQuY29kZVBvaW50QXQobik7Zm9yKDtzPT09OXx8cz09PTMyOyluKysscz10LmNvZGVQb2ludEF0KG4pfWlmKHIpe2xldCBzPXQuY29kZVBvaW50QXQoaS0xKTtmb3IoO3M9PT05fHxzPT09MzI7KWktLSxzPXQuY29kZVBvaW50QXQoaS0xKX1yZXR1cm4gaT5uP3Quc2xpY2UobixpKToiIn1vKERFLCJ0cmltTGluZSIpO2Z1bmN0aW9uIE1FKHQsZSl7bGV0IHI9e3R5cGU6InRleHQiLHZhbHVlOkNFKFN0cmluZyhlLnZhbHVlKSl9O3JldHVybiB0LnBhdGNoKGUsciksdC5hcHBseURhdGEoZSxyKX1vKE1FLCJ0ZXh0Iik7ZnVuY3Rpb24gT0UodCxlKXtsZXQgcj17dHlwZToiZWxlbWVudCIsdGFnTmFtZToiaHIiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46W119O3JldHVybiB0LnBhdGNoKGUsciksdC5hcHBseURhdGEoZSxyKX1vKE9FLCJ0aGVtYXRpY0JyZWFrIik7dmFyIER5PXtibG9ja3F1b3RlOnRFLGJyZWFrOnJFLGNvZGU6bkUsZGVsZXRlOmlFLGVtcGhhc2lzOm9FLGZvb3Rub3RlUmVmZXJlbmNlOmNFLGhlYWRpbmc6dUUsaHRtbDpmRSxpbWFnZVJlZmVyZW5jZTpwRSxpbWFnZTpoRSxpbmxpbmVDb2RlOmRFLGxpbmtSZWZlcmVuY2U6bUUsbGluazpnRSxsaXN0SXRlbTp4RSxsaXN0OmJFLHBhcmFncmFwaDp3RSxyb290OnZFLHN0cm9uZzprRSx0YWJsZTpTRSx0YWJsZUNlbGw6RUUsdGFibGVSb3c6VEUsdGV4dDpNRSx0aGVtYXRpY0JyZWFrOk9FLHRvbWw6X2gseWFtbDpfaCxkZWZpbml0aW9uOl9oLGZvb3Rub3RlRGVmaW5pdGlvbjpfaH07ZnVuY3Rpb24gX2goKXt9byhfaCwiaWdub3JlIik7ZnVuY3Rpb24gSUUodCxlKXtsZXQgcj1be3R5cGU6InRleHQiLHZhbHVlOiJcdTIxQTkifV07cmV0dXJuIGU+MSYmci5wdXNoKHt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJzdXAiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46W3t0eXBlOiJ0ZXh0Iix2YWx1ZTpTdHJpbmcoZSl9XX0pLHJ9byhJRSwiZGVmYXVsdEZvb3Rub3RlQmFja0NvbnRlbnQiKTtmdW5jdGlvbiBfRSh0LGUpe3JldHVybiJCYWNrIHRvIHJlZmVyZW5jZSAiKyh0KzEpKyhlPjE/Ii0iK2U6IiIpfW8oX0UsImRlZmF1bHRGb290bm90ZUJhY2tMYWJlbCIpO2Z1bmN0aW9uIFBFKHQpe2xldCBlPXR5cGVvZiB0Lm9wdGlvbnMuY2xvYmJlclByZWZpeD09InN0cmluZyI/dC5vcHRpb25zLmNsb2JiZXJQcmVmaXg6InVzZXItY29udGVudC0iLHI9dC5vcHRpb25zLmZvb3Rub3RlQmFja0NvbnRlbnR8fElFLG49dC5vcHRpb25zLmZvb3Rub3RlQmFja0xhYmVsfHxfRSxpPXQub3B0aW9ucy5mb290bm90ZUxhYmVsfHwiRm9vdG5vdGVzIixzPXQub3B0aW9ucy5mb290bm90ZUxhYmVsVGFnTmFtZXx8ImgyIixhPXQub3B0aW9ucy5mb290bm90ZUxhYmVsUHJvcGVydGllc3x8e2NsYXNzTmFtZTpbInNyLW9ubHkiXX0sbD1bXSxjPS0xO2Zvcig7KytjPHQuZm9vdG5vdGVPcmRlci5sZW5ndGg7KXtsZXQgdT10LmZvb3Rub3RlQnlJZC5nZXQodC5mb290bm90ZU9yZGVyW2NdKTtpZighdSljb250aW51ZTtsZXQgZj10LmFsbCh1KSxwPVN0cmluZyh1LmlkZW50aWZpZXIpLnRvVXBwZXJDYXNlKCksaD1zcihwLnRvTG93ZXJDYXNlKCkpLGQ9MCxtPVtdLGc9dC5mb290bm90ZUNvdW50cy5nZXQocCk7Zm9yKDtnIT09dm9pZCAwJiYrK2Q8PWc7KXttLmxlbmd0aD4wJiZtLnB1c2goe3R5cGU6InRleHQiLHZhbHVlOiIgIn0pO2xldCBrPXR5cGVvZiByPT0ic3RyaW5nIj9yOnIoYyxkKTt0eXBlb2Ygaz09InN0cmluZyImJihrPXt0eXBlOiJ0ZXh0Iix2YWx1ZTprfSksbS5wdXNoKHt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJhIixwcm9wZXJ0aWVzOntocmVmOiIjIitlKyJmbnJlZi0iK2grKGQ+MT8iLSIrZDoiIiksZGF0YUZvb3Rub3RlQmFja3JlZjoiIixhcmlhTGFiZWw6dHlwZW9mIG49PSJzdHJpbmciP246bihjLGQpLGNsYXNzTmFtZTpbImRhdGEtZm9vdG5vdGUtYmFja3JlZiJdfSxjaGlsZHJlbjpBcnJheS5pc0FycmF5KGspP2s6W2tdfSl9bGV0IHk9ZltmLmxlbmd0aC0xXTtpZih5JiZ5LnR5cGU9PT0iZWxlbWVudCImJnkudGFnTmFtZT09PSJwIil7bGV0IGs9eS5jaGlsZHJlblt5LmNoaWxkcmVuLmxlbmd0aC0xXTtrJiZrLnR5cGU9PT0idGV4dCI/ay52YWx1ZSs9IiAiOnkuY2hpbGRyZW4ucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6IiAifSkseS5jaGlsZHJlbi5wdXNoKC4uLm0pfWVsc2UgZi5wdXNoKC4uLm0pO2xldCB4PXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJsaSIscHJvcGVydGllczp7aWQ6ZSsiZm4tIitofSxjaGlsZHJlbjp0LndyYXAoZiwhMCl9O3QucGF0Y2godSx4KSxsLnB1c2goeCl9aWYobC5sZW5ndGghPT0wKXJldHVybnt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJzZWN0aW9uIixwcm9wZXJ0aWVzOntkYXRhRm9vdG5vdGVzOiEwLGNsYXNzTmFtZTpbImZvb3Rub3RlcyJdfSxjaGlsZHJlbjpbe3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6cyxwcm9wZXJ0aWVzOnsuLi5EaShhKSxpZDoiZm9vdG5vdGUtbGFiZWwifSxjaGlsZHJlbjpbe3R5cGU6InRleHQiLHZhbHVlOml9XX0se3R5cGU6InRleHQiLHZhbHVlOmAKYH0se3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6Im9sIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQud3JhcChsLCEwKX0se3R5cGU6InRleHQiLHZhbHVlOmAKYH1dfX1vKFBFLCJmb290ZXIiKTt2YXIgUkU9bygoZnVuY3Rpb24odCxlLHIsbixpKXtsZXQgcz16bihlKTtpZihyIT1udWxsJiYodHlwZW9mIHIhPSJudW1iZXIifHxyPDB8fHI9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcG9zaXRpdmUgZmluaXRlIGluZGV4Iik7aWYobiE9bnVsbCYmKCFSRShuKXx8IW4uY2hpbGRyZW4pKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcGFyZW50IG5vZGUiKTtpZihuPT1udWxsIT0ocj09bnVsbCkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBib3RoIHBhcmVudCBhbmQgaW5kZXgiKTtyZXR1cm4gTkUodCk/cy5jYWxsKGksdCxyLG4pOiExfSksImlzIiksem49bygoZnVuY3Rpb24odCl7aWYodD09bnVsbClyZXR1cm4gVEY7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpcmV0dXJuIFBoKHQpO2lmKHR5cGVvZiB0PT0ib2JqZWN0IilyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT92Rih0KTprRih0KTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIFNGKHQpO3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgZnVuY3Rpb24sIHN0cmluZywgb3Igb2JqZWN0IGFzIHRlc3QiKX0pLCJjb252ZXJ0Iik7ZnVuY3Rpb24gdkYodCl7bGV0IGU9W10scj0tMTtmb3IoOysrcjx0Lmxlbmd0aDspZVtyXT16bih0W3JdKTtyZXR1cm4gUGgobik7ZnVuY3Rpb24gbiguLi5pKXtsZXQgcz0tMTtmb3IoOysrczxlLmxlbmd0aDspaWYoZVtzXS5hcHBseSh0aGlzLGkpKXJldHVybiEwO3JldHVybiExfX1vKHZGLCJhbnlGYWN0b3J5Iik7ZnVuY3Rpb24ga0YodCl7bGV0IGU9dDtyZXR1cm4gUGgocik7ZnVuY3Rpb24gcihuKXtsZXQgaT1uLHM7Zm9yKHMgaW4gdClpZihpW3NdIT09ZVtzXSlyZXR1cm4hMTtyZXR1cm4hMH19byhrRiwicHJvcGVydGllc0ZhY3RvcnkiKTtmdW5jdGlvbiBTRih0KXtyZXR1cm4gUGgoZSk7ZnVuY3Rpb24gZShyKXtyZXR1cm4gciYmci50eXBlPT09dH19byhTRiwidHlwZUZhY3RvcnkiKTtmdW5jdGlvbiBQaCh0KXtyZXR1cm4gZTtmdW5jdGlvbiBlKHIsbixpKXtyZXR1cm4hIShORShyKSYmdC5jYWxsKHRoaXMscix0eXBlb2Ygbj09Im51bWJlciI/bjp2b2lkIDAsaXx8dm9pZCAwKSl9fW8oUGgsImNhc3RGYWN0b3J5Iik7ZnVuY3Rpb24gVEYoKXtyZXR1cm4hMH1vKFRGLCJvayIpO2Z1bmN0aW9uIE5FKHQpe3JldHVybiB0IT09bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiJiYidHlwZSJpbiB0fW8oTkUsImxvb2tzTGlrZUFOb2RlIik7dmFyIExFPVtdLE5oPSEwLERvPSExLFJoPSJza2lwIjtmdW5jdGlvbiBYbCh0LGUscixuKXtsZXQgaTt0eXBlb2YgZT09ImZ1bmN0aW9uIiYmdHlwZW9mIHIhPSJmdW5jdGlvbiI/KG49cixyPWUpOmk9ZTtsZXQgcz16bihpKSxhPW4/LTE6MTtsKHQsdm9pZCAwLFtdKSgpO2Z1bmN0aW9uIGwoYyx1LGYpe2xldCBwPWMmJnR5cGVvZiBjPT0ib2JqZWN0Ij9jOnt9O2lmKHR5cGVvZiBwLnR5cGU9PSJzdHJpbmciKXtsZXQgZD10eXBlb2YgcC50YWdOYW1lPT0ic3RyaW5nIj9wLnRhZ05hbWU6dHlwZW9mIHAubmFtZT09InN0cmluZyI/cC5uYW1lOnZvaWQgMDtPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwibmFtZSIse3ZhbHVlOiJub2RlICgiKyhjLnR5cGUrKGQ/IjwiK2QrIj4iOiIiKSkrIikifSl9cmV0dXJuIGg7ZnVuY3Rpb24gaCgpe2xldCBkPUxFLG0sZyx5O2lmKCghZXx8cyhjLHUsZltmLmxlbmd0aC0xXXx8dm9pZCAwKSkmJihkPUVGKHIoYyxmKSksZFswXT09PURvKSlyZXR1cm4gZDtpZigiY2hpbGRyZW4iaW4gYyYmYy5jaGlsZHJlbil7bGV0IHg9YztpZih4LmNoaWxkcmVuJiZkWzBdIT09UmgpZm9yKGc9KG4/eC5jaGlsZHJlbi5sZW5ndGg6LTEpK2EseT1mLmNvbmNhdCh4KTtnPi0xJiZnPHguY2hpbGRyZW4ubGVuZ3RoOyl7bGV0IGs9eC5jaGlsZHJlbltnXTtpZihtPWwoayxnLHkpKCksbVswXT09PURvKXJldHVybiBtO2c9dHlwZW9mIG1bMV09PSJudW1iZXIiP21bMV06ZythfX1yZXR1cm4gZH19byhsLCJmYWN0b3J5Iil9byhYbCwidmlzaXRQYXJlbnRzIik7ZnVuY3Rpb24gRUYodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDp0eXBlb2YgdD09Im51bWJlciI/W05oLHRdOnQ9PW51bGw/TEU6W3RdfW8oRUYsInRvUmVzdWx0Iik7ZnVuY3Rpb24gWmwodCxlLHIsbil7bGV0IGkscyxhO3R5cGVvZiBlPT0iZnVuY3Rpb24iJiZ0eXBlb2YgciE9ImZ1bmN0aW9uIj8ocz12b2lkIDAsYT1lLGk9cik6KHM9ZSxhPXIsaT1uKSxYbCh0LHMsbCxpKTtmdW5jdGlvbiBsKGMsdSl7bGV0IGY9dVt1Lmxlbmd0aC0xXSxwPWY/Zi5jaGlsZHJlbi5pbmRleE9mKGMpOnZvaWQgMDtyZXR1cm4gYShjLHAsZil9byhsLCJvdmVybG9hZCIpfW8oWmwsInZpc2l0Iik7dmFyIEN5PXt9Lmhhc093blByb3BlcnR5LERGPXt9O2Z1bmN0aW9uIEFFKHQsZSl7bGV0IHI9ZXx8REYsbj1uZXcgTWFwLGk9bmV3IE1hcCxzPW5ldyBNYXAsYT17Li4uRHksLi4uci5oYW5kbGVyc30sbD17YWxsOnUsYXBwbHlEYXRhOk1GLGRlZmluaXRpb25CeUlkOm4sZm9vdG5vdGVCeUlkOmksZm9vdG5vdGVDb3VudHM6cyxmb290bm90ZU9yZGVyOltdLGhhbmRsZXJzOmEsb25lOmMsb3B0aW9uczpyLHBhdGNoOkNGLHdyYXA6SUZ9O3JldHVybiBabCh0LGZ1bmN0aW9uKGYpe2lmKGYudHlwZT09PSJkZWZpbml0aW9uInx8Zi50eXBlPT09ImZvb3Rub3RlRGVmaW5pdGlvbiIpe2xldCBwPWYudHlwZT09PSJkZWZpbml0aW9uIj9uOmksaD1TdHJpbmcoZi5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpO3AuaGFzKGgpfHxwLnNldChoLGYpfX0pLGw7ZnVuY3Rpb24gYyhmLHApe2xldCBoPWYudHlwZSxkPWwuaGFuZGxlcnNbaF07aWYoQ3kuY2FsbChsLmhhbmRsZXJzLGgpJiZkKXJldHVybiBkKGwsZixwKTtpZihsLm9wdGlvbnMucGFzc1Rocm91Z2gmJmwub3B0aW9ucy5wYXNzVGhyb3VnaC5pbmNsdWRlcyhoKSl7aWYoImNoaWxkcmVuImluIGYpe2xldHtjaGlsZHJlbjpnLC4uLnl9PWYseD1EaSh5KTtyZXR1cm4geC5jaGlsZHJlbj1sLmFsbChmKSx4fXJldHVybiBEaShmKX1yZXR1cm4obC5vcHRpb25zLnVua25vd25IYW5kbGVyfHxPRikobCxmLHApfW8oYywib25lIik7ZnVuY3Rpb24gdShmKXtsZXQgcD1bXTtpZigiY2hpbGRyZW4iaW4gZil7bGV0IGg9Zi5jaGlsZHJlbixkPS0xO2Zvcig7KytkPGgubGVuZ3RoOyl7bGV0IG09bC5vbmUoaFtkXSxmKTtpZihtKXtpZihkJiZoW2QtMV0udHlwZT09PSJicmVhayImJighQXJyYXkuaXNBcnJheShtKSYmbS50eXBlPT09InRleHQiJiYobS52YWx1ZT1GRShtLnZhbHVlKSksIUFycmF5LmlzQXJyYXkobSkmJm0udHlwZT09PSJlbGVtZW50Iikpe2xldCBnPW0uY2hpbGRyZW5bMF07ZyYmZy50eXBlPT09InRleHQiJiYoZy52YWx1ZT1GRShnLnZhbHVlKSl9QXJyYXkuaXNBcnJheShtKT9wLnB1c2goLi4ubSk6cC5wdXNoKG0pfX19cmV0dXJuIHB9byh1LCJhbGwiKX1vKEFFLCJjcmVhdGVTdGF0ZSIpO2Z1bmN0aW9uIENGKHQsZSl7dC5wb3NpdGlvbiYmKGUucG9zaXRpb249UWwodCkpfW8oQ0YsInBhdGNoIik7ZnVuY3Rpb24gTUYodCxlKXtsZXQgcj1lO2lmKHQmJnQuZGF0YSl7bGV0IG49dC5kYXRhLmhOYW1lLGk9dC5kYXRhLmhDaGlsZHJlbixzPXQuZGF0YS5oUHJvcGVydGllcztpZih0eXBlb2Ygbj09InN0cmluZyIpaWYoci50eXBlPT09ImVsZW1lbnQiKXIudGFnTmFtZT1uO2Vsc2V7bGV0IGE9ImNoaWxkcmVuImluIHI/ci5jaGlsZHJlbjpbcl07cj17dHlwZToiZWxlbWVudCIsdGFnTmFtZTpuLHByb3BlcnRpZXM6e30sY2hpbGRyZW46YX19ci50eXBlPT09ImVsZW1lbnQiJiZzJiZPYmplY3QuYXNzaWduKHIucHJvcGVydGllcyxEaShzKSksImNoaWxkcmVuImluIHImJnIuY2hpbGRyZW4mJmkhPT1udWxsJiZpIT09dm9pZCAwJiYoci5jaGlsZHJlbj1pKX1yZXR1cm4gcn1vKE1GLCJhcHBseURhdGEiKTtmdW5jdGlvbiBPRih0LGUpe2xldCByPWUuZGF0YXx8e30sbj0idmFsdWUiaW4gZSYmIShDeS5jYWxsKHIsImhQcm9wZXJ0aWVzIil8fEN5LmNhbGwociwiaENoaWxkcmVuIikpP3t0eXBlOiJ0ZXh0Iix2YWx1ZTplLnZhbHVlfTp7dHlwZToiZWxlbWVudCIsdGFnTmFtZToiZGl2Iixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLG4pLHQuYXBwbHlEYXRhKGUsbil9byhPRiwiZGVmYXVsdFVua25vd25IYW5kbGVyIik7ZnVuY3Rpb24gSUYodCxlKXtsZXQgcj1bXSxuPS0xO2ZvcihlJiZyLnB1c2goe3R5cGU6InRleHQiLHZhbHVlOmAKYH0pOysrbjx0Lmxlbmd0aDspbiYmci5wdXNoKHt0eXBlOiJ0ZXh0Iix2YWx1ZTpgCmB9KSxyLnB1c2godFtuXSk7cmV0dXJuIGUmJnQubGVuZ3RoPjAmJnIucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6YApgfSkscn1vKElGLCJ3cmFwIik7ZnVuY3Rpb24gRkUodCl7bGV0IGU9MCxyPXQuY2hhckNvZGVBdChlKTtmb3IoO3I9PT05fHxyPT09MzI7KWUrKyxyPXQuY2hhckNvZGVBdChlKTtyZXR1cm4gdC5zbGljZShlKX1vKEZFLCJ0cmltTWFya2Rvd25TcGFjZVN0YXJ0Iik7ZnVuY3Rpb24gTXkodCxlKXtsZXQgcj1BRSh0LGUpLG49ci5vbmUodCx2b2lkIDApLGk9UEUocikscz1BcnJheS5pc0FycmF5KG4pP3t0eXBlOiJyb290IixjaGlsZHJlbjpufTpufHx7dHlwZToicm9vdCIsY2hpbGRyZW46W119O3JldHVybiBpJiYoImNoaWxkcmVuImluIHMscy5jaGlsZHJlbi5wdXNoKHt0eXBlOiJ0ZXh0Iix2YWx1ZTpgCmB9LGkpKSxzfW8oTXksInRvSGFzdCIpO3ZhciAkRT1bImFyZWEiLCJiYXNlIiwiYmFzZWZvbnQiLCJiZ3NvdW5kIiwiYnIiLCJjb2wiLCJjb21tYW5kIiwiZW1iZWQiLCJmcmFtZSIsImhyIiwiaW1hZ2UiLCJpbWciLCJpbnB1dCIsImtleWdlbiIsImxpbmsiLCJtZXRhIiwicGFyYW0iLCJzb3VyY2UiLCJ0cmFjayIsIndiciJdO3ZhciBIbj1jbGFzc3tzdGF0aWN7byh0aGlzLCJTY2hlbWEiKX1jb25zdHJ1Y3RvcihlLHIsbil7dGhpcy5ub3JtYWw9cix0aGlzLnByb3BlcnR5PWUsbiYmKHRoaXMuc3BhY2U9bil9fTtIbi5wcm90b3R5cGUubm9ybWFsPXt9LEhuLnByb3RvdHlwZS5wcm9wZXJ0eT17fSxIbi5wcm90b3R5cGUuc3BhY2U9dm9pZCAwO2Z1bmN0aW9uIE95KHQsZSl7bGV0IHI9e30sbj17fTtmb3IobGV0IGkgb2YgdClPYmplY3QuYXNzaWduKHIsaS5wcm9wZXJ0eSksT2JqZWN0LmFzc2lnbihuLGkubm9ybWFsKTtyZXR1cm4gbmV3IEhuKHIsbixlKX1vKE95LCJtZXJnZSIpO2Z1bmN0aW9uIHNhKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCl9byhzYSwibm9ybWFsaXplIik7dmFyIGd0PWNsYXNze3N0YXRpY3tvKHRoaXMsIkluZm8iKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuYXR0cmlidXRlPXIsdGhpcy5wcm9wZXJ0eT1lfX07Z3QucHJvdG90eXBlLmF0dHJpYnV0ZT0iIixndC5wcm90b3R5cGUuYm9vbGVhbmlzaD0hMSxndC5wcm90b3R5cGUuYm9vbGVhbj0hMSxndC5wcm90b3R5cGUuY29tbWFPclNwYWNlU2VwYXJhdGVkPSExLGd0LnByb3RvdHlwZS5jb21tYVNlcGFyYXRlZD0hMSxndC5wcm90b3R5cGUuZGVmaW5lZD0hMSxndC5wcm90b3R5cGUubXVzdFVzZVByb3BlcnR5PSExLGd0LnByb3RvdHlwZS5udW1iZXI9ITEsZ3QucHJvdG90eXBlLm92ZXJsb2FkZWRCb29sZWFuPSExLGd0LnByb3RvdHlwZS5wcm9wZXJ0eT0iIixndC5wcm90b3R5cGUuc3BhY2VTZXBhcmF0ZWQ9ITEsZ3QucHJvdG90eXBlLnNwYWNlPXZvaWQgMDt2YXIgZWM9e307c2UoZWMse2Jvb2xlYW46KCk9PmFlLGJvb2xlYW5pc2g6KCk9PkplLGNvbW1hT3JTcGFjZVNlcGFyYXRlZDooKT0+cXQsY29tbWFTZXBhcmF0ZWQ6KCk9PmpuLG51bWJlcjooKT0+aixvdmVybG9hZGVkQm9vbGVhbjooKT0+TGgsc3BhY2VTZXBhcmF0ZWQ6KCk9PlBlfSk7dmFyIF9GPTAsYWU9Q28oKSxKZT1DbygpLExoPUNvKCksaj1DbygpLFBlPUNvKCksam49Q28oKSxxdD1DbygpO2Z1bmN0aW9uIENvKCl7cmV0dXJuIDIqKisrX0Z9byhDbywiaW5jcmVtZW50Iik7dmFyIEl5PU9iamVjdC5rZXlzKGVjKSxNbz1jbGFzcyBleHRlbmRzIGd0e3N0YXRpY3tvKHRoaXMsIkRlZmluZWRJbmZvIil9Y29uc3RydWN0b3IoZSxyLG4saSl7bGV0IHM9LTE7aWYoc3VwZXIoZSxyKSxCRSh0aGlzLCJzcGFjZSIsaSksdHlwZW9mIG49PSJudW1iZXIiKWZvcig7KytzPEl5Lmxlbmd0aDspe2xldCBhPUl5W3NdO0JFKHRoaXMsSXlbc10sKG4mZWNbYV0pPT09ZWNbYV0pfX19O01vLnByb3RvdHlwZS5kZWZpbmVkPSEwO2Z1bmN0aW9uIEJFKHQsZSxyKXtyJiYodFtlXT1yKX1vKEJFLCJtYXJrIik7ZnVuY3Rpb24gdnIodCl7bGV0IGU9e30scj17fTtmb3IobGV0W24saV1vZiBPYmplY3QuZW50cmllcyh0LnByb3BlcnRpZXMpKXtsZXQgcz1uZXcgTW8obix0LnRyYW5zZm9ybSh0LmF0dHJpYnV0ZXN8fHt9LG4pLGksdC5zcGFjZSk7dC5tdXN0VXNlUHJvcGVydHkmJnQubXVzdFVzZVByb3BlcnR5LmluY2x1ZGVzKG4pJiYocy5tdXN0VXNlUHJvcGVydHk9ITApLGVbbl09cyxyW3NhKG4pXT1uLHJbc2Eocy5hdHRyaWJ1dGUpXT1ufXJldHVybiBuZXcgSG4oZSxyLHQuc3BhY2UpfW8odnIsImNyZWF0ZSIpO3ZhciBfeT12cih7cHJvcGVydGllczp7YXJpYUFjdGl2ZURlc2NlbmRhbnQ6bnVsbCxhcmlhQXRvbWljOkplLGFyaWFBdXRvQ29tcGxldGU6bnVsbCxhcmlhQnVzeTpKZSxhcmlhQ2hlY2tlZDpKZSxhcmlhQ29sQ291bnQ6aixhcmlhQ29sSW5kZXg6aixhcmlhQ29sU3BhbjpqLGFyaWFDb250cm9sczpQZSxhcmlhQ3VycmVudDpudWxsLGFyaWFEZXNjcmliZWRCeTpQZSxhcmlhRGV0YWlsczpudWxsLGFyaWFEaXNhYmxlZDpKZSxhcmlhRHJvcEVmZmVjdDpQZSxhcmlhRXJyb3JNZXNzYWdlOm51bGwsYXJpYUV4cGFuZGVkOkplLGFyaWFGbG93VG86UGUsYXJpYUdyYWJiZWQ6SmUsYXJpYUhhc1BvcHVwOm51bGwsYXJpYUhpZGRlbjpKZSxhcmlhSW52YWxpZDpudWxsLGFyaWFLZXlTaG9ydGN1dHM6bnVsbCxhcmlhTGFiZWw6bnVsbCxhcmlhTGFiZWxsZWRCeTpQZSxhcmlhTGV2ZWw6aixhcmlhTGl2ZTpudWxsLGFyaWFNb2RhbDpKZSxhcmlhTXVsdGlMaW5lOkplLGFyaWFNdWx0aVNlbGVjdGFibGU6SmUsYXJpYU9yaWVudGF0aW9uOm51bGwsYXJpYU93bnM6UGUsYXJpYVBsYWNlaG9sZGVyOm51bGwsYXJpYVBvc0luU2V0OmosYXJpYVByZXNzZWQ6SmUsYXJpYVJlYWRPbmx5OkplLGFyaWFSZWxldmFudDpudWxsLGFyaWFSZXF1aXJlZDpKZSxhcmlhUm9sZURlc2NyaXB0aW9uOlBlLGFyaWFSb3dDb3VudDpqLGFyaWFSb3dJbmRleDpqLGFyaWFSb3dTcGFuOmosYXJpYVNlbGVjdGVkOkplLGFyaWFTZXRTaXplOmosYXJpYVNvcnQ6bnVsbCxhcmlhVmFsdWVNYXg6aixhcmlhVmFsdWVNaW46aixhcmlhVmFsdWVOb3c6aixhcmlhVmFsdWVUZXh0Om51bGwscm9sZTpudWxsfSx0cmFuc2Zvcm0odCxlKXtyZXR1cm4gZT09PSJyb2xlIj9lOiJhcmlhLSIrZS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpfX0pO2Z1bmN0aW9uIEZoKHQsZSl7cmV0dXJuIGUgaW4gdD90W2VdOmV9byhGaCwiY2FzZVNlbnNpdGl2ZVRyYW5zZm9ybSIpO2Z1bmN0aW9uIEFoKHQsZSl7cmV0dXJuIEZoKHQsZS50b0xvd2VyQ2FzZSgpKX1vKEFoLCJjYXNlSW5zZW5zaXRpdmVUcmFuc2Zvcm0iKTt2YXIgekU9dnIoe2F0dHJpYnV0ZXM6e2FjY2VwdGNoYXJzZXQ6ImFjY2VwdC1jaGFyc2V0IixjbGFzc25hbWU6ImNsYXNzIixodG1sZm9yOiJmb3IiLGh0dHBlcXVpdjoiaHR0cC1lcXVpdiJ9LG11c3RVc2VQcm9wZXJ0eTpbImNoZWNrZWQiLCJtdWx0aXBsZSIsIm11dGVkIiwic2VsZWN0ZWQiXSxwcm9wZXJ0aWVzOnthYmJyOm51bGwsYWNjZXB0OmpuLGFjY2VwdENoYXJzZXQ6UGUsYWNjZXNzS2V5OlBlLGFjdGlvbjpudWxsLGFsbG93Om51bGwsYWxsb3dGdWxsU2NyZWVuOmFlLGFsbG93UGF5bWVudFJlcXVlc3Q6YWUsYWxsb3dVc2VyTWVkaWE6YWUsYWxwaGE6YWUsYWx0Om51bGwsYXM6bnVsbCxhc3luYzphZSxhdXRvQ2FwaXRhbGl6ZTpudWxsLGF1dG9Db21wbGV0ZTpQZSxhdXRvRm9jdXM6YWUsYXV0b1BsYXk6YWUsYmxvY2tpbmc6UGUsY2FwdHVyZTpudWxsLGNoYXJTZXQ6bnVsbCxjaGVja2VkOmFlLGNpdGU6bnVsbCxjbGFzc05hbWU6UGUsY2xvc2VkQnk6bnVsbCxjb2xvclNwYWNlOm51bGwsY29sczpqLGNvbFNwYW46aixjb21tYW5kOm51bGwsY29tbWFuZEZvcjpudWxsLGNvbnRlbnQ6bnVsbCxjb250ZW50RWRpdGFibGU6SmUsY29udHJvbHM6YWUsY29udHJvbHNMaXN0OlBlLGNvb3JkczpqfGpuLGNyb3NzT3JpZ2luOm51bGwsZGF0YTpudWxsLGRhdGVUaW1lOm51bGwsZGVjb2Rpbmc6bnVsbCxkZWZhdWx0OmFlLGRlZmVyOmFlLGRpcjpudWxsLGRpck5hbWU6bnVsbCxkaXNhYmxlZDphZSxkb3dubG9hZDpMaCxkcmFnZ2FibGU6SmUsZW5jVHlwZTpudWxsLGVudGVyS2V5SGludDpudWxsLGZldGNoUHJpb3JpdHk6bnVsbCxmb3JtOm51bGwsZm9ybUFjdGlvbjpudWxsLGZvcm1FbmNUeXBlOm51bGwsZm9ybU1ldGhvZDpudWxsLGZvcm1Ob1ZhbGlkYXRlOmFlLGZvcm1UYXJnZXQ6bnVsbCxoZWFkZXJzOlBlLGhlaWdodDpqLGhpZGRlbjpMaCxoaWdoOmosaHJlZjpudWxsLGhyZWZMYW5nOm51bGwsaHRtbEZvcjpQZSxodHRwRXF1aXY6UGUsaWQ6bnVsbCxpbWFnZVNpemVzOm51bGwsaW1hZ2VTcmNTZXQ6bnVsbCxpbmVydDphZSxpbnB1dE1vZGU6bnVsbCxpbnRlZ3JpdHk6bnVsbCxpczpudWxsLGlzTWFwOmFlLGl0ZW1JZDpudWxsLGl0ZW1Qcm9wOlBlLGl0ZW1SZWY6UGUsaXRlbVNjb3BlOmFlLGl0ZW1UeXBlOlBlLGtpbmQ6bnVsbCxsYWJlbDpudWxsLGxhbmc6bnVsbCxsYW5ndWFnZTpudWxsLGxpc3Q6bnVsbCxsb2FkaW5nOm51bGwsbG9vcDphZSxsb3c6aixtYW5pZmVzdDpudWxsLG1heDpudWxsLG1heExlbmd0aDpqLG1lZGlhOm51bGwsbWV0aG9kOm51bGwsbWluOm51bGwsbWluTGVuZ3RoOmosbXVsdGlwbGU6YWUsbXV0ZWQ6YWUsbmFtZTpudWxsLG5vbmNlOm51bGwsbm9Nb2R1bGU6YWUsbm9WYWxpZGF0ZTphZSxvbkFib3J0Om51bGwsb25BZnRlclByaW50Om51bGwsb25BdXhDbGljazpudWxsLG9uQmVmb3JlTWF0Y2g6bnVsbCxvbkJlZm9yZVByaW50Om51bGwsb25CZWZvcmVUb2dnbGU6bnVsbCxvbkJlZm9yZVVubG9hZDpudWxsLG9uQmx1cjpudWxsLG9uQ2FuY2VsOm51bGwsb25DYW5QbGF5Om51bGwsb25DYW5QbGF5VGhyb3VnaDpudWxsLG9uQ2hhbmdlOm51bGwsb25DbGljazpudWxsLG9uQ2xvc2U6bnVsbCxvbkNvbnRleHRMb3N0Om51bGwsb25Db250ZXh0TWVudTpudWxsLG9uQ29udGV4dFJlc3RvcmVkOm51bGwsb25Db3B5Om51bGwsb25DdWVDaGFuZ2U6bnVsbCxvbkN1dDpudWxsLG9uRGJsQ2xpY2s6bnVsbCxvbkRyYWc6bnVsbCxvbkRyYWdFbmQ6bnVsbCxvbkRyYWdFbnRlcjpudWxsLG9uRHJhZ0V4aXQ6bnVsbCxvbkRyYWdMZWF2ZTpudWxsLG9uRHJhZ092ZXI6bnVsbCxvbkRyYWdTdGFydDpudWxsLG9uRHJvcDpudWxsLG9uRHVyYXRpb25DaGFuZ2U6bnVsbCxvbkVtcHRpZWQ6bnVsbCxvbkVuZGVkOm51bGwsb25FcnJvcjpudWxsLG9uRm9jdXM6bnVsbCxvbkZvcm1EYXRhOm51bGwsb25IYXNoQ2hhbmdlOm51bGwsb25JbnB1dDpudWxsLG9uSW52YWxpZDpudWxsLG9uS2V5RG93bjpudWxsLG9uS2V5UHJlc3M6bnVsbCxvbktleVVwOm51bGwsb25MYW5ndWFnZUNoYW5nZTpudWxsLG9uTG9hZDpudWxsLG9uTG9hZGVkRGF0YTpudWxsLG9uTG9hZGVkTWV0YWRhdGE6bnVsbCxvbkxvYWRFbmQ6bnVsbCxvbkxvYWRTdGFydDpudWxsLG9uTWVzc2FnZTpudWxsLG9uTWVzc2FnZUVycm9yOm51bGwsb25Nb3VzZURvd246bnVsbCxvbk1vdXNlRW50ZXI6bnVsbCxvbk1vdXNlTGVhdmU6bnVsbCxvbk1vdXNlTW92ZTpudWxsLG9uTW91c2VPdXQ6bnVsbCxvbk1vdXNlT3ZlcjpudWxsLG9uTW91c2VVcDpudWxsLG9uT2ZmbGluZTpudWxsLG9uT25saW5lOm51bGwsb25QYWdlSGlkZTpudWxsLG9uUGFnZVNob3c6bnVsbCxvblBhc3RlOm51bGwsb25QYXVzZTpudWxsLG9uUGxheTpudWxsLG9uUGxheWluZzpudWxsLG9uUG9wU3RhdGU6bnVsbCxvblByb2dyZXNzOm51bGwsb25SYXRlQ2hhbmdlOm51bGwsb25SZWplY3Rpb25IYW5kbGVkOm51bGwsb25SZXNldDpudWxsLG9uUmVzaXplOm51bGwsb25TY3JvbGw6bnVsbCxvblNjcm9sbEVuZDpudWxsLG9uU2VjdXJpdHlQb2xpY3lWaW9sYXRpb246bnVsbCxvblNlZWtlZDpudWxsLG9uU2Vla2luZzpudWxsLG9uU2VsZWN0Om51bGwsb25TbG90Q2hhbmdlOm51bGwsb25TdGFsbGVkOm51bGwsb25TdG9yYWdlOm51bGwsb25TdWJtaXQ6bnVsbCxvblN1c3BlbmQ6bnVsbCxvblRpbWVVcGRhdGU6bnVsbCxvblRvZ2dsZTpudWxsLG9uVW5oYW5kbGVkUmVqZWN0aW9uOm51bGwsb25VbmxvYWQ6bnVsbCxvblZvbHVtZUNoYW5nZTpudWxsLG9uV2FpdGluZzpudWxsLG9uV2hlZWw6bnVsbCxvcGVuOmFlLG9wdGltdW06aixwYXR0ZXJuOm51bGwscGluZzpQZSxwbGFjZWhvbGRlcjpudWxsLHBsYXlzSW5saW5lOmFlLHBvcG92ZXI6bnVsbCxwb3BvdmVyVGFyZ2V0Om51bGwscG9wb3ZlclRhcmdldEFjdGlvbjpudWxsLHBvc3RlcjpudWxsLHByZWxvYWQ6bnVsbCxyZWFkT25seTphZSxyZWZlcnJlclBvbGljeTpudWxsLHJlbDpQZSxyZXF1aXJlZDphZSxyZXZlcnNlZDphZSxyb3dzOmoscm93U3BhbjpqLHNhbmRib3g6UGUsc2NvcGU6bnVsbCxzY29wZWQ6YWUsc2VhbWxlc3M6YWUsc2VsZWN0ZWQ6YWUsc2hhZG93Um9vdENsb25hYmxlOmFlLHNoYWRvd1Jvb3RDdXN0b21FbGVtZW50UmVnaXN0cnk6YWUsc2hhZG93Um9vdERlbGVnYXRlc0ZvY3VzOmFlLHNoYWRvd1Jvb3RNb2RlOm51bGwsc2hhZG93Um9vdFNlcmlhbGl6YWJsZTphZSxzaGFwZTpudWxsLHNpemU6aixzaXplczpudWxsLHNsb3Q6bnVsbCxzcGFuOmosc3BlbGxDaGVjazpKZSxzcmM6bnVsbCxzcmNEb2M6bnVsbCxzcmNMYW5nOm51bGwsc3JjU2V0Om51bGwsc3RhcnQ6aixzdGVwOm51bGwsc3R5bGU6bnVsbCx0YWJJbmRleDpqLHRhcmdldDpudWxsLHRpdGxlOm51bGwsdHJhbnNsYXRlOm51bGwsdHlwZTpudWxsLHR5cGVNdXN0TWF0Y2g6YWUsdXNlTWFwOm51bGwsdmFsdWU6SmUsd2lkdGg6aix3cmFwOm51bGwsd3JpdGluZ1N1Z2dlc3Rpb25zOm51bGwsYWxpZ246bnVsbCxhTGluazpudWxsLGFyY2hpdmU6UGUsYXhpczpudWxsLGJhY2tncm91bmQ6bnVsbCxiZ0NvbG9yOm51bGwsYm9yZGVyOmosYm9yZGVyQ29sb3I6bnVsbCxib3R0b21NYXJnaW46aixjZWxsUGFkZGluZzpudWxsLGNlbGxTcGFjaW5nOm51bGwsY2hhcjpudWxsLGNoYXJPZmY6bnVsbCxjbGFzc0lkOm51bGwsY2xlYXI6bnVsbCxjb2RlOm51bGwsY29kZUJhc2U6bnVsbCxjb2RlVHlwZTpudWxsLGNvbG9yOm51bGwsY29tcGFjdDphZSxkZWNsYXJlOmFlLGV2ZW50Om51bGwsZmFjZTpudWxsLGZyYW1lOm51bGwsZnJhbWVCb3JkZXI6bnVsbCxoU3BhY2U6aixsZWZ0TWFyZ2luOmosbGluazpudWxsLGxvbmdEZXNjOm51bGwsbG93U3JjOm51bGwsbWFyZ2luSGVpZ2h0OmosbWFyZ2luV2lkdGg6aixub1Jlc2l6ZTphZSxub0hyZWY6YWUsbm9TaGFkZTphZSxub1dyYXA6YWUsb2JqZWN0Om51bGwscHJvZmlsZTpudWxsLHByb21wdDpudWxsLHJldjpudWxsLHJpZ2h0TWFyZ2luOmoscnVsZXM6bnVsbCxzY2hlbWU6bnVsbCxzY3JvbGxpbmc6SmUsc3RhbmRieTpudWxsLHN1bW1hcnk6bnVsbCx0ZXh0Om51bGwsdG9wTWFyZ2luOmosdmFsdWVUeXBlOm51bGwsdmVyc2lvbjpudWxsLHZBbGlnbjpudWxsLHZMaW5rOm51bGwsdlNwYWNlOmosYWxsb3dUcmFuc3BhcmVuY3k6bnVsbCxhdXRvQ29ycmVjdDpudWxsLGF1dG9TYXZlOm51bGwsY3JlZGVudGlhbGxlc3M6YWUsZGlzYWJsZVBpY3R1cmVJblBpY3R1cmU6YWUsZGlzYWJsZVJlbW90ZVBsYXliYWNrOmFlLGV4cG9ydFBhcnRzOmpuLHBhcnQ6UGUscHJlZml4Om51bGwscHJvcGVydHk6bnVsbCxyZXN1bHRzOmosc2VjdXJpdHk6bnVsbCx1bnNlbGVjdGFibGU6bnVsbH0sc3BhY2U6Imh0bWwiLHRyYW5zZm9ybTpBaH0pO3ZhciBIRT12cih7YXR0cmlidXRlczp7YWNjZW50SGVpZ2h0OiJhY2NlbnQtaGVpZ2h0IixhbGlnbm1lbnRCYXNlbGluZToiYWxpZ25tZW50LWJhc2VsaW5lIixhcmFiaWNGb3JtOiJhcmFiaWMtZm9ybSIsYmFzZWxpbmVTaGlmdDoiYmFzZWxpbmUtc2hpZnQiLGNhcEhlaWdodDoiY2FwLWhlaWdodCIsY2xhc3NOYW1lOiJjbGFzcyIsY2xpcFBhdGg6ImNsaXAtcGF0aCIsY2xpcFJ1bGU6ImNsaXAtcnVsZSIsY29sb3JJbnRlcnBvbGF0aW9uOiJjb2xvci1pbnRlcnBvbGF0aW9uIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLGNvbG9yUHJvZmlsZToiY29sb3ItcHJvZmlsZSIsY29sb3JSZW5kZXJpbmc6ImNvbG9yLXJlbmRlcmluZyIsY3Jvc3NPcmlnaW46ImNyb3Nzb3JpZ2luIixkYXRhVHlwZToiZGF0YXR5cGUiLGRvbWluYW50QmFzZWxpbmU6ImRvbWluYW50LWJhc2VsaW5lIixlbmFibGVCYWNrZ3JvdW5kOiJlbmFibGUtYmFja2dyb3VuZCIsZmlsbE9wYWNpdHk6ImZpbGwtb3BhY2l0eSIsZmlsbFJ1bGU6ImZpbGwtcnVsZSIsZmxvb2RDb2xvcjoiZmxvb2QtY29sb3IiLGZsb29kT3BhY2l0eToiZmxvb2Qtb3BhY2l0eSIsZm9udEZhbWlseToiZm9udC1mYW1pbHkiLGZvbnRTaXplOiJmb250LXNpemUiLGZvbnRTaXplQWRqdXN0OiJmb250LXNpemUtYWRqdXN0Iixmb250U3RyZXRjaDoiZm9udC1zdHJldGNoIixmb250U3R5bGU6ImZvbnQtc3R5bGUiLGZvbnRWYXJpYW50OiJmb250LXZhcmlhbnQiLGZvbnRXZWlnaHQ6ImZvbnQtd2VpZ2h0IixnbHlwaE5hbWU6ImdseXBoLW5hbWUiLGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOiJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIixnbHlwaE9yaWVudGF0aW9uVmVydGljYWw6ImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIixocmVmTGFuZzoiaHJlZmxhbmciLGhvcml6QWR2WDoiaG9yaXotYWR2LXgiLGhvcml6T3JpZ2luWDoiaG9yaXotb3JpZ2luLXgiLGhvcml6T3JpZ2luWToiaG9yaXotb3JpZ2luLXkiLGltYWdlUmVuZGVyaW5nOiJpbWFnZS1yZW5kZXJpbmciLGxldHRlclNwYWNpbmc6ImxldHRlci1zcGFjaW5nIixsaWdodGluZ0NvbG9yOiJsaWdodGluZy1jb2xvciIsbWFya2VyRW5kOiJtYXJrZXItZW5kIixtYXJrZXJNaWQ6Im1hcmtlci1taWQiLG1hcmtlclN0YXJ0OiJtYXJrZXItc3RhcnQiLG1hc2tUeXBlOiJtYXNrLXR5cGUiLG5hdkRvd246Im5hdi1kb3duIixuYXZEb3duTGVmdDoibmF2LWRvd24tbGVmdCIsbmF2RG93blJpZ2h0OiJuYXYtZG93bi1yaWdodCIsbmF2TGVmdDoibmF2LWxlZnQiLG5hdk5leHQ6Im5hdi1uZXh0IixuYXZQcmV2OiJuYXYtcHJldiIsbmF2UmlnaHQ6Im5hdi1yaWdodCIsbmF2VXA6Im5hdi11cCIsbmF2VXBMZWZ0OiJuYXYtdXAtbGVmdCIsbmF2VXBSaWdodDoibmF2LXVwLXJpZ2h0IixvbkFib3J0OiJvbmFib3J0IixvbkFjdGl2YXRlOiJvbmFjdGl2YXRlIixvbkFmdGVyUHJpbnQ6Im9uYWZ0ZXJwcmludCIsb25CZWZvcmVQcmludDoib25iZWZvcmVwcmludCIsb25CZWdpbjoib25iZWdpbiIsb25DYW5jZWw6Im9uY2FuY2VsIixvbkNhblBsYXk6Im9uY2FucGxheSIsb25DYW5QbGF5VGhyb3VnaDoib25jYW5wbGF5dGhyb3VnaCIsb25DaGFuZ2U6Im9uY2hhbmdlIixvbkNsaWNrOiJvbmNsaWNrIixvbkNsb3NlOiJvbmNsb3NlIixvbkNvcHk6Im9uY29weSIsb25DdWVDaGFuZ2U6Im9uY3VlY2hhbmdlIixvbkN1dDoib25jdXQiLG9uRGJsQ2xpY2s6Im9uZGJsY2xpY2siLG9uRHJhZzoib25kcmFnIixvbkRyYWdFbmQ6Im9uZHJhZ2VuZCIsb25EcmFnRW50ZXI6Im9uZHJhZ2VudGVyIixvbkRyYWdFeGl0OiJvbmRyYWdleGl0IixvbkRyYWdMZWF2ZToib25kcmFnbGVhdmUiLG9uRHJhZ092ZXI6Im9uZHJhZ292ZXIiLG9uRHJhZ1N0YXJ0OiJvbmRyYWdzdGFydCIsb25Ecm9wOiJvbmRyb3AiLG9uRHVyYXRpb25DaGFuZ2U6Im9uZHVyYXRpb25jaGFuZ2UiLG9uRW1wdGllZDoib25lbXB0aWVkIixvbkVuZDoib25lbmQiLG9uRW5kZWQ6Im9uZW5kZWQiLG9uRXJyb3I6Im9uZXJyb3IiLG9uRm9jdXM6Im9uZm9jdXMiLG9uRm9jdXNJbjoib25mb2N1c2luIixvbkZvY3VzT3V0OiJvbmZvY3Vzb3V0Iixvbkhhc2hDaGFuZ2U6Im9uaGFzaGNoYW5nZSIsb25JbnB1dDoib25pbnB1dCIsb25JbnZhbGlkOiJvbmludmFsaWQiLG9uS2V5RG93bjoib25rZXlkb3duIixvbktleVByZXNzOiJvbmtleXByZXNzIixvbktleVVwOiJvbmtleXVwIixvbkxvYWQ6Im9ubG9hZCIsb25Mb2FkZWREYXRhOiJvbmxvYWRlZGRhdGEiLG9uTG9hZGVkTWV0YWRhdGE6Im9ubG9hZGVkbWV0YWRhdGEiLG9uTG9hZFN0YXJ0OiJvbmxvYWRzdGFydCIsb25NZXNzYWdlOiJvbm1lc3NhZ2UiLG9uTW91c2VEb3duOiJvbm1vdXNlZG93biIsb25Nb3VzZUVudGVyOiJvbm1vdXNlZW50ZXIiLG9uTW91c2VMZWF2ZToib25tb3VzZWxlYXZlIixvbk1vdXNlTW92ZToib25tb3VzZW1vdmUiLG9uTW91c2VPdXQ6Im9ubW91c2VvdXQiLG9uTW91c2VPdmVyOiJvbm1vdXNlb3ZlciIsb25Nb3VzZVVwOiJvbm1vdXNldXAiLG9uTW91c2VXaGVlbDoib25tb3VzZXdoZWVsIixvbk9mZmxpbmU6Im9ub2ZmbGluZSIsb25PbmxpbmU6Im9ub25saW5lIixvblBhZ2VIaWRlOiJvbnBhZ2VoaWRlIixvblBhZ2VTaG93OiJvbnBhZ2VzaG93IixvblBhc3RlOiJvbnBhc3RlIixvblBhdXNlOiJvbnBhdXNlIixvblBsYXk6Im9ucGxheSIsb25QbGF5aW5nOiJvbnBsYXlpbmciLG9uUG9wU3RhdGU6Im9ucG9wc3RhdGUiLG9uUHJvZ3Jlc3M6Im9ucHJvZ3Jlc3MiLG9uUmF0ZUNoYW5nZToib25yYXRlY2hhbmdlIixvblJlcGVhdDoib25yZXBlYXQiLG9uUmVzZXQ6Im9ucmVzZXQiLG9uUmVzaXplOiJvbnJlc2l6ZSIsb25TY3JvbGw6Im9uc2Nyb2xsIixvblNlZWtlZDoib25zZWVrZWQiLG9uU2Vla2luZzoib25zZWVraW5nIixvblNlbGVjdDoib25zZWxlY3QiLG9uU2hvdzoib25zaG93IixvblN0YWxsZWQ6Im9uc3RhbGxlZCIsb25TdG9yYWdlOiJvbnN0b3JhZ2UiLG9uU3VibWl0OiJvbnN1Ym1pdCIsb25TdXNwZW5kOiJvbnN1c3BlbmQiLG9uVGltZVVwZGF0ZToib250aW1ldXBkYXRlIixvblRvZ2dsZToib250b2dnbGUiLG9uVW5sb2FkOiJvbnVubG9hZCIsb25Wb2x1bWVDaGFuZ2U6Im9udm9sdW1lY2hhbmdlIixvbldhaXRpbmc6Im9ud2FpdGluZyIsb25ab29tOiJvbnpvb20iLG92ZXJsaW5lUG9zaXRpb246Im92ZXJsaW5lLXBvc2l0aW9uIixvdmVybGluZVRoaWNrbmVzczoib3ZlcmxpbmUtdGhpY2tuZXNzIixwYWludE9yZGVyOiJwYWludC1vcmRlciIscGFub3NlMToicGFub3NlLTEiLHBvaW50ZXJFdmVudHM6InBvaW50ZXItZXZlbnRzIixyZWZlcnJlclBvbGljeToicmVmZXJyZXJwb2xpY3kiLHJlbmRlcmluZ0ludGVudDoicmVuZGVyaW5nLWludGVudCIsc2hhcGVSZW5kZXJpbmc6InNoYXBlLXJlbmRlcmluZyIsc3RvcENvbG9yOiJzdG9wLWNvbG9yIixzdG9wT3BhY2l0eToic3RvcC1vcGFjaXR5IixzdHJpa2V0aHJvdWdoUG9zaXRpb246InN0cmlrZXRocm91Z2gtcG9zaXRpb24iLHN0cmlrZXRocm91Z2hUaGlja25lc3M6InN0cmlrZXRocm91Z2gtdGhpY2tuZXNzIixzdHJva2VEYXNoQXJyYXk6InN0cm9rZS1kYXNoYXJyYXkiLHN0cm9rZURhc2hPZmZzZXQ6InN0cm9rZS1kYXNob2Zmc2V0IixzdHJva2VMaW5lQ2FwOiJzdHJva2UtbGluZWNhcCIsc3Ryb2tlTGluZUpvaW46InN0cm9rZS1saW5lam9pbiIsc3Ryb2tlTWl0ZXJMaW1pdDoic3Ryb2tlLW1pdGVybGltaXQiLHN0cm9rZU9wYWNpdHk6InN0cm9rZS1vcGFjaXR5IixzdHJva2VXaWR0aDoic3Ryb2tlLXdpZHRoIix0YWJJbmRleDoidGFiaW5kZXgiLHRleHRBbmNob3I6InRleHQtYW5jaG9yIix0ZXh0RGVjb3JhdGlvbjoidGV4dC1kZWNvcmF0aW9uIix0ZXh0UmVuZGVyaW5nOiJ0ZXh0LXJlbmRlcmluZyIsdHJhbnNmb3JtT3JpZ2luOiJ0cmFuc2Zvcm0tb3JpZ2luIix0eXBlT2Y6InR5cGVvZiIsdW5kZXJsaW5lUG9zaXRpb246InVuZGVybGluZS1wb3NpdGlvbiIsdW5kZXJsaW5lVGhpY2tuZXNzOiJ1bmRlcmxpbmUtdGhpY2tuZXNzIix1bmljb2RlQmlkaToidW5pY29kZS1iaWRpIix1bmljb2RlUmFuZ2U6InVuaWNvZGUtcmFuZ2UiLHVuaXRzUGVyRW06InVuaXRzLXBlci1lbSIsdkFscGhhYmV0aWM6InYtYWxwaGFiZXRpYyIsdkhhbmdpbmc6InYtaGFuZ2luZyIsdklkZW9ncmFwaGljOiJ2LWlkZW9ncmFwaGljIix2TWF0aGVtYXRpY2FsOiJ2LW1hdGhlbWF0aWNhbCIsdmVjdG9yRWZmZWN0OiJ2ZWN0b3ItZWZmZWN0Iix2ZXJ0QWR2WToidmVydC1hZHYteSIsdmVydE9yaWdpblg6InZlcnQtb3JpZ2luLXgiLHZlcnRPcmlnaW5ZOiJ2ZXJ0LW9yaWdpbi15Iix3b3JkU3BhY2luZzoid29yZC1zcGFjaW5nIix3cml0aW5nTW9kZToid3JpdGluZy1tb2RlIix4SGVpZ2h0OiJ4LWhlaWdodCIscGxheWJhY2tPcmRlcjoicGxheWJhY2tvcmRlciIsdGltZWxpbmVCZWdpbjoidGltZWxpbmViZWdpbiJ9LHByb3BlcnRpZXM6e2Fib3V0OnF0LGFjY2VudEhlaWdodDpqLGFjY3VtdWxhdGU6bnVsbCxhZGRpdGl2ZTpudWxsLGFsaWdubWVudEJhc2VsaW5lOm51bGwsYWxwaGFiZXRpYzpqLGFtcGxpdHVkZTpqLGFyYWJpY0Zvcm06bnVsbCxhc2NlbnQ6aixhdHRyaWJ1dGVOYW1lOm51bGwsYXR0cmlidXRlVHlwZTpudWxsLGF6aW11dGg6aixiYW5kd2lkdGg6bnVsbCxiYXNlbGluZVNoaWZ0Om51bGwsYmFzZUZyZXF1ZW5jeTpudWxsLGJhc2VQcm9maWxlOm51bGwsYmJveDpudWxsLGJlZ2luOm51bGwsYmlhczpqLGJ5Om51bGwsY2FsY01vZGU6bnVsbCxjYXBIZWlnaHQ6aixjbGFzc05hbWU6UGUsY2xpcDpudWxsLGNsaXBQYXRoOm51bGwsY2xpcFBhdGhVbml0czpudWxsLGNsaXBSdWxlOm51bGwsY29sb3I6bnVsbCxjb2xvckludGVycG9sYXRpb246bnVsbCxjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOm51bGwsY29sb3JQcm9maWxlOm51bGwsY29sb3JSZW5kZXJpbmc6bnVsbCxjb250ZW50Om51bGwsY29udGVudFNjcmlwdFR5cGU6bnVsbCxjb250ZW50U3R5bGVUeXBlOm51bGwsY3Jvc3NPcmlnaW46bnVsbCxjdXJzb3I6bnVsbCxjeDpudWxsLGN5Om51bGwsZDpudWxsLGRhdGFUeXBlOm51bGwsZGVmYXVsdEFjdGlvbjpudWxsLGRlc2NlbnQ6aixkaWZmdXNlQ29uc3RhbnQ6aixkaXJlY3Rpb246bnVsbCxkaXNwbGF5Om51bGwsZHVyOm51bGwsZGl2aXNvcjpqLGRvbWluYW50QmFzZWxpbmU6bnVsbCxkb3dubG9hZDphZSxkeDpudWxsLGR5Om51bGwsZWRnZU1vZGU6bnVsbCxlZGl0YWJsZTpudWxsLGVsZXZhdGlvbjpqLGVuYWJsZUJhY2tncm91bmQ6bnVsbCxlbmQ6bnVsbCxldmVudDpudWxsLGV4cG9uZW50OmosZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDpudWxsLGZpbGw6bnVsbCxmaWxsT3BhY2l0eTpqLGZpbGxSdWxlOm51bGwsZmlsdGVyOm51bGwsZmlsdGVyUmVzOm51bGwsZmlsdGVyVW5pdHM6bnVsbCxmbG9vZENvbG9yOm51bGwsZmxvb2RPcGFjaXR5Om51bGwsZm9jdXNhYmxlOm51bGwsZm9jdXNIaWdobGlnaHQ6bnVsbCxmb250RmFtaWx5Om51bGwsZm9udFNpemU6bnVsbCxmb250U2l6ZUFkanVzdDpudWxsLGZvbnRTdHJldGNoOm51bGwsZm9udFN0eWxlOm51bGwsZm9udFZhcmlhbnQ6bnVsbCxmb250V2VpZ2h0Om51bGwsZm9ybWF0Om51bGwsZnI6bnVsbCxmcm9tOm51bGwsZng6bnVsbCxmeTpudWxsLGcxOmpuLGcyOmpuLGdseXBoTmFtZTpqbixnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDpudWxsLGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbDpudWxsLGdseXBoUmVmOm51bGwsZ3JhZGllbnRUcmFuc2Zvcm06bnVsbCxncmFkaWVudFVuaXRzOm51bGwsaGFuZGxlcjpudWxsLGhhbmdpbmc6aixoYXRjaENvbnRlbnRVbml0czpudWxsLGhhdGNoVW5pdHM6bnVsbCxoZWlnaHQ6bnVsbCxocmVmOm51bGwsaHJlZkxhbmc6bnVsbCxob3JpekFkdlg6aixob3Jpek9yaWdpblg6aixob3Jpek9yaWdpblk6aixpZDpudWxsLGlkZW9ncmFwaGljOmosaW1hZ2VSZW5kZXJpbmc6bnVsbCxpbml0aWFsVmlzaWJpbGl0eTpudWxsLGluOm51bGwsaW4yOm51bGwsaW50ZXJjZXB0OmosazpqLGsxOmosazI6aixrMzpqLGs0Omosa2VybmVsTWF0cml4OnF0LGtlcm5lbFVuaXRMZW5ndGg6bnVsbCxrZXlQb2ludHM6bnVsbCxrZXlTcGxpbmVzOm51bGwsa2V5VGltZXM6bnVsbCxrZXJuaW5nOm51bGwsbGFuZzpudWxsLGxlbmd0aEFkanVzdDpudWxsLGxldHRlclNwYWNpbmc6bnVsbCxsaWdodGluZ0NvbG9yOm51bGwsbGltaXRpbmdDb25lQW5nbGU6aixsb2NhbDpudWxsLG1hcmtlckVuZDpudWxsLG1hcmtlck1pZDpudWxsLG1hcmtlclN0YXJ0Om51bGwsbWFya2VySGVpZ2h0Om51bGwsbWFya2VyVW5pdHM6bnVsbCxtYXJrZXJXaWR0aDpudWxsLG1hc2s6bnVsbCxtYXNrQ29udGVudFVuaXRzOm51bGwsbWFza1R5cGU6bnVsbCxtYXNrVW5pdHM6bnVsbCxtYXRoZW1hdGljYWw6bnVsbCxtYXg6bnVsbCxtZWRpYTpudWxsLG1lZGlhQ2hhcmFjdGVyRW5jb2Rpbmc6bnVsbCxtZWRpYUNvbnRlbnRFbmNvZGluZ3M6bnVsbCxtZWRpYVNpemU6aixtZWRpYVRpbWU6bnVsbCxtZXRob2Q6bnVsbCxtaW46bnVsbCxtb2RlOm51bGwsbmFtZTpudWxsLG5hdkRvd246bnVsbCxuYXZEb3duTGVmdDpudWxsLG5hdkRvd25SaWdodDpudWxsLG5hdkxlZnQ6bnVsbCxuYXZOZXh0Om51bGwsbmF2UHJldjpudWxsLG5hdlJpZ2h0Om51bGwsbmF2VXA6bnVsbCxuYXZVcExlZnQ6bnVsbCxuYXZVcFJpZ2h0Om51bGwsbnVtT2N0YXZlczpudWxsLG9ic2VydmVyOm51bGwsb2Zmc2V0Om51bGwsb25BYm9ydDpudWxsLG9uQWN0aXZhdGU6bnVsbCxvbkFmdGVyUHJpbnQ6bnVsbCxvbkJlZm9yZVByaW50Om51bGwsb25CZWdpbjpudWxsLG9uQ2FuY2VsOm51bGwsb25DYW5QbGF5Om51bGwsb25DYW5QbGF5VGhyb3VnaDpudWxsLG9uQ2hhbmdlOm51bGwsb25DbGljazpudWxsLG9uQ2xvc2U6bnVsbCxvbkNvcHk6bnVsbCxvbkN1ZUNoYW5nZTpudWxsLG9uQ3V0Om51bGwsb25EYmxDbGljazpudWxsLG9uRHJhZzpudWxsLG9uRHJhZ0VuZDpudWxsLG9uRHJhZ0VudGVyOm51bGwsb25EcmFnRXhpdDpudWxsLG9uRHJhZ0xlYXZlOm51bGwsb25EcmFnT3ZlcjpudWxsLG9uRHJhZ1N0YXJ0Om51bGwsb25Ecm9wOm51bGwsb25EdXJhdGlvbkNoYW5nZTpudWxsLG9uRW1wdGllZDpudWxsLG9uRW5kOm51bGwsb25FbmRlZDpudWxsLG9uRXJyb3I6bnVsbCxvbkZvY3VzOm51bGwsb25Gb2N1c0luOm51bGwsb25Gb2N1c091dDpudWxsLG9uSGFzaENoYW5nZTpudWxsLG9uSW5wdXQ6bnVsbCxvbkludmFsaWQ6bnVsbCxvbktleURvd246bnVsbCxvbktleVByZXNzOm51bGwsb25LZXlVcDpudWxsLG9uTG9hZDpudWxsLG9uTG9hZGVkRGF0YTpudWxsLG9uTG9hZGVkTWV0YWRhdGE6bnVsbCxvbkxvYWRTdGFydDpudWxsLG9uTWVzc2FnZTpudWxsLG9uTW91c2VEb3duOm51bGwsb25Nb3VzZUVudGVyOm51bGwsb25Nb3VzZUxlYXZlOm51bGwsb25Nb3VzZU1vdmU6bnVsbCxvbk1vdXNlT3V0Om51bGwsb25Nb3VzZU92ZXI6bnVsbCxvbk1vdXNlVXA6bnVsbCxvbk1vdXNlV2hlZWw6bnVsbCxvbk9mZmxpbmU6bnVsbCxvbk9ubGluZTpudWxsLG9uUGFnZUhpZGU6bnVsbCxvblBhZ2VTaG93Om51bGwsb25QYXN0ZTpudWxsLG9uUGF1c2U6bnVsbCxvblBsYXk6bnVsbCxvblBsYXlpbmc6bnVsbCxvblBvcFN0YXRlOm51bGwsb25Qcm9ncmVzczpudWxsLG9uUmF0ZUNoYW5nZTpudWxsLG9uUmVwZWF0Om51bGwsb25SZXNldDpudWxsLG9uUmVzaXplOm51bGwsb25TY3JvbGw6bnVsbCxvblNlZWtlZDpudWxsLG9uU2Vla2luZzpudWxsLG9uU2VsZWN0Om51bGwsb25TaG93Om51bGwsb25TdGFsbGVkOm51bGwsb25TdG9yYWdlOm51bGwsb25TdWJtaXQ6bnVsbCxvblN1c3BlbmQ6bnVsbCxvblRpbWVVcGRhdGU6bnVsbCxvblRvZ2dsZTpudWxsLG9uVW5sb2FkOm51bGwsb25Wb2x1bWVDaGFuZ2U6bnVsbCxvbldhaXRpbmc6bnVsbCxvblpvb206bnVsbCxvcGFjaXR5Om51bGwsb3BlcmF0b3I6bnVsbCxvcmRlcjpudWxsLG9yaWVudDpudWxsLG9yaWVudGF0aW9uOm51bGwsb3JpZ2luOm51bGwsb3ZlcmZsb3c6bnVsbCxvdmVybGF5Om51bGwsb3ZlcmxpbmVQb3NpdGlvbjpqLG92ZXJsaW5lVGhpY2tuZXNzOmoscGFpbnRPcmRlcjpudWxsLHBhbm9zZTE6bnVsbCxwYXRoOm51bGwscGF0aExlbmd0aDpqLHBhdHRlcm5Db250ZW50VW5pdHM6bnVsbCxwYXR0ZXJuVHJhbnNmb3JtOm51bGwscGF0dGVyblVuaXRzOm51bGwscGhhc2U6bnVsbCxwaW5nOlBlLHBpdGNoOm51bGwscGxheWJhY2tPcmRlcjpudWxsLHBvaW50ZXJFdmVudHM6bnVsbCxwb2ludHM6bnVsbCxwb2ludHNBdFg6aixwb2ludHNBdFk6aixwb2ludHNBdFo6aixwcmVzZXJ2ZUFscGhhOm51bGwscHJlc2VydmVBc3BlY3RSYXRpbzpudWxsLHByaW1pdGl2ZVVuaXRzOm51bGwscHJvcGFnYXRlOm51bGwscHJvcGVydHk6cXQscjpudWxsLHJhZGl1czpudWxsLHJlZmVycmVyUG9saWN5Om51bGwscmVmWDpudWxsLHJlZlk6bnVsbCxyZWw6cXQscmV2OnF0LHJlbmRlcmluZ0ludGVudDpudWxsLHJlcGVhdENvdW50Om51bGwscmVwZWF0RHVyOm51bGwscmVxdWlyZWRFeHRlbnNpb25zOnF0LHJlcXVpcmVkRmVhdHVyZXM6cXQscmVxdWlyZWRGb250czpxdCxyZXF1aXJlZEZvcm1hdHM6cXQscmVzb3VyY2U6bnVsbCxyZXN0YXJ0Om51bGwscmVzdWx0Om51bGwscm90YXRlOm51bGwscng6bnVsbCxyeTpudWxsLHNjYWxlOm51bGwsc2VlZDpudWxsLHNoYXBlUmVuZGVyaW5nOm51bGwsc2lkZTpudWxsLHNsb3BlOm51bGwsc25hcHNob3RUaW1lOm51bGwsc3BlY3VsYXJDb25zdGFudDpqLHNwZWN1bGFyRXhwb25lbnQ6aixzcHJlYWRNZXRob2Q6bnVsbCxzcGFjaW5nOm51bGwsc3RhcnRPZmZzZXQ6bnVsbCxzdGREZXZpYXRpb246bnVsbCxzdGVtaDpudWxsLHN0ZW12Om51bGwsc3RpdGNoVGlsZXM6bnVsbCxzdG9wQ29sb3I6bnVsbCxzdG9wT3BhY2l0eTpudWxsLHN0cmlrZXRocm91Z2hQb3NpdGlvbjpqLHN0cmlrZXRocm91Z2hUaGlja25lc3M6aixzdHJpbmc6bnVsbCxzdHJva2U6bnVsbCxzdHJva2VEYXNoQXJyYXk6cXQsc3Ryb2tlRGFzaE9mZnNldDpudWxsLHN0cm9rZUxpbmVDYXA6bnVsbCxzdHJva2VMaW5lSm9pbjpudWxsLHN0cm9rZU1pdGVyTGltaXQ6aixzdHJva2VPcGFjaXR5Omosc3Ryb2tlV2lkdGg6bnVsbCxzdHlsZTpudWxsLHN1cmZhY2VTY2FsZTpqLHN5bmNCZWhhdmlvcjpudWxsLHN5bmNCZWhhdmlvckRlZmF1bHQ6bnVsbCxzeW5jTWFzdGVyOm51bGwsc3luY1RvbGVyYW5jZTpudWxsLHN5bmNUb2xlcmFuY2VEZWZhdWx0Om51bGwsc3lzdGVtTGFuZ3VhZ2U6cXQsdGFiSW5kZXg6aix0YWJsZVZhbHVlczpudWxsLHRhcmdldDpudWxsLHRhcmdldFg6aix0YXJnZXRZOmosdGV4dEFuY2hvcjpudWxsLHRleHREZWNvcmF0aW9uOm51bGwsdGV4dFJlbmRlcmluZzpudWxsLHRleHRMZW5ndGg6bnVsbCx0aW1lbGluZUJlZ2luOm51bGwsdGl0bGU6bnVsbCx0cmFuc2Zvcm1CZWhhdmlvcjpudWxsLHR5cGU6bnVsbCx0eXBlT2Y6cXQsdG86bnVsbCx0cmFuc2Zvcm06bnVsbCx0cmFuc2Zvcm1PcmlnaW46bnVsbCx1MTpudWxsLHUyOm51bGwsdW5kZXJsaW5lUG9zaXRpb246aix1bmRlcmxpbmVUaGlja25lc3M6aix1bmljb2RlOm51bGwsdW5pY29kZUJpZGk6bnVsbCx1bmljb2RlUmFuZ2U6bnVsbCx1bml0c1BlckVtOmosdmFsdWVzOm51bGwsdkFscGhhYmV0aWM6aix2TWF0aGVtYXRpY2FsOmosdmVjdG9yRWZmZWN0Om51bGwsdkhhbmdpbmc6aix2SWRlb2dyYXBoaWM6aix2ZXJzaW9uOm51bGwsdmVydEFkdlk6aix2ZXJ0T3JpZ2luWDpqLHZlcnRPcmlnaW5ZOmosdmlld0JveDpudWxsLHZpZXdUYXJnZXQ6bnVsbCx2aXNpYmlsaXR5Om51bGwsd2lkdGg6bnVsbCx3aWR0aHM6bnVsbCx3b3JkU3BhY2luZzpudWxsLHdyaXRpbmdNb2RlOm51bGwseDpudWxsLHgxOm51bGwseDI6bnVsbCx4Q2hhbm5lbFNlbGVjdG9yOm51bGwseEhlaWdodDpqLHk6bnVsbCx5MTpudWxsLHkyOm51bGwseUNoYW5uZWxTZWxlY3RvcjpudWxsLHo6bnVsbCx6b29tQW5kUGFuOm51bGx9LHNwYWNlOiJzdmciLHRyYW5zZm9ybTpGaH0pO3ZhciBQeT12cih7cHJvcGVydGllczp7eExpbmtBY3R1YXRlOm51bGwseExpbmtBcmNSb2xlOm51bGwseExpbmtIcmVmOm51bGwseExpbmtSb2xlOm51bGwseExpbmtTaG93Om51bGwseExpbmtUaXRsZTpudWxsLHhMaW5rVHlwZTpudWxsfSxzcGFjZToieGxpbmsiLHRyYW5zZm9ybSh0LGUpe3JldHVybiJ4bGluazoiK2Uuc2xpY2UoNSkudG9Mb3dlckNhc2UoKX19KTt2YXIgTnk9dnIoe2F0dHJpYnV0ZXM6e3htbG5zeGxpbms6InhtbG5zOnhsaW5rIn0scHJvcGVydGllczp7eG1sbnNYTGluazpudWxsLHhtbG5zOm51bGx9LHNwYWNlOiJ4bWxucyIsdHJhbnNmb3JtOkFofSk7dmFyIFJ5PXZyKHtwcm9wZXJ0aWVzOnt4bWxCYXNlOm51bGwseG1sTGFuZzpudWxsLHhtbFNwYWNlOm51bGx9LHNwYWNlOiJ4bWwiLHRyYW5zZm9ybSh0LGUpe3JldHVybiJ4bWw6IitlLnNsaWNlKDMpLnRvTG93ZXJDYXNlKCl9fSk7dmFyIFBGPS9bQS1aXS9nLGpFPS8tW2Etel0vZyxORj0vXmRhdGFbLVx3LjpdKyQvaTtmdW5jdGlvbiBMeSh0LGUpe2xldCByPXNhKGUpLG49ZSxpPWd0O2lmKHIgaW4gdC5ub3JtYWwpcmV0dXJuIHQucHJvcGVydHlbdC5ub3JtYWxbcl1dO2lmKHIubGVuZ3RoPjQmJnIuc2xpY2UoMCw0KT09PSJkYXRhIiYmTkYudGVzdChlKSl7aWYoZS5jaGFyQXQoNCk9PT0iLSIpe2xldCBzPWUuc2xpY2UoNSkucmVwbGFjZShqRSxMRik7bj0iZGF0YSIrcy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStzLnNsaWNlKDEpfWVsc2V7bGV0IHM9ZS5zbGljZSg0KTtpZighakUudGVzdChzKSl7bGV0IGE9cy5yZXBsYWNlKFBGLFJGKTthLmNoYXJBdCgwKSE9PSItIiYmKGE9Ii0iK2EpLGU9ImRhdGEiK2F9fWk9TW99cmV0dXJuIG5ldyBpKG4sZSl9byhMeSwiZmluZCIpO2Z1bmN0aW9uIFJGKHQpe3JldHVybiItIit0LnRvTG93ZXJDYXNlKCl9byhSRiwia2ViYWIiKTtmdW5jdGlvbiBMRih0KXtyZXR1cm4gdC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKX1vKExGLCJjYW1lbGNhc2UiKTt2YXIgV0U9T3koW195LHpFLFB5LE55LFJ5XSwiaHRtbCIpLCRoPU95KFtfeSxIRSxQeSxOeSxSeV0sInN2ZyIpO3ZhciBxRT17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBCaCh0LGUpe2xldCByPWV8fHt9O2Z1bmN0aW9uIG4oaSwuLi5zKXtsZXQgYT1uLmludmFsaWQsbD1uLmhhbmRsZXJzO2lmKGkmJnFFLmNhbGwoaSx0KSl7bGV0IGM9U3RyaW5nKGlbdF0pO2E9cUUuY2FsbChsLGMpP2xbY106bi51bmtub3dufWlmKGEpcmV0dXJuIGEuY2FsbCh0aGlzLGksLi4ucyl9cmV0dXJuIG8obiwib25lIiksbi5oYW5kbGVycz1yLmhhbmRsZXJzfHx7fSxuLmludmFsaWQ9ci5pbnZhbGlkLG4udW5rbm93bj1yLnVua25vd24sbn1vKEJoLCJ6d2l0Y2giKTt2YXIgRkY9L1siJic8PmBdL2csQUY9L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLCRGPS9bXHgwMS1cdFx2XGZceDBFLVx4MUZceDdGXHg4MVx4OERceDhGXHg5MFx4OURceEEwLVx1RkZGRl0vZyxCRj0vW3xcXHt9KClbXF1eJCsqPy5dL2csVUU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRnkodCxlKXtpZih0PXQucmVwbGFjZShlLnN1YnNldD96RihlLnN1YnNldCk6RkYsbiksZS5zdWJzZXR8fGUuZXNjYXBlT25seSlyZXR1cm4gdDtyZXR1cm4gdC5yZXBsYWNlKEFGLHIpLnJlcGxhY2UoJEYsbik7ZnVuY3Rpb24gcihpLHMsYSl7cmV0dXJuIGUuZm9ybWF0KChpLmNoYXJDb2RlQXQoMCktNTUyOTYpKjEwMjQraS5jaGFyQ29kZUF0KDEpLTU2MzIwKzY1NTM2LGEuY2hhckNvZGVBdChzKzIpLGUpfWZ1bmN0aW9uIG4oaSxzLGEpe3JldHVybiBlLmZvcm1hdChpLmNoYXJDb2RlQXQoMCksYS5jaGFyQ29kZUF0KHMrMSksZSl9fW8oRnksImNvcmUiKTtmdW5jdGlvbiB6Rih0KXtsZXQgZT1VRS5nZXQodCk7cmV0dXJuIGV8fChlPUhGKHQpLFVFLnNldCh0LGUpKSxlfW8oekYsImNoYXJhY3RlcnNUb0V4cHJlc3Npb25DYWNoZWQiKTtmdW5jdGlvbiBIRih0KXtsZXQgZT1bXSxyPS0xO2Zvcig7KytyPHQubGVuZ3RoOyllLnB1c2godFtyXS5yZXBsYWNlKEJGLCJcXCQmIikpO3JldHVybiBuZXcgUmVnRXhwKCIoPzoiK2Uuam9pbigifCIpKyIpIiwiZyIpfW8oSEYsImNoYXJhY3RlcnNUb0V4cHJlc3Npb24iKTt2YXIgakY9L1tcZEEtRmEtZl0vO2Z1bmN0aW9uIFZFKHQsZSxyKXtsZXQgbj0iJiN4Iit0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiByJiZlJiYhakYudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKT9uOm4rIjsifW8oVkUsInRvSGV4YWRlY2ltYWwiKTt2YXIgV0Y9L1xkLztmdW5jdGlvbiBZRSh0LGUscil7bGV0IG49IiYjIitTdHJpbmcodCk7cmV0dXJuIHImJmUmJiFXRi50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpP246bisiOyJ9byhZRSwidG9EZWNpbWFsIik7dmFyIEdFPVsiQUVsaWciLCJBTVAiLCJBYWN1dGUiLCJBY2lyYyIsIkFncmF2ZSIsIkFyaW5nIiwiQXRpbGRlIiwiQXVtbCIsIkNPUFkiLCJDY2VkaWwiLCJFVEgiLCJFYWN1dGUiLCJFY2lyYyIsIkVncmF2ZSIsIkV1bWwiLCJHVCIsIklhY3V0ZSIsIkljaXJjIiwiSWdyYXZlIiwiSXVtbCIsIkxUIiwiTnRpbGRlIiwiT2FjdXRlIiwiT2NpcmMiLCJPZ3JhdmUiLCJPc2xhc2giLCJPdGlsZGUiLCJPdW1sIiwiUVVPVCIsIlJFRyIsIlRIT1JOIiwiVWFjdXRlIiwiVWNpcmMiLCJVZ3JhdmUiLCJVdW1sIiwiWWFjdXRlIiwiYWFjdXRlIiwiYWNpcmMiLCJhY3V0ZSIsImFlbGlnIiwiYWdyYXZlIiwiYW1wIiwiYXJpbmciLCJhdGlsZGUiLCJhdW1sIiwiYnJ2YmFyIiwiY2NlZGlsIiwiY2VkaWwiLCJjZW50IiwiY29weSIsImN1cnJlbiIsImRlZyIsImRpdmlkZSIsImVhY3V0ZSIsImVjaXJjIiwiZWdyYXZlIiwiZXRoIiwiZXVtbCIsImZyYWMxMiIsImZyYWMxNCIsImZyYWMzNCIsImd0IiwiaWFjdXRlIiwiaWNpcmMiLCJpZXhjbCIsImlncmF2ZSIsImlxdWVzdCIsIml1bWwiLCJsYXF1byIsImx0IiwibWFjciIsIm1pY3JvIiwibWlkZG90IiwibmJzcCIsIm5vdCIsIm50aWxkZSIsIm9hY3V0ZSIsIm9jaXJjIiwib2dyYXZlIiwib3JkZiIsIm9yZG0iLCJvc2xhc2giLCJvdGlsZGUiLCJvdW1sIiwicGFyYSIsInBsdXNtbiIsInBvdW5kIiwicXVvdCIsInJhcXVvIiwicmVnIiwic2VjdCIsInNoeSIsInN1cDEiLCJzdXAyIiwic3VwMyIsInN6bGlnIiwidGhvcm4iLCJ0aW1lcyIsInVhY3V0ZSIsInVjaXJjIiwidWdyYXZlIiwidW1sIiwidXVtbCIsInlhY3V0ZSIsInllbiIsInl1bWwiXTt2YXIgemg9e25ic3A6Ilx4QTAiLGlleGNsOiJceEExIixjZW50OiJceEEyIixwb3VuZDoiXHhBMyIsY3VycmVuOiJceEE0Iix5ZW46Ilx4QTUiLGJydmJhcjoiXHhBNiIsc2VjdDoiXHhBNyIsdW1sOiJceEE4Iixjb3B5OiJceEE5IixvcmRmOiJceEFBIixsYXF1bzoiXHhBQiIsbm90OiJceEFDIixzaHk6Ilx4QUQiLHJlZzoiXHhBRSIsbWFjcjoiXHhBRiIsZGVnOiJceEIwIixwbHVzbW46Ilx4QjEiLHN1cDI6Ilx4QjIiLHN1cDM6Ilx4QjMiLGFjdXRlOiJceEI0IixtaWNybzoiXHhCNSIscGFyYToiXHhCNiIsbWlkZG90OiJceEI3IixjZWRpbDoiXHhCOCIsc3VwMToiXHhCOSIsb3JkbToiXHhCQSIscmFxdW86Ilx4QkIiLGZyYWMxNDoiXHhCQyIsZnJhYzEyOiJceEJEIixmcmFjMzQ6Ilx4QkUiLGlxdWVzdDoiXHhCRiIsQWdyYXZlOiJceEMwIixBYWN1dGU6Ilx4QzEiLEFjaXJjOiJceEMyIixBdGlsZGU6Ilx4QzMiLEF1bWw6Ilx4QzQiLEFyaW5nOiJceEM1IixBRWxpZzoiXHhDNiIsQ2NlZGlsOiJceEM3IixFZ3JhdmU6Ilx4QzgiLEVhY3V0ZToiXHhDOSIsRWNpcmM6Ilx4Q0EiLEV1bWw6Ilx4Q0IiLElncmF2ZToiXHhDQyIsSWFjdXRlOiJceENEIixJY2lyYzoiXHhDRSIsSXVtbDoiXHhDRiIsRVRIOiJceEQwIixOdGlsZGU6Ilx4RDEiLE9ncmF2ZToiXHhEMiIsT2FjdXRlOiJceEQzIixPY2lyYzoiXHhENCIsT3RpbGRlOiJceEQ1IixPdW1sOiJceEQ2Iix0aW1lczoiXHhENyIsT3NsYXNoOiJceEQ4IixVZ3JhdmU6Ilx4RDkiLFVhY3V0ZToiXHhEQSIsVWNpcmM6Ilx4REIiLFV1bWw6Ilx4REMiLFlhY3V0ZToiXHhERCIsVEhPUk46Ilx4REUiLHN6bGlnOiJceERGIixhZ3JhdmU6Ilx4RTAiLGFhY3V0ZToiXHhFMSIsYWNpcmM6Ilx4RTIiLGF0aWxkZToiXHhFMyIsYXVtbDoiXHhFNCIsYXJpbmc6Ilx4RTUiLGFlbGlnOiJceEU2IixjY2VkaWw6Ilx4RTciLGVncmF2ZToiXHhFOCIsZWFjdXRlOiJceEU5IixlY2lyYzoiXHhFQSIsZXVtbDoiXHhFQiIsaWdyYXZlOiJceEVDIixpYWN1dGU6Ilx4RUQiLGljaXJjOiJceEVFIixpdW1sOiJceEVGIixldGg6Ilx4RjAiLG50aWxkZToiXHhGMSIsb2dyYXZlOiJceEYyIixvYWN1dGU6Ilx4RjMiLG9jaXJjOiJceEY0IixvdGlsZGU6Ilx4RjUiLG91bWw6Ilx4RjYiLGRpdmlkZToiXHhGNyIsb3NsYXNoOiJceEY4Iix1Z3JhdmU6Ilx4RjkiLHVhY3V0ZToiXHhGQSIsdWNpcmM6Ilx4RkIiLHV1bWw6Ilx4RkMiLHlhY3V0ZToiXHhGRCIsdGhvcm46Ilx4RkUiLHl1bWw6Ilx4RkYiLGZub2Y6Ilx1MDE5MiIsQWxwaGE6Ilx1MDM5MSIsQmV0YToiXHUwMzkyIixHYW1tYToiXHUwMzkzIixEZWx0YToiXHUwMzk0IixFcHNpbG9uOiJcdTAzOTUiLFpldGE6Ilx1MDM5NiIsRXRhOiJcdTAzOTciLFRoZXRhOiJcdTAzOTgiLElvdGE6Ilx1MDM5OSIsS2FwcGE6Ilx1MDM5QSIsTGFtYmRhOiJcdTAzOUIiLE11OiJcdTAzOUMiLE51OiJcdTAzOUQiLFhpOiJcdTAzOUUiLE9taWNyb246Ilx1MDM5RiIsUGk6Ilx1MDNBMCIsUmhvOiJcdTAzQTEiLFNpZ21hOiJcdTAzQTMiLFRhdToiXHUwM0E0IixVcHNpbG9uOiJcdTAzQTUiLFBoaToiXHUwM0E2IixDaGk6Ilx1MDNBNyIsUHNpOiJcdTAzQTgiLE9tZWdhOiJcdTAzQTkiLGFscGhhOiJcdTAzQjEiLGJldGE6Ilx1MDNCMiIsZ2FtbWE6Ilx1MDNCMyIsZGVsdGE6Ilx1MDNCNCIsZXBzaWxvbjoiXHUwM0I1Iix6ZXRhOiJcdTAzQjYiLGV0YToiXHUwM0I3Iix0aGV0YToiXHUwM0I4Iixpb3RhOiJcdTAzQjkiLGthcHBhOiJcdTAzQkEiLGxhbWJkYToiXHUwM0JCIixtdToiXHUwM0JDIixudToiXHUwM0JEIix4aToiXHUwM0JFIixvbWljcm9uOiJcdTAzQkYiLHBpOiJcdTAzQzAiLHJobzoiXHUwM0MxIixzaWdtYWY6Ilx1MDNDMiIsc2lnbWE6Ilx1MDNDMyIsdGF1OiJcdTAzQzQiLHVwc2lsb246Ilx1MDNDNSIscGhpOiJcdTAzQzYiLGNoaToiXHUwM0M3Iixwc2k6Ilx1MDNDOCIsb21lZ2E6Ilx1MDNDOSIsdGhldGFzeW06Ilx1MDNEMSIsdXBzaWg6Ilx1MDNEMiIscGl2OiJcdTAzRDYiLGJ1bGw6Ilx1MjAyMiIsaGVsbGlwOiJcdTIwMjYiLHByaW1lOiJcdTIwMzIiLFByaW1lOiJcdTIwMzMiLG9saW5lOiJcdTIwM0UiLGZyYXNsOiJcdTIwNDQiLHdlaWVycDoiXHUyMTE4IixpbWFnZToiXHUyMTExIixyZWFsOiJcdTIxMUMiLHRyYWRlOiJcdTIxMjIiLGFsZWZzeW06Ilx1MjEzNSIsbGFycjoiXHUyMTkwIix1YXJyOiJcdTIxOTEiLHJhcnI6Ilx1MjE5MiIsZGFycjoiXHUyMTkzIixoYXJyOiJcdTIxOTQiLGNyYXJyOiJcdTIxQjUiLGxBcnI6Ilx1MjFEMCIsdUFycjoiXHUyMUQxIixyQXJyOiJcdTIxRDIiLGRBcnI6Ilx1MjFEMyIsaEFycjoiXHUyMUQ0Iixmb3JhbGw6Ilx1MjIwMCIscGFydDoiXHUyMjAyIixleGlzdDoiXHUyMjAzIixlbXB0eToiXHUyMjA1IixuYWJsYToiXHUyMjA3Iixpc2luOiJcdTIyMDgiLG5vdGluOiJcdTIyMDkiLG5pOiJcdTIyMEIiLHByb2Q6Ilx1MjIwRiIsc3VtOiJcdTIyMTEiLG1pbnVzOiJcdTIyMTIiLGxvd2FzdDoiXHUyMjE3IixyYWRpYzoiXHUyMjFBIixwcm9wOiJcdTIyMUQiLGluZmluOiJcdTIyMUUiLGFuZzoiXHUyMjIwIixhbmQ6Ilx1MjIyNyIsb3I6Ilx1MjIyOCIsY2FwOiJcdTIyMjkiLGN1cDoiXHUyMjJBIixpbnQ6Ilx1MjIyQiIsdGhlcmU0OiJcdTIyMzQiLHNpbToiXHUyMjNDIixjb25nOiJcdTIyNDUiLGFzeW1wOiJcdTIyNDgiLG5lOiJcdTIyNjAiLGVxdWl2OiJcdTIyNjEiLGxlOiJcdTIyNjQiLGdlOiJcdTIyNjUiLHN1YjoiXHUyMjgyIixzdXA6Ilx1MjI4MyIsbnN1YjoiXHUyMjg0IixzdWJlOiJcdTIyODYiLHN1cGU6Ilx1MjI4NyIsb3BsdXM6Ilx1MjI5NSIsb3RpbWVzOiJcdTIyOTciLHBlcnA6Ilx1MjJBNSIsc2RvdDoiXHUyMkM1IixsY2VpbDoiXHUyMzA4IixyY2VpbDoiXHUyMzA5IixsZmxvb3I6Ilx1MjMwQSIscmZsb29yOiJcdTIzMEIiLGxhbmc6Ilx1MjMyOSIscmFuZzoiXHUyMzJBIixsb3o6Ilx1MjVDQSIsc3BhZGVzOiJcdTI2NjAiLGNsdWJzOiJcdTI2NjMiLGhlYXJ0czoiXHUyNjY1IixkaWFtczoiXHUyNjY2IixxdW90OiciJyxhbXA6IiYiLGx0OiI8IixndDoiPiIsT0VsaWc6Ilx1MDE1MiIsb2VsaWc6Ilx1MDE1MyIsU2Nhcm9uOiJcdTAxNjAiLHNjYXJvbjoiXHUwMTYxIixZdW1sOiJcdTAxNzgiLGNpcmM6Ilx1MDJDNiIsdGlsZGU6Ilx1MDJEQyIsZW5zcDoiXHUyMDAyIixlbXNwOiJcdTIwMDMiLHRoaW5zcDoiXHUyMDA5Iix6d25qOiJcdTIwMEMiLHp3ajoiXHUyMDBEIixscm06Ilx1MjAwRSIscmxtOiJcdTIwMEYiLG5kYXNoOiJcdTIwMTMiLG1kYXNoOiJcdTIwMTQiLGxzcXVvOiJcdTIwMTgiLHJzcXVvOiJcdTIwMTkiLHNicXVvOiJcdTIwMUEiLGxkcXVvOiJcdTIwMUMiLHJkcXVvOiJcdTIwMUQiLGJkcXVvOiJcdTIwMUUiLGRhZ2dlcjoiXHUyMDIwIixEYWdnZXI6Ilx1MjAyMSIscGVybWlsOiJcdTIwMzAiLGxzYXF1bzoiXHUyMDM5Iixyc2FxdW86Ilx1MjAzQSIsZXVybzoiXHUyMEFDIn07dmFyIFFFPVsiY2VudCIsImNvcHkiLCJkaXZpZGUiLCJndCIsImx0Iiwibm90IiwicGFyYSIsInRpbWVzIl07dmFyIEpFPXt9Lmhhc093blByb3BlcnR5LEF5PXt9LEhoO2ZvcihIaCBpbiB6aClKRS5jYWxsKHpoLEhoKSYmKEF5W3poW0hoXV09SGgpO3ZhciBxRj0vW15cZEEtWmEtel0vO2Z1bmN0aW9uIEtFKHQsZSxyLG4pe2xldCBpPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7aWYoSkUuY2FsbChBeSxpKSl7bGV0IHM9QXlbaV0sYT0iJiIrcztyZXR1cm4gciYmR0UuaW5jbHVkZXMocykmJiFRRS5pbmNsdWRlcyhzKSYmKCFufHxlJiZlIT09NjEmJnFGLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShlKSkpP2E6YSsiOyJ9cmV0dXJuIiJ9byhLRSwidG9OYW1lZCIpO2Z1bmN0aW9uIFhFKHQsZSxyKXtsZXQgbj1WRSh0LGUsci5vbWl0T3B0aW9uYWxTZW1pY29sb25zKSxpO2lmKChyLnVzZU5hbWVkUmVmZXJlbmNlc3x8ci51c2VTaG9ydGVzdFJlZmVyZW5jZXMpJiYoaT1LRSh0LGUsci5vbWl0T3B0aW9uYWxTZW1pY29sb25zLHIuYXR0cmlidXRlKSksKHIudXNlU2hvcnRlc3RSZWZlcmVuY2VzfHwhaSkmJnIudXNlU2hvcnRlc3RSZWZlcmVuY2VzKXtsZXQgcz1ZRSh0LGUsci5vbWl0T3B0aW9uYWxTZW1pY29sb25zKTtzLmxlbmd0aDxuLmxlbmd0aCYmKG49cyl9cmV0dXJuIGkmJighci51c2VTaG9ydGVzdFJlZmVyZW5jZXN8fGkubGVuZ3RoPG4ubGVuZ3RoKT9pOm59byhYRSwiZm9ybWF0U21hcnQiKTtmdW5jdGlvbiBaRSh0KXtyZXR1cm4iJiN4Iit0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyI7In1vKFpFLCJmb3JtYXRCYXNpYyIpO2Z1bmN0aW9uIFduKHQsZSl7cmV0dXJuIEZ5KHQsT2JqZWN0LmFzc2lnbih7Zm9ybWF0OlhFfSxlKSl9byhXbiwic3RyaW5naWZ5RW50aXRpZXMiKTtmdW5jdGlvbiBPMmUodCxlKXtyZXR1cm4gRnkodCxPYmplY3QuYXNzaWduKHtmb3JtYXQ6WkV9LGUpKX1vKE8yZSwic3RyaW5naWZ5RW50aXRpZXNMaWdodCIpO3ZhciBVRj0vXj58Xi0+fDwhLS18LS0+fC0tIT58PCEtJC9nLFZGPVsiPiJdLFlGPVsiPCIsIj4iXTtmdW5jdGlvbiBlRCh0LGUscixuKXtyZXR1cm4gbi5zZXR0aW5ncy5ib2d1c0NvbW1lbnRzPyI8PyIrV24odC52YWx1ZSxPYmplY3QuYXNzaWduKHt9LG4uc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcyx7c3Vic2V0OlZGfSkpKyI+IjoiPCEtLSIrdC52YWx1ZS5yZXBsYWNlKFVGLGkpKyItLT4iO2Z1bmN0aW9uIGkocyl7cmV0dXJuIFduKHMsT2JqZWN0LmFzc2lnbih7fSxuLnNldHRpbmdzLmNoYXJhY3RlclJlZmVyZW5jZXMse3N1YnNldDpZRn0pKX19byhlRCwiY29tbWVudCIpO2Z1bmN0aW9uIHREKHQsZSxyLG4pe3JldHVybiI8ISIrKG4uc2V0dGluZ3MudXBwZXJEb2N0eXBlPyJET0NUWVBFIjoiZG9jdHlwZSIpKyhuLnNldHRpbmdzLnRpZ2h0RG9jdHlwZT8iIjoiICIpKyJodG1sPiJ9byh0RCwiZG9jdHlwZSIpO2Z1bmN0aW9uIGFhKHQsZSl7bGV0IHI9U3RyaW5nKHQpO2lmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBjaGFyYWN0ZXIiKTtsZXQgbj0wLGk9ci5pbmRleE9mKGUpO2Zvcig7aSE9PS0xOyluKyssaT1yLmluZGV4T2YoZSxpK2UubGVuZ3RoKTtyZXR1cm4gbn1vKGFhLCJjY291bnQiKTtmdW5jdGlvbiBCMmUodCl7bGV0IGU9W10scj1TdHJpbmcodHx8IiIpLG49ci5pbmRleE9mKCIsIiksaT0wLHM9ITE7Zm9yKDshczspe249PT0tMSYmKG49ci5sZW5ndGgscz0hMCk7bGV0IGE9ci5zbGljZShpLG4pLnRyaW0oKTsoYXx8IXMpJiZlLnB1c2goYSksaT1uKzEsbj1yLmluZGV4T2YoIiwiLGkpfXJldHVybiBlfW8oQjJlLCJwYXJzZSIpO2Z1bmN0aW9uIHJEKHQsZSl7bGV0IHI9ZXx8e307cmV0dXJuKHRbdC5sZW5ndGgtMV09PT0iIj9bLi4udCwiIl06dCkuam9pbigoci5wYWRSaWdodD8iICI6IiIpKyIsIisoci5wYWRMZWZ0PT09ITE/IiI6IiAiKSkudHJpbSgpfW8ockQsInN0cmluZ2lmeSIpO2Z1bmN0aW9uIGoyZSh0KXtsZXQgZT1TdHJpbmcodHx8IiIpLnRyaW0oKTtyZXR1cm4gZT9lLnNwbGl0KC9bIFx0XG5cclxmXSsvZyk6W119byhqMmUsInBhcnNlIik7ZnVuY3Rpb24gbkQodCl7cmV0dXJuIHQuam9pbigiICIpLnRyaW0oKX1vKG5ELCJzdHJpbmdpZnkiKTt2YXIgR0Y9L1sgXHRcblxmXHJdL2c7ZnVuY3Rpb24gT28odCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0Ij90LnR5cGU9PT0idGV4dCI/aUQodC52YWx1ZSk6ITE6aUQodCl9byhPbywid2hpdGVzcGFjZSIpO2Z1bmN0aW9uIGlEKHQpe3JldHVybiB0LnJlcGxhY2UoR0YsIiIpPT09IiJ9byhpRCwiZW1wdHkiKTt2YXIgWGU9b0QoMSksJHk9b0QoLTEpLFFGPVtdO2Z1bmN0aW9uIG9EKHQpe3JldHVybiBlO2Z1bmN0aW9uIGUocixuLGkpe2xldCBzPXI/ci5jaGlsZHJlbjpRRixhPShufHwwKSt0LGw9c1thXTtpZighaSlmb3IoO2wmJk9vKGwpOylhKz10LGw9c1thXTtyZXR1cm4gbH19byhvRCwic2libGluZ3MiKTt2YXIgSkY9e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gamgodCl7cmV0dXJuIGU7ZnVuY3Rpb24gZShyLG4saSl7cmV0dXJuIEpGLmNhbGwodCxyLnRhZ05hbWUpJiZ0W3IudGFnTmFtZV0ocixuLGkpfX1vKGpoLCJvbWlzc2lvbiIpO3ZhciB0Yz1qaCh7Ym9keTpYRixjYXB0aW9uOkJ5LGNvbGdyb3VwOkJ5LGRkOnJBLGR0OnRBLGhlYWQ6QnksaHRtbDpLRixsaTplQSxvcHRncm91cDpuQSxvcHRpb246aUEscDpaRixycDpzRCxydDpzRCx0Ym9keTpzQSx0ZDphRCx0Zm9vdDphQSx0aDphRCx0aGVhZDpvQSx0cjpsQX0pO2Z1bmN0aW9uIEJ5KHQsZSxyKXtsZXQgbj1YZShyLGUsITApO3JldHVybiFufHxuLnR5cGUhPT0iY29tbWVudCImJiEobi50eXBlPT09InRleHQiJiZPbyhuLnZhbHVlLmNoYXJBdCgwKSkpfW8oQnksImhlYWRPckNvbGdyb3VwT3JDYXB0aW9uIik7ZnVuY3Rpb24gS0YodCxlLHIpe2xldCBuPVhlKHIsZSk7cmV0dXJuIW58fG4udHlwZSE9PSJjb21tZW50In1vKEtGLCJodG1sIik7ZnVuY3Rpb24gWEYodCxlLHIpe2xldCBuPVhlKHIsZSk7cmV0dXJuIW58fG4udHlwZSE9PSJjb21tZW50In1vKFhGLCJib2R5Iik7ZnVuY3Rpb24gWkYodCxlLHIpe2xldCBuPVhlKHIsZSk7cmV0dXJuIG4/bi50eXBlPT09ImVsZW1lbnQiJiYobi50YWdOYW1lPT09ImFkZHJlc3MifHxuLnRhZ05hbWU9PT0iYXJ0aWNsZSJ8fG4udGFnTmFtZT09PSJhc2lkZSJ8fG4udGFnTmFtZT09PSJibG9ja3F1b3RlInx8bi50YWdOYW1lPT09ImRldGFpbHMifHxuLnRhZ05hbWU9PT0iZGl2Inx8bi50YWdOYW1lPT09ImRsInx8bi50YWdOYW1lPT09ImZpZWxkc2V0Inx8bi50YWdOYW1lPT09ImZpZ2NhcHRpb24ifHxuLnRhZ05hbWU9PT0iZmlndXJlInx8bi50YWdOYW1lPT09ImZvb3RlciJ8fG4udGFnTmFtZT09PSJmb3JtInx8bi50YWdOYW1lPT09ImgxInx8bi50YWdOYW1lPT09ImgyInx8bi50YWdOYW1lPT09ImgzInx8bi50YWdOYW1lPT09Img0Inx8bi50YWdOYW1lPT09Img1Inx8bi50YWdOYW1lPT09Img2Inx8bi50YWdOYW1lPT09ImhlYWRlciJ8fG4udGFnTmFtZT09PSJoZ3JvdXAifHxuLnRhZ05hbWU9PT0iaHIifHxuLnRhZ05hbWU9PT0ibWFpbiJ8fG4udGFnTmFtZT09PSJtZW51Inx8bi50YWdOYW1lPT09Im5hdiJ8fG4udGFnTmFtZT09PSJvbCJ8fG4udGFnTmFtZT09PSJwInx8bi50YWdOYW1lPT09InByZSJ8fG4udGFnTmFtZT09PSJzZWN0aW9uInx8bi50YWdOYW1lPT09InRhYmxlInx8bi50YWdOYW1lPT09InVsIik6IXJ8fCEoci50eXBlPT09ImVsZW1lbnQiJiYoci50YWdOYW1lPT09ImEifHxyLnRhZ05hbWU9PT0iYXVkaW8ifHxyLnRhZ05hbWU9PT0iZGVsInx8ci50YWdOYW1lPT09ImlucyJ8fHIudGFnTmFtZT09PSJtYXAifHxyLnRhZ05hbWU9PT0ibm9zY3JpcHQifHxyLnRhZ05hbWU9PT0idmlkZW8iKSl9byhaRiwicCIpO2Z1bmN0aW9uIGVBKHQsZSxyKXtsZXQgbj1YZShyLGUpO3JldHVybiFufHxuLnR5cGU9PT0iZWxlbWVudCImJm4udGFnTmFtZT09PSJsaSJ9byhlQSwibGkiKTtmdW5jdGlvbiB0QSh0LGUscil7bGV0IG49WGUocixlKTtyZXR1cm4hIShuJiZuLnR5cGU9PT0iZWxlbWVudCImJihuLnRhZ05hbWU9PT0iZHQifHxuLnRhZ05hbWU9PT0iZGQiKSl9byh0QSwiZHQiKTtmdW5jdGlvbiByQSh0LGUscil7bGV0IG49WGUocixlKTtyZXR1cm4hbnx8bi50eXBlPT09ImVsZW1lbnQiJiYobi50YWdOYW1lPT09ImR0Inx8bi50YWdOYW1lPT09ImRkIil9byhyQSwiZGQiKTtmdW5jdGlvbiBzRCh0LGUscil7bGV0IG49WGUocixlKTtyZXR1cm4hbnx8bi50eXBlPT09ImVsZW1lbnQiJiYobi50YWdOYW1lPT09InJwInx8bi50YWdOYW1lPT09InJ0Iil9byhzRCwicnVieUVsZW1lbnQiKTtmdW5jdGlvbiBuQSh0LGUscil7bGV0IG49WGUocixlKTtyZXR1cm4hbnx8bi50eXBlPT09ImVsZW1lbnQiJiZuLnRhZ05hbWU9PT0ib3B0Z3JvdXAifW8obkEsIm9wdGdyb3VwIik7ZnVuY3Rpb24gaUEodCxlLHIpe2xldCBuPVhlKHIsZSk7cmV0dXJuIW58fG4udHlwZT09PSJlbGVtZW50IiYmKG4udGFnTmFtZT09PSJvcHRpb24ifHxuLnRhZ05hbWU9PT0ib3B0Z3JvdXAiKX1vKGlBLCJvcHRpb24iKTtmdW5jdGlvbiBvQSh0LGUscil7bGV0IG49WGUocixlKTtyZXR1cm4hIShuJiZuLnR5cGU9PT0iZWxlbWVudCImJihuLnRhZ05hbWU9PT0idGJvZHkifHxuLnRhZ05hbWU9PT0idGZvb3QiKSl9byhvQSwidGhlYWQiKTtmdW5jdGlvbiBzQSh0LGUscil7bGV0IG49WGUocixlKTtyZXR1cm4hbnx8bi50eXBlPT09ImVsZW1lbnQiJiYobi50YWdOYW1lPT09InRib2R5Inx8bi50YWdOYW1lPT09InRmb290Iil9byhzQSwidGJvZHkiKTtmdW5jdGlvbiBhQSh0LGUscil7cmV0dXJuIVhlKHIsZSl9byhhQSwidGZvb3QiKTtmdW5jdGlvbiBsQSh0LGUscil7bGV0IG49WGUocixlKTtyZXR1cm4hbnx8bi50eXBlPT09ImVsZW1lbnQiJiZuLnRhZ05hbWU9PT0idHIifW8obEEsInRyIik7ZnVuY3Rpb24gYUQodCxlLHIpe2xldCBuPVhlKHIsZSk7cmV0dXJuIW58fG4udHlwZT09PSJlbGVtZW50IiYmKG4udGFnTmFtZT09PSJ0ZCJ8fG4udGFnTmFtZT09PSJ0aCIpfW8oYUQsImNlbGxzIik7dmFyIGxEPWpoKHtib2R5OmZBLGNvbGdyb3VwOnBBLGhlYWQ6dUEsaHRtbDpjQSx0Ym9keTpoQX0pO2Z1bmN0aW9uIGNBKHQpe2xldCBlPVhlKHQsLTEpO3JldHVybiFlfHxlLnR5cGUhPT0iY29tbWVudCJ9byhjQSwiaHRtbCIpO2Z1bmN0aW9uIHVBKHQpe2xldCBlPW5ldyBTZXQ7Zm9yKGxldCBuIG9mIHQuY2hpbGRyZW4paWYobi50eXBlPT09ImVsZW1lbnQiJiYobi50YWdOYW1lPT09ImJhc2UifHxuLnRhZ05hbWU9PT0idGl0bGUiKSl7aWYoZS5oYXMobi50YWdOYW1lKSlyZXR1cm4hMTtlLmFkZChuLnRhZ05hbWUpfWxldCByPXQuY2hpbGRyZW5bMF07cmV0dXJuIXJ8fHIudHlwZT09PSJlbGVtZW50In1vKHVBLCJoZWFkIik7ZnVuY3Rpb24gZkEodCl7bGV0IGU9WGUodCwtMSwhMCk7cmV0dXJuIWV8fGUudHlwZSE9PSJjb21tZW50IiYmIShlLnR5cGU9PT0idGV4dCImJk9vKGUudmFsdWUuY2hhckF0KDApKSkmJiEoZS50eXBlPT09ImVsZW1lbnQiJiYoZS50YWdOYW1lPT09Im1ldGEifHxlLnRhZ05hbWU9PT0ibGluayJ8fGUudGFnTmFtZT09PSJzY3JpcHQifHxlLnRhZ05hbWU9PT0ic3R5bGUifHxlLnRhZ05hbWU9PT0idGVtcGxhdGUiKSl9byhmQSwiYm9keSIpO2Z1bmN0aW9uIHBBKHQsZSxyKXtsZXQgbj0keShyLGUpLGk9WGUodCwtMSwhMCk7cmV0dXJuIHImJm4mJm4udHlwZT09PSJlbGVtZW50IiYmbi50YWdOYW1lPT09ImNvbGdyb3VwIiYmdGMobixyLmNoaWxkcmVuLmluZGV4T2Yobikscik/ITE6ISEoaSYmaS50eXBlPT09ImVsZW1lbnQiJiZpLnRhZ05hbWU9PT0iY29sIil9byhwQSwiY29sZ3JvdXAiKTtmdW5jdGlvbiBoQSh0LGUscil7bGV0IG49JHkocixlKSxpPVhlKHQsLTEpO3JldHVybiByJiZuJiZuLnR5cGU9PT0iZWxlbWVudCImJihuLnRhZ05hbWU9PT0idGhlYWQifHxuLnRhZ05hbWU9PT0idGJvZHkiKSYmdGMobixyLmNoaWxkcmVuLmluZGV4T2Yobikscik/ITE6ISEoaSYmaS50eXBlPT09ImVsZW1lbnQiJiZpLnRhZ05hbWU9PT0idHIiKX1vKGhBLCJ0Ym9keSIpO3ZhciBXaD17bmFtZTpbW2AJClxmXHIgJi89PmAuc3BsaXQoIiIpLGAJClxmXHIgIiYnLz0+XGBgLnNwbGl0KCIiKV0sW2BcMAkKXGZcciAiJicvPD0+YC5zcGxpdCgiIiksYFwwCQpcZlxyICImJy88PT5cYGAuc3BsaXQoIiIpXV0sdW5xdW90ZWQ6W1tgCQpcZlxyICY+YC5zcGxpdCgiIiksYFwwCQpcZlxyICImJzw9PlxgYC5zcGxpdCgiIildLFtgXDAJClxmXHIgIiYnPD0+XGBgLnNwbGl0KCIiKSxgXDAJClxmXHIgIiYnPD0+XGBgLnNwbGl0KCIiKV1dLHNpbmdsZTpbWyImJyIuc3BsaXQoIiIpLCJcIiYnYCIuc3BsaXQoIiIpXSxbIlwwJiciLnNwbGl0KCIiKSwiXDBcIiYnYCIuc3BsaXQoIiIpXV0sZG91YmxlOltbJyImJy5zcGxpdCgiIiksIlwiJidgIi5zcGxpdCgiIildLFsnXDAiJicuc3BsaXQoIiIpLCJcMFwiJidgIi5zcGxpdCgiIildXX07ZnVuY3Rpb24gY0QodCxlLHIsbil7bGV0IGk9bi5zY2hlbWEscz1pLnNwYWNlPT09InN2ZyI/ITE6bi5zZXR0aW5ncy5vbWl0T3B0aW9uYWxUYWdzLGE9aS5zcGFjZT09PSJzdmciP24uc2V0dGluZ3MuY2xvc2VFbXB0eUVsZW1lbnRzOm4uc2V0dGluZ3Mudm9pZHMuaW5jbHVkZXModC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpLGw9W10sYztpLnNwYWNlPT09Imh0bWwiJiZ0LnRhZ05hbWU9PT0ic3ZnIiYmKG4uc2NoZW1hPSRoKTtsZXQgdT1kQShuLHQucHJvcGVydGllcyksZj1uLmFsbChpLnNwYWNlPT09Imh0bWwiJiZ0LnRhZ05hbWU9PT0idGVtcGxhdGUiP3QuY29udGVudDp0KTtyZXR1cm4gbi5zY2hlbWE9aSxmJiYoYT0hMSksKHV8fCFzfHwhbEQodCxlLHIpKSYmKGwucHVzaCgiPCIsdC50YWdOYW1lLHU/IiAiK3U6IiIpLGEmJihpLnNwYWNlPT09InN2ZyJ8fG4uc2V0dGluZ3MuY2xvc2VTZWxmQ2xvc2luZykmJihjPXUuY2hhckF0KHUubGVuZ3RoLTEpLCghbi5zZXR0aW5ncy50aWdodFNlbGZDbG9zaW5nfHxjPT09Ii8ifHxjJiZjIT09JyInJiZjIT09IiciKSYmbC5wdXNoKCIgIiksbC5wdXNoKCIvIikpLGwucHVzaCgiPiIpKSxsLnB1c2goZiksIWEmJighc3x8IXRjKHQsZSxyKSkmJmwucHVzaCgiPC8iK3QudGFnTmFtZSsiPiIpLGwuam9pbigiIil9byhjRCwiZWxlbWVudCIpO2Z1bmN0aW9uIGRBKHQsZSl7bGV0IHI9W10sbj0tMSxpO2lmKGUpe2ZvcihpIGluIGUpaWYoZVtpXSE9PW51bGwmJmVbaV0hPT12b2lkIDApe2xldCBzPW1BKHQsaSxlW2ldKTtzJiZyLnB1c2gocyl9fWZvcig7KytuPHIubGVuZ3RoOyl7bGV0IHM9dC5zZXR0aW5ncy50aWdodEF0dHJpYnV0ZXM/cltuXS5jaGFyQXQocltuXS5sZW5ndGgtMSk6dm9pZCAwO24hPT1yLmxlbmd0aC0xJiZzIT09JyInJiZzIT09IiciJiYocltuXSs9IiAiKX1yZXR1cm4gci5qb2luKCIiKX1vKGRBLCJzZXJpYWxpemVBdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbUEodCxlLHIpe2xldCBuPUx5KHQuc2NoZW1hLGUpLGk9dC5zZXR0aW5ncy5hbGxvd1BhcnNlRXJyb3JzJiZ0LnNjaGVtYS5zcGFjZT09PSJodG1sIj8wOjEscz10LnNldHRpbmdzLmFsbG93RGFuZ2Vyb3VzQ2hhcmFjdGVycz8wOjEsYT10LnF1b3RlLGw7aWYobi5vdmVybG9hZGVkQm9vbGVhbiYmKHI9PT1uLmF0dHJpYnV0ZXx8cj09PSIiKT9yPSEwOihuLmJvb2xlYW58fG4ub3ZlcmxvYWRlZEJvb2xlYW4pJiYodHlwZW9mIHIhPSJzdHJpbmcifHxyPT09bi5hdHRyaWJ1dGV8fHI9PT0iIikmJihyPSEhcikscj09bnVsbHx8cj09PSExfHx0eXBlb2Ygcj09Im51bWJlciImJk51bWJlci5pc05hTihyKSlyZXR1cm4iIjtsZXQgYz1XbihuLmF0dHJpYnV0ZSxPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcyx7c3Vic2V0OldoLm5hbWVbaV1bc119KSk7cmV0dXJuIHI9PT0hMHx8KHI9QXJyYXkuaXNBcnJheShyKT8obi5jb21tYVNlcGFyYXRlZD9yRDpuRCkocix7cGFkTGVmdDohdC5zZXR0aW5ncy50aWdodENvbW1hU2VwYXJhdGVkTGlzdHN9KTpTdHJpbmcociksdC5zZXR0aW5ncy5jb2xsYXBzZUVtcHR5QXR0cmlidXRlcyYmIXIpP2M6KHQuc2V0dGluZ3MucHJlZmVyVW5xdW90ZWQmJihsPVduKHIsT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdzLmNoYXJhY3RlclJlZmVyZW5jZXMse2F0dHJpYnV0ZTohMCxzdWJzZXQ6V2gudW5xdW90ZWRbaV1bc119KSkpLGwhPT1yJiYodC5zZXR0aW5ncy5xdW90ZVNtYXJ0JiZhYShyLGEpPmFhKHIsdC5hbHRlcm5hdGl2ZSkmJihhPXQuYWx0ZXJuYXRpdmUpLGw9YStXbihyLE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLHtzdWJzZXQ6KGE9PT0iJyI/V2guc2luZ2xlOldoLmRvdWJsZSlbaV1bc10sYXR0cmlidXRlOiEwfSkpK2EpLGMrKGwmJiI9IitsKSl9byhtQSwic2VyaWFsaXplQXR0cmlidXRlIik7dmFyIGdBPVsiPCIsIiYiXTtmdW5jdGlvbiBxaCh0LGUscixuKXtyZXR1cm4gciYmci50eXBlPT09ImVsZW1lbnQiJiYoci50YWdOYW1lPT09InNjcmlwdCJ8fHIudGFnTmFtZT09PSJzdHlsZSIpP3QudmFsdWU6V24odC52YWx1ZSxPYmplY3QuYXNzaWduKHt9LG4uc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcyx7c3Vic2V0OmdBfSkpfW8ocWgsInRleHQiKTtmdW5jdGlvbiB1RCh0LGUscixuKXtyZXR1cm4gbi5zZXR0aW5ncy5hbGxvd0Rhbmdlcm91c0h0bWw/dC52YWx1ZTpxaCh0LGUscixuKX1vKHVELCJyYXciKTtmdW5jdGlvbiBmRCh0LGUscixuKXtyZXR1cm4gbi5hbGwodCl9byhmRCwicm9vdCIpO3ZhciBwRD1CaCgidHlwZSIse2ludmFsaWQ6eUEsdW5rbm93bjp4QSxoYW5kbGVyczp7Y29tbWVudDplRCxkb2N0eXBlOnRELGVsZW1lbnQ6Y0QscmF3OnVELHJvb3Q6ZkQsdGV4dDpxaH19KTtmdW5jdGlvbiB5QSh0KXt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG5vZGUsIG5vdCBgIit0KyJgIil9byh5QSwiaW52YWxpZCIpO2Z1bmN0aW9uIHhBKHQpe2xldCBlPXQ7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tcGlsZSB1bmtub3duIG5vZGUgYCIrZS50eXBlKyJgIil9byh4QSwidW5rbm93biIpO3ZhciBiQT17fSx3QT17fSx2QT1bXTtmdW5jdGlvbiB6eSh0LGUpe2xldCByPWV8fGJBLG49ci5xdW90ZXx8JyInLGk9bj09PSciJz8iJyI6JyInO2lmKG4hPT0nIicmJm4hPT0iJyIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHF1b3RlIGAiK24rImAsIGV4cGVjdGVkIGAnYCBvciBgXCJgIik7cmV0dXJue29uZTprQSxhbGw6U0Esc2V0dGluZ3M6e29taXRPcHRpb25hbFRhZ3M6ci5vbWl0T3B0aW9uYWxUYWdzfHwhMSxhbGxvd1BhcnNlRXJyb3JzOnIuYWxsb3dQYXJzZUVycm9yc3x8ITEsYWxsb3dEYW5nZXJvdXNDaGFyYWN0ZXJzOnIuYWxsb3dEYW5nZXJvdXNDaGFyYWN0ZXJzfHwhMSxxdW90ZVNtYXJ0OnIucXVvdGVTbWFydHx8ITEscHJlZmVyVW5xdW90ZWQ6ci5wcmVmZXJVbnF1b3RlZHx8ITEsdGlnaHRBdHRyaWJ1dGVzOnIudGlnaHRBdHRyaWJ1dGVzfHwhMSx1cHBlckRvY3R5cGU6ci51cHBlckRvY3R5cGV8fCExLHRpZ2h0RG9jdHlwZTpyLnRpZ2h0RG9jdHlwZXx8ITEsYm9ndXNDb21tZW50czpyLmJvZ3VzQ29tbWVudHN8fCExLHRpZ2h0Q29tbWFTZXBhcmF0ZWRMaXN0czpyLnRpZ2h0Q29tbWFTZXBhcmF0ZWRMaXN0c3x8ITEsdGlnaHRTZWxmQ2xvc2luZzpyLnRpZ2h0U2VsZkNsb3Npbmd8fCExLGNvbGxhcHNlRW1wdHlBdHRyaWJ1dGVzOnIuY29sbGFwc2VFbXB0eUF0dHJpYnV0ZXN8fCExLGFsbG93RGFuZ2Vyb3VzSHRtbDpyLmFsbG93RGFuZ2Vyb3VzSHRtbHx8ITEsdm9pZHM6ci52b2lkc3x8JEUsY2hhcmFjdGVyUmVmZXJlbmNlczpyLmNoYXJhY3RlclJlZmVyZW5jZXN8fHdBLGNsb3NlU2VsZkNsb3Npbmc6ci5jbG9zZVNlbGZDbG9zaW5nfHwhMSxjbG9zZUVtcHR5RWxlbWVudHM6ci5jbG9zZUVtcHR5RWxlbWVudHN8fCExfSxzY2hlbWE6ci5zcGFjZT09PSJzdmciPyRoOldFLHF1b3RlOm4sYWx0ZXJuYXRpdmU6aX0ub25lKEFycmF5LmlzQXJyYXkodCk/e3R5cGU6InJvb3QiLGNoaWxkcmVuOnR9OnQsdm9pZCAwLHZvaWQgMCl9byh6eSwidG9IdG1sIik7ZnVuY3Rpb24ga0EodCxlLHIpe3JldHVybiBwRCh0LGUscix0aGlzKX1vKGtBLCJvbmUiKTtmdW5jdGlvbiBTQSh0KXtsZXQgZT1bXSxyPXQmJnQuY2hpbGRyZW58fHZBLG49LTE7Zm9yKDsrK248ci5sZW5ndGg7KWVbbl09dGhpcy5vbmUocltuXSxuLHQpO3JldHVybiBlLmpvaW4oIiIpfW8oU0EsImFsbCIpO3ZhciBUQT17fTtmdW5jdGlvbiBsYSh0KXtsZXQgZT10aGlzLHtoYW5kbGVyczpyLHNhbml0aXplOm4sLi4uaX09dHx8VEEscz0hMSxhO3R5cGVvZiBuPT0iYm9vbGVhbiI/cz0hbjpuJiYoYT1uKSxlLmNvbXBpbGVyPWw7ZnVuY3Rpb24gbChjLHUpe2xldCBmPU15KGMse2hhbmRsZXJzOnIsYWxsb3dEYW5nZXJvdXNIdG1sOnN9KSxwPXM/ZjpFeShmLGEpLGg9enkocCx7Li4uaSxhbGxvd0Rhbmdlcm91c0h0bWw6c30pO3JldHVybiB1LmV4dG5hbWUmJih1LmV4dG5hbWU9Ii5odG1sIiksYyYmYy50eXBlPT09InJvb3QiJiZoJiYvW15cclxuXS8udGVzdChoLmNoYXJBdChoLmxlbmd0aC0xKSk/aCtgCmA6aH1vKGwsImNvbXBpbGVyIil9byhsYSwicmVtYXJrSHRtbCIpO3ZhciBFQT17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBIeSh0LGUpe2xldCByPS0xLG47aWYoZS5leHRlbnNpb25zKWZvcig7KytyPGUuZXh0ZW5zaW9ucy5sZW5ndGg7KUh5KHQsZS5leHRlbnNpb25zW3JdKTtmb3IobiBpbiBlKWlmKEVBLmNhbGwoZSxuKSlzd2l0Y2gobil7Y2FzZSJleHRlbnNpb25zIjpicmVhaztjYXNlInVuc2FmZSI6e2hEKHRbbl0sZVtuXSk7YnJlYWt9Y2FzZSJqb2luIjp7aEQodFtuXSxlW25dKTticmVha31jYXNlImhhbmRsZXJzIjp7REEodFtuXSxlW25dKTticmVha31kZWZhdWx0OnQub3B0aW9uc1tuXT1lW25dfXJldHVybiB0fW8oSHksImNvbmZpZ3VyZSIpO2Z1bmN0aW9uIGhEKHQsZSl7ZSYmdC5wdXNoKC4uLmUpfW8oaEQsImxpc3QiKTtmdW5jdGlvbiBEQSh0LGUpe2UmJk9iamVjdC5hc3NpZ24odCxlKX1vKERBLCJtYXAiKTtmdW5jdGlvbiBkRCh0LGUscixuKXtsZXQgaT1yLmVudGVyKCJibG9ja3F1b3RlIikscz1yLmNyZWF0ZVRyYWNrZXIobik7cy5tb3ZlKCI+ICIpLHMuc2hpZnQoMik7bGV0IGE9ci5pbmRlbnRMaW5lcyhyLmNvbnRhaW5lckZsb3codCxzLmN1cnJlbnQoKSksQ0EpO3JldHVybiBpKCksYX1vKGRELCJibG9ja3F1b3RlIik7ZnVuY3Rpb24gQ0EodCxlLHIpe3JldHVybiI+Iisocj8iIjoiICIpK3R9byhDQSwibWFwIik7ZnVuY3Rpb24gVWgodCxlKXtyZXR1cm4gbUQodCxlLmluQ29uc3RydWN0LCEwKSYmIW1EKHQsZS5ub3RJbkNvbnN0cnVjdCwhMSl9byhVaCwicGF0dGVybkluU2NvcGUiKTtmdW5jdGlvbiBtRCh0LGUscil7aWYodHlwZW9mIGU9PSJzdHJpbmciJiYoZT1bZV0pLCFlfHxlLmxlbmd0aD09PTApcmV0dXJuIHI7bGV0IG49LTE7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHQuaW5jbHVkZXMoZVtuXSkpcmV0dXJuITA7cmV0dXJuITF9byhtRCwibGlzdEluU2NvcGUiKTtmdW5jdGlvbiBqeSh0LGUscixuKXtsZXQgaT0tMTtmb3IoOysraTxyLnVuc2FmZS5sZW5ndGg7KWlmKHIudW5zYWZlW2ldLmNoYXJhY3Rlcj09PWAKYCYmVWgoci5zdGFjayxyLnVuc2FmZVtpXSkpcmV0dXJuL1sgXHRdLy50ZXN0KG4uYmVmb3JlKT8iIjoiICI7cmV0dXJuYFxcCmB9byhqeSwiaGFyZEJyZWFrIik7ZnVuY3Rpb24gZ0QodCxlKXtsZXQgcj1TdHJpbmcodCksbj1yLmluZGV4T2YoZSksaT1uLHM9MCxhPTA7aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIHN1YnN0cmluZyIpO2Zvcig7biE9PS0xOyluPT09aT8rK3M+YSYmKGE9cyk6cz0xLGk9bitlLmxlbmd0aCxuPXIuaW5kZXhPZihlLGkpO3JldHVybiBhfW8oZ0QsImxvbmdlc3RTdHJlYWsiKTtmdW5jdGlvbiByYyh0LGUpe3JldHVybiEhKGUub3B0aW9ucy5mZW5jZXM9PT0hMSYmdC52YWx1ZSYmIXQubGFuZyYmL1teIFxyXG5dLy50ZXN0KHQudmFsdWUpJiYhL15bXHQgXSooPzpbXHJcbl18JCl8KD86XnxbXHJcbl0pW1x0IF0qJC8udGVzdCh0LnZhbHVlKSl9byhyYywiZm9ybWF0Q29kZUFzSW5kZW50ZWQiKTtmdW5jdGlvbiB5RCh0KXtsZXQgZT10Lm9wdGlvbnMuZmVuY2V8fCJgIjtpZihlIT09ImAiJiZlIT09In4iKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNlcmlhbGl6ZSBjb2RlIHdpdGggYCIrZSsiYCBmb3IgYG9wdGlvbnMuZmVuY2VgLCBleHBlY3RlZCBgYCBgIGBgIG9yIGB+YCIpO3JldHVybiBlfW8oeUQsImNoZWNrRmVuY2UiKTtmdW5jdGlvbiB4RCh0LGUscixuKXtsZXQgaT15RChyKSxzPXQudmFsdWV8fCIiLGE9aT09PSJgIj8iR3JhdmVBY2NlbnQiOiJUaWxkZSI7aWYocmModCxyKSl7bGV0IHA9ci5lbnRlcigiY29kZUluZGVudGVkIiksaD1yLmluZGVudExpbmVzKHMsTUEpO3JldHVybiBwKCksaH1sZXQgbD1yLmNyZWF0ZVRyYWNrZXIobiksYz1pLnJlcGVhdChNYXRoLm1heChnRChzLGkpKzEsMykpLHU9ci5lbnRlcigiY29kZUZlbmNlZCIpLGY9bC5tb3ZlKGMpO2lmKHQubGFuZyl7bGV0IHA9ci5lbnRlcihgY29kZUZlbmNlZExhbmcke2F9YCk7Zis9bC5tb3ZlKHIuc2FmZSh0Lmxhbmcse2JlZm9yZTpmLGFmdGVyOiIgIixlbmNvZGU6WyJgIl0sLi4ubC5jdXJyZW50KCl9KSkscCgpfWlmKHQubGFuZyYmdC5tZXRhKXtsZXQgcD1yLmVudGVyKGBjb2RlRmVuY2VkTWV0YSR7YX1gKTtmKz1sLm1vdmUoIiAiKSxmKz1sLm1vdmUoci5zYWZlKHQubWV0YSx7YmVmb3JlOmYsYWZ0ZXI6YApgLGVuY29kZTpbImAiXSwuLi5sLmN1cnJlbnQoKX0pKSxwKCl9cmV0dXJuIGYrPWwubW92ZShgCmApLHMmJihmKz1sLm1vdmUocytgCmApKSxmKz1sLm1vdmUoYyksdSgpLGZ9byh4RCwiY29kZSIpO2Z1bmN0aW9uIE1BKHQsZSxyKXtyZXR1cm4ocj8iIjoiICAgICIpK3R9byhNQSwibWFwIik7ZnVuY3Rpb24gY2EodCl7bGV0IGU9dC5vcHRpb25zLnF1b3RlfHwnIic7aWYoZSE9PSciJyYmZSE9PSInIil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXJpYWxpemUgdGl0bGUgd2l0aCBgIitlKyJgIGZvciBgb3B0aW9ucy5xdW90ZWAsIGV4cGVjdGVkIGBcImAsIG9yIGAnYCIpO3JldHVybiBlfW8oY2EsImNoZWNrUXVvdGUiKTtmdW5jdGlvbiBiRCh0LGUscixuKXtsZXQgaT1jYShyKSxzPWk9PT0nIic/IlF1b3RlIjoiQXBvc3Ryb3BoZSIsYT1yLmVudGVyKCJkZWZpbml0aW9uIiksbD1yLmVudGVyKCJsYWJlbCIpLGM9ci5jcmVhdGVUcmFja2VyKG4pLHU9Yy5tb3ZlKCJbIik7cmV0dXJuIHUrPWMubW92ZShyLnNhZmUoci5hc3NvY2lhdGlvbklkKHQpLHtiZWZvcmU6dSxhZnRlcjoiXSIsLi4uYy5jdXJyZW50KCl9KSksdSs9Yy5tb3ZlKCJdOiAiKSxsKCksIXQudXJsfHwvW1wwLSBcdTAwN0ZdLy50ZXN0KHQudXJsKT8obD1yLmVudGVyKCJkZXN0aW5hdGlvbkxpdGVyYWwiKSx1Kz1jLm1vdmUoIjwiKSx1Kz1jLm1vdmUoci5zYWZlKHQudXJsLHtiZWZvcmU6dSxhZnRlcjoiPiIsLi4uYy5jdXJyZW50KCl9KSksdSs9Yy5tb3ZlKCI+IikpOihsPXIuZW50ZXIoImRlc3RpbmF0aW9uUmF3IiksdSs9Yy5tb3ZlKHIuc2FmZSh0LnVybCx7YmVmb3JlOnUsYWZ0ZXI6dC50aXRsZT8iICI6YApgLC4uLmMuY3VycmVudCgpfSkpKSxsKCksdC50aXRsZSYmKGw9ci5lbnRlcihgdGl0bGUke3N9YCksdSs9Yy5tb3ZlKCIgIitpKSx1Kz1jLm1vdmUoci5zYWZlKHQudGl0bGUse2JlZm9yZTp1LGFmdGVyOmksLi4uYy5jdXJyZW50KCl9KSksdSs9Yy5tb3ZlKGkpLGwoKSksYSgpLHV9byhiRCwiZGVmaW5pdGlvbiIpO2Z1bmN0aW9uIHdEKHQpe2xldCBlPXQub3B0aW9ucy5lbXBoYXNpc3x8IioiO2lmKGUhPT0iKiImJmUhPT0iXyIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2VyaWFsaXplIGVtcGhhc2lzIHdpdGggYCIrZSsiYCBmb3IgYG9wdGlvbnMuZW1waGFzaXNgLCBleHBlY3RlZCBgKmAsIG9yIGBfYCIpO3JldHVybiBlfW8od0QsImNoZWNrRW1waGFzaXMiKTtmdW5jdGlvbiBhcih0KXtyZXR1cm4iJiN4Iit0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyI7In1vKGFyLCJlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UiKTtmdW5jdGlvbiBxbih0KXtpZih0PT09bnVsbHx8eWUodCl8fHhuKHQpKXJldHVybiAxO2lmKEVvKHQpKXJldHVybiAyfW8ocW4sImNsYXNzaWZ5Q2hhcmFjdGVyIik7ZnVuY3Rpb24gdWEodCxlLHIpe2xldCBuPXFuKHQpLGk9cW4oZSk7cmV0dXJuIG49PT12b2lkIDA/aT09PXZvaWQgMD9yPT09Il8iP3tpbnNpZGU6ITAsb3V0c2lkZTohMH06e2luc2lkZTohMSxvdXRzaWRlOiExfTppPT09MT97aW5zaWRlOiEwLG91dHNpZGU6ITB9OntpbnNpZGU6ITEsb3V0c2lkZTohMH06bj09PTE/aT09PXZvaWQgMD97aW5zaWRlOiExLG91dHNpZGU6ITF9Omk9PT0xP3tpbnNpZGU6ITAsb3V0c2lkZTohMH06e2luc2lkZTohMSxvdXRzaWRlOiExfTppPT09dm9pZCAwP3tpbnNpZGU6ITEsb3V0c2lkZTohMX06aT09PTE/e2luc2lkZTohMCxvdXRzaWRlOiExfTp7aW5zaWRlOiExLG91dHNpZGU6ITF9fW8odWEsImVuY29kZUluZm8iKTtXeS5wZWVrPU9BO2Z1bmN0aW9uIFd5KHQsZSxyLG4pe2xldCBpPXdEKHIpLHM9ci5lbnRlcigiZW1waGFzaXMiKSxhPXIuY3JlYXRlVHJhY2tlcihuKSxsPWEubW92ZShpKSxjPWEubW92ZShyLmNvbnRhaW5lclBocmFzaW5nKHQse2FmdGVyOmksYmVmb3JlOmwsLi4uYS5jdXJyZW50KCl9KSksdT1jLmNoYXJDb2RlQXQoMCksZj11YShuLmJlZm9yZS5jaGFyQ29kZUF0KG4uYmVmb3JlLmxlbmd0aC0xKSx1LGkpO2YuaW5zaWRlJiYoYz1hcih1KStjLnNsaWNlKDEpKTtsZXQgcD1jLmNoYXJDb2RlQXQoYy5sZW5ndGgtMSksaD11YShuLmFmdGVyLmNoYXJDb2RlQXQoMCkscCxpKTtoLmluc2lkZSYmKGM9Yy5zbGljZSgwLC0xKSthcihwKSk7bGV0IGQ9YS5tb3ZlKGkpO3JldHVybiBzKCksci5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm89e2FmdGVyOmgub3V0c2lkZSxiZWZvcmU6Zi5vdXRzaWRlfSxsK2MrZH1vKFd5LCJlbXBoYXNpcyIpO2Z1bmN0aW9uIE9BKHQsZSxyKXtyZXR1cm4gci5vcHRpb25zLmVtcGhhc2lzfHwiKiJ9byhPQSwiZW1waGFzaXNQZWVrIik7dmFyIElBPXt9O2Z1bmN0aW9uIElvKHQsZSl7bGV0IHI9ZXx8SUEsbj10eXBlb2Ygci5pbmNsdWRlSW1hZ2VBbHQ9PSJib29sZWFuIj9yLmluY2x1ZGVJbWFnZUFsdDohMCxpPXR5cGVvZiByLmluY2x1ZGVIdG1sPT0iYm9vbGVhbiI/ci5pbmNsdWRlSHRtbDohMDtyZXR1cm4gdkQodCxuLGkpfW8oSW8sInRvU3RyaW5nIik7ZnVuY3Rpb24gdkQodCxlLHIpe2lmKF9BKHQpKXtpZigidmFsdWUiaW4gdClyZXR1cm4gdC50eXBlPT09Imh0bWwiJiYhcj8iIjp0LnZhbHVlO2lmKGUmJiJhbHQiaW4gdCYmdC5hbHQpcmV0dXJuIHQuYWx0O2lmKCJjaGlsZHJlbiJpbiB0KXJldHVybiBrRCh0LmNoaWxkcmVuLGUscil9cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/a0QodCxlLHIpOiIifW8odkQsIm9uZSIpO2Z1bmN0aW9uIGtEKHQsZSxyKXtsZXQgbj1bXSxpPS0xO2Zvcig7KytpPHQubGVuZ3RoOyluW2ldPXZEKHRbaV0sZSxyKTtyZXR1cm4gbi5qb2luKCIiKX1vKGtELCJhbGwiKTtmdW5jdGlvbiBfQSh0KXtyZXR1cm4hISh0JiZ0eXBlb2YgdD09Im9iamVjdCIpfW8oX0EsIm5vZGUiKTtmdW5jdGlvbiBWaCh0LGUpe2xldCByPSExO3JldHVybiBabCh0LGZ1bmN0aW9uKG4pe2lmKCJ2YWx1ZSJpbiBuJiYvXHI/XG58XHIvLnRlc3Qobi52YWx1ZSl8fG4udHlwZT09PSJicmVhayIpcmV0dXJuIHI9ITAsRG99KSwhISgoIXQuZGVwdGh8fHQuZGVwdGg8MykmJklvKHQpJiYoZS5vcHRpb25zLnNldGV4dHx8cikpfW8oVmgsImZvcm1hdEhlYWRpbmdBc1NldGV4dCIpO2Z1bmN0aW9uIFNEKHQsZSxyLG4pe2xldCBpPU1hdGgubWF4KE1hdGgubWluKDYsdC5kZXB0aHx8MSksMSkscz1yLmNyZWF0ZVRyYWNrZXIobik7aWYoVmgodCxyKSl7bGV0IGY9ci5lbnRlcigiaGVhZGluZ1NldGV4dCIpLHA9ci5lbnRlcigicGhyYXNpbmciKSxoPXIuY29udGFpbmVyUGhyYXNpbmcodCx7Li4ucy5jdXJyZW50KCksYmVmb3JlOmAKYCxhZnRlcjpgCmB9KTtyZXR1cm4gcCgpLGYoKSxoK2AKYCsoaT09PTE/Ij0iOiItIikucmVwZWF0KGgubGVuZ3RoLShNYXRoLm1heChoLmxhc3RJbmRleE9mKCJcciIpLGgubGFzdEluZGV4T2YoYApgKSkrMSkpfWxldCBhPSIjIi5yZXBlYXQoaSksbD1yLmVudGVyKCJoZWFkaW5nQXR4IiksYz1yLmVudGVyKCJwaHJhc2luZyIpO3MubW92ZShhKyIgIik7bGV0IHU9ci5jb250YWluZXJQaHJhc2luZyh0LHtiZWZvcmU6IiMgIixhZnRlcjpgCmAsLi4ucy5jdXJyZW50KCl9KTtyZXR1cm4vXltcdCBdLy50ZXN0KHUpJiYodT1hcih1LmNoYXJDb2RlQXQoMCkpK3Uuc2xpY2UoMSkpLHU9dT9hKyIgIit1OmEsci5vcHRpb25zLmNsb3NlQXR4JiYodSs9IiAiK2EpLGMoKSxsKCksdX1vKFNELCJoZWFkaW5nIik7cXkucGVlaz1QQTtmdW5jdGlvbiBxeSh0KXtyZXR1cm4gdC52YWx1ZXx8IiJ9byhxeSwiaHRtbCIpO2Z1bmN0aW9uIFBBKCl7cmV0dXJuIjwifW8oUEEsImh0bWxQZWVrIik7VXkucGVlaz1OQTtmdW5jdGlvbiBVeSh0LGUscixuKXtsZXQgaT1jYShyKSxzPWk9PT0nIic/IlF1b3RlIjoiQXBvc3Ryb3BoZSIsYT1yLmVudGVyKCJpbWFnZSIpLGw9ci5lbnRlcigibGFiZWwiKSxjPXIuY3JlYXRlVHJhY2tlcihuKSx1PWMubW92ZSgiIVsiKTtyZXR1cm4gdSs9Yy5tb3ZlKHIuc2FmZSh0LmFsdCx7YmVmb3JlOnUsYWZ0ZXI6Il0iLC4uLmMuY3VycmVudCgpfSkpLHUrPWMubW92ZSgiXSgiKSxsKCksIXQudXJsJiZ0LnRpdGxlfHwvW1wwLSBcdTAwN0ZdLy50ZXN0KHQudXJsKT8obD1yLmVudGVyKCJkZXN0aW5hdGlvbkxpdGVyYWwiKSx1Kz1jLm1vdmUoIjwiKSx1Kz1jLm1vdmUoci5zYWZlKHQudXJsLHtiZWZvcmU6dSxhZnRlcjoiPiIsLi4uYy5jdXJyZW50KCl9KSksdSs9Yy5tb3ZlKCI+IikpOihsPXIuZW50ZXIoImRlc3RpbmF0aW9uUmF3IiksdSs9Yy5tb3ZlKHIuc2FmZSh0LnVybCx7YmVmb3JlOnUsYWZ0ZXI6dC50aXRsZT8iICI6IikiLC4uLmMuY3VycmVudCgpfSkpKSxsKCksdC50aXRsZSYmKGw9ci5lbnRlcihgdGl0bGUke3N9YCksdSs9Yy5tb3ZlKCIgIitpKSx1Kz1jLm1vdmUoci5zYWZlKHQudGl0bGUse2JlZm9yZTp1LGFmdGVyOmksLi4uYy5jdXJyZW50KCl9KSksdSs9Yy5tb3ZlKGkpLGwoKSksdSs9Yy5tb3ZlKCIpIiksYSgpLHV9byhVeSwiaW1hZ2UiKTtmdW5jdGlvbiBOQSgpe3JldHVybiIhIn1vKE5BLCJpbWFnZVBlZWsiKTtWeS5wZWVrPVJBO2Z1bmN0aW9uIFZ5KHQsZSxyLG4pe2xldCBpPXQucmVmZXJlbmNlVHlwZSxzPXIuZW50ZXIoImltYWdlUmVmZXJlbmNlIiksYT1yLmVudGVyKCJsYWJlbCIpLGw9ci5jcmVhdGVUcmFja2VyKG4pLGM9bC5tb3ZlKCIhWyIpLHU9ci5zYWZlKHQuYWx0LHtiZWZvcmU6YyxhZnRlcjoiXSIsLi4ubC5jdXJyZW50KCl9KTtjKz1sLm1vdmUodSsiXVsiKSxhKCk7bGV0IGY9ci5zdGFjaztyLnN0YWNrPVtdLGE9ci5lbnRlcigicmVmZXJlbmNlIik7bGV0IHA9ci5zYWZlKHIuYXNzb2NpYXRpb25JZCh0KSx7YmVmb3JlOmMsYWZ0ZXI6Il0iLC4uLmwuY3VycmVudCgpfSk7cmV0dXJuIGEoKSxyLnN0YWNrPWYscygpLGk9PT0iZnVsbCJ8fCF1fHx1IT09cD9jKz1sLm1vdmUocCsiXSIpOmk9PT0ic2hvcnRjdXQiP2M9Yy5zbGljZSgwLC0xKTpjKz1sLm1vdmUoIl0iKSxjfW8oVnksImltYWdlUmVmZXJlbmNlIik7ZnVuY3Rpb24gUkEoKXtyZXR1cm4iISJ9byhSQSwiaW1hZ2VSZWZlcmVuY2VQZWVrIik7WXkucGVlaz1MQTtmdW5jdGlvbiBZeSh0LGUscil7bGV0IG49dC52YWx1ZXx8IiIsaT0iYCIscz0tMTtmb3IoO25ldyBSZWdFeHAoIihefFteYF0pIitpKyIoW15gXXwkKSIpLnRlc3Qobik7KWkrPSJgIjtmb3IoL1teIFxyXG5dLy50ZXN0KG4pJiYoL15bIFxyXG5dLy50ZXN0KG4pJiYvWyBcclxuXSQvLnRlc3Qobil8fC9eYHxgJC8udGVzdChuKSkmJihuPSIgIituKyIgIik7KytzPHIudW5zYWZlLmxlbmd0aDspe2xldCBhPXIudW5zYWZlW3NdLGw9ci5jb21waWxlUGF0dGVybihhKSxjO2lmKGEuYXRCcmVhaylmb3IoO2M9bC5leGVjKG4pOyl7bGV0IHU9Yy5pbmRleDtuLmNoYXJDb2RlQXQodSk9PT0xMCYmbi5jaGFyQ29kZUF0KHUtMSk9PT0xMyYmdS0tLG49bi5zbGljZSgwLHUpKyIgIituLnNsaWNlKGMuaW5kZXgrMSl9fXJldHVybiBpK24raX1vKFl5LCJpbmxpbmVDb2RlIik7ZnVuY3Rpb24gTEEoKXtyZXR1cm4iYCJ9byhMQSwiaW5saW5lQ29kZVBlZWsiKTtmdW5jdGlvbiBHeSh0LGUpe2xldCByPUlvKHQpO3JldHVybiEhKCFlLm9wdGlvbnMucmVzb3VyY2VMaW5rJiZ0LnVybCYmIXQudGl0bGUmJnQuY2hpbGRyZW4mJnQuY2hpbGRyZW4ubGVuZ3RoPT09MSYmdC5jaGlsZHJlblswXS50eXBlPT09InRleHQiJiYocj09PXQudXJsfHwibWFpbHRvOiIrcj09PXQudXJsKSYmL15bYS16XVthLXorLi1dKzovaS50ZXN0KHQudXJsKSYmIS9bXDAtIDw+XHUwMDdGXS8udGVzdCh0LnVybCkpfW8oR3ksImZvcm1hdExpbmtBc0F1dG9saW5rIik7UXkucGVlaz1GQTtmdW5jdGlvbiBReSh0LGUscixuKXtsZXQgaT1jYShyKSxzPWk9PT0nIic/IlF1b3RlIjoiQXBvc3Ryb3BoZSIsYT1yLmNyZWF0ZVRyYWNrZXIobiksbCxjO2lmKEd5KHQscikpe2xldCBmPXIuc3RhY2s7ci5zdGFjaz1bXSxsPXIuZW50ZXIoImF1dG9saW5rIik7bGV0IHA9YS5tb3ZlKCI8Iik7cmV0dXJuIHArPWEubW92ZShyLmNvbnRhaW5lclBocmFzaW5nKHQse2JlZm9yZTpwLGFmdGVyOiI+IiwuLi5hLmN1cnJlbnQoKX0pKSxwKz1hLm1vdmUoIj4iKSxsKCksci5zdGFjaz1mLHB9bD1yLmVudGVyKCJsaW5rIiksYz1yLmVudGVyKCJsYWJlbCIpO2xldCB1PWEubW92ZSgiWyIpO3JldHVybiB1Kz1hLm1vdmUoci5jb250YWluZXJQaHJhc2luZyh0LHtiZWZvcmU6dSxhZnRlcjoiXSgiLC4uLmEuY3VycmVudCgpfSkpLHUrPWEubW92ZSgiXSgiKSxjKCksIXQudXJsJiZ0LnRpdGxlfHwvW1wwLSBcdTAwN0ZdLy50ZXN0KHQudXJsKT8oYz1yLmVudGVyKCJkZXN0aW5hdGlvbkxpdGVyYWwiKSx1Kz1hLm1vdmUoIjwiKSx1Kz1hLm1vdmUoci5zYWZlKHQudXJsLHtiZWZvcmU6dSxhZnRlcjoiPiIsLi4uYS5jdXJyZW50KCl9KSksdSs9YS5tb3ZlKCI+IikpOihjPXIuZW50ZXIoImRlc3RpbmF0aW9uUmF3IiksdSs9YS5tb3ZlKHIuc2FmZSh0LnVybCx7YmVmb3JlOnUsYWZ0ZXI6dC50aXRsZT8iICI6IikiLC4uLmEuY3VycmVudCgpfSkpKSxjKCksdC50aXRsZSYmKGM9ci5lbnRlcihgdGl0bGUke3N9YCksdSs9YS5tb3ZlKCIgIitpKSx1Kz1hLm1vdmUoci5zYWZlKHQudGl0bGUse2JlZm9yZTp1LGFmdGVyOmksLi4uYS5jdXJyZW50KCl9KSksdSs9YS5tb3ZlKGkpLGMoKSksdSs9YS5tb3ZlKCIpIiksbCgpLHV9byhReSwibGluayIpO2Z1bmN0aW9uIEZBKHQsZSxyKXtyZXR1cm4gR3kodCxyKT8iPCI6IlsifW8oRkEsImxpbmtQZWVrIik7SnkucGVlaz1BQTtmdW5jdGlvbiBKeSh0LGUscixuKXtsZXQgaT10LnJlZmVyZW5jZVR5cGUscz1yLmVudGVyKCJsaW5rUmVmZXJlbmNlIiksYT1yLmVudGVyKCJsYWJlbCIpLGw9ci5jcmVhdGVUcmFja2VyKG4pLGM9bC5tb3ZlKCJbIiksdT1yLmNvbnRhaW5lclBocmFzaW5nKHQse2JlZm9yZTpjLGFmdGVyOiJdIiwuLi5sLmN1cnJlbnQoKX0pO2MrPWwubW92ZSh1KyJdWyIpLGEoKTtsZXQgZj1yLnN0YWNrO3Iuc3RhY2s9W10sYT1yLmVudGVyKCJyZWZlcmVuY2UiKTtsZXQgcD1yLnNhZmUoci5hc3NvY2lhdGlvbklkKHQpLHtiZWZvcmU6YyxhZnRlcjoiXSIsLi4ubC5jdXJyZW50KCl9KTtyZXR1cm4gYSgpLHIuc3RhY2s9ZixzKCksaT09PSJmdWxsInx8IXV8fHUhPT1wP2MrPWwubW92ZShwKyJdIik6aT09PSJzaG9ydGN1dCI/Yz1jLnNsaWNlKDAsLTEpOmMrPWwubW92ZSgiXSIpLGN9byhKeSwibGlua1JlZmVyZW5jZSIpO2Z1bmN0aW9uIEFBKCl7cmV0dXJuIlsifW8oQUEsImxpbmtSZWZlcmVuY2VQZWVrIik7ZnVuY3Rpb24gZmEodCl7bGV0IGU9dC5vcHRpb25zLmJ1bGxldHx8IioiO2lmKGUhPT0iKiImJmUhPT0iKyImJmUhPT0iLSIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2VyaWFsaXplIGl0ZW1zIHdpdGggYCIrZSsiYCBmb3IgYG9wdGlvbnMuYnVsbGV0YCwgZXhwZWN0ZWQgYCpgLCBgK2AsIG9yIGAtYCIpO3JldHVybiBlfW8oZmEsImNoZWNrQnVsbGV0Iik7ZnVuY3Rpb24gVEQodCl7bGV0IGU9ZmEodCkscj10Lm9wdGlvbnMuYnVsbGV0T3RoZXI7aWYoIXIpcmV0dXJuIGU9PT0iKiI/Ii0iOiIqIjtpZihyIT09IioiJiZyIT09IisiJiZyIT09Ii0iKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNlcmlhbGl6ZSBpdGVtcyB3aXRoIGAiK3IrImAgZm9yIGBvcHRpb25zLmJ1bGxldE90aGVyYCwgZXhwZWN0ZWQgYCpgLCBgK2AsIG9yIGAtYCIpO2lmKHI9PT1lKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgYGJ1bGxldGAgKGAiK2UrImApIGFuZCBgYnVsbGV0T3RoZXJgIChgIityKyJgKSB0byBiZSBkaWZmZXJlbnQiKTtyZXR1cm4gcn1vKFRELCJjaGVja0J1bGxldE90aGVyIik7ZnVuY3Rpb24gRUQodCl7bGV0IGU9dC5vcHRpb25zLmJ1bGxldE9yZGVyZWR8fCIuIjtpZihlIT09Ii4iJiZlIT09IikiKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNlcmlhbGl6ZSBpdGVtcyB3aXRoIGAiK2UrImAgZm9yIGBvcHRpb25zLmJ1bGxldE9yZGVyZWRgLCBleHBlY3RlZCBgLmAgb3IgYClgIik7cmV0dXJuIGV9byhFRCwiY2hlY2tCdWxsZXRPcmRlcmVkIik7ZnVuY3Rpb24gWWgodCl7bGV0IGU9dC5vcHRpb25zLnJ1bGV8fCIqIjtpZihlIT09IioiJiZlIT09Ii0iJiZlIT09Il8iKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNlcmlhbGl6ZSBydWxlcyB3aXRoIGAiK2UrImAgZm9yIGBvcHRpb25zLnJ1bGVgLCBleHBlY3RlZCBgKmAsIGAtYCwgb3IgYF9gIik7cmV0dXJuIGV9byhZaCwiY2hlY2tSdWxlIik7ZnVuY3Rpb24gREQodCxlLHIsbil7bGV0IGk9ci5lbnRlcigibGlzdCIpLHM9ci5idWxsZXRDdXJyZW50LGE9dC5vcmRlcmVkP0VEKHIpOmZhKHIpLGw9dC5vcmRlcmVkP2E9PT0iLiI/IikiOiIuIjpURChyKSxjPWUmJnIuYnVsbGV0TGFzdFVzZWQ/YT09PXIuYnVsbGV0TGFzdFVzZWQ6ITE7aWYoIXQub3JkZXJlZCl7bGV0IGY9dC5jaGlsZHJlbj90LmNoaWxkcmVuWzBdOnZvaWQgMDtpZigoYT09PSIqInx8YT09PSItIikmJmYmJighZi5jaGlsZHJlbnx8IWYuY2hpbGRyZW5bMF0pJiZyLnN0YWNrW3Iuc3RhY2subGVuZ3RoLTFdPT09Imxpc3QiJiZyLnN0YWNrW3Iuc3RhY2subGVuZ3RoLTJdPT09Imxpc3RJdGVtIiYmci5zdGFja1tyLnN0YWNrLmxlbmd0aC0zXT09PSJsaXN0IiYmci5zdGFja1tyLnN0YWNrLmxlbmd0aC00XT09PSJsaXN0SXRlbSImJnIuaW5kZXhTdGFja1tyLmluZGV4U3RhY2subGVuZ3RoLTFdPT09MCYmci5pbmRleFN0YWNrW3IuaW5kZXhTdGFjay5sZW5ndGgtMl09PT0wJiZyLmluZGV4U3RhY2tbci5pbmRleFN0YWNrLmxlbmd0aC0zXT09PTAmJihjPSEwKSxZaChyKT09PWEmJmYpe2xldCBwPS0xO2Zvcig7KytwPHQuY2hpbGRyZW4ubGVuZ3RoOyl7bGV0IGg9dC5jaGlsZHJlbltwXTtpZihoJiZoLnR5cGU9PT0ibGlzdEl0ZW0iJiZoLmNoaWxkcmVuJiZoLmNoaWxkcmVuWzBdJiZoLmNoaWxkcmVuWzBdLnR5cGU9PT0idGhlbWF0aWNCcmVhayIpe2M9ITA7YnJlYWt9fX19YyYmKGE9bCksci5idWxsZXRDdXJyZW50PWE7bGV0IHU9ci5jb250YWluZXJGbG93KHQsbik7cmV0dXJuIHIuYnVsbGV0TGFzdFVzZWQ9YSxyLmJ1bGxldEN1cnJlbnQ9cyxpKCksdX1vKERELCJsaXN0Iik7ZnVuY3Rpb24gQ0QodCl7bGV0IGU9dC5vcHRpb25zLmxpc3RJdGVtSW5kZW50fHwib25lIjtpZihlIT09InRhYiImJmUhPT0ib25lIiYmZSE9PSJtaXhlZCIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2VyaWFsaXplIGl0ZW1zIHdpdGggYCIrZSsiYCBmb3IgYG9wdGlvbnMubGlzdEl0ZW1JbmRlbnRgLCBleHBlY3RlZCBgdGFiYCwgYG9uZWAsIG9yIGBtaXhlZGAiKTtyZXR1cm4gZX1vKENELCJjaGVja0xpc3RJdGVtSW5kZW50Iik7ZnVuY3Rpb24gTUQodCxlLHIsbil7bGV0IGk9Q0Qocikscz1yLmJ1bGxldEN1cnJlbnR8fGZhKHIpO2UmJmUudHlwZT09PSJsaXN0IiYmZS5vcmRlcmVkJiYocz0odHlwZW9mIGUuc3RhcnQ9PSJudW1iZXIiJiZlLnN0YXJ0Pi0xP2Uuc3RhcnQ6MSkrKHIub3B0aW9ucy5pbmNyZW1lbnRMaXN0TWFya2VyPT09ITE/MDplLmNoaWxkcmVuLmluZGV4T2YodCkpK3MpO2xldCBhPXMubGVuZ3RoKzE7KGk9PT0idGFiInx8aT09PSJtaXhlZCImJihlJiZlLnR5cGU9PT0ibGlzdCImJmUuc3ByZWFkfHx0LnNwcmVhZCkpJiYoYT1NYXRoLmNlaWwoYS80KSo0KTtsZXQgbD1yLmNyZWF0ZVRyYWNrZXIobik7bC5tb3ZlKHMrIiAiLnJlcGVhdChhLXMubGVuZ3RoKSksbC5zaGlmdChhKTtsZXQgYz1yLmVudGVyKCJsaXN0SXRlbSIpLHU9ci5pbmRlbnRMaW5lcyhyLmNvbnRhaW5lckZsb3codCxsLmN1cnJlbnQoKSksZik7cmV0dXJuIGMoKSx1O2Z1bmN0aW9uIGYocCxoLGQpe3JldHVybiBoPyhkPyIiOiIgIi5yZXBlYXQoYSkpK3A6KGQ/czpzKyIgIi5yZXBlYXQoYS1zLmxlbmd0aCkpK3B9byhmLCJtYXAiKX1vKE1ELCJsaXN0SXRlbSIpO2Z1bmN0aW9uIE9EKHQsZSxyLG4pe2xldCBpPXIuZW50ZXIoInBhcmFncmFwaCIpLHM9ci5lbnRlcigicGhyYXNpbmciKSxhPXIuY29udGFpbmVyUGhyYXNpbmcodCxuKTtyZXR1cm4gcygpLGkoKSxhfW8oT0QsInBhcmFncmFwaCIpO3ZhciBLeT16bihbImJyZWFrIiwiZGVsZXRlIiwiZW1waGFzaXMiLCJmb290bm90ZSIsImZvb3Rub3RlUmVmZXJlbmNlIiwiaW1hZ2UiLCJpbWFnZVJlZmVyZW5jZSIsImlubGluZUNvZGUiLCJpbmxpbmVNYXRoIiwibGluayIsImxpbmtSZWZlcmVuY2UiLCJtZHhKc3hUZXh0RWxlbWVudCIsIm1keFRleHRFeHByZXNzaW9uIiwic3Ryb25nIiwidGV4dCIsInRleHREaXJlY3RpdmUiXSk7ZnVuY3Rpb24gSUQodCxlLHIsbil7cmV0dXJuKHQuY2hpbGRyZW4uc29tZShmdW5jdGlvbihhKXtyZXR1cm4gS3koYSl9KT9yLmNvbnRhaW5lclBocmFzaW5nOnIuY29udGFpbmVyRmxvdykuY2FsbChyLHQsbil9byhJRCwicm9vdCIpO2Z1bmN0aW9uIF9EKHQpe2xldCBlPXQub3B0aW9ucy5zdHJvbmd8fCIqIjtpZihlIT09IioiJiZlIT09Il8iKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNlcmlhbGl6ZSBzdHJvbmcgd2l0aCBgIitlKyJgIGZvciBgb3B0aW9ucy5zdHJvbmdgLCBleHBlY3RlZCBgKmAsIG9yIGBfYCIpO3JldHVybiBlfW8oX0QsImNoZWNrU3Ryb25nIik7WHkucGVlaz0kQTtmdW5jdGlvbiBYeSh0LGUscixuKXtsZXQgaT1fRChyKSxzPXIuZW50ZXIoInN0cm9uZyIpLGE9ci5jcmVhdGVUcmFja2VyKG4pLGw9YS5tb3ZlKGkraSksYz1hLm1vdmUoci5jb250YWluZXJQaHJhc2luZyh0LHthZnRlcjppLGJlZm9yZTpsLC4uLmEuY3VycmVudCgpfSkpLHU9Yy5jaGFyQ29kZUF0KDApLGY9dWEobi5iZWZvcmUuY2hhckNvZGVBdChuLmJlZm9yZS5sZW5ndGgtMSksdSxpKTtmLmluc2lkZSYmKGM9YXIodSkrYy5zbGljZSgxKSk7bGV0IHA9Yy5jaGFyQ29kZUF0KGMubGVuZ3RoLTEpLGg9dWEobi5hZnRlci5jaGFyQ29kZUF0KDApLHAsaSk7aC5pbnNpZGUmJihjPWMuc2xpY2UoMCwtMSkrYXIocCkpO2xldCBkPWEubW92ZShpK2kpO3JldHVybiBzKCksci5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm89e2FmdGVyOmgub3V0c2lkZSxiZWZvcmU6Zi5vdXRzaWRlfSxsK2MrZH1vKFh5LCJzdHJvbmciKTtmdW5jdGlvbiAkQSh0LGUscil7cmV0dXJuIHIub3B0aW9ucy5zdHJvbmd8fCIqIn1vKCRBLCJzdHJvbmdQZWVrIik7ZnVuY3Rpb24gUEQodCxlLHIsbil7cmV0dXJuIHIuc2FmZSh0LnZhbHVlLG4pfW8oUEQsInRleHQiKTtmdW5jdGlvbiBORCh0KXtsZXQgZT10Lm9wdGlvbnMucnVsZVJlcGV0aXRpb258fDM7aWYoZTwzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNlcmlhbGl6ZSBydWxlcyB3aXRoIHJlcGV0aXRpb24gYCIrZSsiYCBmb3IgYG9wdGlvbnMucnVsZVJlcGV0aXRpb25gLCBleHBlY3RlZCBgM2Agb3IgbW9yZSIpO3JldHVybiBlfW8oTkQsImNoZWNrUnVsZVJlcGV0aXRpb24iKTtmdW5jdGlvbiBSRCh0LGUscil7bGV0IG49KFloKHIpKyhyLm9wdGlvbnMucnVsZVNwYWNlcz8iICI6IiIpKS5yZXBlYXQoTkQocikpO3JldHVybiByLm9wdGlvbnMucnVsZVNwYWNlcz9uLnNsaWNlKDAsLTEpOm59byhSRCwidGhlbWF0aWNCcmVhayIpO3ZhciBfbz17YmxvY2txdW90ZTpkRCxicmVhazpqeSxjb2RlOnhELGRlZmluaXRpb246YkQsZW1waGFzaXM6V3ksaGFyZEJyZWFrOmp5LGhlYWRpbmc6U0QsaHRtbDpxeSxpbWFnZTpVeSxpbWFnZVJlZmVyZW5jZTpWeSxpbmxpbmVDb2RlOll5LGxpbms6UXksbGlua1JlZmVyZW5jZTpKeSxsaXN0OkRELGxpc3RJdGVtOk1ELHBhcmFncmFwaDpPRCxyb290OklELHN0cm9uZzpYeSx0ZXh0OlBELHRoZW1hdGljQnJlYWs6UkR9O3ZhciBMRD1bQkFdO2Z1bmN0aW9uIEJBKHQsZSxyLG4pe2lmKGUudHlwZT09PSJjb2RlIiYmcmMoZSxuKSYmKHQudHlwZT09PSJsaXN0Inx8dC50eXBlPT09ZS50eXBlJiZyYyh0LG4pKSlyZXR1cm4hMTtpZigic3ByZWFkImluIHImJnR5cGVvZiByLnNwcmVhZD09ImJvb2xlYW4iKXJldHVybiB0LnR5cGU9PT0icGFyYWdyYXBoIiYmKHQudHlwZT09PWUudHlwZXx8ZS50eXBlPT09ImRlZmluaXRpb24ifHxlLnR5cGU9PT0iaGVhZGluZyImJlZoKGUsbikpP3ZvaWQgMDpyLnNwcmVhZD8xOjB9byhCQSwiam9pbkRlZmF1bHRzIik7dmFyIFBvPVsiYXV0b2xpbmsiLCJkZXN0aW5hdGlvbkxpdGVyYWwiLCJkZXN0aW5hdGlvblJhdyIsInJlZmVyZW5jZSIsInRpdGxlUXVvdGUiLCJ0aXRsZUFwb3N0cm9waGUiXSxGRD1be2NoYXJhY3RlcjoiCSIsYWZ0ZXI6IltcXHJcXG5dIixpbkNvbnN0cnVjdDoicGhyYXNpbmcifSx7Y2hhcmFjdGVyOiIJIixiZWZvcmU6IltcXHJcXG5dIixpbkNvbnN0cnVjdDoicGhyYXNpbmcifSx7Y2hhcmFjdGVyOiIJIixpbkNvbnN0cnVjdDpbImNvZGVGZW5jZWRMYW5nR3JhdmVBY2NlbnQiLCJjb2RlRmVuY2VkTGFuZ1RpbGRlIl19LHtjaGFyYWN0ZXI6IlxyIixpbkNvbnN0cnVjdDpbImNvZGVGZW5jZWRMYW5nR3JhdmVBY2NlbnQiLCJjb2RlRmVuY2VkTGFuZ1RpbGRlIiwiY29kZUZlbmNlZE1ldGFHcmF2ZUFjY2VudCIsImNvZGVGZW5jZWRNZXRhVGlsZGUiLCJkZXN0aW5hdGlvbkxpdGVyYWwiLCJoZWFkaW5nQXR4Il19LHtjaGFyYWN0ZXI6YApgLGluQ29uc3RydWN0OlsiY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCIsImNvZGVGZW5jZWRMYW5nVGlsZGUiLCJjb2RlRmVuY2VkTWV0YUdyYXZlQWNjZW50IiwiY29kZUZlbmNlZE1ldGFUaWxkZSIsImRlc3RpbmF0aW9uTGl0ZXJhbCIsImhlYWRpbmdBdHgiXX0se2NoYXJhY3RlcjoiICIsYWZ0ZXI6IltcXHJcXG5dIixpbkNvbnN0cnVjdDoicGhyYXNpbmcifSx7Y2hhcmFjdGVyOiIgIixiZWZvcmU6IltcXHJcXG5dIixpbkNvbnN0cnVjdDoicGhyYXNpbmcifSx7Y2hhcmFjdGVyOiIgIixpbkNvbnN0cnVjdDpbImNvZGVGZW5jZWRMYW5nR3JhdmVBY2NlbnQiLCJjb2RlRmVuY2VkTGFuZ1RpbGRlIl19LHtjaGFyYWN0ZXI6IiEiLGFmdGVyOiJcXFsiLGluQ29uc3RydWN0OiJwaHJhc2luZyIsbm90SW5Db25zdHJ1Y3Q6UG99LHtjaGFyYWN0ZXI6JyInLGluQ29uc3RydWN0OiJ0aXRsZVF1b3RlIn0se2F0QnJlYWs6ITAsY2hhcmFjdGVyOiIjIn0se2NoYXJhY3RlcjoiIyIsaW5Db25zdHJ1Y3Q6ImhlYWRpbmdBdHgiLGFmdGVyOmAoPzpbXHIKXXwkKWB9LHtjaGFyYWN0ZXI6IiYiLGFmdGVyOiJbI0EtWmEtel0iLGluQ29uc3RydWN0OiJwaHJhc2luZyJ9LHtjaGFyYWN0ZXI6IiciLGluQ29uc3RydWN0OiJ0aXRsZUFwb3N0cm9waGUifSx7Y2hhcmFjdGVyOiIoIixpbkNvbnN0cnVjdDoiZGVzdGluYXRpb25SYXcifSx7YmVmb3JlOiJcXF0iLGNoYXJhY3RlcjoiKCIsaW5Db25zdHJ1Y3Q6InBocmFzaW5nIixub3RJbkNvbnN0cnVjdDpQb30se2F0QnJlYWs6ITAsYmVmb3JlOiJcXGQrIixjaGFyYWN0ZXI6IikifSx7Y2hhcmFjdGVyOiIpIixpbkNvbnN0cnVjdDoiZGVzdGluYXRpb25SYXcifSx7YXRCcmVhazohMCxjaGFyYWN0ZXI6IioiLGFmdGVyOmAoPzpbIAlccgoqXSlgfSx7Y2hhcmFjdGVyOiIqIixpbkNvbnN0cnVjdDoicGhyYXNpbmciLG5vdEluQ29uc3RydWN0OlBvfSx7YXRCcmVhazohMCxjaGFyYWN0ZXI6IisiLGFmdGVyOmAoPzpbIAlccgpdKWB9LHthdEJyZWFrOiEwLGNoYXJhY3RlcjoiLSIsYWZ0ZXI6YCg/OlsgCVxyCi1dKWB9LHthdEJyZWFrOiEwLGJlZm9yZToiXFxkKyIsY2hhcmFjdGVyOiIuIixhZnRlcjpgKD86WyAJXHIKXXwkKWB9LHthdEJyZWFrOiEwLGNoYXJhY3RlcjoiPCIsYWZ0ZXI6IlshLz9BLVphLXpdIn0se2NoYXJhY3RlcjoiPCIsYWZ0ZXI6IlshLz9BLVphLXpdIixpbkNvbnN0cnVjdDoicGhyYXNpbmciLG5vdEluQ29uc3RydWN0OlBvfSx7Y2hhcmFjdGVyOiI8IixpbkNvbnN0cnVjdDoiZGVzdGluYXRpb25MaXRlcmFsIn0se2F0QnJlYWs6ITAsY2hhcmFjdGVyOiI9In0se2F0QnJlYWs6ITAsY2hhcmFjdGVyOiI+In0se2NoYXJhY3RlcjoiPiIsaW5Db25zdHJ1Y3Q6ImRlc3RpbmF0aW9uTGl0ZXJhbCJ9LHthdEJyZWFrOiEwLGNoYXJhY3RlcjoiWyJ9LHtjaGFyYWN0ZXI6IlsiLGluQ29uc3RydWN0OiJwaHJhc2luZyIsbm90SW5Db25zdHJ1Y3Q6UG99LHtjaGFyYWN0ZXI6IlsiLGluQ29uc3RydWN0OlsibGFiZWwiLCJyZWZlcmVuY2UiXX0se2NoYXJhY3RlcjoiXFwiLGFmdGVyOiJbXFxyXFxuXSIsaW5Db25zdHJ1Y3Q6InBocmFzaW5nIn0se2NoYXJhY3RlcjoiXSIsaW5Db25zdHJ1Y3Q6WyJsYWJlbCIsInJlZmVyZW5jZSJdfSx7YXRCcmVhazohMCxjaGFyYWN0ZXI6Il8ifSx7Y2hhcmFjdGVyOiJfIixpbkNvbnN0cnVjdDoicGhyYXNpbmciLG5vdEluQ29uc3RydWN0OlBvfSx7YXRCcmVhazohMCxjaGFyYWN0ZXI6ImAifSx7Y2hhcmFjdGVyOiJgIixpbkNvbnN0cnVjdDpbImNvZGVGZW5jZWRMYW5nR3JhdmVBY2NlbnQiLCJjb2RlRmVuY2VkTWV0YUdyYXZlQWNjZW50Il19LHtjaGFyYWN0ZXI6ImAiLGluQ29uc3RydWN0OiJwaHJhc2luZyIsbm90SW5Db25zdHJ1Y3Q6UG99LHthdEJyZWFrOiEwLGNoYXJhY3RlcjoifiJ9XTt2YXIgQUQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaSIpO2Z1bmN0aW9uIE9pKHQpe2xldCBlPSImIit0KyI7IjtBRC5pbm5lckhUTUw9ZTtsZXQgcj1BRC50ZXh0Q29udGVudDtyZXR1cm4gci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpPT09NTkmJnQhPT0ic2VtaSJ8fHI9PT1lPyExOnJ9byhPaSwiZGVjb2RlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UiKTtmdW5jdGlvbiBwYSh0LGUpe2xldCByPU51bWJlci5wYXJzZUludCh0LGUpO3JldHVybiByPDl8fHI9PT0xMXx8cj4xMyYmcjwzMnx8cj4xMjYmJnI8MTYwfHxyPjU1Mjk1JiZyPDU3MzQ0fHxyPjY0OTc1JiZyPDY1MDA4fHwociY2NTUzNSk9PT02NTUzNXx8KHImNjU1MzUpPT09NjU1MzR8fHI+MTExNDExMT8iXHVGRkZEIjpTdHJpbmcuZnJvbUNvZGVQb2ludChyKX1vKHBhLCJkZWNvZGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlIik7dmFyIHpBPS9cXChbIS0vOi1AWy1gey1+XSl8JigjKD86XGR7MSw3fXx4W1xkYS1mXXsxLDZ9KXxbXGRhLXpdezEsMzF9KTsvZ2k7ZnVuY3Rpb24gR2godCl7cmV0dXJuIHQucmVwbGFjZSh6QSxIQSl9byhHaCwiZGVjb2RlU3RyaW5nIik7ZnVuY3Rpb24gSEEodCxlLHIpe2lmKGUpcmV0dXJuIGU7aWYoci5jaGFyQ29kZUF0KDApPT09MzUpe2xldCBpPXIuY2hhckNvZGVBdCgxKSxzPWk9PT0xMjB8fGk9PT04ODtyZXR1cm4gcGEoci5zbGljZShzPzI6MSkscz8xNjoxMCl9cmV0dXJuIE9pKHIpfHx0fW8oSEEsImRlY29kZSIpO2Z1bmN0aW9uICREKHQpe3JldHVybiB0LmxhYmVsfHwhdC5pZGVudGlmaWVyP3QubGFiZWx8fCIiOkdoKHQuaWRlbnRpZmllcil9bygkRCwiYXNzb2NpYXRpb24iKTtmdW5jdGlvbiBCRCh0KXtpZighdC5fY29tcGlsZWQpe2xldCBlPSh0LmF0QnJlYWs/IltcXHJcXG5dW1xcdCBdKiI6IiIpKyh0LmJlZm9yZT8iKD86Iit0LmJlZm9yZSsiKSI6IiIpO3QuX2NvbXBpbGVkPW5ldyBSZWdFeHAoKGU/IigiK2UrIikiOiIiKSsoL1t8XFx7fSgpW1xdXiQrKj8uLV0vLnRlc3QodC5jaGFyYWN0ZXIpPyJcXCI6IiIpK3QuY2hhcmFjdGVyKyh0LmFmdGVyPyIoPzoiK3QuYWZ0ZXIrIikiOiIiKSwiZyIpfXJldHVybiB0Ll9jb21waWxlZH1vKEJELCJjb21waWxlUGF0dGVybiIpO2Z1bmN0aW9uIHpEKHQsZSxyKXtsZXQgbj1lLmluZGV4U3RhY2ssaT10LmNoaWxkcmVufHxbXSxzPVtdLGE9LTEsbD1yLmJlZm9yZSxjO24ucHVzaCgtMSk7bGV0IHU9ZS5jcmVhdGVUcmFja2VyKHIpO2Zvcig7KythPGkubGVuZ3RoOyl7bGV0IGY9aVthXSxwO2lmKG5bbi5sZW5ndGgtMV09YSxhKzE8aS5sZW5ndGgpe2xldCBtPWUuaGFuZGxlLmhhbmRsZXJzW2lbYSsxXS50eXBlXTttJiZtLnBlZWsmJihtPW0ucGVlaykscD1tP20oaVthKzFdLHQsZSx7YmVmb3JlOiIiLGFmdGVyOiIiLC4uLnUuY3VycmVudCgpfSkuY2hhckF0KDApOiIifWVsc2UgcD1yLmFmdGVyO3MubGVuZ3RoPjAmJihsPT09IlxyInx8bD09PWAKYCkmJmYudHlwZT09PSJodG1sIiYmKHNbcy5sZW5ndGgtMV09c1tzLmxlbmd0aC0xXS5yZXBsYWNlKC8oXHI/XG58XHIpJC8sIiAiKSxsPSIgIix1PWUuY3JlYXRlVHJhY2tlcihyKSx1Lm1vdmUocy5qb2luKCIiKSkpO2xldCBoPWUuaGFuZGxlKGYsdCxlLHsuLi51LmN1cnJlbnQoKSxhZnRlcjpwLGJlZm9yZTpsfSk7YyYmYz09PWguc2xpY2UoMCwxKSYmKGg9YXIoYy5jaGFyQ29kZUF0KDApKStoLnNsaWNlKDEpKTtsZXQgZD1lLmF0dGVudGlvbkVuY29kZVN1cnJvdW5kaW5nSW5mbztlLmF0dGVudGlvbkVuY29kZVN1cnJvdW5kaW5nSW5mbz12b2lkIDAsYz12b2lkIDAsZCYmKHMubGVuZ3RoPjAmJmQuYmVmb3JlJiZsPT09c1tzLmxlbmd0aC0xXS5zbGljZSgtMSkmJihzW3MubGVuZ3RoLTFdPXNbcy5sZW5ndGgtMV0uc2xpY2UoMCwtMSkrYXIobC5jaGFyQ29kZUF0KDApKSksZC5hZnRlciYmKGM9cCkpLHUubW92ZShoKSxzLnB1c2goaCksbD1oLnNsaWNlKC0xKX1yZXR1cm4gbi5wb3AoKSxzLmpvaW4oIiIpfW8oekQsImNvbnRhaW5lclBocmFzaW5nIik7ZnVuY3Rpb24gSEQodCxlLHIpe2xldCBuPWUuaW5kZXhTdGFjayxpPXQuY2hpbGRyZW58fFtdLHM9ZS5jcmVhdGVUcmFja2VyKHIpLGE9W10sbD0tMTtmb3Iobi5wdXNoKC0xKTsrK2w8aS5sZW5ndGg7KXtsZXQgYz1pW2xdO25bbi5sZW5ndGgtMV09bCxhLnB1c2gocy5tb3ZlKGUuaGFuZGxlKGMsdCxlLHtiZWZvcmU6YApgLGFmdGVyOmAKYCwuLi5zLmN1cnJlbnQoKX0pKSksYy50eXBlIT09Imxpc3QiJiYoZS5idWxsZXRMYXN0VXNlZD12b2lkIDApLGw8aS5sZW5ndGgtMSYmYS5wdXNoKHMubW92ZShqQShjLGlbbCsxXSx0LGUpKSl9cmV0dXJuIG4ucG9wKCksYS5qb2luKCIiKX1vKEhELCJjb250YWluZXJGbG93Iik7ZnVuY3Rpb24gakEodCxlLHIsbil7bGV0IGk9bi5qb2luLmxlbmd0aDtmb3IoO2ktLTspe2xldCBzPW4uam9pbltpXSh0LGUscixuKTtpZihzPT09ITB8fHM9PT0xKWJyZWFrO2lmKHR5cGVvZiBzPT0ibnVtYmVyIilyZXR1cm5gCmAucmVwZWF0KDErcyk7aWYocz09PSExKXJldHVybmAKCjwhLS0tLT4KCmB9cmV0dXJuYAoKYH1vKGpBLCJiZXR3ZWVuIik7dmFyIFdBPS9ccj9cbnxcci9nO2Z1bmN0aW9uIGpEKHQsZSl7bGV0IHI9W10sbj0wLGk9MCxzO2Zvcig7cz1XQS5leGVjKHQpOylhKHQuc2xpY2UobixzLmluZGV4KSksci5wdXNoKHNbMF0pLG49cy5pbmRleCtzWzBdLmxlbmd0aCxpKys7cmV0dXJuIGEodC5zbGljZShuKSksci5qb2luKCIiKTtmdW5jdGlvbiBhKGwpe3IucHVzaChlKGwsaSwhbCkpfW8oYSwib25lIil9byhqRCwiaW5kZW50TGluZXMiKTtmdW5jdGlvbiBxRCh0LGUscil7bGV0IG49KHIuYmVmb3JlfHwiIikrKGV8fCIiKSsoci5hZnRlcnx8IiIpLGk9W10scz1bXSxhPXt9LGw9LTE7Zm9yKDsrK2w8dC51bnNhZmUubGVuZ3RoOyl7bGV0IGY9dC51bnNhZmVbbF07aWYoIVVoKHQuc3RhY2ssZikpY29udGludWU7bGV0IHA9dC5jb21waWxlUGF0dGVybihmKSxoO2Zvcig7aD1wLmV4ZWMobik7KXtsZXQgZD0iYmVmb3JlImluIGZ8fCEhZi5hdEJyZWFrLG09ImFmdGVyImluIGYsZz1oLmluZGV4KyhkP2hbMV0ubGVuZ3RoOjApO2kuaW5jbHVkZXMoZyk/KGFbZ10uYmVmb3JlJiYhZCYmKGFbZ10uYmVmb3JlPSExKSxhW2ddLmFmdGVyJiYhbSYmKGFbZ10uYWZ0ZXI9ITEpKTooaS5wdXNoKGcpLGFbZ109e2JlZm9yZTpkLGFmdGVyOm19KX19aS5zb3J0KHFBKTtsZXQgYz1yLmJlZm9yZT9yLmJlZm9yZS5sZW5ndGg6MCx1PW4ubGVuZ3RoLShyLmFmdGVyP3IuYWZ0ZXIubGVuZ3RoOjApO2ZvcihsPS0xOysrbDxpLmxlbmd0aDspe2xldCBmPWlbbF07ZjxjfHxmPj11fHxmKzE8dSYmaVtsKzFdPT09ZisxJiZhW2ZdLmFmdGVyJiYhYVtmKzFdLmJlZm9yZSYmIWFbZisxXS5hZnRlcnx8aVtsLTFdPT09Zi0xJiZhW2ZdLmJlZm9yZSYmIWFbZi0xXS5iZWZvcmUmJiFhW2YtMV0uYWZ0ZXJ8fChjIT09ZiYmcy5wdXNoKFdEKG4uc2xpY2UoYyxmKSwiXFwiKSksYz1mLC9bIS0vOi1AWy1gey1+XS8udGVzdChuLmNoYXJBdChmKSkmJighci5lbmNvZGV8fCFyLmVuY29kZS5pbmNsdWRlcyhuLmNoYXJBdChmKSkpP3MucHVzaCgiXFwiKToocy5wdXNoKGFyKG4uY2hhckNvZGVBdChmKSkpLGMrKykpfXJldHVybiBzLnB1c2goV0Qobi5zbGljZShjLHUpLHIuYWZ0ZXIpKSxzLmpvaW4oIiIpfW8ocUQsInNhZmUiKTtmdW5jdGlvbiBxQSh0LGUpe3JldHVybiB0LWV9byhxQSwibnVtZXJpY2FsIik7ZnVuY3Rpb24gV0QodCxlKXtsZXQgcj0vXFwoPz1bIS0vOi1AWy1gey1+XSkvZyxuPVtdLGk9W10scz10K2UsYT0tMSxsPTAsYztmb3IoO2M9ci5leGVjKHMpOyluLnB1c2goYy5pbmRleCk7Zm9yKDsrK2E8bi5sZW5ndGg7KWwhPT1uW2FdJiZpLnB1c2godC5zbGljZShsLG5bYV0pKSxpLnB1c2goIlxcIiksbD1uW2FdO3JldHVybiBpLnB1c2godC5zbGljZShsKSksaS5qb2luKCIiKX1vKFdELCJlc2NhcGVCYWNrc2xhc2hlcyIpO2Z1bmN0aW9uIFVEKHQpe2xldCBlPXR8fHt9LHI9ZS5ub3d8fHt9LG49ZS5saW5lU2hpZnR8fDAsaT1yLmxpbmV8fDEscz1yLmNvbHVtbnx8MTtyZXR1cm57bW92ZTpjLGN1cnJlbnQ6YSxzaGlmdDpsfTtmdW5jdGlvbiBhKCl7cmV0dXJue25vdzp7bGluZTppLGNvbHVtbjpzfSxsaW5lU2hpZnQ6bn19ZnVuY3Rpb24gbCh1KXtuKz11fWZ1bmN0aW9uIGModSl7bGV0IGY9dXx8IiIscD1mLnNwbGl0KC9ccj9cbnxcci9nKSxoPXBbcC5sZW5ndGgtMV07cmV0dXJuIGkrPXAubGVuZ3RoLTEscz1wLmxlbmd0aD09PTE/cytoLmxlbmd0aDoxK2gubGVuZ3RoK24sZn19byhVRCwidHJhY2siKTtmdW5jdGlvbiBaeSh0LGUpe2xldCByPWV8fHt9LG49e2Fzc29jaWF0aW9uSWQ6JEQsY29udGFpbmVyUGhyYXNpbmc6R0EsY29udGFpbmVyRmxvdzpRQSxjcmVhdGVUcmFja2VyOlVELGNvbXBpbGVQYXR0ZXJuOkJELGVudGVyOnMsaGFuZGxlcnM6ey4uLl9vfSxoYW5kbGU6dm9pZCAwLGluZGVudExpbmVzOmpELGluZGV4U3RhY2s6W10sam9pbjpbLi4uTERdLG9wdGlvbnM6e30sc2FmZTpKQSxzdGFjazpbXSx1bnNhZmU6Wy4uLkZEXX07SHkobixyKSxuLm9wdGlvbnMudGlnaHREZWZpbml0aW9ucyYmbi5qb2luLnB1c2goWUEpLG4uaGFuZGxlPUJoKCJ0eXBlIix7aW52YWxpZDpVQSx1bmtub3duOlZBLGhhbmRsZXJzOm4uaGFuZGxlcnN9KTtsZXQgaT1uLmhhbmRsZSh0LHZvaWQgMCxuLHtiZWZvcmU6YApgLGFmdGVyOmAKYCxub3c6e2xpbmU6MSxjb2x1bW46MX0sbGluZVNoaWZ0OjB9KTtyZXR1cm4gaSYmaS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09MTAmJmkuY2hhckNvZGVBdChpLmxlbmd0aC0xKSE9PTEzJiYoaSs9YApgKSxpO2Z1bmN0aW9uIHMoYSl7cmV0dXJuIG4uc3RhY2sucHVzaChhKSxsO2Z1bmN0aW9uIGwoKXtuLnN0YWNrLnBvcCgpfW8obCwiZXhpdCIpfW8ocywiZW50ZXIiKX1vKFp5LCJ0b01hcmtkb3duIik7ZnVuY3Rpb24gVUEodCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaGFuZGxlIHZhbHVlIGAiK3QrImAsIGV4cGVjdGVkIG5vZGUiKX1vKFVBLCJpbnZhbGlkIik7ZnVuY3Rpb24gVkEodCl7bGV0IGU9dDt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBoYW5kbGUgdW5rbm93biBub2RlIGAiK2UudHlwZSsiYCIpfW8oVkEsInVua25vd24iKTtmdW5jdGlvbiBZQSh0LGUpe2lmKHQudHlwZT09PSJkZWZpbml0aW9uIiYmdC50eXBlPT09ZS50eXBlKXJldHVybiAwfW8oWUEsImpvaW5EZWZpbml0aW9uIik7ZnVuY3Rpb24gR0EodCxlKXtyZXR1cm4gekQodCx0aGlzLGUpfW8oR0EsImNvbnRhaW5lclBocmFzaW5nQm91bmQiKTtmdW5jdGlvbiBRQSh0LGUpe3JldHVybiBIRCh0LHRoaXMsZSl9byhRQSwiY29udGFpbmVyRmxvd0JvdW5kIik7ZnVuY3Rpb24gSkEodCxlKXtyZXR1cm4gcUQodGhpcyx0LGUpfW8oSkEsInNhZmVCb3VuZCIpO2Z1bmN0aW9uIGhhKHQpe2xldCBlPXRoaXM7ZS5jb21waWxlcj1yO2Z1bmN0aW9uIHIobil7cmV0dXJuIFp5KG4sey4uLmUuZGF0YSgic2V0dGluZ3MiKSwuLi50LGV4dGVuc2lvbnM6ZS5kYXRhKCJ0b01hcmtkb3duRXh0ZW5zaW9ucyIpfHxbXX0pfW8ociwiY29tcGlsZXIiKX1vKGhhLCJyZW1hcmtTdHJpbmdpZnkiKTtmdW5jdGlvbiBLQSh0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgcj1hcmd1bWVudHNbZV07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJih0W25dPXJbbl0pfXJldHVybiB0fW8oS0EsImV4dGVuZCIpO2Z1bmN0aW9uIGV4KHQsZSl7cmV0dXJuIEFycmF5KGUrMSkuam9pbih0KX1vKGV4LCJyZXBlYXQiKTtmdW5jdGlvbiBWRCh0KXtyZXR1cm4gdC5yZXBsYWNlKC9eXG4qLywiIil9byhWRCwidHJpbUxlYWRpbmdOZXdsaW5lcyIpO2Z1bmN0aW9uIFlEKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlPjAmJnRbZS0xXT09PWAKYDspZS0tO3JldHVybiB0LnN1YnN0cmluZygwLGUpfW8oWUQsInRyaW1UcmFpbGluZ05ld2xpbmVzIik7ZnVuY3Rpb24gR0QodCl7cmV0dXJuIFlEKFZEKHQpKX1vKEdELCJ0cmltTmV3bGluZXMiKTt2YXIgWEE9WyJBRERSRVNTIiwiQVJUSUNMRSIsIkFTSURFIiwiQVVESU8iLCJCTE9DS1FVT1RFIiwiQk9EWSIsIkNBTlZBUyIsIkNFTlRFUiIsIkREIiwiRElSIiwiRElWIiwiREwiLCJEVCIsIkZJRUxEU0VUIiwiRklHQ0FQVElPTiIsIkZJR1VSRSIsIkZPT1RFUiIsIkZPUk0iLCJGUkFNRVNFVCIsIkgxIiwiSDIiLCJIMyIsIkg0IiwiSDUiLCJINiIsIkhFQURFUiIsIkhHUk9VUCIsIkhSIiwiSFRNTCIsIklTSU5ERVgiLCJMSSIsIk1BSU4iLCJNRU5VIiwiTkFWIiwiTk9GUkFNRVMiLCJOT1NDUklQVCIsIk9MIiwiT1VUUFVUIiwiUCIsIlBSRSIsIlNFQ1RJT04iLCJUQUJMRSIsIlRCT0RZIiwiVEQiLCJURk9PVCIsIlRIIiwiVEhFQUQiLCJUUiIsIlVMIl07ZnVuY3Rpb24gdHgodCl7cmV0dXJuIHJ4KHQsWEEpfW8odHgsImlzQmxvY2siKTt2YXIgUUQ9WyJBUkVBIiwiQkFTRSIsIkJSIiwiQ09MIiwiQ09NTUFORCIsIkVNQkVEIiwiSFIiLCJJTUciLCJJTlBVVCIsIktFWUdFTiIsIkxJTksiLCJNRVRBIiwiUEFSQU0iLCJTT1VSQ0UiLCJUUkFDSyIsIldCUiJdO2Z1bmN0aW9uIEpEKHQpe3JldHVybiByeCh0LFFEKX1vKEpELCJpc1ZvaWQiKTtmdW5jdGlvbiBaQSh0KXtyZXR1cm4gWEQodCxRRCl9byhaQSwiaGFzVm9pZCIpO3ZhciBLRD1bIkEiLCJUQUJMRSIsIlRIRUFEIiwiVEJPRFkiLCJURk9PVCIsIlRIIiwiVEQiLCJJRlJBTUUiLCJTQ1JJUFQiLCJBVURJTyIsIlZJREVPIl07ZnVuY3Rpb24gZSQodCl7cmV0dXJuIHJ4KHQsS0QpfW8oZSQsImlzTWVhbmluZ2Z1bFdoZW5CbGFuayIpO2Z1bmN0aW9uIHQkKHQpe3JldHVybiBYRCh0LEtEKX1vKHQkLCJoYXNNZWFuaW5nZnVsV2hlbkJsYW5rIik7ZnVuY3Rpb24gcngodCxlKXtyZXR1cm4gZS5pbmRleE9mKHQubm9kZU5hbWUpPj0wfW8ocngsImlzIik7ZnVuY3Rpb24gWEQodCxlKXtyZXR1cm4gdC5nZXRFbGVtZW50c0J5VGFnTmFtZSYmZS5zb21lKGZ1bmN0aW9uKHIpe3JldHVybiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lKHIpLmxlbmd0aH0pfW8oWEQsImhhcyIpO3ZhciByJD1bWy9cXC9nLCJcXFxcIl0sWy9cKi9nLCJcXCoiXSxbL14tL2csIlxcLSJdLFsvXlwrIC9nLCJcXCsgIl0sWy9eKD0rKS9nLCJcXCQxIl0sWy9eKCN7MSw2fSkgL2csIlxcJDEgIl0sWy9gL2csIlxcYCJdLFsvXn5+fi9nLCJcXH5+fiJdLFsvXFsvZywiXFxbIl0sWy9cXS9nLCJcXF0iXSxbL14+L2csIlxcPiJdLFsvXy9nLCJcXF8iXSxbL14oXGQrKVwuIC9nLCIkMVxcLiAiXV07ZnVuY3Rpb24gWkQodCl7cmV0dXJuIHIkLnJlZHVjZShmdW5jdGlvbihlLHIpe3JldHVybiBlLnJlcGxhY2UoclswXSxyWzFdKX0sdCl9byhaRCwiZXNjYXBlTWFya2Rvd24iKTt2YXIgSXQ9e307SXQucGFyYWdyYXBoPXtmaWx0ZXI6InAiLHJlcGxhY2VtZW50Om8oZnVuY3Rpb24odCl7cmV0dXJuYAoKYCt0K2AKCmB9LCJyZXBsYWNlbWVudCIpfSxJdC5saW5lQnJlYWs9e2ZpbHRlcjoiYnIiLHJlcGxhY2VtZW50Om8oZnVuY3Rpb24odCxlLHIpe3JldHVybiByLmJyK2AKYH0sInJlcGxhY2VtZW50Iil9LEl0LmhlYWRpbmc9e2ZpbHRlcjpbImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiJdLHJlcGxhY2VtZW50Om8oZnVuY3Rpb24odCxlLHIpe3ZhciBuPU51bWJlcihlLm5vZGVOYW1lLmNoYXJBdCgxKSk7aWYoci5oZWFkaW5nU3R5bGU9PT0ic2V0ZXh0IiYmbjwzKXt2YXIgaT1leChuPT09MT8iPSI6Ii0iLHQubGVuZ3RoKTtyZXR1cm5gCgpgK3QrYApgK2krYAoKYH1lbHNlIHJldHVybmAKCmArZXgoIiMiLG4pKyIgIit0K2AKCmB9LCJyZXBsYWNlbWVudCIpfSxJdC5ibG9ja3F1b3RlPXtmaWx0ZXI6ImJsb2NrcXVvdGUiLHJlcGxhY2VtZW50Om8oZnVuY3Rpb24odCl7cmV0dXJuIHQ9R0QodCkucmVwbGFjZSgvXi9nbSwiPiAiKSxgCgpgK3QrYAoKYH0sInJlcGxhY2VtZW50Iil9LEl0Lmxpc3Q9e2ZpbHRlcjpbInVsIiwib2wiXSxyZXBsYWNlbWVudDpvKGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5wYXJlbnROb2RlO3JldHVybiByLm5vZGVOYW1lPT09IkxJIiYmci5sYXN0RWxlbWVudENoaWxkPT09ZT9gCmArdDpgCgpgK3QrYAoKYH0sInJlcGxhY2VtZW50Iil9LEl0Lmxpc3RJdGVtPXtmaWx0ZXI6ImxpIixyZXBsYWNlbWVudDpvKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLmJ1bGxldExpc3RNYXJrZXIrIiAgICIsaT1lLnBhcmVudE5vZGU7aWYoaS5ub2RlTmFtZT09PSJPTCIpe3ZhciBzPWkuZ2V0QXR0cmlidXRlKCJzdGFydCIpLGE9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChpLmNoaWxkcmVuLGUpO249KHM/TnVtYmVyKHMpK2E6YSsxKSsiLiAgIn12YXIgbD0vXG4kLy50ZXN0KHQpO3JldHVybiB0PUdEKHQpKyhsP2AKYDoiIiksdD10LnJlcGxhY2UoL1xuL2dtLGAKYCsiICIucmVwZWF0KG4ubGVuZ3RoKSksbit0KyhlLm5leHRTaWJsaW5nP2AKYDoiIil9LCJyZXBsYWNlbWVudCIpfSxJdC5pbmRlbnRlZENvZGVCbG9jaz17ZmlsdGVyOm8oZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5jb2RlQmxvY2tTdHlsZT09PSJpbmRlbnRlZCImJnQubm9kZU5hbWU9PT0iUFJFIiYmdC5maXJzdENoaWxkJiZ0LmZpcnN0Q2hpbGQubm9kZU5hbWU9PT0iQ09ERSJ9LCJmaWx0ZXIiKSxyZXBsYWNlbWVudDpvKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5gCgogICAgYCtlLmZpcnN0Q2hpbGQudGV4dENvbnRlbnQucmVwbGFjZSgvXG4vZyxgCiAgICBgKStgCgpgfSwicmVwbGFjZW1lbnQiKX0sSXQuZmVuY2VkQ29kZUJsb2NrPXtmaWx0ZXI6byhmdW5jdGlvbih0LGUpe3JldHVybiBlLmNvZGVCbG9ja1N0eWxlPT09ImZlbmNlZCImJnQubm9kZU5hbWU9PT0iUFJFIiYmdC5maXJzdENoaWxkJiZ0LmZpcnN0Q2hpbGQubm9kZU5hbWU9PT0iQ09ERSJ9LCJmaWx0ZXIiKSxyZXBsYWNlbWVudDpvKGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIsaT0obi5tYXRjaCgvbGFuZ3VhZ2UtKFxTKykvKXx8W251bGwsIiJdKVsxXSxzPWUuZmlyc3RDaGlsZC50ZXh0Q29udGVudCxhPXIuZmVuY2UuY2hhckF0KDApLGw9MyxjPW5ldyBSZWdFeHAoIl4iK2ErInszLH0iLCJnbSIpLHU7dT1jLmV4ZWMocyk7KXVbMF0ubGVuZ3RoPj1sJiYobD11WzBdLmxlbmd0aCsxKTt2YXIgZj1leChhLGwpO3JldHVybmAKCmArZitpK2AKYCtzLnJlcGxhY2UoL1xuJC8sIiIpK2AKYCtmK2AKCmB9LCJyZXBsYWNlbWVudCIpfSxJdC5ob3Jpem9udGFsUnVsZT17ZmlsdGVyOiJociIscmVwbGFjZW1lbnQ6byhmdW5jdGlvbih0LGUscil7cmV0dXJuYAoKYCtyLmhyK2AKCmB9LCJyZXBsYWNlbWVudCIpfSxJdC5pbmxpbmVMaW5rPXtmaWx0ZXI6byhmdW5jdGlvbih0LGUpe3JldHVybiBlLmxpbmtTdHlsZT09PSJpbmxpbmVkIiYmdC5ub2RlTmFtZT09PSJBIiYmdC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0sImZpbHRlciIpLHJlcGxhY2VtZW50Om8oZnVuY3Rpb24odCxlKXt2YXIgcj1ueChlLmdldEF0dHJpYnV0ZSgiaHJlZiIpKSxuPWl4KFFoKGUuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKSksaT1uPycgIicrbisnIic6IiI7cmV0dXJuIlsiK3QrIl0oIityK2krIikifSwicmVwbGFjZW1lbnQiKX0sSXQucmVmZXJlbmNlTGluaz17ZmlsdGVyOm8oZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5saW5rU3R5bGU9PT0icmVmZXJlbmNlZCImJnQubm9kZU5hbWU9PT0iQSImJnQuZ2V0QXR0cmlidXRlKCJocmVmIil9LCJmaWx0ZXIiKSxyZXBsYWNlbWVudDpvKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1ueChlLmdldEF0dHJpYnV0ZSgiaHJlZiIpKSxpPVFoKGUuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKTtpJiYoaT0nICInK2l4KGkpKyciJyk7dmFyIHMsYTtzd2l0Y2goci5saW5rUmVmZXJlbmNlU3R5bGUpe2Nhc2UiY29sbGFwc2VkIjpzPSJbIit0KyJdW10iLGE9IlsiK3QrIl06ICIrbitpO2JyZWFrO2Nhc2Uic2hvcnRjdXQiOnM9IlsiK3QrIl0iLGE9IlsiK3QrIl06ICIrbitpO2JyZWFrO2RlZmF1bHQ6dmFyIGw9dGhpcy5yZWZlcmVuY2VzLmxlbmd0aCsxO3M9IlsiK3QrIl1bIitsKyJdIixhPSJbIitsKyJdOiAiK24raX1yZXR1cm4gdGhpcy5yZWZlcmVuY2VzLnB1c2goYSksc30sInJlcGxhY2VtZW50IikscmVmZXJlbmNlczpbXSxhcHBlbmQ6byhmdW5jdGlvbih0KXt2YXIgZT0iIjtyZXR1cm4gdGhpcy5yZWZlcmVuY2VzLmxlbmd0aCYmKGU9YAoKYCt0aGlzLnJlZmVyZW5jZXMuam9pbihgCmApK2AKCmAsdGhpcy5yZWZlcmVuY2VzPVtdKSxlfSwiYXBwZW5kIil9LEl0LmVtcGhhc2lzPXtmaWx0ZXI6WyJlbSIsImkiXSxyZXBsYWNlbWVudDpvKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC50cmltKCk/ci5lbURlbGltaXRlcit0K3IuZW1EZWxpbWl0ZXI6IiJ9LCJyZXBsYWNlbWVudCIpfSxJdC5zdHJvbmc9e2ZpbHRlcjpbInN0cm9uZyIsImIiXSxyZXBsYWNlbWVudDpvKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC50cmltKCk/ci5zdHJvbmdEZWxpbWl0ZXIrdCtyLnN0cm9uZ0RlbGltaXRlcjoiIn0sInJlcGxhY2VtZW50Iil9LEl0LmNvZGU9e2ZpbHRlcjpvKGZ1bmN0aW9uKHQpe3ZhciBlPXQucHJldmlvdXNTaWJsaW5nfHx0Lm5leHRTaWJsaW5nLHI9dC5wYXJlbnROb2RlLm5vZGVOYW1lPT09IlBSRSImJiFlO3JldHVybiB0Lm5vZGVOYW1lPT09IkNPREUiJiYhcn0sImZpbHRlciIpLHJlcGxhY2VtZW50Om8oZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIiI7dD10LnJlcGxhY2UoL1xyP1xufFxyL2csIiAiKTtmb3IodmFyIGU9L15gfF4gLio/W14gXS4qICR8YCQvLnRlc3QodCk/IiAiOiIiLHI9ImAiLG49dC5tYXRjaCgvYCsvZ20pfHxbXTtuLmluZGV4T2YocikhPT0tMTspcj1yKyJgIjtyZXR1cm4gcitlK3QrZStyfSwicmVwbGFjZW1lbnQiKX0sSXQuaW1hZ2U9e2ZpbHRlcjoiaW1nIixyZXBsYWNlbWVudDpvKGZ1bmN0aW9uKHQsZSl7dmFyIHI9WkQoUWgoZS5nZXRBdHRyaWJ1dGUoImFsdCIpKSksbj1ueChlLmdldEF0dHJpYnV0ZSgic3JjIil8fCIiKSxpPVFoKGUuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKSxzPWk/JyAiJytpeChpKSsnIic6IiI7cmV0dXJuIG4/IiFbIityKyJdKCIrbitzKyIpIjoiIn0sInJlcGxhY2VtZW50Iil9O2Z1bmN0aW9uIFFoKHQpe3JldHVybiB0P3QucmVwbGFjZSgvKFxuK1xzKikrL2csYApgKToiIn1vKFFoLCJjbGVhbkF0dHJpYnV0ZSIpO2Z1bmN0aW9uIG54KHQpe3ZhciBlPXQucmVwbGFjZSgvKFs8PigpXSkvZywiXFwkMSIpO3JldHVybiBlLmluZGV4T2YoIiAiKT49MD8iPCIrZSsiPiI6ZX1vKG54LCJlc2NhcGVMaW5rRGVzdGluYXRpb24iKTtmdW5jdGlvbiBpeCh0KXtyZXR1cm4gdC5yZXBsYWNlKC8iL2csJ1xcIicpfW8oaXgsImVzY2FwZUxpbmtUaXRsZSIpO2Z1bmN0aW9uIGVDKHQpe3RoaXMub3B0aW9ucz10LHRoaXMuX2tlZXA9W10sdGhpcy5fcmVtb3ZlPVtdLHRoaXMuYmxhbmtSdWxlPXtyZXBsYWNlbWVudDp0LmJsYW5rUmVwbGFjZW1lbnR9LHRoaXMua2VlcFJlcGxhY2VtZW50PXQua2VlcFJlcGxhY2VtZW50LHRoaXMuZGVmYXVsdFJ1bGU9e3JlcGxhY2VtZW50OnQuZGVmYXVsdFJlcGxhY2VtZW50fSx0aGlzLmFycmF5PVtdO2Zvcih2YXIgZSBpbiB0LnJ1bGVzKXRoaXMuYXJyYXkucHVzaCh0LnJ1bGVzW2VdKX1vKGVDLCJSdWxlcyIpLGVDLnByb3RvdHlwZT17YWRkOm8oZnVuY3Rpb24odCxlKXt0aGlzLmFycmF5LnVuc2hpZnQoZSl9LCJhZGQiKSxrZWVwOm8oZnVuY3Rpb24odCl7dGhpcy5fa2VlcC51bnNoaWZ0KHtmaWx0ZXI6dCxyZXBsYWNlbWVudDp0aGlzLmtlZXBSZXBsYWNlbWVudH0pfSwia2VlcCIpLHJlbW92ZTpvKGZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92ZS51bnNoaWZ0KHtmaWx0ZXI6dCxyZXBsYWNlbWVudDpvKGZ1bmN0aW9uKCl7cmV0dXJuIiJ9LCJyZXBsYWNlbWVudCIpfSl9LCJyZW1vdmUiKSxmb3JOb2RlOm8oZnVuY3Rpb24odCl7aWYodC5pc0JsYW5rKXJldHVybiB0aGlzLmJsYW5rUnVsZTt2YXIgZTtyZXR1cm4oZT1veCh0aGlzLmFycmF5LHQsdGhpcy5vcHRpb25zKSl8fChlPW94KHRoaXMuX2tlZXAsdCx0aGlzLm9wdGlvbnMpKXx8KGU9b3godGhpcy5fcmVtb3ZlLHQsdGhpcy5vcHRpb25zKSk/ZTp0aGlzLmRlZmF1bHRSdWxlfSwiZm9yTm9kZSIpLGZvckVhY2g6byhmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuYXJyYXkubGVuZ3RoO2UrKyl0KHRoaXMuYXJyYXlbZV0sZSl9LCJmb3JFYWNoIil9O2Z1bmN0aW9uIG94KHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtpZihuJChpLGUscikpcmV0dXJuIGl9fW8ob3gsImZpbmRSdWxlIik7ZnVuY3Rpb24gbiQodCxlLHIpe3ZhciBuPXQuZmlsdGVyO2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7aWYobj09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4hMH1lbHNlIGlmKEFycmF5LmlzQXJyYXkobikpe2lmKG4uaW5kZXhPZihlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpPi0xKXJldHVybiEwfWVsc2UgaWYodHlwZW9mIG49PSJmdW5jdGlvbiIpe2lmKG4uY2FsbCh0LGUscikpcmV0dXJuITB9ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJgZmlsdGVyYCBuZWVkcyB0byBiZSBhIHN0cmluZywgYXJyYXksIG9yIGZ1bmN0aW9uIil9byhuJCwiZmlsdGVyVmFsdWUiKTtmdW5jdGlvbiBpJCh0KXt2YXIgZT10LmVsZW1lbnQscj10LmlzQmxvY2ssbj10LmlzVm9pZCxpPXQuaXNQcmV8fGZ1bmN0aW9uKHApe3JldHVybiBwLm5vZGVOYW1lPT09IlBSRSJ9O2lmKCEoIWUuZmlyc3RDaGlsZHx8aShlKSkpe2Zvcih2YXIgcz1udWxsLGE9ITEsbD1udWxsLGM9dEMobCxlLGkpO2MhPT1lOyl7aWYoYy5ub2RlVHlwZT09PTN8fGMubm9kZVR5cGU9PT00KXt2YXIgdT1jLmRhdGEucmVwbGFjZSgvWyBcclxuXHRdKy9nLCIgIik7aWYoKCFzfHwvICQvLnRlc3Qocy5kYXRhKSkmJiFhJiZ1WzBdPT09IiAiJiYodT11LnN1YnN0cigxKSksIXUpe2M9c3goYyk7Y29udGludWV9Yy5kYXRhPXUscz1jfWVsc2UgaWYoYy5ub2RlVHlwZT09PTEpcihjKXx8Yy5ub2RlTmFtZT09PSJCUiI/KHMmJihzLmRhdGE9cy5kYXRhLnJlcGxhY2UoLyAkLywiIikpLHM9bnVsbCxhPSExKTpuKGMpfHxpKGMpPyhzPW51bGwsYT0hMCk6cyYmKGE9ITEpO2Vsc2V7Yz1zeChjKTtjb250aW51ZX12YXIgZj10QyhsLGMsaSk7bD1jLGM9Zn1zJiYocy5kYXRhPXMuZGF0YS5yZXBsYWNlKC8gJC8sIiIpLHMuZGF0YXx8c3gocykpfX1vKGkkLCJjb2xsYXBzZVdoaXRlc3BhY2UiKTtmdW5jdGlvbiBzeCh0KXt2YXIgZT10Lm5leHRTaWJsaW5nfHx0LnBhcmVudE5vZGU7cmV0dXJuIHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSxlfW8oc3gsInJlbW92ZSIpO2Z1bmN0aW9uIHRDKHQsZSxyKXtyZXR1cm4gdCYmdC5wYXJlbnROb2RlPT09ZXx8cihlKT9lLm5leHRTaWJsaW5nfHxlLnBhcmVudE5vZGU6ZS5maXJzdENoaWxkfHxlLm5leHRTaWJsaW5nfHxlLnBhcmVudE5vZGV9byh0QywibmV4dCIpO3ZhciBheD10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e307ZnVuY3Rpb24gbyQoKXt2YXIgdD1heC5ET01QYXJzZXIsZT0hMTt0cnl7bmV3IHQoKS5wYXJzZUZyb21TdHJpbmcoIiIsInRleHQvaHRtbCIpJiYoZT0hMCl9Y2F0Y2h7fXJldHVybiBlfW8obyQsImNhblBhcnNlSFRNTE5hdGl2ZWx5Iik7ZnVuY3Rpb24gcyQoKXt2YXIgdD1vKGZ1bmN0aW9uKCl7fSwiUGFyc2VyIik7cmV0dXJuIGEkKCk/dC5wcm90b3R5cGUucGFyc2VGcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciByPW5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKTtyZXR1cm4gci5kZXNpZ25Nb2RlPSJvbiIsci5vcGVuKCksci53cml0ZShlKSxyLmNsb3NlKCkscn06dC5wcm90b3R5cGUucGFyc2VGcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciByPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIik7cmV0dXJuIHIub3BlbigpLHIud3JpdGUoZSksci5jbG9zZSgpLHJ9LHR9byhzJCwiY3JlYXRlSFRNTFBhcnNlciIpO2Z1bmN0aW9uIGEkKCl7dmFyIHQ9ITE7dHJ5e2RvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikub3BlbigpfWNhdGNoe2F4LkFjdGl2ZVhPYmplY3QmJih0PSEwKX1yZXR1cm4gdH1vKGEkLCJzaG91bGRVc2VBY3RpdmVYIik7dmFyIGwkPW8kKCk/YXguRE9NUGFyc2VyOnMkKCk7ZnVuY3Rpb24gYyQodCxlKXt2YXIgcjtpZih0eXBlb2YgdD09InN0cmluZyIpe3ZhciBuPXUkKCkucGFyc2VGcm9tU3RyaW5nKCc8eC10dXJuZG93biBpZD0idHVybmRvd24tcm9vdCI+Jyt0KyI8L3gtdHVybmRvd24+IiwidGV4dC9odG1sIik7cj1uLmdldEVsZW1lbnRCeUlkKCJ0dXJuZG93bi1yb290Iil9ZWxzZSByPXQuY2xvbmVOb2RlKCEwKTtyZXR1cm4gaSQoe2VsZW1lbnQ6cixpc0Jsb2NrOnR4LGlzVm9pZDpKRCxpc1ByZTplLnByZWZvcm1hdHRlZENvZGU/ZiQ6bnVsbH0pLHJ9byhjJCwiUm9vdE5vZGUiKTt2YXIgbHg7ZnVuY3Rpb24gdSQoKXtyZXR1cm4gbHg9bHh8fG5ldyBsJCxseH1vKHUkLCJodG1sUGFyc2VyIik7ZnVuY3Rpb24gZiQodCl7cmV0dXJuIHQubm9kZU5hbWU9PT0iUFJFInx8dC5ub2RlTmFtZT09PSJDT0RFIn1vKGYkLCJpc1ByZU9yQ29kZSIpO2Z1bmN0aW9uIHAkKHQsZSl7cmV0dXJuIHQuaXNCbG9jaz10eCh0KSx0LmlzQ29kZT10Lm5vZGVOYW1lPT09IkNPREUifHx0LnBhcmVudE5vZGUuaXNDb2RlLHQuaXNCbGFuaz1oJCh0KSx0LmZsYW5raW5nV2hpdGVzcGFjZT1kJCh0LGUpLHR9byhwJCwiTm9kZSIpO2Z1bmN0aW9uIGgkKHQpe3JldHVybiFKRCh0KSYmIWUkKHQpJiYvXlxzKiQvaS50ZXN0KHQudGV4dENvbnRlbnQpJiYhWkEodCkmJiF0JCh0KX1vKGgkLCJpc0JsYW5rIik7ZnVuY3Rpb24gZCQodCxlKXtpZih0LmlzQmxvY2t8fGUucHJlZm9ybWF0dGVkQ29kZSYmdC5pc0NvZGUpcmV0dXJue2xlYWRpbmc6IiIsdHJhaWxpbmc6IiJ9O3ZhciByPW0kKHQudGV4dENvbnRlbnQpO3JldHVybiByLmxlYWRpbmdBc2NpaSYmckMoImxlZnQiLHQsZSkmJihyLmxlYWRpbmc9ci5sZWFkaW5nTm9uQXNjaWkpLHIudHJhaWxpbmdBc2NpaSYmckMoInJpZ2h0Iix0LGUpJiYoci50cmFpbGluZz1yLnRyYWlsaW5nTm9uQXNjaWkpLHtsZWFkaW5nOnIubGVhZGluZyx0cmFpbGluZzpyLnRyYWlsaW5nfX1vKGQkLCJmbGFua2luZ1doaXRlc3BhY2UiKTtmdW5jdGlvbiBtJCh0KXt2YXIgZT10Lm1hdGNoKC9eKChbIFx0XHJcbl0qKShccyopKSg/Oig/PVxTKVtcc1xTXSpcUyk/KChccyo/KShbIFx0XHJcbl0qKSkkLyk7cmV0dXJue2xlYWRpbmc6ZVsxXSxsZWFkaW5nQXNjaWk6ZVsyXSxsZWFkaW5nTm9uQXNjaWk6ZVszXSx0cmFpbGluZzplWzRdLHRyYWlsaW5nTm9uQXNjaWk6ZVs1XSx0cmFpbGluZ0FzY2lpOmVbNl19fW8obSQsImVkZ2VXaGl0ZXNwYWNlIik7ZnVuY3Rpb24gckModCxlLHIpe3ZhciBuLGkscztyZXR1cm4gdD09PSJsZWZ0Ij8obj1lLnByZXZpb3VzU2libGluZyxpPS8gJC8pOihuPWUubmV4dFNpYmxpbmcsaT0vXiAvKSxuJiYobi5ub2RlVHlwZT09PTM/cz1pLnRlc3Qobi5ub2RlVmFsdWUpOnIucHJlZm9ybWF0dGVkQ29kZSYmbi5ub2RlTmFtZT09PSJDT0RFIj9zPSExOm4ubm9kZVR5cGU9PT0xJiYhdHgobikmJihzPWkudGVzdChuLnRleHRDb250ZW50KSkpLHN9byhyQywiaXNGbGFua2VkQnlXaGl0ZXNwYWNlIik7dmFyIGckPUFycmF5LnByb3RvdHlwZS5yZWR1Y2U7ZnVuY3Rpb24gSWkodCl7aWYoISh0aGlzIGluc3RhbmNlb2YgSWkpKXJldHVybiBuZXcgSWkodCk7dmFyIGU9e3J1bGVzOkl0LGhlYWRpbmdTdHlsZToic2V0ZXh0IixocjoiKiAqICoiLGJ1bGxldExpc3RNYXJrZXI6IioiLGNvZGVCbG9ja1N0eWxlOiJpbmRlbnRlZCIsZmVuY2U6ImBgYCIsZW1EZWxpbWl0ZXI6Il8iLHN0cm9uZ0RlbGltaXRlcjoiKioiLGxpbmtTdHlsZToiaW5saW5lZCIsbGlua1JlZmVyZW5jZVN0eWxlOiJmdWxsIixicjoiICAiLHByZWZvcm1hdHRlZENvZGU6ITEsYmxhbmtSZXBsYWNlbWVudDpvKGZ1bmN0aW9uKHIsbil7cmV0dXJuIG4uaXNCbG9jaz9gCgpgOiIifSwiYmxhbmtSZXBsYWNlbWVudCIpLGtlZXBSZXBsYWNlbWVudDpvKGZ1bmN0aW9uKHIsbil7cmV0dXJuIG4uaXNCbG9jaz9gCgpgK24ub3V0ZXJIVE1MK2AKCmA6bi5vdXRlckhUTUx9LCJrZWVwUmVwbGFjZW1lbnQiKSxkZWZhdWx0UmVwbGFjZW1lbnQ6byhmdW5jdGlvbihyLG4pe3JldHVybiBuLmlzQmxvY2s/YAoKYCtyK2AKCmA6cn0sImRlZmF1bHRSZXBsYWNlbWVudCIpfTt0aGlzLm9wdGlvbnM9S0Eoe30sZSx0KSx0aGlzLnJ1bGVzPW5ldyBlQyh0aGlzLm9wdGlvbnMpfW8oSWksIlR1cm5kb3duU2VydmljZSIpLElpLnByb3RvdHlwZT17dHVybmRvd246byhmdW5jdGlvbih0KXtpZighYiQodCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgc3RyaW5nLCBvciBhbiBlbGVtZW50L2RvY3VtZW50L2ZyYWdtZW50IG5vZGUuIik7aWYodD09PSIiKXJldHVybiIiO3ZhciBlPW5DLmNhbGwodGhpcyxuZXcgYyQodCx0aGlzLm9wdGlvbnMpKTtyZXR1cm4geSQuY2FsbCh0aGlzLGUpfSwidHVybmRvd24iKSx1c2U6byhmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMudXNlKHRbZV0pO2Vsc2UgaWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpdCh0aGlzKTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoInBsdWdpbiBtdXN0IGJlIGEgRnVuY3Rpb24gb3IgYW4gQXJyYXkgb2YgRnVuY3Rpb25zIik7cmV0dXJuIHRoaXN9LCJ1c2UiKSxhZGRSdWxlOm8oZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5ydWxlcy5hZGQodCxlKSx0aGlzfSwiYWRkUnVsZSIpLGtlZXA6byhmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5ydWxlcy5rZWVwKHQpLHRoaXN9LCJrZWVwIikscmVtb3ZlOm8oZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucnVsZXMucmVtb3ZlKHQpLHRoaXN9LCJyZW1vdmUiKSxlc2NhcGU6byhmdW5jdGlvbih0KXtyZXR1cm4gWkQodCl9LCJlc2NhcGUiKX07ZnVuY3Rpb24gbkModCl7dmFyIGU9dGhpcztyZXR1cm4gZyQuY2FsbCh0LmNoaWxkTm9kZXMsZnVuY3Rpb24ocixuKXtuPW5ldyBwJChuLGUub3B0aW9ucyk7dmFyIGk9IiI7cmV0dXJuIG4ubm9kZVR5cGU9PT0zP2k9bi5pc0NvZGU/bi5ub2RlVmFsdWU6ZS5lc2NhcGUobi5ub2RlVmFsdWUpOm4ubm9kZVR5cGU9PT0xJiYoaT14JC5jYWxsKGUsbikpLGlDKHIsaSl9LCIiKX1vKG5DLCJwcm9jZXNzIik7ZnVuY3Rpb24geSQodCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5ydWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHIpe3R5cGVvZiByLmFwcGVuZD09ImZ1bmN0aW9uIiYmKHQ9aUModCxyLmFwcGVuZChlLm9wdGlvbnMpKSl9KSx0LnJlcGxhY2UoL15bXHRcclxuXSsvLCIiKS5yZXBsYWNlKC9bXHRcclxuXHNdKyQvLCIiKX1vKHkkLCJwb3N0UHJvY2VzcyIpO2Z1bmN0aW9uIHgkKHQpe3ZhciBlPXRoaXMucnVsZXMuZm9yTm9kZSh0KSxyPW5DLmNhbGwodGhpcyx0KSxuPXQuZmxhbmtpbmdXaGl0ZXNwYWNlO3JldHVybihuLmxlYWRpbmd8fG4udHJhaWxpbmcpJiYocj1yLnRyaW0oKSksbi5sZWFkaW5nK2UucmVwbGFjZW1lbnQocix0LHRoaXMub3B0aW9ucykrbi50cmFpbGluZ31vKHgkLCJyZXBsYWNlbWVudEZvck5vZGUiKTtmdW5jdGlvbiBpQyh0LGUpe3ZhciByPVlEKHQpLG49VkQoZSksaT1NYXRoLm1heCh0Lmxlbmd0aC1yLmxlbmd0aCxlLmxlbmd0aC1uLmxlbmd0aCkscz1gCgpgLnN1YnN0cmluZygwLGkpO3JldHVybiByK3Mrbn1vKGlDLCJqb2luIik7ZnVuY3Rpb24gYiQodCl7cmV0dXJuIHQhPW51bGwmJih0eXBlb2YgdD09InN0cmluZyJ8fHQubm9kZVR5cGUmJih0Lm5vZGVUeXBlPT09MXx8dC5ub2RlVHlwZT09PTl8fHQubm9kZVR5cGU9PT0xMSkpfW8oYiQsImNhbkNvbnZlcnQiKTt2YXIgZHg9e307c2UoZHgse2dmbTooKT0+YUMsaGlnaGxpZ2h0ZWRDb2RlQmxvY2s6KCk9PnV4LHN0cmlrZXRocm91Z2g6KCk9PmZ4LHRhYmxlczooKT0+cHgsdGFza0xpc3RJdGVtczooKT0+aHh9KTt2YXIgb0M9L2hpZ2hsaWdodC0oPzp0ZXh0fHNvdXJjZSktKFthLXowLTldKykvO2Z1bmN0aW9uIHV4KHQpe3QuYWRkUnVsZSgiaGlnaGxpZ2h0ZWRDb2RlQmxvY2siLHtmaWx0ZXI6byhmdW5jdGlvbihlKXt2YXIgcj1lLmZpcnN0Q2hpbGQ7cmV0dXJuIGUubm9kZU5hbWU9PT0iRElWIiYmb0MudGVzdChlLmNsYXNzTmFtZSkmJnImJnIubm9kZU5hbWU9PT0iUFJFIn0sImZpbHRlciIpLHJlcGxhY2VtZW50Om8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXIuY2xhc3NOYW1lfHwiIixzPShpLm1hdGNoKG9DKXx8W251bGwsIiJdKVsxXTtyZXR1cm5gCgpgK24uZmVuY2UrcytgCmArci5maXJzdENoaWxkLnRleHRDb250ZW50K2AKYCtuLmZlbmNlK2AKCmB9LCJyZXBsYWNlbWVudCIpfSl9byh1eCwiaGlnaGxpZ2h0ZWRDb2RlQmxvY2siKTtmdW5jdGlvbiBmeCh0KXt0LmFkZFJ1bGUoInN0cmlrZXRocm91Z2giLHtmaWx0ZXI6WyJkZWwiLCJzIiwic3RyaWtlIl0scmVwbGFjZW1lbnQ6byhmdW5jdGlvbihlKXtyZXR1cm4ifiIrZSsifiJ9LCJyZXBsYWNlbWVudCIpfSl9byhmeCwic3RyaWtldGhyb3VnaCIpO3ZhciB3JD1BcnJheS5wcm90b3R5cGUuaW5kZXhPZix2JD1BcnJheS5wcm90b3R5cGUuZXZlcnksZGE9e307ZGEudGFibGVDZWxsPXtmaWx0ZXI6WyJ0aCIsInRkIl0scmVwbGFjZW1lbnQ6byhmdW5jdGlvbih0LGUpe3JldHVybiBzQyh0LGUpfSwicmVwbGFjZW1lbnQiKX0sZGEudGFibGVSb3c9e2ZpbHRlcjoidHIiLHJlcGxhY2VtZW50Om8oZnVuY3Rpb24odCxlKXt2YXIgcj0iIixuPXtsZWZ0OiI6LS0iLHJpZ2h0OiItLToiLGNlbnRlcjoiOi06In07aWYoY3goZSkpZm9yKHZhciBpPTA7aTxlLmNoaWxkTm9kZXMubGVuZ3RoO2krKyl7dmFyIHM9Ii0tLSIsYT0oZS5jaGlsZE5vZGVzW2ldLmdldEF0dHJpYnV0ZSgiYWxpZ24iKXx8IiIpLnRvTG93ZXJDYXNlKCk7YSYmKHM9blthXXx8cykscis9c0MocyxlLmNoaWxkTm9kZXNbaV0pfXJldHVybmAKYCt0KyhyP2AKYCtyOiIiKX0sInJlcGxhY2VtZW50Iil9LGRhLnRhYmxlPXtmaWx0ZXI6byhmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTmFtZT09PSJUQUJMRSImJmN4KHQucm93c1swXSl9LCJmaWx0ZXIiKSxyZXBsYWNlbWVudDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0PXQucmVwbGFjZShgCgpgLGAKYCksYAoKYCt0K2AKCmB9LCJyZXBsYWNlbWVudCIpfSxkYS50YWJsZVNlY3Rpb249e2ZpbHRlcjpbInRoZWFkIiwidGJvZHkiLCJ0Zm9vdCJdLHJlcGxhY2VtZW50Om8oZnVuY3Rpb24odCl7cmV0dXJuIHR9LCJyZXBsYWNlbWVudCIpfTtmdW5jdGlvbiBjeCh0KXt2YXIgZT10LnBhcmVudE5vZGU7cmV0dXJuIGUubm9kZU5hbWU9PT0iVEhFQUQifHxlLmZpcnN0Q2hpbGQ9PT10JiYoZS5ub2RlTmFtZT09PSJUQUJMRSJ8fGskKGUpKSYmdiQuY2FsbCh0LmNoaWxkTm9kZXMsZnVuY3Rpb24ocil7cmV0dXJuIHIubm9kZU5hbWU9PT0iVEgifSl9byhjeCwiaXNIZWFkaW5nUm93Iik7ZnVuY3Rpb24gayQodCl7dmFyIGU9dC5wcmV2aW91c1NpYmxpbmc7cmV0dXJuIHQubm9kZU5hbWU9PT0iVEJPRFkiJiYoIWV8fGUubm9kZU5hbWU9PT0iVEhFQUQiJiYvXlxzKiQvaS50ZXN0KGUudGV4dENvbnRlbnQpKX1vKGskLCJpc0ZpcnN0VGJvZHkiKTtmdW5jdGlvbiBzQyh0LGUpe3ZhciByPXckLmNhbGwoZS5wYXJlbnROb2RlLmNoaWxkTm9kZXMsZSksbj0iICI7cmV0dXJuIHI9PT0wJiYobj0ifCAiKSxuK3QrIiB8In1vKHNDLCJjZWxsIik7ZnVuY3Rpb24gcHgodCl7dC5rZWVwKGZ1bmN0aW9uKHIpe3JldHVybiByLm5vZGVOYW1lPT09IlRBQkxFIiYmIWN4KHIucm93c1swXSl9KTtmb3IodmFyIGUgaW4gZGEpdC5hZGRSdWxlKGUsZGFbZV0pfW8ocHgsInRhYmxlcyIpO2Z1bmN0aW9uIGh4KHQpe3QuYWRkUnVsZSgidGFza0xpc3RJdGVtcyIse2ZpbHRlcjpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0iY2hlY2tib3giJiZlLnBhcmVudE5vZGUubm9kZU5hbWU9PT0iTEkifSwiZmlsdGVyIikscmVwbGFjZW1lbnQ6byhmdW5jdGlvbihlLHIpe3JldHVybihyLmNoZWNrZWQ/Ilt4XSI6IlsgXSIpKyIgIn0sInJlcGxhY2VtZW50Iil9KX1vKGh4LCJ0YXNrTGlzdEl0ZW1zIik7ZnVuY3Rpb24gYUModCl7dC51c2UoW3V4LGZ4LHB4LGh4XSl9byhhQywiZ2ZtIik7dmFyIG14PWR4O3ZhciBOYT17fTtzZShOYSx7Z2V0WWFtbERvY0Zyb21TdHJpbmc6KCk9PmlCLG9iamVjdFRvWWFtbFN0cmluZzooKT0+bkIseWFtbFN0cmluZ1RvT2JqZWN0OigpPT5yQn0pO3ZhciBIbz17fTtzZShIbyx7QWxpYXM6KCk9PlNyLENTVDooKT0+T2MsQ29tcG9zZXI6KCk9PkpuLERvY3VtZW50OigpPT5DcixMZXhlcjooKT0+TGksTGluZUNvdW50ZXI6KCk9PkZpLFBhaXI6KCk9PmplLFBhcnNlcjooKT0+WG4sU2NhbGFyOigpPT5RLFNjaGVtYTooKT0+UGksWUFNTEVycm9yOigpPT5OaSxZQU1MTWFwOigpPT5xZSxZQU1MUGFyc2VFcnJvcjooKT0+RnQsWUFNTFNlcTooKT0+dXQsWUFNTFdhcm5pbmc6KCk9PlJpLGRlZmF1bHQ6KCk9PmVCLGlzQWxpYXM6KCk9PlZ0LGlzQ29sbGVjdGlvbjooKT0+VGUsaXNEb2N1bWVudDooKT0+WXQsaXNNYXA6KCk9Pkd0LGlzTm9kZTooKT0+eGUsaXNQYWlyOigpPT5kZSxpc1NjYWxhcjooKT0+Y2UsaXNTZXE6KCk9PlF0LHBhcnNlOigpPT5FZCxwYXJzZUFsbERvY3VtZW50czooKT0+VGQscGFyc2VEb2N1bWVudDooKT0+SWMsc3RyaW5naWZ5OigpPT5EZCx2aXNpdDooKT0+bHIsdmlzaXRBc3luYzooKT0+Tm99KTt2YXIgWng9e307c2UoWngse0FsaWFzOigpPT5TcixDU1Q6KCk9Pk9jLENvbXBvc2VyOigpPT5KbixEb2N1bWVudDooKT0+Q3IsTGV4ZXI6KCk9PkxpLExpbmVDb3VudGVyOigpPT5GaSxQYWlyOigpPT5qZSxQYXJzZXI6KCk9PlhuLFNjYWxhcjooKT0+USxTY2hlbWE6KCk9PlBpLFlBTUxFcnJvcjooKT0+TmksWUFNTE1hcDooKT0+cWUsWUFNTFBhcnNlRXJyb3I6KCk9PkZ0LFlBTUxTZXE6KCk9PnV0LFlBTUxXYXJuaW5nOigpPT5SaSxpc0FsaWFzOigpPT5WdCxpc0NvbGxlY3Rpb246KCk9PlRlLGlzRG9jdW1lbnQ6KCk9Pll0LGlzTWFwOigpPT5HdCxpc05vZGU6KCk9PnhlLGlzUGFpcjooKT0+ZGUsaXNTY2FsYXI6KCk9PmNlLGlzU2VxOigpPT5RdCxwYXJzZTooKT0+RWQscGFyc2VBbGxEb2N1bWVudHM6KCk9PlRkLHBhcnNlRG9jdW1lbnQ6KCk9PkljLHN0cmluZ2lmeTooKT0+RGQsdmlzaXQ6KCk9PmxyLHZpc2l0QXN5bmM6KCk9Pk5vfSk7dmFyIG5jPVN5bWJvbC5mb3IoInlhbWwuYWxpYXMiKSxpYz1TeW1ib2wuZm9yKCJ5YW1sLmRvY3VtZW50Iiksa3I9U3ltYm9sLmZvcigieWFtbC5tYXAiKSxKaD1TeW1ib2wuZm9yKCJ5YW1sLnBhaXIiKSxVdD1TeW1ib2wuZm9yKCJ5YW1sLnNjYWxhciIpLHduPVN5bWJvbC5mb3IoInlhbWwuc2VxIiksX3Q9U3ltYm9sLmZvcigieWFtbC5ub2RlLnR5cGUiKSxWdD1vKHQ9PiEhdCYmdHlwZW9mIHQ9PSJvYmplY3QiJiZ0W190XT09PW5jLCJpc0FsaWFzIiksWXQ9byh0PT4hIXQmJnR5cGVvZiB0PT0ib2JqZWN0IiYmdFtfdF09PT1pYywiaXNEb2N1bWVudCIpLEd0PW8odD0+ISF0JiZ0eXBlb2YgdD09Im9iamVjdCImJnRbX3RdPT09a3IsImlzTWFwIiksZGU9byh0PT4hIXQmJnR5cGVvZiB0PT0ib2JqZWN0IiYmdFtfdF09PT1KaCwiaXNQYWlyIiksY2U9byh0PT4hIXQmJnR5cGVvZiB0PT0ib2JqZWN0IiYmdFtfdF09PT1VdCwiaXNTY2FsYXIiKSxRdD1vKHQ9PiEhdCYmdHlwZW9mIHQ9PSJvYmplY3QiJiZ0W190XT09PXduLCJpc1NlcSIpO2Z1bmN0aW9uIFRlKHQpe2lmKHQmJnR5cGVvZiB0PT0ib2JqZWN0Iilzd2l0Y2godFtfdF0pe2Nhc2Uga3I6Y2FzZSB3bjpyZXR1cm4hMH1yZXR1cm4hMX1vKFRlLCJpc0NvbGxlY3Rpb24iKTtmdW5jdGlvbiB4ZSh0KXtpZih0JiZ0eXBlb2YgdD09Im9iamVjdCIpc3dpdGNoKHRbX3RdKXtjYXNlIG5jOmNhc2Uga3I6Y2FzZSBVdDpjYXNlIHduOnJldHVybiEwfXJldHVybiExfW8oeGUsImlzTm9kZSIpO3ZhciBvYz1vKHQ9PihjZSh0KXx8VGUodCkpJiYhIXQuYW5jaG9yLCJoYXNBbmNob3IiKTt2YXIgSnQ9U3ltYm9sKCJicmVhayB2aXNpdCIpLGNDPVN5bWJvbCgic2tpcCBjaGlsZHJlbiIpLHZuPVN5bWJvbCgicmVtb3ZlIG5vZGUiKTtmdW5jdGlvbiBscih0LGUpe2xldCByPXVDKGUpO1l0KHQpP21hKG51bGwsdC5jb250ZW50cyxyLE9iamVjdC5mcmVlemUoW3RdKSk9PT12biYmKHQuY29udGVudHM9bnVsbCk6bWEobnVsbCx0LHIsT2JqZWN0LmZyZWV6ZShbXSkpfW8obHIsInZpc2l0IiksbHIuQlJFQUs9SnQsbHIuU0tJUD1jQyxsci5SRU1PVkU9dm47ZnVuY3Rpb24gbWEodCxlLHIsbil7bGV0IGk9ZkModCxlLHIsbik7aWYoeGUoaSl8fGRlKGkpKXJldHVybiBwQyh0LG4saSksbWEodCxpLHIsbik7aWYodHlwZW9mIGkhPSJzeW1ib2wiKXtpZihUZShlKSl7bj1PYmplY3QuZnJlZXplKG4uY29uY2F0KGUpKTtmb3IobGV0IHM9MDtzPGUuaXRlbXMubGVuZ3RoOysrcyl7bGV0IGE9bWEocyxlLml0ZW1zW3NdLHIsbik7aWYodHlwZW9mIGE9PSJudW1iZXIiKXM9YS0xO2Vsc2V7aWYoYT09PUp0KXJldHVybiBKdDthPT09dm4mJihlLml0ZW1zLnNwbGljZShzLDEpLHMtPTEpfX19ZWxzZSBpZihkZShlKSl7bj1PYmplY3QuZnJlZXplKG4uY29uY2F0KGUpKTtsZXQgcz1tYSgia2V5IixlLmtleSxyLG4pO2lmKHM9PT1KdClyZXR1cm4gSnQ7cz09PXZuJiYoZS5rZXk9bnVsbCk7bGV0IGE9bWEoInZhbHVlIixlLnZhbHVlLHIsbik7aWYoYT09PUp0KXJldHVybiBKdDthPT09dm4mJihlLnZhbHVlPW51bGwpfX1yZXR1cm4gaX1vKG1hLCJ2aXNpdF8iKTthc3luYyBmdW5jdGlvbiBObyh0LGUpe2xldCByPXVDKGUpO1l0KHQpP2F3YWl0IGdhKG51bGwsdC5jb250ZW50cyxyLE9iamVjdC5mcmVlemUoW3RdKSk9PT12biYmKHQuY29udGVudHM9bnVsbCk6YXdhaXQgZ2EobnVsbCx0LHIsT2JqZWN0LmZyZWV6ZShbXSkpfW8oTm8sInZpc2l0QXN5bmMiKSxOby5CUkVBSz1KdCxOby5TS0lQPWNDLE5vLlJFTU9WRT12bjthc3luYyBmdW5jdGlvbiBnYSh0LGUscixuKXtsZXQgaT1hd2FpdCBmQyh0LGUscixuKTtpZih4ZShpKXx8ZGUoaSkpcmV0dXJuIHBDKHQsbixpKSxnYSh0LGkscixuKTtpZih0eXBlb2YgaSE9InN5bWJvbCIpe2lmKFRlKGUpKXtuPU9iamVjdC5mcmVlemUobi5jb25jYXQoZSkpO2ZvcihsZXQgcz0wO3M8ZS5pdGVtcy5sZW5ndGg7KytzKXtsZXQgYT1hd2FpdCBnYShzLGUuaXRlbXNbc10scixuKTtpZih0eXBlb2YgYT09Im51bWJlciIpcz1hLTE7ZWxzZXtpZihhPT09SnQpcmV0dXJuIEp0O2E9PT12biYmKGUuaXRlbXMuc3BsaWNlKHMsMSkscy09MSl9fX1lbHNlIGlmKGRlKGUpKXtuPU9iamVjdC5mcmVlemUobi5jb25jYXQoZSkpO2xldCBzPWF3YWl0IGdhKCJrZXkiLGUua2V5LHIsbik7aWYocz09PUp0KXJldHVybiBKdDtzPT09dm4mJihlLmtleT1udWxsKTtsZXQgYT1hd2FpdCBnYSgidmFsdWUiLGUudmFsdWUscixuKTtpZihhPT09SnQpcmV0dXJuIEp0O2E9PT12biYmKGUudmFsdWU9bnVsbCl9fXJldHVybiBpfW8oZ2EsInZpc2l0QXN5bmNfIik7ZnVuY3Rpb24gdUModCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmKHQuQ29sbGVjdGlvbnx8dC5Ob2RlfHx0LlZhbHVlKT9PYmplY3QuYXNzaWduKHtBbGlhczp0Lk5vZGUsTWFwOnQuTm9kZSxTY2FsYXI6dC5Ob2RlLFNlcTp0Lk5vZGV9LHQuVmFsdWUmJntNYXA6dC5WYWx1ZSxTY2FsYXI6dC5WYWx1ZSxTZXE6dC5WYWx1ZX0sdC5Db2xsZWN0aW9uJiZ7TWFwOnQuQ29sbGVjdGlvbixTZXE6dC5Db2xsZWN0aW9ufSx0KTp0fW8odUMsImluaXRWaXNpdG9yIik7ZnVuY3Rpb24gZkModCxlLHIsbil7aWYodHlwZW9mIHI9PSJmdW5jdGlvbiIpcmV0dXJuIHIodCxlLG4pO2lmKEd0KGUpKXJldHVybiByLk1hcD8uKHQsZSxuKTtpZihRdChlKSlyZXR1cm4gci5TZXE/Lih0LGUsbik7aWYoZGUoZSkpcmV0dXJuIHIuUGFpcj8uKHQsZSxuKTtpZihjZShlKSlyZXR1cm4gci5TY2FsYXI/Lih0LGUsbik7aWYoVnQoZSkpcmV0dXJuIHIuQWxpYXM/Lih0LGUsbil9byhmQywiY2FsbFZpc2l0b3IiKTtmdW5jdGlvbiBwQyh0LGUscil7bGV0IG49ZVtlLmxlbmd0aC0xXTtpZihUZShuKSluLml0ZW1zW3RdPXI7ZWxzZSBpZihkZShuKSl0PT09ImtleSI/bi5rZXk9cjpuLnZhbHVlPXI7ZWxzZSBpZihZdChuKSluLmNvbnRlbnRzPXI7ZWxzZXtsZXQgaT1WdChuKT8iYWxpYXMiOiJzY2FsYXIiO3Rocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlcGxhY2Ugbm9kZSB3aXRoICR7aX0gcGFyZW50YCl9fW8ocEMsInJlcGxhY2VOb2RlIik7dmFyIFMkPXsiISI6IiUyMSIsIiwiOiIlMkMiLCJbIjoiJTVCIiwiXSI6IiU1RCIsInsiOiIlN0IiLCJ9IjoiJTdEIn0sVCQ9byh0PT50LnJlcGxhY2UoL1shLFtcXXt9XS9nLGU9PlMkW2VdKSwiZXNjYXBlVGFnTmFtZSIpLHpyPWNsYXNzIHR7c3RhdGlje28odGhpcywiRGlyZWN0aXZlcyIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5kb2NTdGFydD1udWxsLHRoaXMuZG9jRW5kPSExLHRoaXMueWFtbD1PYmplY3QuYXNzaWduKHt9LHQuZGVmYXVsdFlhbWwsZSksdGhpcy50YWdzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZhdWx0VGFncyxyKX1jbG9uZSgpe2xldCBlPW5ldyB0KHRoaXMueWFtbCx0aGlzLnRhZ3MpO3JldHVybiBlLmRvY1N0YXJ0PXRoaXMuZG9jU3RhcnQsZX1hdERvY3VtZW50KCl7bGV0IGU9bmV3IHQodGhpcy55YW1sLHRoaXMudGFncyk7c3dpdGNoKHRoaXMueWFtbC52ZXJzaW9uKXtjYXNlIjEuMSI6dGhpcy5hdE5leHREb2N1bWVudD0hMDticmVhaztjYXNlIjEuMiI6dGhpcy5hdE5leHREb2N1bWVudD0hMSx0aGlzLnlhbWw9e2V4cGxpY2l0OnQuZGVmYXVsdFlhbWwuZXhwbGljaXQsdmVyc2lvbjoiMS4yIn0sdGhpcy50YWdzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZhdWx0VGFncyk7YnJlYWt9cmV0dXJuIGV9YWRkKGUscil7dGhpcy5hdE5leHREb2N1bWVudCYmKHRoaXMueWFtbD17ZXhwbGljaXQ6dC5kZWZhdWx0WWFtbC5leHBsaWNpdCx2ZXJzaW9uOiIxLjEifSx0aGlzLnRhZ3M9T2JqZWN0LmFzc2lnbih7fSx0LmRlZmF1bHRUYWdzKSx0aGlzLmF0TmV4dERvY3VtZW50PSExKTtsZXQgbj1lLnRyaW0oKS5zcGxpdCgvWyBcdF0rLyksaT1uLnNoaWZ0KCk7c3dpdGNoKGkpe2Nhc2UiJVRBRyI6e2lmKG4ubGVuZ3RoIT09MiYmKHIoMCwiJVRBRyBkaXJlY3RpdmUgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSB0d28gcGFydHMiKSxuLmxlbmd0aDwyKSlyZXR1cm4hMTtsZXRbcyxhXT1uO3JldHVybiB0aGlzLnRhZ3Nbc109YSwhMH1jYXNlIiVZQU1MIjp7aWYodGhpcy55YW1sLmV4cGxpY2l0PSEwLG4ubGVuZ3RoIT09MSlyZXR1cm4gcigwLCIlWUFNTCBkaXJlY3RpdmUgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSBvbmUgcGFydCIpLCExO2xldFtzXT1uO2lmKHM9PT0iMS4xInx8cz09PSIxLjIiKXJldHVybiB0aGlzLnlhbWwudmVyc2lvbj1zLCEwO3tsZXQgYT0vXlxkK1wuXGQrJC8udGVzdChzKTtyZXR1cm4gcig2LGBVbnN1cHBvcnRlZCBZQU1MIHZlcnNpb24gJHtzfWAsYSksITF9fWRlZmF1bHQ6cmV0dXJuIHIoMCxgVW5rbm93biBkaXJlY3RpdmUgJHtpfWAsITApLCExfX10YWdOYW1lKGUscil7aWYoZT09PSIhIilyZXR1cm4iISI7aWYoZVswXSE9PSIhIilyZXR1cm4gcihgTm90IGEgdmFsaWQgdGFnOiAke2V9YCksbnVsbDtpZihlWzFdPT09IjwiKXtsZXQgYT1lLnNsaWNlKDIsLTEpO3JldHVybiBhPT09IiEifHxhPT09IiEhIj8ocihgVmVyYmF0aW0gdGFncyBhcmVuJ3QgcmVzb2x2ZWQsIHNvICR7ZX0gaXMgaW52YWxpZC5gKSxudWxsKTooZVtlLmxlbmd0aC0xXSE9PSI+IiYmcigiVmVyYmF0aW0gdGFncyBtdXN0IGVuZCB3aXRoIGEgPiIpLGEpfWxldFssbixpXT1lLm1hdGNoKC9eKC4qISkoW14hXSopJC9zKTtpfHxyKGBUaGUgJHtlfSB0YWcgaGFzIG5vIHN1ZmZpeGApO2xldCBzPXRoaXMudGFnc1tuXTtpZihzKXRyeXtyZXR1cm4gcytkZWNvZGVVUklDb21wb25lbnQoaSl9Y2F0Y2goYSl7cmV0dXJuIHIoU3RyaW5nKGEpKSxudWxsfXJldHVybiBuPT09IiEiP2U6KHIoYENvdWxkIG5vdCByZXNvbHZlIHRhZzogJHtlfWApLG51bGwpfXRhZ1N0cmluZyhlKXtmb3IobGV0W3Isbl1vZiBPYmplY3QuZW50cmllcyh0aGlzLnRhZ3MpKWlmKGUuc3RhcnRzV2l0aChuKSlyZXR1cm4gcitUJChlLnN1YnN0cmluZyhuLmxlbmd0aCkpO3JldHVybiBlWzBdPT09IiEiP2U6YCE8JHtlfT5gfXRvU3RyaW5nKGUpe2xldCByPXRoaXMueWFtbC5leHBsaWNpdD9bYCVZQU1MICR7dGhpcy55YW1sLnZlcnNpb258fCIxLjIifWBdOltdLG49T2JqZWN0LmVudHJpZXModGhpcy50YWdzKSxpO2lmKGUmJm4ubGVuZ3RoPjAmJnhlKGUuY29udGVudHMpKXtsZXQgcz17fTtscihlLmNvbnRlbnRzLChhLGwpPT57eGUobCkmJmwudGFnJiYoc1tsLnRhZ109ITApfSksaT1PYmplY3Qua2V5cyhzKX1lbHNlIGk9W107Zm9yKGxldFtzLGFdb2YgbilzPT09IiEhIiYmYT09PSJ0YWc6eWFtbC5vcmcsMjAwMjoifHwoIWV8fGkuc29tZShsPT5sLnN0YXJ0c1dpdGgoYSkpKSYmci5wdXNoKGAlVEFHICR7c30gJHthfWApO3JldHVybiByLmpvaW4oYApgKX19O3pyLmRlZmF1bHRZYW1sPXtleHBsaWNpdDohMSx2ZXJzaW9uOiIxLjIifSx6ci5kZWZhdWx0VGFncz17IiEhIjoidGFnOnlhbWwub3JnLDIwMDI6In07ZnVuY3Rpb24gc2ModCl7aWYoL1tceDAwLVx4MTlccyxbXF17fV0vLnRlc3QodCkpe2xldCByPWBBbmNob3IgbXVzdCBub3QgY29udGFpbiB3aGl0ZXNwYWNlIG9yIGNvbnRyb2wgY2hhcmFjdGVyczogJHtKU09OLnN0cmluZ2lmeSh0KX1gO3Rocm93IG5ldyBFcnJvcihyKX1yZXR1cm4hMH1vKHNjLCJhbmNob3JJc1ZhbGlkIik7ZnVuY3Rpb24gS2godCl7bGV0IGU9bmV3IFNldDtyZXR1cm4gbHIodCx7VmFsdWUocixuKXtuLmFuY2hvciYmZS5hZGQobi5hbmNob3IpfX0pLGV9byhLaCwiYW5jaG9yTmFtZXMiKTtmdW5jdGlvbiBYaCh0LGUpe2ZvcihsZXQgcj0xOzsrK3Ipe2xldCBuPWAke3R9JHtyfWA7aWYoIWUuaGFzKG4pKXJldHVybiBufX1vKFhoLCJmaW5kTmV3QW5jaG9yIik7ZnVuY3Rpb24gZ3godCxlKXtsZXQgcj1bXSxuPW5ldyBNYXAsaT1udWxsO3JldHVybntvbkFuY2hvcjpvKHM9PntyLnB1c2gocyksaT8/KGk9S2godCkpO2xldCBhPVhoKGUsaSk7cmV0dXJuIGkuYWRkKGEpLGF9LCJvbkFuY2hvciIpLHNldEFuY2hvcnM6bygoKT0+e2ZvcihsZXQgcyBvZiByKXtsZXQgYT1uLmdldChzKTtpZih0eXBlb2YgYT09Im9iamVjdCImJmEuYW5jaG9yJiYoY2UoYS5ub2RlKXx8VGUoYS5ub2RlKSkpYS5ub2RlLmFuY2hvcj1hLmFuY2hvcjtlbHNle2xldCBsPW5ldyBFcnJvcigiRmFpbGVkIHRvIHJlc29sdmUgcmVwZWF0ZWQgb2JqZWN0ICh0aGlzIHNob3VsZCBub3QgaGFwcGVuKSIpO3Rocm93IGwuc291cmNlPXMsbH19fSwic2V0QW5jaG9ycyIpLHNvdXJjZU9iamVjdHM6bn19byhneCwiY3JlYXRlTm9kZUFuY2hvcnMiKTtmdW5jdGlvbiBVbih0LGUscixuKXtpZihuJiZ0eXBlb2Ygbj09Im9iamVjdCIpaWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGk9MCxzPW4ubGVuZ3RoO2k8czsrK2kpe2xldCBhPW5baV0sbD1Vbih0LG4sU3RyaW5nKGkpLGEpO2w9PT12b2lkIDA/ZGVsZXRlIG5baV06bCE9PWEmJihuW2ldPWwpfWVsc2UgaWYobiBpbnN0YW5jZW9mIE1hcClmb3IobGV0IGkgb2YgQXJyYXkuZnJvbShuLmtleXMoKSkpe2xldCBzPW4uZ2V0KGkpLGE9VW4odCxuLGkscyk7YT09PXZvaWQgMD9uLmRlbGV0ZShpKTphIT09cyYmbi5zZXQoaSxhKX1lbHNlIGlmKG4gaW5zdGFuY2VvZiBTZXQpZm9yKGxldCBpIG9mIEFycmF5LmZyb20obikpe2xldCBzPVVuKHQsbixpLGkpO3M9PT12b2lkIDA/bi5kZWxldGUoaSk6cyE9PWkmJihuLmRlbGV0ZShpKSxuLmFkZChzKSl9ZWxzZSBmb3IobGV0W2ksc11vZiBPYmplY3QuZW50cmllcyhuKSl7bGV0IGE9VW4odCxuLGkscyk7YT09PXZvaWQgMD9kZWxldGUgbltpXTphIT09cyYmKG5baV09YSl9cmV0dXJuIHQuY2FsbChlLHIsbil9byhVbiwiYXBwbHlSZXZpdmVyIik7ZnVuY3Rpb24gcnQodCxlLHIpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQubWFwKChuLGkpPT5ydChuLFN0cmluZyhpKSxyKSk7aWYodCYmdHlwZW9mIHQudG9KU09OPT0iZnVuY3Rpb24iKXtpZighcnx8IW9jKHQpKXJldHVybiB0LnRvSlNPTihlLHIpO2xldCBuPXthbGlhc0NvdW50OjAsY291bnQ6MSxyZXM6dm9pZCAwfTtyLmFuY2hvcnMuc2V0KHQsbiksci5vbkNyZWF0ZT1zPT57bi5yZXM9cyxkZWxldGUgci5vbkNyZWF0ZX07bGV0IGk9dC50b0pTT04oZSxyKTtyZXR1cm4gci5vbkNyZWF0ZSYmci5vbkNyZWF0ZShpKSxpfXJldHVybiB0eXBlb2YgdD09ImJpZ2ludCImJiFyPy5rZWVwP051bWJlcih0KTp0fW8ocnQsInRvSlMiKTt2YXIgVm49Y2xhc3N7c3RhdGlje28odGhpcywiTm9kZUJhc2UiKX1jb25zdHJ1Y3RvcihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxfdCx7dmFsdWU6ZX0pfWNsb25lKCl7bGV0IGU9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModGhpcykpO3JldHVybiB0aGlzLnJhbmdlJiYoZS5yYW5nZT10aGlzLnJhbmdlLnNsaWNlKCkpLGV9dG9KUyhlLHttYXBBc01hcDpyLG1heEFsaWFzQ291bnQ6bixvbkFuY2hvcjppLHJldml2ZXI6c309e30pe2lmKCFZdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBIGRvY3VtZW50IGFyZ3VtZW50IGlzIHJlcXVpcmVkIik7bGV0IGE9e2FuY2hvcnM6bmV3IE1hcCxkb2M6ZSxrZWVwOiEwLG1hcEFzTWFwOnI9PT0hMCxtYXBLZXlXYXJuZWQ6ITEsbWF4QWxpYXNDb3VudDp0eXBlb2Ygbj09Im51bWJlciI/bjoxMDB9LGw9cnQodGhpcywiIixhKTtpZih0eXBlb2YgaT09ImZ1bmN0aW9uIilmb3IobGV0e2NvdW50OmMscmVzOnV9b2YgYS5hbmNob3JzLnZhbHVlcygpKWkodSxjKTtyZXR1cm4gdHlwZW9mIHM9PSJmdW5jdGlvbiI/VW4ocyx7IiI6bH0sIiIsbCk6bH19O3ZhciBTcj1jbGFzcyBleHRlbmRzIFZue3N0YXRpY3tvKHRoaXMsIkFsaWFzIil9Y29uc3RydWN0b3IoZSl7c3VwZXIobmMpLHRoaXMuc291cmNlPWUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRhZyIse3NldCgpe3Rocm93IG5ldyBFcnJvcigiQWxpYXMgbm9kZXMgY2Fubm90IGhhdmUgdGFncyIpfX0pfXJlc29sdmUoZSxyKXtpZihyPy5tYXhBbGlhc0NvdW50PT09MCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoIkFsaWFzIHJlc29sdXRpb24gaXMgZGlzYWJsZWQiKTtsZXQgbjtyPy5hbGlhc1Jlc29sdmVDYWNoZT9uPXIuYWxpYXNSZXNvbHZlQ2FjaGU6KG49W10sbHIoZSx7Tm9kZTpvKChzLGEpPT57KFZ0KGEpfHxvYyhhKSkmJm4ucHVzaChhKX0sIk5vZGUiKX0pLHImJihyLmFsaWFzUmVzb2x2ZUNhY2hlPW4pKTtsZXQgaTtmb3IobGV0IHMgb2Ygbil7aWYocz09PXRoaXMpYnJlYWs7cy5hbmNob3I9PT10aGlzLnNvdXJjZSYmKGk9cyl9cmV0dXJuIGl9dG9KU09OKGUscil7aWYoIXIpcmV0dXJue3NvdXJjZTp0aGlzLnNvdXJjZX07bGV0e2FuY2hvcnM6bixkb2M6aSxtYXhBbGlhc0NvdW50OnN9PXIsYT10aGlzLnJlc29sdmUoaSxyKTtpZighYSl7bGV0IGM9YFVucmVzb2x2ZWQgYWxpYXMgKHRoZSBhbmNob3IgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBhbGlhcyk6ICR7dGhpcy5zb3VyY2V9YDt0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoYyl9bGV0IGw9bi5nZXQoYSk7aWYobHx8KHJ0KGEsbnVsbCxyKSxsPW4uZ2V0KGEpKSxsPy5yZXM9PT12b2lkIDApe2xldCBjPSJUaGlzIHNob3VsZCBub3QgaGFwcGVuOiBBbGlhcyBhbmNob3Igd2FzIG5vdCByZXNvbHZlZD8iO3Rocm93IG5ldyBSZWZlcmVuY2VFcnJvcihjKX1pZihzPj0wJiYobC5jb3VudCs9MSxsLmFsaWFzQ291bnQ9PT0wJiYobC5hbGlhc0NvdW50PVpoKGksYSxuKSksbC5jb3VudCpsLmFsaWFzQ291bnQ+cykpe2xldCBjPSJFeGNlc3NpdmUgYWxpYXMgY291bnQgaW5kaWNhdGVzIGEgcmVzb3VyY2UgZXhoYXVzdGlvbiBhdHRhY2siO3Rocm93IG5ldyBSZWZlcmVuY2VFcnJvcihjKX1yZXR1cm4gbC5yZXN9dG9TdHJpbmcoZSxyLG4pe2xldCBpPWAqJHt0aGlzLnNvdXJjZX1gO2lmKGUpe2lmKHNjKHRoaXMuc291cmNlKSxlLm9wdGlvbnMudmVyaWZ5QWxpYXNPcmRlciYmIWUuYW5jaG9ycy5oYXModGhpcy5zb3VyY2UpKXtsZXQgcz1gVW5yZXNvbHZlZCBhbGlhcyAodGhlIGFuY2hvciBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGFsaWFzKTogJHt0aGlzLnNvdXJjZX1gO3Rocm93IG5ldyBFcnJvcihzKX1pZihlLmltcGxpY2l0S2V5KXJldHVybmAke2l9IGB9cmV0dXJuIGl9fTtmdW5jdGlvbiBaaCh0LGUscil7aWYoVnQoZSkpe2xldCBuPWUucmVzb2x2ZSh0KSxpPXImJm4mJnIuZ2V0KG4pO3JldHVybiBpP2kuY291bnQqaS5hbGlhc0NvdW50OjB9ZWxzZSBpZihUZShlKSl7bGV0IG49MDtmb3IobGV0IGkgb2YgZS5pdGVtcyl7bGV0IHM9WmgodCxpLHIpO3M+biYmKG49cyl9cmV0dXJuIG59ZWxzZSBpZihkZShlKSl7bGV0IG49WmgodCxlLmtleSxyKSxpPVpoKHQsZS52YWx1ZSxyKTtyZXR1cm4gTWF0aC5tYXgobixpKX1yZXR1cm4gMX1vKFpoLCJnZXRBbGlhc0NvdW50Iik7dmFyIGFjPW8odD0+IXR8fHR5cGVvZiB0IT0iZnVuY3Rpb24iJiZ0eXBlb2YgdCE9Im9iamVjdCIsImlzU2NhbGFyVmFsdWUiKSxRPWNsYXNzIGV4dGVuZHMgVm57c3RhdGlje28odGhpcywiU2NhbGFyIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoVXQpLHRoaXMudmFsdWU9ZX10b0pTT04oZSxyKXtyZXR1cm4gcj8ua2VlcD90aGlzLnZhbHVlOnJ0KHRoaXMudmFsdWUsZSxyKX10b1N0cmluZygpe3JldHVybiBTdHJpbmcodGhpcy52YWx1ZSl9fTtRLkJMT0NLX0ZPTERFRD0iQkxPQ0tfRk9MREVEIixRLkJMT0NLX0xJVEVSQUw9IkJMT0NLX0xJVEVSQUwiLFEuUExBSU49IlBMQUlOIixRLlFVT1RFX0RPVUJMRT0iUVVPVEVfRE9VQkxFIixRLlFVT1RFX1NJTkdMRT0iUVVPVEVfU0lOR0xFIjt2YXIgRSQ9InRhZzp5YW1sLm9yZywyMDAyOiI7ZnVuY3Rpb24gRCQodCxlLHIpe2lmKGUpe2xldCBuPXIuZmlsdGVyKHM9PnMudGFnPT09ZSksaT1uLmZpbmQocz0+IXMuZm9ybWF0KT8/blswXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYFRhZyAke2V9IG5vdCBmb3VuZGApO3JldHVybiBpfXJldHVybiByLmZpbmQobj0+bi5pZGVudGlmeT8uKHQpJiYhbi5mb3JtYXQpfW8oRCQsImZpbmRUYWdPYmplY3QiKTtmdW5jdGlvbiBrbih0LGUscil7aWYoWXQodCkmJih0PXQuY29udGVudHMpLHhlKHQpKXJldHVybiB0O2lmKGRlKHQpKXtsZXQgcD1yLnNjaGVtYVtrcl0uY3JlYXRlTm9kZT8uKHIuc2NoZW1hLG51bGwscik7cmV0dXJuIHAuaXRlbXMucHVzaCh0KSxwfSh0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgQm9vbGVhbnx8dHlwZW9mIEJpZ0ludDwidSImJnQgaW5zdGFuY2VvZiBCaWdJbnQpJiYodD10LnZhbHVlT2YoKSk7bGV0e2FsaWFzRHVwbGljYXRlT2JqZWN0czpuLG9uQW5jaG9yOmksb25UYWdPYmo6cyxzY2hlbWE6YSxzb3VyY2VPYmplY3RzOmx9PXIsYztpZihuJiZ0JiZ0eXBlb2YgdD09Im9iamVjdCIpe2lmKGM9bC5nZXQodCksYylyZXR1cm4gYy5hbmNob3I/PyhjLmFuY2hvcj1pKHQpKSxuZXcgU3IoYy5hbmNob3IpO2M9e2FuY2hvcjpudWxsLG5vZGU6bnVsbH0sbC5zZXQodCxjKX1lPy5zdGFydHNXaXRoKCIhISIpJiYoZT1FJCtlLnNsaWNlKDIpKTtsZXQgdT1EJCh0LGUsYS50YWdzKTtpZighdSl7aWYodCYmdHlwZW9mIHQudG9KU09OPT0iZnVuY3Rpb24iJiYodD10LnRvSlNPTigpKSwhdHx8dHlwZW9mIHQhPSJvYmplY3QiKXtsZXQgcD1uZXcgUSh0KTtyZXR1cm4gYyYmKGMubm9kZT1wKSxwfXU9dCBpbnN0YW5jZW9mIE1hcD9hW2tyXTpTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpP2Fbd25dOmFba3JdfXMmJihzKHUpLGRlbGV0ZSByLm9uVGFnT2JqKTtsZXQgZj11Py5jcmVhdGVOb2RlP3UuY3JlYXRlTm9kZShyLnNjaGVtYSx0LHIpOnR5cGVvZiB1Py5ub2RlQ2xhc3M/LmZyb209PSJmdW5jdGlvbiI/dS5ub2RlQ2xhc3MuZnJvbShyLnNjaGVtYSx0LHIpOm5ldyBRKHQpO3JldHVybiBlP2YudGFnPWU6dS5kZWZhdWx0fHwoZi50YWc9dS50YWcpLGMmJihjLm5vZGU9ZiksZn1vKGtuLCJjcmVhdGVOb2RlIik7ZnVuY3Rpb24geWEodCxlLHIpe2xldCBuPXI7Zm9yKGxldCBpPWUubGVuZ3RoLTE7aT49MDstLWkpe2xldCBzPWVbaV07aWYodHlwZW9mIHM9PSJudW1iZXIiJiZOdW1iZXIuaXNJbnRlZ2VyKHMpJiZzPj0wKXtsZXQgYT1bXTthW3NdPW4sbj1hfWVsc2Ugbj1uZXcgTWFwKFtbcyxuXV0pfXJldHVybiBrbihuLHZvaWQgMCx7YWxpYXNEdXBsaWNhdGVPYmplY3RzOiExLGtlZXBVbmRlZmluZWQ6ITEsb25BbmNob3I6bygoKT0+e3Rocm93IG5ldyBFcnJvcigiVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgcGxlYXNlIHJlcG9ydCBhIGJ1Zy4iKX0sIm9uQW5jaG9yIiksc2NoZW1hOnQsc291cmNlT2JqZWN0czpuZXcgTWFwfSl9byh5YSwiY29sbGVjdGlvbkZyb21QYXRoIik7dmFyIExvPW8odD0+dD09bnVsbHx8dHlwZW9mIHQ9PSJvYmplY3QiJiYhIXRbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS5kb25lLCJpc0VtcHR5UGF0aCIpLFJvPWNsYXNzIGV4dGVuZHMgVm57c3RhdGlje28odGhpcywiQ29sbGVjdGlvbiIpfWNvbnN0cnVjdG9yKGUscil7c3VwZXIoZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInNjaGVtYSIse3ZhbHVlOnIsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITB9KX1jbG9uZShlKXtsZXQgcj1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0aGlzKSk7cmV0dXJuIGUmJihyLnNjaGVtYT1lKSxyLml0ZW1zPXIuaXRlbXMubWFwKG49PnhlKG4pfHxkZShuKT9uLmNsb25lKGUpOm4pLHRoaXMucmFuZ2UmJihyLnJhbmdlPXRoaXMucmFuZ2Uuc2xpY2UoKSkscn1hZGRJbihlLHIpe2lmKExvKGUpKXRoaXMuYWRkKHIpO2Vsc2V7bGV0W24sLi4uaV09ZSxzPXRoaXMuZ2V0KG4sITApO2lmKFRlKHMpKXMuYWRkSW4oaSxyKTtlbHNlIGlmKHM9PT12b2lkIDAmJnRoaXMuc2NoZW1hKXRoaXMuc2V0KG4seWEodGhpcy5zY2hlbWEsaSxyKSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFlBTUwgY29sbGVjdGlvbiBhdCAke259LiBSZW1haW5pbmcgcGF0aDogJHtpfWApfX1kZWxldGVJbihlKXtsZXRbciwuLi5uXT1lO2lmKG4ubGVuZ3RoPT09MClyZXR1cm4gdGhpcy5kZWxldGUocik7bGV0IGk9dGhpcy5nZXQociwhMCk7aWYoVGUoaSkpcmV0dXJuIGkuZGVsZXRlSW4obik7dGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBZQU1MIGNvbGxlY3Rpb24gYXQgJHtyfS4gUmVtYWluaW5nIHBhdGg6ICR7bn1gKX1nZXRJbihlLHIpe2xldFtuLC4uLmldPWUscz10aGlzLmdldChuLCEwKTtyZXR1cm4gaS5sZW5ndGg9PT0wPyFyJiZjZShzKT9zLnZhbHVlOnM6VGUocyk/cy5nZXRJbihpLHIpOnZvaWQgMH1oYXNBbGxOdWxsVmFsdWVzKGUpe3JldHVybiB0aGlzLml0ZW1zLmV2ZXJ5KHI9PntpZighZGUocikpcmV0dXJuITE7bGV0IG49ci52YWx1ZTtyZXR1cm4gbj09bnVsbHx8ZSYmY2UobikmJm4udmFsdWU9PW51bGwmJiFuLmNvbW1lbnRCZWZvcmUmJiFuLmNvbW1lbnQmJiFuLnRhZ30pfWhhc0luKGUpe2xldFtyLC4uLm5dPWU7aWYobi5sZW5ndGg9PT0wKXJldHVybiB0aGlzLmhhcyhyKTtsZXQgaT10aGlzLmdldChyLCEwKTtyZXR1cm4gVGUoaSk/aS5oYXNJbihuKTohMX1zZXRJbihlLHIpe2xldFtuLC4uLmldPWU7aWYoaS5sZW5ndGg9PT0wKXRoaXMuc2V0KG4scik7ZWxzZXtsZXQgcz10aGlzLmdldChuLCEwKTtpZihUZShzKSlzLnNldEluKGkscik7ZWxzZSBpZihzPT09dm9pZCAwJiZ0aGlzLnNjaGVtYSl0aGlzLnNldChuLHlhKHRoaXMuc2NoZW1hLGkscikpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBZQU1MIGNvbGxlY3Rpb24gYXQgJHtufS4gUmVtYWluaW5nIHBhdGg6ICR7aX1gKX19fTt2YXIgeXg9byh0PT50LnJlcGxhY2UoL14oPyEkKSg/OiAkKT8vZ20sIiMiKSwic3RyaW5naWZ5Q29tbWVudCIpO2Z1bmN0aW9uIGNyKHQsZSl7cmV0dXJuL15cbiskLy50ZXN0KHQpP3Quc3Vic3RyaW5nKDEpOmU/dC5yZXBsYWNlKC9eKD8hICokKS9nbSxlKTp0fW8oY3IsImluZGVudENvbW1lbnQiKTt2YXIgSHI9bygodCxlLHIpPT50LmVuZHNXaXRoKGAKYCk/Y3IocixlKTpyLmluY2x1ZGVzKGAKYCk/YApgK2NyKHIsZSk6KHQuZW5kc1dpdGgoIiAiKT8iIjoiICIpK3IsImxpbmVDb21tZW50Iik7dmFyIGVkPSJmbG93IixsYz0iYmxvY2siLHhhPSJxdW90ZWQiO2Z1bmN0aW9uIGJhKHQsZSxyPSJmbG93Iix7aW5kZW50QXRTdGFydDpuLGxpbmVXaWR0aDppPTgwLG1pbkNvbnRlbnRXaWR0aDpzPTIwLG9uRm9sZDphLG9uT3ZlcmZsb3c6bH09e30pe2lmKCFpfHxpPDApcmV0dXJuIHQ7aTxzJiYocz0wKTtsZXQgYz1NYXRoLm1heCgxK3MsMStpLWUubGVuZ3RoKTtpZih0Lmxlbmd0aDw9YylyZXR1cm4gdDtsZXQgdT1bXSxmPXt9LHA9aS1lLmxlbmd0aDt0eXBlb2Ygbj09Im51bWJlciImJihuPmktTWF0aC5tYXgoMixzKT91LnB1c2goMCk6cD1pLW4pO2xldCBoLGQsbT0hMSxnPS0xLHk9LTEseD0tMTtyPT09bGMmJihnPWhDKHQsZyxlLmxlbmd0aCksZyE9PS0xJiYocD1nK2MpKTtmb3IobGV0IFQ7VD10W2crPTFdOyl7aWYocj09PXhhJiZUPT09IlxcIil7c3dpdGNoKHk9Zyx0W2crMV0pe2Nhc2UieCI6Zys9MzticmVhaztjYXNlInUiOmcrPTU7YnJlYWs7Y2FzZSJVIjpnKz05O2JyZWFrO2RlZmF1bHQ6Zys9MX14PWd9aWYoVD09PWAKYClyPT09bGMmJihnPWhDKHQsZyxlLmxlbmd0aCkpLHA9ZytlLmxlbmd0aCtjLGg9dm9pZCAwO2Vsc2V7aWYoVD09PSIgIiYmZCYmZCE9PSIgIiYmZCE9PWAKYCYmZCE9PSIJIil7bGV0IFI9dFtnKzFdO1ImJlIhPT0iICImJlIhPT1gCmAmJlIhPT0iCSImJihoPWcpfWlmKGc+PXApaWYoaCl1LnB1c2goaCkscD1oK2MsaD12b2lkIDA7ZWxzZSBpZihyPT09eGEpe2Zvcig7ZD09PSIgInx8ZD09PSIJIjspZD1ULFQ9dFtnKz0xXSxtPSEwO2xldCBSPWc+eCsxP2ctMjp5LTE7aWYoZltSXSlyZXR1cm4gdDt1LnB1c2goUiksZltSXT0hMCxwPVIrYyxoPXZvaWQgMH1lbHNlIG09ITB9ZD1UfWlmKG0mJmwmJmwoKSx1Lmxlbmd0aD09PTApcmV0dXJuIHQ7YSYmYSgpO2xldCBrPXQuc2xpY2UoMCx1WzBdKTtmb3IobGV0IFQ9MDtUPHUubGVuZ3RoOysrVCl7bGV0IFI9dVtUXSxfPXVbVCsxXXx8dC5sZW5ndGg7Uj09PTA/az1gCiR7ZX0ke3Quc2xpY2UoMCxfKX1gOihyPT09eGEmJmZbUl0mJihrKz1gJHt0W1JdfVxcYCksays9YAoke2V9JHt0LnNsaWNlKFIrMSxfKX1gKX1yZXR1cm4ga31vKGJhLCJmb2xkRmxvd0xpbmVzIik7ZnVuY3Rpb24gaEModCxlLHIpe2xldCBuPWUsaT1lKzEscz10W2ldO2Zvcig7cz09PSIgInx8cz09PSIJIjspaWYoZTxpK3Ipcz10WysrZV07ZWxzZXtkbyBzPXRbKytlXTt3aGlsZShzJiZzIT09YApgKTtuPWUsaT1lKzEscz10W2ldfXJldHVybiBufW8oaEMsImNvbnN1bWVNb3JlSW5kZW50ZWRMaW5lcyIpO3ZhciB0ZD1vKCh0LGUpPT4oe2luZGVudEF0U3RhcnQ6ZT90LmluZGVudC5sZW5ndGg6dC5pbmRlbnRBdFN0YXJ0LGxpbmVXaWR0aDp0Lm9wdGlvbnMubGluZVdpZHRoLG1pbkNvbnRlbnRXaWR0aDp0Lm9wdGlvbnMubWluQ29udGVudFdpZHRofSksImdldEZvbGRPcHRpb25zIikscmQ9byh0PT4vXiglfC0tLXxcLlwuXC4pL20udGVzdCh0KSwiY29udGFpbnNEb2N1bWVudE1hcmtlciIpO2Z1bmN0aW9uIEMkKHQsZSxyKXtpZighZXx8ZTwwKXJldHVybiExO2xldCBuPWUtcixpPXQubGVuZ3RoO2lmKGk8PW4pcmV0dXJuITE7Zm9yKGxldCBzPTAsYT0wO3M8aTsrK3MpaWYodFtzXT09PWAKYCl7aWYocy1hPm4pcmV0dXJuITA7aWYoYT1zKzEsaS1hPD1uKXJldHVybiExfXJldHVybiEwfW8oQyQsImxpbmVMZW5ndGhPdmVyTGltaXQiKTtmdW5jdGlvbiBjYyh0LGUpe2xldCByPUpTT04uc3RyaW5naWZ5KHQpO2lmKGUub3B0aW9ucy5kb3VibGVRdW90ZWRBc0pTT04pcmV0dXJuIHI7bGV0e2ltcGxpY2l0S2V5Om59PWUsaT1lLm9wdGlvbnMuZG91YmxlUXVvdGVkTWluTXVsdGlMaW5lTGVuZ3RoLHM9ZS5pbmRlbnR8fChyZCh0KT8iICAiOiIiKSxhPSIiLGw9MDtmb3IobGV0IGM9MCx1PXJbY107dTt1PXJbKytjXSlpZih1PT09IiAiJiZyW2MrMV09PT0iXFwiJiZyW2MrMl09PT0ibiImJihhKz1yLnNsaWNlKGwsYykrIlxcICIsYys9MSxsPWMsdT0iXFwiKSx1PT09IlxcIilzd2l0Y2gocltjKzFdKXtjYXNlInUiOnthKz1yLnNsaWNlKGwsYyk7bGV0IGY9ci5zdWJzdHIoYysyLDQpO3N3aXRjaChmKXtjYXNlIjAwMDAiOmErPSJcXDAiO2JyZWFrO2Nhc2UiMDAwNyI6YSs9IlxcYSI7YnJlYWs7Y2FzZSIwMDBiIjphKz0iXFx2IjticmVhaztjYXNlIjAwMWIiOmErPSJcXGUiO2JyZWFrO2Nhc2UiMDA4NSI6YSs9IlxcTiI7YnJlYWs7Y2FzZSIwMGEwIjphKz0iXFxfIjticmVhaztjYXNlIjIwMjgiOmErPSJcXEwiO2JyZWFrO2Nhc2UiMjAyOSI6YSs9IlxcUCI7YnJlYWs7ZGVmYXVsdDpmLnN1YnN0cigwLDIpPT09IjAwIj9hKz0iXFx4IitmLnN1YnN0cigyKTphKz1yLnN1YnN0cihjLDYpfWMrPTUsbD1jKzF9YnJlYWs7Y2FzZSJuIjppZihufHxyW2MrMl09PT0nIid8fHIubGVuZ3RoPGkpYys9MTtlbHNle2ZvcihhKz1yLnNsaWNlKGwsYykrYAoKYDtyW2MrMl09PT0iXFwiJiZyW2MrM109PT0ibiImJnJbYys0XSE9PSciJzspYSs9YApgLGMrPTI7YSs9cyxyW2MrMl09PT0iICImJihhKz0iXFwiKSxjKz0xLGw9YysxfWJyZWFrO2RlZmF1bHQ6Yys9MX1yZXR1cm4gYT1sP2Erci5zbGljZShsKTpyLG4/YTpiYShhLHMseGEsdGQoZSwhMSkpfW8oY2MsImRvdWJsZVF1b3RlZFN0cmluZyIpO2Z1bmN0aW9uIHh4KHQsZSl7aWYoZS5vcHRpb25zLnNpbmdsZVF1b3RlPT09ITF8fGUuaW1wbGljaXRLZXkmJnQuaW5jbHVkZXMoYApgKXx8L1sgXHRdXG58XG5bIFx0XS8udGVzdCh0KSlyZXR1cm4gY2ModCxlKTtsZXQgcj1lLmluZGVudHx8KHJkKHQpPyIgICI6IiIpLG49IiciK3QucmVwbGFjZSgvJy9nLCInJyIpLnJlcGxhY2UoL1xuKy9nLGAkJgoke3J9YCkrIiciO3JldHVybiBlLmltcGxpY2l0S2V5P246YmEobixyLGVkLHRkKGUsITEpKX1vKHh4LCJzaW5nbGVRdW90ZWRTdHJpbmciKTtmdW5jdGlvbiB3YSh0LGUpe2xldHtzaW5nbGVRdW90ZTpyfT1lLm9wdGlvbnMsbjtpZihyPT09ITEpbj1jYztlbHNle2xldCBpPXQuaW5jbHVkZXMoJyInKSxzPXQuaW5jbHVkZXMoIiciKTtpJiYhcz9uPXh4OnMmJiFpP249Y2M6bj1yP3h4OmNjfXJldHVybiBuKHQsZSl9byh3YSwicXVvdGVkU3RyaW5nIik7dmFyIGJ4O3RyeXtieD1uZXcgUmVnRXhwKGAoXnwoPzwhCikpCisoPyEKfCQpYCwiZyIpfWNhdGNoe2J4PS9cbisoPyFcbnwkKS9nfWZ1bmN0aW9uIG5kKHtjb21tZW50OnQsdHlwZTplLHZhbHVlOnJ9LG4saSxzKXtsZXR7YmxvY2tRdW90ZTphLGNvbW1lbnRTdHJpbmc6bCxsaW5lV2lkdGg6Y309bi5vcHRpb25zO2lmKCFhfHwvXG5bXHQgXSskLy50ZXN0KHIpKXJldHVybiB3YShyLG4pO2xldCB1PW4uaW5kZW50fHwobi5mb3JjZUJsb2NrSW5kZW50fHxyZChyKT8iICAiOiIiKSxmPWE9PT0ibGl0ZXJhbCI/ITA6YT09PSJmb2xkZWQifHxlPT09US5CTE9DS19GT0xERUQ/ITE6ZT09PVEuQkxPQ0tfTElURVJBTD8hMDohQyQocixjLHUubGVuZ3RoKTtpZighcilyZXR1cm4gZj9gfApgOmA+CmA7bGV0IHAsaDtmb3IoaD1yLmxlbmd0aDtoPjA7LS1oKXtsZXQgXz1yW2gtMV07aWYoXyE9PWAKYCYmXyE9PSIJIiYmXyE9PSIgIilicmVha31sZXQgZD1yLnN1YnN0cmluZyhoKSxtPWQuaW5kZXhPZihgCmApO209PT0tMT9wPSItIjpyPT09ZHx8bSE9PWQubGVuZ3RoLTE/KHA9IisiLHMmJnMoKSk6cD0iIixkJiYocj1yLnNsaWNlKDAsLWQubGVuZ3RoKSxkW2QubGVuZ3RoLTFdPT09YApgJiYoZD1kLnNsaWNlKDAsLTEpKSxkPWQucmVwbGFjZShieCxgJCYke3V9YCkpO2xldCBnPSExLHkseD0tMTtmb3IoeT0wO3k8ci5sZW5ndGg7Kyt5KXtsZXQgXz1yW3ldO2lmKF89PT0iICIpZz0hMDtlbHNlIGlmKF89PT1gCmApeD15O2Vsc2UgYnJlYWt9bGV0IGs9ci5zdWJzdHJpbmcoMCx4PHk/eCsxOnkpO2smJihyPXIuc3Vic3RyaW5nKGsubGVuZ3RoKSxrPWsucmVwbGFjZSgvXG4rL2csYCQmJHt1fWApKTtsZXQgUj0oZz91PyIyIjoiMSI6IiIpK3A7aWYodCYmKFIrPSIgIitsKHQucmVwbGFjZSgvID9bXHJcbl0rL2csIiAiKSksaSYmaSgpKSwhZil7bGV0IF89ci5yZXBsYWNlKC9cbisvZyxgCiQmYCkucmVwbGFjZSgvKD86XnxcbikoW1x0IF0uKikoPzooW1xuXHQgXSopXG4oPyFbXG5cdCBdKSk/L2csIiQxJDIiKS5yZXBsYWNlKC9cbisvZyxgJCYke3V9YCksRT0hMSxBPXRkKG4sITApO2EhPT0iZm9sZGVkIiYmZSE9PVEuQkxPQ0tfRk9MREVEJiYoQS5vbk92ZXJmbG93PSgpPT57RT0hMH0pO2xldCBGPWJhKGAke2t9JHtffSR7ZH1gLHUsbGMsQSk7aWYoIUUpcmV0dXJuYD4ke1J9CiR7dX0ke0Z9YH1yZXR1cm4gcj1yLnJlcGxhY2UoL1xuKy9nLGAkJiR7dX1gKSxgfCR7Un0KJHt1fSR7a30ke3J9JHtkfWB9byhuZCwiYmxvY2tTdHJpbmciKTtmdW5jdGlvbiBNJCh0LGUscixuKXtsZXR7dHlwZTppLHZhbHVlOnN9PXQse2FjdHVhbFN0cmluZzphLGltcGxpY2l0S2V5OmwsaW5kZW50OmMsaW5kZW50U3RlcDp1LGluRmxvdzpmfT1lO2lmKGwmJnMuaW5jbHVkZXMoYApgKXx8ZiYmL1tbXF17fSxdLy50ZXN0KHMpKXJldHVybiB3YShzLGUpO2lmKC9eW1xuXHQgLFtcXXt9IyYqIXw+JyIlQGBdfF5bPy1dJHxeWz8tXVsgXHRdfFtcbjpdWyBcdF18WyBcdF1cbnxbXG5cdCBdI3xbXG5cdCA6XSQvLnRlc3QocykpcmV0dXJuIGx8fGZ8fCFzLmluY2x1ZGVzKGAKYCk/d2EocyxlKTpuZCh0LGUscixuKTtpZighbCYmIWYmJmkhPT1RLlBMQUlOJiZzLmluY2x1ZGVzKGAKYCkpcmV0dXJuIG5kKHQsZSxyLG4pO2lmKHJkKHMpKXtpZihjPT09IiIpcmV0dXJuIGUuZm9yY2VCbG9ja0luZGVudD0hMCxuZCh0LGUscixuKTtpZihsJiZjPT09dSlyZXR1cm4gd2EocyxlKX1sZXQgcD1zLnJlcGxhY2UoL1xuKy9nLGAkJgoke2N9YCk7aWYoYSl7bGV0IGg9byhnPT5nLmRlZmF1bHQmJmcudGFnIT09InRhZzp5YW1sLm9yZywyMDAyOnN0ciImJmcudGVzdD8udGVzdChwKSwidGVzdCIpLHtjb21wYXQ6ZCx0YWdzOm19PWUuZG9jLnNjaGVtYTtpZihtLnNvbWUoaCl8fGQ/LnNvbWUoaCkpcmV0dXJuIHdhKHMsZSl9cmV0dXJuIGw/cDpiYShwLGMsZWQsdGQoZSwhMSkpfW8oTSQsInBsYWluU3RyaW5nIik7ZnVuY3Rpb24gU24odCxlLHIsbil7bGV0e2ltcGxpY2l0S2V5OmksaW5GbG93OnN9PWUsYT10eXBlb2YgdC52YWx1ZT09InN0cmluZyI/dDpPYmplY3QuYXNzaWduKHt9LHQse3ZhbHVlOlN0cmluZyh0LnZhbHVlKX0pLHt0eXBlOmx9PXQ7bCE9PVEuUVVPVEVfRE9VQkxFJiYvW1x4MDAtXHgwOFx4MGItXHgxZlx4N2YtXHg5Zlx1e0Q4MDB9LVx1e0RGRkZ9XS91LnRlc3QoYS52YWx1ZSkmJihsPVEuUVVPVEVfRE9VQkxFKTtsZXQgYz1vKGY9Pntzd2l0Y2goZil7Y2FzZSBRLkJMT0NLX0ZPTERFRDpjYXNlIFEuQkxPQ0tfTElURVJBTDpyZXR1cm4gaXx8cz93YShhLnZhbHVlLGUpOm5kKGEsZSxyLG4pO2Nhc2UgUS5RVU9URV9ET1VCTEU6cmV0dXJuIGNjKGEudmFsdWUsZSk7Y2FzZSBRLlFVT1RFX1NJTkdMRTpyZXR1cm4geHgoYS52YWx1ZSxlKTtjYXNlIFEuUExBSU46cmV0dXJuIE0kKGEsZSxyLG4pO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSwiX3N0cmluZ2lmeSIpLHU9YyhsKTtpZih1PT09bnVsbCl7bGV0e2RlZmF1bHRLZXlUeXBlOmYsZGVmYXVsdFN0cmluZ1R5cGU6cH09ZS5vcHRpb25zLGg9aSYmZnx8cDtpZih1PWMoaCksdT09PW51bGwpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBkZWZhdWx0IHN0cmluZyB0eXBlICR7aH1gKX1yZXR1cm4gdX1vKFNuLCJzdHJpbmdpZnlTdHJpbmciKTtmdW5jdGlvbiB1Yyh0LGUpe2xldCByPU9iamVjdC5hc3NpZ24oe2Jsb2NrUXVvdGU6ITAsY29tbWVudFN0cmluZzp5eCxkZWZhdWx0S2V5VHlwZTpudWxsLGRlZmF1bHRTdHJpbmdUeXBlOiJQTEFJTiIsZGlyZWN0aXZlczpudWxsLGRvdWJsZVF1b3RlZEFzSlNPTjohMSxkb3VibGVRdW90ZWRNaW5NdWx0aUxpbmVMZW5ndGg6NDAsZmFsc2VTdHI6ImZhbHNlIixmbG93Q29sbGVjdGlvblBhZGRpbmc6ITAsaW5kZW50U2VxOiEwLGxpbmVXaWR0aDo4MCxtaW5Db250ZW50V2lkdGg6MjAsbnVsbFN0cjoibnVsbCIsc2ltcGxlS2V5czohMSxzaW5nbGVRdW90ZTpudWxsLHRyYWlsaW5nQ29tbWE6ITEsdHJ1ZVN0cjoidHJ1ZSIsdmVyaWZ5QWxpYXNPcmRlcjohMH0sdC5zY2hlbWEudG9TdHJpbmdPcHRpb25zLGUpLG47c3dpdGNoKHIuY29sbGVjdGlvblN0eWxlKXtjYXNlImJsb2NrIjpuPSExO2JyZWFrO2Nhc2UiZmxvdyI6bj0hMDticmVhaztkZWZhdWx0Om49bnVsbH1yZXR1cm57YW5jaG9yczpuZXcgU2V0LGRvYzp0LGZsb3dDb2xsZWN0aW9uUGFkZGluZzpyLmZsb3dDb2xsZWN0aW9uUGFkZGluZz8iICI6IiIsaW5kZW50OiIiLGluZGVudFN0ZXA6dHlwZW9mIHIuaW5kZW50PT0ibnVtYmVyIj8iICIucmVwZWF0KHIuaW5kZW50KToiICAiLGluRmxvdzpuLG9wdGlvbnM6cn19byh1YywiY3JlYXRlU3RyaW5naWZ5Q29udGV4dCIpO2Z1bmN0aW9uIE8kKHQsZSl7aWYoZS50YWcpe2xldCBpPXQuZmlsdGVyKHM9PnMudGFnPT09ZS50YWcpO2lmKGkubGVuZ3RoPjApcmV0dXJuIGkuZmluZChzPT5zLmZvcm1hdD09PWUuZm9ybWF0KT8/aVswXX1sZXQgcixuO2lmKGNlKGUpKXtuPWUudmFsdWU7bGV0IGk9dC5maWx0ZXIocz0+cy5pZGVudGlmeT8uKG4pKTtpZihpLmxlbmd0aD4xKXtsZXQgcz1pLmZpbHRlcihhPT5hLnRlc3QpO3MubGVuZ3RoPjAmJihpPXMpfXI9aS5maW5kKHM9PnMuZm9ybWF0PT09ZS5mb3JtYXQpPz9pLmZpbmQocz0+IXMuZm9ybWF0KX1lbHNlIG49ZSxyPXQuZmluZChpPT5pLm5vZGVDbGFzcyYmbiBpbnN0YW5jZW9mIGkubm9kZUNsYXNzKTtpZighcil7bGV0IGk9bj8uY29uc3RydWN0b3I/Lm5hbWU/PyhuPT09bnVsbD8ibnVsbCI6dHlwZW9mIG4pO3Rocm93IG5ldyBFcnJvcihgVGFnIG5vdCByZXNvbHZlZCBmb3IgJHtpfSB2YWx1ZWApfXJldHVybiByfW8oTyQsImdldFRhZ09iamVjdCIpO2Z1bmN0aW9uIEkkKHQsZSx7YW5jaG9yczpyLGRvYzpufSl7aWYoIW4uZGlyZWN0aXZlcylyZXR1cm4iIjtsZXQgaT1bXSxzPShjZSh0KXx8VGUodCkpJiZ0LmFuY2hvcjtzJiZzYyhzKSYmKHIuYWRkKHMpLGkucHVzaChgJiR7c31gKSk7bGV0IGE9dC50YWc/PyhlLmRlZmF1bHQ/bnVsbDplLnRhZyk7cmV0dXJuIGEmJmkucHVzaChuLmRpcmVjdGl2ZXMudGFnU3RyaW5nKGEpKSxpLmpvaW4oIiAiKX1vKEkkLCJzdHJpbmdpZnlQcm9wcyIpO2Z1bmN0aW9uIFRuKHQsZSxyLG4pe2lmKGRlKHQpKXJldHVybiB0LnRvU3RyaW5nKGUscixuKTtpZihWdCh0KSl7aWYoZS5kb2MuZGlyZWN0aXZlcylyZXR1cm4gdC50b1N0cmluZyhlKTtpZihlLnJlc29sdmVkQWxpYXNlcz8uaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBzdHJpbmdpZnkgY2lyY3VsYXIgc3RydWN0dXJlIHdpdGhvdXQgYWxpYXMgbm9kZXMiKTtlLnJlc29sdmVkQWxpYXNlcz9lLnJlc29sdmVkQWxpYXNlcy5hZGQodCk6ZS5yZXNvbHZlZEFsaWFzZXM9bmV3IFNldChbdF0pLHQ9dC5yZXNvbHZlKGUuZG9jKX1sZXQgaSxzPXhlKHQpP3Q6ZS5kb2MuY3JlYXRlTm9kZSh0LHtvblRhZ09iajpvKGM9Pmk9Yywib25UYWdPYmoiKX0pO2k/PyhpPU8kKGUuZG9jLnNjaGVtYS50YWdzLHMpKTtsZXQgYT1JJChzLGksZSk7YS5sZW5ndGg+MCYmKGUuaW5kZW50QXRTdGFydD0oZS5pbmRlbnRBdFN0YXJ0Pz8wKSthLmxlbmd0aCsxKTtsZXQgbD10eXBlb2YgaS5zdHJpbmdpZnk9PSJmdW5jdGlvbiI/aS5zdHJpbmdpZnkocyxlLHIsbik6Y2Uocyk/U24ocyxlLHIsbik6cy50b1N0cmluZyhlLHIsbik7cmV0dXJuIGE/Y2Uocyl8fGxbMF09PT0ieyJ8fGxbMF09PT0iWyI/YCR7YX0gJHtsfWA6YCR7YX0KJHtlLmluZGVudH0ke2x9YDpsfW8oVG4sInN0cmluZ2lmeSIpO2Z1bmN0aW9uIHd4KHtrZXk6dCx2YWx1ZTplfSxyLG4saSl7bGV0e2FsbE51bGxWYWx1ZXM6cyxkb2M6YSxpbmRlbnQ6bCxpbmRlbnRTdGVwOmMsb3B0aW9uczp7Y29tbWVudFN0cmluZzp1LGluZGVudFNlcTpmLHNpbXBsZUtleXM6cH19PXIsaD14ZSh0KSYmdC5jb21tZW50fHxudWxsO2lmKHApe2lmKGgpdGhyb3cgbmV3IEVycm9yKCJXaXRoIHNpbXBsZSBrZXlzLCBrZXkgbm9kZXMgY2Fubm90IGhhdmUgY29tbWVudHMiKTtpZihUZSh0KXx8IXhlKHQpJiZ0eXBlb2YgdD09Im9iamVjdCIpe2xldCBBPSJXaXRoIHNpbXBsZSBrZXlzLCBjb2xsZWN0aW9uIGNhbm5vdCBiZSB1c2VkIGFzIGEga2V5IHZhbHVlIjt0aHJvdyBuZXcgRXJyb3IoQSl9fWxldCBkPSFwJiYoIXR8fGgmJmU9PW51bGwmJiFyLmluRmxvd3x8VGUodCl8fChjZSh0KT90LnR5cGU9PT1RLkJMT0NLX0ZPTERFRHx8dC50eXBlPT09US5CTE9DS19MSVRFUkFMOnR5cGVvZiB0PT0ib2JqZWN0IikpO3I9T2JqZWN0LmFzc2lnbih7fSxyLHthbGxOdWxsVmFsdWVzOiExLGltcGxpY2l0S2V5OiFkJiYocHx8IXMpLGluZGVudDpsK2N9KTtsZXQgbT0hMSxnPSExLHk9VG4odCxyLCgpPT5tPSEwLCgpPT5nPSEwKTtpZighZCYmIXIuaW5GbG93JiZ5Lmxlbmd0aD4xMDI0KXtpZihwKXRocm93IG5ldyBFcnJvcigiV2l0aCBzaW1wbGUga2V5cywgc2luZ2xlIGxpbmUgc2NhbGFyIG11c3Qgbm90IHNwYW4gbW9yZSB0aGFuIDEwMjQgY2hhcmFjdGVycyIpO2Q9ITB9aWYoci5pbkZsb3cpe2lmKHN8fGU9PW51bGwpcmV0dXJuIG0mJm4mJm4oKSx5PT09IiI/Ij8iOmQ/YD8gJHt5fWA6eX1lbHNlIGlmKHMmJiFwfHxlPT1udWxsJiZkKXJldHVybiB5PWA/ICR7eX1gLGgmJiFtP3krPUhyKHksci5pbmRlbnQsdShoKSk6ZyYmaSYmaSgpLHk7bSYmKGg9bnVsbCksZD8oaCYmKHkrPUhyKHksci5pbmRlbnQsdShoKSkpLHk9YD8gJHt5fQoke2x9OmApOih5PWAke3l9OmAsaCYmKHkrPUhyKHksci5pbmRlbnQsdShoKSkpKTtsZXQgeCxrLFQ7eGUoZSk/KHg9ISFlLnNwYWNlQmVmb3JlLGs9ZS5jb21tZW50QmVmb3JlLFQ9ZS5jb21tZW50KTooeD0hMSxrPW51bGwsVD1udWxsLGUmJnR5cGVvZiBlPT0ib2JqZWN0IiYmKGU9YS5jcmVhdGVOb2RlKGUpKSksci5pbXBsaWNpdEtleT0hMSwhZCYmIWgmJmNlKGUpJiYoci5pbmRlbnRBdFN0YXJ0PXkubGVuZ3RoKzEpLGc9ITEsIWYmJmMubGVuZ3RoPj0yJiYhci5pbkZsb3cmJiFkJiZRdChlKSYmIWUuZmxvdyYmIWUudGFnJiYhZS5hbmNob3ImJihyLmluZGVudD1yLmluZGVudC5zdWJzdHJpbmcoMikpO2xldCBSPSExLF89VG4oZSxyLCgpPT5SPSEwLCgpPT5nPSEwKSxFPSIgIjtpZihofHx4fHxrKXtpZihFPXg/YApgOiIiLGspe2xldCBBPXUoayk7RSs9YAoke2NyKEEsci5pbmRlbnQpfWB9Xz09PSIiJiYhci5pbkZsb3c/RT09PWAKYCYmVCYmKEU9YAoKYCk6RSs9YAoke3IuaW5kZW50fWB9ZWxzZSBpZighZCYmVGUoZSkpe2xldCBBPV9bMF0sRj1fLmluZGV4T2YoYApgKSxVPUYhPT0tMSxNPXIuaW5GbG93Pz9lLmZsb3c/P2UuaXRlbXMubGVuZ3RoPT09MDtpZihVfHwhTSl7bGV0IGJlPSExO2lmKFUmJihBPT09IiYifHxBPT09IiEiKSl7bGV0IHo9Xy5pbmRleE9mKCIgIik7QT09PSImIiYmeiE9PS0xJiZ6PEYmJl9beisxXT09PSIhIiYmKHo9Xy5pbmRleE9mKCIgIix6KzEpKSwoej09PS0xfHxGPHopJiYoYmU9ITApfWJlfHwoRT1gCiR7ci5pbmRlbnR9YCl9fWVsc2UoXz09PSIifHxfWzBdPT09YApgKSYmKEU9IiIpO3JldHVybiB5Kz1FK18sci5pbkZsb3c/UiYmbiYmbigpOlQmJiFSP3krPUhyKHksci5pbmRlbnQsdShUKSk6ZyYmaSYmaSgpLHl9byh3eCwic3RyaW5naWZ5UGFpciIpO2Z1bmN0aW9uIF8kKHQsLi4uZSl7dD09PSJkZWJ1ZyImJmNvbnNvbGUubG9nKC4uLmUpfW8oXyQsImRlYnVnIik7ZnVuY3Rpb24gZmModCxlKXsodD09PSJkZWJ1ZyJ8fHQ9PT0id2FybiIpJiZjb25zb2xlLndhcm4oZSl9byhmYywid2FybiIpO3ZhciBpZD0iPDwiLFRyPXtpZGVudGlmeTpvKHQ9PnQ9PT1pZHx8dHlwZW9mIHQ9PSJzeW1ib2wiJiZ0LmRlc2NyaXB0aW9uPT09aWQsImlkZW50aWZ5IiksZGVmYXVsdDoia2V5Iix0YWc6InRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIix0ZXN0Oi9ePDwkLyxyZXNvbHZlOm8oKCk9Pk9iamVjdC5hc3NpZ24obmV3IFEoU3ltYm9sKGlkKSkse2FkZFRvSlNNYXA6b2R9KSwicmVzb2x2ZSIpLHN0cmluZ2lmeTpvKCgpPT5pZCwic3RyaW5naWZ5Iil9LGt4PW8oKHQsZSk9PihUci5pZGVudGlmeShlKXx8Y2UoZSkmJighZS50eXBlfHxlLnR5cGU9PT1RLlBMQUlOKSYmVHIuaWRlbnRpZnkoZS52YWx1ZSkpJiZ0Py5kb2Muc2NoZW1hLnRhZ3Muc29tZShyPT5yLnRhZz09PVRyLnRhZyYmci5kZWZhdWx0KSwiaXNNZXJnZUtleSIpO2Z1bmN0aW9uIG9kKHQsZSxyKXtsZXQgbj1kQyh0LHIpO2lmKFF0KG4pKWZvcihsZXQgaSBvZiBuLml0ZW1zKXZ4KHQsZSxpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBpIG9mIG4pdngodCxlLGkpO2Vsc2UgdngodCxlLG4pfW8ob2QsImFkZE1lcmdlVG9KU01hcCIpO2Z1bmN0aW9uIHZ4KHQsZSxyKXtsZXQgbj1kQyh0LHIpO2lmKCFHdChuKSl0aHJvdyBuZXcgRXJyb3IoIk1lcmdlIHNvdXJjZXMgbXVzdCBiZSBtYXBzIG9yIG1hcCBhbGlhc2VzIik7bGV0IGk9bi50b0pTT04obnVsbCx0LE1hcCk7Zm9yKGxldFtzLGFdb2YgaSllIGluc3RhbmNlb2YgTWFwP2UuaGFzKHMpfHxlLnNldChzLGEpOmUgaW5zdGFuY2VvZiBTZXQ/ZS5hZGQocyk6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscyl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHMse3ZhbHVlOmEsd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtyZXR1cm4gZX1vKHZ4LCJtZXJnZVZhbHVlIik7ZnVuY3Rpb24gZEModCxlKXtyZXR1cm4gdCYmVnQoZSk/ZS5yZXNvbHZlKHQuZG9jLHQpOmV9byhkQywicmVzb2x2ZUFsaWFzVmFsdWUiKTtmdW5jdGlvbiBwYyh0LGUse2tleTpyLHZhbHVlOm59KXtpZih4ZShyKSYmci5hZGRUb0pTTWFwKXIuYWRkVG9KU01hcCh0LGUsbik7ZWxzZSBpZihreCh0LHIpKW9kKHQsZSxuKTtlbHNle2xldCBpPXJ0KHIsIiIsdCk7aWYoZSBpbnN0YW5jZW9mIE1hcCllLnNldChpLHJ0KG4saSx0KSk7ZWxzZSBpZihlIGluc3RhbmNlb2YgU2V0KWUuYWRkKGkpO2Vsc2V7bGV0IHM9UCQocixpLHQpLGE9cnQobixzLHQpO3MgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxzLHt2YWx1ZTphLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk6ZVtzXT1hfX1yZXR1cm4gZX1vKHBjLCJhZGRQYWlyVG9KU01hcCIpO2Z1bmN0aW9uIFAkKHQsZSxyKXtpZihlPT09bnVsbClyZXR1cm4iIjtpZih0eXBlb2YgZSE9Im9iamVjdCIpcmV0dXJuIFN0cmluZyhlKTtpZih4ZSh0KSYmcj8uZG9jKXtsZXQgbj11YyhyLmRvYyx7fSk7bi5hbmNob3JzPW5ldyBTZXQ7Zm9yKGxldCBzIG9mIHIuYW5jaG9ycy5rZXlzKCkpbi5hbmNob3JzLmFkZChzLmFuY2hvcik7bi5pbkZsb3c9ITAsbi5pblN0cmluZ2lmeUtleT0hMDtsZXQgaT10LnRvU3RyaW5nKG4pO2lmKCFyLm1hcEtleVdhcm5lZCl7bGV0IHM9SlNPTi5zdHJpbmdpZnkoaSk7cy5sZW5ndGg+NDAmJihzPXMuc3Vic3RyaW5nKDAsMzYpKycuLi4iJyksZmMoci5kb2Mub3B0aW9ucy5sb2dMZXZlbCxgS2V5cyB3aXRoIGNvbGxlY3Rpb24gdmFsdWVzIHdpbGwgYmUgc3RyaW5naWZpZWQgZHVlIHRvIEpTIE9iamVjdCByZXN0cmljdGlvbnM6ICR7c30uIFNldCBtYXBBc01hcDogdHJ1ZSB0byB1c2Ugb2JqZWN0IGtleXMuYCksci5tYXBLZXlXYXJuZWQ9ITB9cmV0dXJuIGl9cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfW8oUCQsInN0cmluZ2lmeUtleSIpO2Z1bmN0aW9uIEZvKHQsZSxyKXtsZXQgbj1rbih0LHZvaWQgMCxyKSxpPWtuKGUsdm9pZCAwLHIpO3JldHVybiBuZXcgamUobixpKX1vKEZvLCJjcmVhdGVQYWlyIik7dmFyIGplPWNsYXNzIHR7c3RhdGlje28odGhpcywiUGFpciIpfWNvbnN0cnVjdG9yKGUscj1udWxsKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxfdCx7dmFsdWU6Smh9KSx0aGlzLmtleT1lLHRoaXMudmFsdWU9cn1jbG9uZShlKXtsZXR7a2V5OnIsdmFsdWU6bn09dGhpcztyZXR1cm4geGUocikmJihyPXIuY2xvbmUoZSkpLHhlKG4pJiYobj1uLmNsb25lKGUpKSxuZXcgdChyLG4pfXRvSlNPTihlLHIpe2xldCBuPXI/Lm1hcEFzTWFwP25ldyBNYXA6e307cmV0dXJuIHBjKHIsbix0aGlzKX10b1N0cmluZyhlLHIsbil7cmV0dXJuIGU/LmRvYz93eCh0aGlzLGUscixuKTpKU09OLnN0cmluZ2lmeSh0aGlzKX19O2Z1bmN0aW9uIGhjKHQsZSxyKXtyZXR1cm4oZS5pbkZsb3c/P3QuZmxvdz9SJDpOJCkodCxlLHIpfW8oaGMsInN0cmluZ2lmeUNvbGxlY3Rpb24iKTtmdW5jdGlvbiBOJCh7Y29tbWVudDp0LGl0ZW1zOmV9LHIse2Jsb2NrSXRlbVByZWZpeDpuLGZsb3dDaGFyczppLGl0ZW1JbmRlbnQ6cyxvbkNob21wS2VlcDphLG9uQ29tbWVudDpsfSl7bGV0e2luZGVudDpjLG9wdGlvbnM6e2NvbW1lbnRTdHJpbmc6dX19PXIsZj1PYmplY3QuYXNzaWduKHt9LHIse2luZGVudDpzLHR5cGU6bnVsbH0pLHA9ITEsaD1bXTtmb3IobGV0IG09MDttPGUubGVuZ3RoOysrbSl7bGV0IGc9ZVttXSx5PW51bGw7aWYoeGUoZykpIXAmJmcuc3BhY2VCZWZvcmUmJmgucHVzaCgiIiksc2QocixoLGcuY29tbWVudEJlZm9yZSxwKSxnLmNvbW1lbnQmJih5PWcuY29tbWVudCk7ZWxzZSBpZihkZShnKSl7bGV0IGs9eGUoZy5rZXkpP2cua2V5Om51bGw7ayYmKCFwJiZrLnNwYWNlQmVmb3JlJiZoLnB1c2goIiIpLHNkKHIsaCxrLmNvbW1lbnRCZWZvcmUscCkpfXA9ITE7bGV0IHg9VG4oZyxmLCgpPT55PW51bGwsKCk9PnA9ITApO3kmJih4Kz1Icih4LHMsdSh5KSkpLHAmJnkmJihwPSExKSxoLnB1c2gobit4KX1sZXQgZDtpZihoLmxlbmd0aD09PTApZD1pLnN0YXJ0K2kuZW5kO2Vsc2V7ZD1oWzBdO2ZvcihsZXQgbT0xO208aC5sZW5ndGg7KyttKXtsZXQgZz1oW21dO2QrPWc/YAoke2N9JHtnfWA6YApgfX1yZXR1cm4gdD8oZCs9YApgK2NyKHUodCksYyksbCYmbCgpKTpwJiZhJiZhKCksZH1vKE4kLCJzdHJpbmdpZnlCbG9ja0NvbGxlY3Rpb24iKTtmdW5jdGlvbiBSJCh7aXRlbXM6dH0sZSx7Zmxvd0NoYXJzOnIsaXRlbUluZGVudDpufSl7bGV0e2luZGVudDppLGluZGVudFN0ZXA6cyxmbG93Q29sbGVjdGlvblBhZGRpbmc6YSxvcHRpb25zOntjb21tZW50U3RyaW5nOmx9fT1lO24rPXM7bGV0IGM9T2JqZWN0LmFzc2lnbih7fSxlLHtpbmRlbnQ6bixpbkZsb3c6ITAsdHlwZTpudWxsfSksdT0hMSxmPTAscD1bXTtmb3IobGV0IG09MDttPHQubGVuZ3RoOysrbSl7bGV0IGc9dFttXSx5PW51bGw7aWYoeGUoZykpZy5zcGFjZUJlZm9yZSYmcC5wdXNoKCIiKSxzZChlLHAsZy5jb21tZW50QmVmb3JlLCExKSxnLmNvbW1lbnQmJih5PWcuY29tbWVudCk7ZWxzZSBpZihkZShnKSl7bGV0IGs9eGUoZy5rZXkpP2cua2V5Om51bGw7ayYmKGsuc3BhY2VCZWZvcmUmJnAucHVzaCgiIiksc2QoZSxwLGsuY29tbWVudEJlZm9yZSwhMSksay5jb21tZW50JiYodT0hMCkpO2xldCBUPXhlKGcudmFsdWUpP2cudmFsdWU6bnVsbDtUPyhULmNvbW1lbnQmJih5PVQuY29tbWVudCksVC5jb21tZW50QmVmb3JlJiYodT0hMCkpOmcudmFsdWU9PW51bGwmJms/LmNvbW1lbnQmJih5PWsuY29tbWVudCl9eSYmKHU9ITApO2xldCB4PVRuKGcsYywoKT0+eT1udWxsKTt1fHwodT1wLmxlbmd0aD5mfHx4LmluY2x1ZGVzKGAKYCkpLG08dC5sZW5ndGgtMT94Kz0iLCI6ZS5vcHRpb25zLnRyYWlsaW5nQ29tbWEmJihlLm9wdGlvbnMubGluZVdpZHRoPjAmJih1fHwodT1wLnJlZHVjZSgoayxUKT0+aytULmxlbmd0aCsyLDIpKyh4Lmxlbmd0aCsyKT5lLm9wdGlvbnMubGluZVdpZHRoKSksdSYmKHgrPSIsIikpLHkmJih4Kz1Icih4LG4sbCh5KSkpLHAucHVzaCh4KSxmPXAubGVuZ3RofWxldHtzdGFydDpoLGVuZDpkfT1yO2lmKHAubGVuZ3RoPT09MClyZXR1cm4gaCtkO2lmKCF1KXtsZXQgbT1wLnJlZHVjZSgoZyx5KT0+Zyt5Lmxlbmd0aCsyLDIpO3U9ZS5vcHRpb25zLmxpbmVXaWR0aD4wJiZtPmUub3B0aW9ucy5saW5lV2lkdGh9aWYodSl7bGV0IG09aDtmb3IobGV0IGcgb2YgcCltKz1nP2AKJHtzfSR7aX0ke2d9YDpgCmA7cmV0dXJuYCR7bX0KJHtpfSR7ZH1gfWVsc2UgcmV0dXJuYCR7aH0ke2F9JHtwLmpvaW4oIiAiKX0ke2F9JHtkfWB9byhSJCwic3RyaW5naWZ5Rmxvd0NvbGxlY3Rpb24iKTtmdW5jdGlvbiBzZCh7aW5kZW50OnQsb3B0aW9uczp7Y29tbWVudFN0cmluZzplfX0scixuLGkpe2lmKG4mJmkmJihuPW4ucmVwbGFjZSgvXlxuKy8sIiIpKSxuKXtsZXQgcz1jcihlKG4pLHQpO3IucHVzaChzLnRyaW1TdGFydCgpKX19byhzZCwiYWRkQ29tbWVudEJlZm9yZSIpO2Z1bmN0aW9uIFluKHQsZSl7bGV0IHI9Y2UoZSk/ZS52YWx1ZTplO2ZvcihsZXQgbiBvZiB0KWlmKGRlKG4pJiYobi5rZXk9PT1lfHxuLmtleT09PXJ8fGNlKG4ua2V5KSYmbi5rZXkudmFsdWU9PT1yKSlyZXR1cm4gbn1vKFluLCJmaW5kUGFpciIpO3ZhciBxZT1jbGFzcyBleHRlbmRzIFJve3N0YXRpY3tvKHRoaXMsIllBTUxNYXAiKX1zdGF0aWMgZ2V0IHRhZ05hbWUoKXtyZXR1cm4idGFnOnlhbWwub3JnLDIwMDI6bWFwIn1jb25zdHJ1Y3RvcihlKXtzdXBlcihrcixlKSx0aGlzLml0ZW1zPVtdfXN0YXRpYyBmcm9tKGUscixuKXtsZXR7a2VlcFVuZGVmaW5lZDppLHJlcGxhY2VyOnN9PW4sYT1uZXcgdGhpcyhlKSxsPW8oKGMsdSk9PntpZih0eXBlb2Ygcz09ImZ1bmN0aW9uIil1PXMuY2FsbChyLGMsdSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHMpJiYhcy5pbmNsdWRlcyhjKSlyZXR1cm47KHUhPT12b2lkIDB8fGkpJiZhLml0ZW1zLnB1c2goRm8oYyx1LG4pKX0sImFkZCIpO2lmKHIgaW5zdGFuY2VvZiBNYXApZm9yKGxldFtjLHVdb2YgcilsKGMsdSk7ZWxzZSBpZihyJiZ0eXBlb2Ygcj09Im9iamVjdCIpZm9yKGxldCBjIG9mIE9iamVjdC5rZXlzKHIpKWwoYyxyW2NdKTtyZXR1cm4gdHlwZW9mIGUuc29ydE1hcEVudHJpZXM9PSJmdW5jdGlvbiImJmEuaXRlbXMuc29ydChlLnNvcnRNYXBFbnRyaWVzKSxhfWFkZChlLHIpe2xldCBuO2RlKGUpP249ZTohZXx8dHlwZW9mIGUhPSJvYmplY3QifHwhKCJrZXkiaW4gZSk/bj1uZXcgamUoZSxlPy52YWx1ZSk6bj1uZXcgamUoZS5rZXksZS52YWx1ZSk7bGV0IGk9WW4odGhpcy5pdGVtcyxuLmtleSkscz10aGlzLnNjaGVtYT8uc29ydE1hcEVudHJpZXM7aWYoaSl7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtuLmtleX0gYWxyZWFkeSBzZXRgKTtjZShpLnZhbHVlKSYmYWMobi52YWx1ZSk/aS52YWx1ZS52YWx1ZT1uLnZhbHVlOmkudmFsdWU9bi52YWx1ZX1lbHNlIGlmKHMpe2xldCBhPXRoaXMuaXRlbXMuZmluZEluZGV4KGw9PnMobixsKTwwKTthPT09LTE/dGhpcy5pdGVtcy5wdXNoKG4pOnRoaXMuaXRlbXMuc3BsaWNlKGEsMCxuKX1lbHNlIHRoaXMuaXRlbXMucHVzaChuKX1kZWxldGUoZSl7bGV0IHI9WW4odGhpcy5pdGVtcyxlKTtyZXR1cm4gcj90aGlzLml0ZW1zLnNwbGljZSh0aGlzLml0ZW1zLmluZGV4T2YociksMSkubGVuZ3RoPjA6ITF9Z2V0KGUscil7bGV0IGk9WW4odGhpcy5pdGVtcyxlKT8udmFsdWU7cmV0dXJuKCFyJiZjZShpKT9pLnZhbHVlOmkpPz92b2lkIDB9aGFzKGUpe3JldHVybiEhWW4odGhpcy5pdGVtcyxlKX1zZXQoZSxyKXt0aGlzLmFkZChuZXcgamUoZSxyKSwhMCl9dG9KU09OKGUscixuKXtsZXQgaT1uP25ldyBuOnI/Lm1hcEFzTWFwP25ldyBNYXA6e307cj8ub25DcmVhdGUmJnIub25DcmVhdGUoaSk7Zm9yKGxldCBzIG9mIHRoaXMuaXRlbXMpcGMocixpLHMpO3JldHVybiBpfXRvU3RyaW5nKGUscixuKXtpZighZSlyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7Zm9yKGxldCBpIG9mIHRoaXMuaXRlbXMpaWYoIWRlKGkpKXRocm93IG5ldyBFcnJvcihgTWFwIGl0ZW1zIG11c3QgYWxsIGJlIHBhaXJzOyBmb3VuZCAke0pTT04uc3RyaW5naWZ5KGkpfSBpbnN0ZWFkYCk7cmV0dXJuIWUuYWxsTnVsbFZhbHVlcyYmdGhpcy5oYXNBbGxOdWxsVmFsdWVzKCExKSYmKGU9T2JqZWN0LmFzc2lnbih7fSxlLHthbGxOdWxsVmFsdWVzOiEwfSkpLGhjKHRoaXMsZSx7YmxvY2tJdGVtUHJlZml4OiIiLGZsb3dDaGFyczp7c3RhcnQ6InsiLGVuZDoifSJ9LGl0ZW1JbmRlbnQ6ZS5pbmRlbnR8fCIiLG9uQ2hvbXBLZWVwOm4sb25Db21tZW50OnJ9KX19O3ZhciBFcj17Y29sbGVjdGlvbjoibWFwIixkZWZhdWx0OiEwLG5vZGVDbGFzczpxZSx0YWc6InRhZzp5YW1sLm9yZywyMDAyOm1hcCIscmVzb2x2ZSh0LGUpe3JldHVybiBHdCh0KXx8ZSgiRXhwZWN0ZWQgYSBtYXBwaW5nIGZvciB0aGlzIHRhZyIpLHR9LGNyZWF0ZU5vZGU6bygodCxlLHIpPT5xZS5mcm9tKHQsZSxyKSwiY3JlYXRlTm9kZSIpfTt2YXIgdXQ9Y2xhc3MgZXh0ZW5kcyBSb3tzdGF0aWN7byh0aGlzLCJZQU1MU2VxIil9c3RhdGljIGdldCB0YWdOYW1lKCl7cmV0dXJuInRhZzp5YW1sLm9yZywyMDAyOnNlcSJ9Y29uc3RydWN0b3IoZSl7c3VwZXIod24sZSksdGhpcy5pdGVtcz1bXX1hZGQoZSl7dGhpcy5pdGVtcy5wdXNoKGUpfWRlbGV0ZShlKXtsZXQgcj1hZChlKTtyZXR1cm4gdHlwZW9mIHIhPSJudW1iZXIiPyExOnRoaXMuaXRlbXMuc3BsaWNlKHIsMSkubGVuZ3RoPjB9Z2V0KGUscil7bGV0IG49YWQoZSk7aWYodHlwZW9mIG4hPSJudW1iZXIiKXJldHVybjtsZXQgaT10aGlzLml0ZW1zW25dO3JldHVybiFyJiZjZShpKT9pLnZhbHVlOml9aGFzKGUpe2xldCByPWFkKGUpO3JldHVybiB0eXBlb2Ygcj09Im51bWJlciImJnI8dGhpcy5pdGVtcy5sZW5ndGh9c2V0KGUscil7bGV0IG49YWQoZSk7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSB2YWxpZCBpbmRleCwgbm90ICR7ZX0uYCk7bGV0IGk9dGhpcy5pdGVtc1tuXTtjZShpKSYmYWMocik/aS52YWx1ZT1yOnRoaXMuaXRlbXNbbl09cn10b0pTT04oZSxyKXtsZXQgbj1bXTtyPy5vbkNyZWF0ZSYmci5vbkNyZWF0ZShuKTtsZXQgaT0wO2ZvcihsZXQgcyBvZiB0aGlzLml0ZW1zKW4ucHVzaChydChzLFN0cmluZyhpKyspLHIpKTtyZXR1cm4gbn10b1N0cmluZyhlLHIsbil7cmV0dXJuIGU/aGModGhpcyxlLHtibG9ja0l0ZW1QcmVmaXg6Ii0gIixmbG93Q2hhcnM6e3N0YXJ0OiJbIixlbmQ6Il0ifSxpdGVtSW5kZW50OihlLmluZGVudHx8IiIpKyIgICIsb25DaG9tcEtlZXA6bixvbkNvbW1lbnQ6cn0pOkpTT04uc3RyaW5naWZ5KHRoaXMpfXN0YXRpYyBmcm9tKGUscixuKXtsZXR7cmVwbGFjZXI6aX09bixzPW5ldyB0aGlzKGUpO2lmKHImJlN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3Qocikpe2xldCBhPTA7Zm9yKGxldCBsIG9mIHIpe2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iKXtsZXQgYz1yIGluc3RhbmNlb2YgU2V0P2w6U3RyaW5nKGErKyk7bD1pLmNhbGwocixjLGwpfXMuaXRlbXMucHVzaChrbihsLHZvaWQgMCxuKSl9fXJldHVybiBzfX07ZnVuY3Rpb24gYWQodCl7bGV0IGU9Y2UodCk/dC52YWx1ZTp0O3JldHVybiBlJiZ0eXBlb2YgZT09InN0cmluZyImJihlPU51bWJlcihlKSksdHlwZW9mIGU9PSJudW1iZXIiJiZOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPj0wP2U6bnVsbH1vKGFkLCJhc0l0ZW1JbmRleCIpO3ZhciBEcj17Y29sbGVjdGlvbjoic2VxIixkZWZhdWx0OiEwLG5vZGVDbGFzczp1dCx0YWc6InRhZzp5YW1sLm9yZywyMDAyOnNlcSIscmVzb2x2ZSh0LGUpe3JldHVybiBRdCh0KXx8ZSgiRXhwZWN0ZWQgYSBzZXF1ZW5jZSBmb3IgdGhpcyB0YWciKSx0fSxjcmVhdGVOb2RlOm8oKHQsZSxyKT0+dXQuZnJvbSh0LGUsciksImNyZWF0ZU5vZGUiKX07dmFyIEduPXtpZGVudGlmeTpvKHQ9PnR5cGVvZiB0PT0ic3RyaW5nIiwiaWRlbnRpZnkiKSxkZWZhdWx0OiEwLHRhZzoidGFnOnlhbWwub3JnLDIwMDI6c3RyIixyZXNvbHZlOm8odD0+dCwicmVzb2x2ZSIpLHN0cmluZ2lmeSh0LGUscixuKXtyZXR1cm4gZT1PYmplY3QuYXNzaWduKHthY3R1YWxTdHJpbmc6ITB9LGUpLFNuKHQsZSxyLG4pfX07dmFyIF9pPXtpZGVudGlmeTpvKHQ9PnQ9PW51bGwsImlkZW50aWZ5IiksY3JlYXRlTm9kZTpvKCgpPT5uZXcgUShudWxsKSwiY3JlYXRlTm9kZSIpLGRlZmF1bHQ6ITAsdGFnOiJ0YWc6eWFtbC5vcmcsMjAwMjpudWxsIix0ZXN0Oi9eKD86fnxbTm5ddWxsfE5VTEwpPyQvLHJlc29sdmU6bygoKT0+bmV3IFEobnVsbCksInJlc29sdmUiKSxzdHJpbmdpZnk6bygoe3NvdXJjZTp0fSxlKT0+dHlwZW9mIHQ9PSJzdHJpbmciJiZfaS50ZXN0LnRlc3QodCk/dDplLm9wdGlvbnMubnVsbFN0ciwic3RyaW5naWZ5Iil9O3ZhciB2YT17aWRlbnRpZnk6byh0PT50eXBlb2YgdD09ImJvb2xlYW4iLCJpZGVudGlmeSIpLGRlZmF1bHQ6ITAsdGFnOiJ0YWc6eWFtbC5vcmcsMjAwMjpib29sIix0ZXN0Oi9eKD86W1R0XXJ1ZXxUUlVFfFtGZl1hbHNlfEZBTFNFKSQvLHJlc29sdmU6byh0PT5uZXcgUSh0WzBdPT09InQifHx0WzBdPT09IlQiKSwicmVzb2x2ZSIpLHN0cmluZ2lmeSh7c291cmNlOnQsdmFsdWU6ZX0scil7aWYodCYmdmEudGVzdC50ZXN0KHQpKXtsZXQgbj10WzBdPT09InQifHx0WzBdPT09IlQiO2lmKGU9PT1uKXJldHVybiB0fXJldHVybiBlP3Iub3B0aW9ucy50cnVlU3RyOnIub3B0aW9ucy5mYWxzZVN0cn19O2Z1bmN0aW9uIHZ0KHtmb3JtYXQ6dCxtaW5GcmFjdGlvbkRpZ2l0czplLHRhZzpyLHZhbHVlOm59KXtpZih0eXBlb2Ygbj09ImJpZ2ludCIpcmV0dXJuIFN0cmluZyhuKTtsZXQgaT10eXBlb2Ygbj09Im51bWJlciI/bjpOdW1iZXIobik7aWYoIWlzRmluaXRlKGkpKXJldHVybiBpc05hTihpKT8iLm5hbiI6aTwwPyItLmluZiI6Ii5pbmYiO2xldCBzPU9iamVjdC5pcyhuLC0wKT8iLTAiOkpTT04uc3RyaW5naWZ5KG4pO2lmKCF0JiZlJiYoIXJ8fHI9PT0idGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQiKSYmL14tP1xkLy50ZXN0KHMpJiYhcy5pbmNsdWRlcygiZSIpKXtsZXQgYT1zLmluZGV4T2YoIi4iKTthPDAmJihhPXMubGVuZ3RoLHMrPSIuIik7bGV0IGw9ZS0ocy5sZW5ndGgtYS0xKTtmb3IoO2wtLSA+MDspcys9IjAifXJldHVybiBzfW8odnQsInN0cmluZ2lmeU51bWJlciIpO3ZhciBkYz17aWRlbnRpZnk6byh0PT50eXBlb2YgdD09Im51bWJlciIsImlkZW50aWZ5IiksZGVmYXVsdDohMCx0YWc6InRhZzp5YW1sLm9yZywyMDAyOmZsb2F0Iix0ZXN0Oi9eKD86Wy0rXT9cLig/OmluZnxJbmZ8SU5GKXxcLm5hbnxcLk5hTnxcLk5BTikkLyxyZXNvbHZlOm8odD0+dC5zbGljZSgtMykudG9Mb3dlckNhc2UoKT09PSJuYW4iP05hTjp0WzBdPT09Ii0iP051bWJlci5ORUdBVElWRV9JTkZJTklUWTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksInJlc29sdmUiKSxzdHJpbmdpZnk6dnR9LG1jPXtpZGVudGlmeTpvKHQ9PnR5cGVvZiB0PT0ibnVtYmVyIiwiaWRlbnRpZnkiKSxkZWZhdWx0OiEwLHRhZzoidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQiLGZvcm1hdDoiRVhQIix0ZXN0Oi9eWy0rXT8oPzpcLlswLTldK3xbMC05XSsoPzpcLlswLTldKik/KVtlRV1bLStdP1swLTldKyQvLHJlc29sdmU6byh0PT5wYXJzZUZsb2F0KHQpLCJyZXNvbHZlIiksc3RyaW5naWZ5KHQpe2xldCBlPU51bWJlcih0LnZhbHVlKTtyZXR1cm4gaXNGaW5pdGUoZSk/ZS50b0V4cG9uZW50aWFsKCk6dnQodCl9fSxnYz17aWRlbnRpZnk6byh0PT50eXBlb2YgdD09Im51bWJlciIsImlkZW50aWZ5IiksZGVmYXVsdDohMCx0YWc6InRhZzp5YW1sLm9yZywyMDAyOmZsb2F0Iix0ZXN0Oi9eWy0rXT8oPzpcLlswLTldK3xbMC05XStcLlswLTldKikkLyxyZXNvbHZlKHQpe2xldCBlPW5ldyBRKHBhcnNlRmxvYXQodCkpLHI9dC5pbmRleE9mKCIuIik7cmV0dXJuIHIhPT0tMSYmdFt0Lmxlbmd0aC0xXT09PSIwIiYmKGUubWluRnJhY3Rpb25EaWdpdHM9dC5sZW5ndGgtci0xKSxlfSxzdHJpbmdpZnk6dnR9O3ZhciBsZD1vKHQ9PnR5cGVvZiB0PT0iYmlnaW50Inx8TnVtYmVyLmlzSW50ZWdlcih0KSwiaW50SWRlbnRpZnkiKSxTeD1vKCh0LGUscix7aW50QXNCaWdJbnQ6bn0pPT5uP0JpZ0ludCh0KTpwYXJzZUludCh0LnN1YnN0cmluZyhlKSxyKSwiaW50UmVzb2x2ZSIpO2Z1bmN0aW9uIG1DKHQsZSxyKXtsZXR7dmFsdWU6bn09dDtyZXR1cm4gbGQobikmJm4+PTA/cituLnRvU3RyaW5nKGUpOnZ0KHQpfW8obUMsImludFN0cmluZ2lmeSIpO3ZhciB5Yz17aWRlbnRpZnk6byh0PT5sZCh0KSYmdD49MCwiaWRlbnRpZnkiKSxkZWZhdWx0OiEwLHRhZzoidGFnOnlhbWwub3JnLDIwMDI6aW50Iixmb3JtYXQ6Ik9DVCIsdGVzdDovXjBvWzAtN10rJC8scmVzb2x2ZTpvKCh0LGUscik9PlN4KHQsMiw4LHIpLCJyZXNvbHZlIiksc3RyaW5naWZ5Om8odD0+bUModCw4LCIwbyIpLCJzdHJpbmdpZnkiKX0seGM9e2lkZW50aWZ5OmxkLGRlZmF1bHQ6ITAsdGFnOiJ0YWc6eWFtbC5vcmcsMjAwMjppbnQiLHRlc3Q6L15bLStdP1swLTldKyQvLHJlc29sdmU6bygodCxlLHIpPT5TeCh0LDAsMTAsciksInJlc29sdmUiKSxzdHJpbmdpZnk6dnR9LGJjPXtpZGVudGlmeTpvKHQ9PmxkKHQpJiZ0Pj0wLCJpZGVudGlmeSIpLGRlZmF1bHQ6ITAsdGFnOiJ0YWc6eWFtbC5vcmcsMjAwMjppbnQiLGZvcm1hdDoiSEVYIix0ZXN0Oi9eMHhbMC05YS1mQS1GXSskLyxyZXNvbHZlOm8oKHQsZSxyKT0+U3godCwyLDE2LHIpLCJyZXNvbHZlIiksc3RyaW5naWZ5Om8odD0+bUModCwxNiwiMHgiKSwic3RyaW5naWZ5Iil9O3ZhciBUeD1bRXIsRHIsR24sX2ksdmEseWMseGMsYmMsZGMsbWMsZ2NdO2Z1bmN0aW9uIGdDKHQpe3JldHVybiB0eXBlb2YgdD09ImJpZ2ludCJ8fE51bWJlci5pc0ludGVnZXIodCl9byhnQywiaW50SWRlbnRpZnkiKTt2YXIgY2Q9bygoe3ZhbHVlOnR9KT0+SlNPTi5zdHJpbmdpZnkodCksInN0cmluZ2lmeUpTT04iKSxMJD1be2lkZW50aWZ5Om8odD0+dHlwZW9mIHQ9PSJzdHJpbmciLCJpZGVudGlmeSIpLGRlZmF1bHQ6ITAsdGFnOiJ0YWc6eWFtbC5vcmcsMjAwMjpzdHIiLHJlc29sdmU6byh0PT50LCJyZXNvbHZlIiksc3RyaW5naWZ5OmNkfSx7aWRlbnRpZnk6byh0PT50PT1udWxsLCJpZGVudGlmeSIpLGNyZWF0ZU5vZGU6bygoKT0+bmV3IFEobnVsbCksImNyZWF0ZU5vZGUiKSxkZWZhdWx0OiEwLHRhZzoidGFnOnlhbWwub3JnLDIwMDI6bnVsbCIsdGVzdDovXm51bGwkLyxyZXNvbHZlOm8oKCk9Pm51bGwsInJlc29sdmUiKSxzdHJpbmdpZnk6Y2R9LHtpZGVudGlmeTpvKHQ9PnR5cGVvZiB0PT0iYm9vbGVhbiIsImlkZW50aWZ5IiksZGVmYXVsdDohMCx0YWc6InRhZzp5YW1sLm9yZywyMDAyOmJvb2wiLHRlc3Q6L150cnVlJHxeZmFsc2UkLyxyZXNvbHZlOm8odD0+dD09PSJ0cnVlIiwicmVzb2x2ZSIpLHN0cmluZ2lmeTpjZH0se2lkZW50aWZ5OmdDLGRlZmF1bHQ6ITAsdGFnOiJ0YWc6eWFtbC5vcmcsMjAwMjppbnQiLHRlc3Q6L14tPyg/OjB8WzEtOV1bMC05XSopJC8scmVzb2x2ZTpvKCh0LGUse2ludEFzQmlnSW50OnJ9KT0+cj9CaWdJbnQodCk6cGFyc2VJbnQodCwxMCksInJlc29sdmUiKSxzdHJpbmdpZnk6bygoe3ZhbHVlOnR9KT0+Z0ModCk/dC50b1N0cmluZygpOkpTT04uc3RyaW5naWZ5KHQpLCJzdHJpbmdpZnkiKX0se2lkZW50aWZ5Om8odD0+dHlwZW9mIHQ9PSJudW1iZXIiLCJpZGVudGlmeSIpLGRlZmF1bHQ6ITAsdGFnOiJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCIsdGVzdDovXi0/KD86MHxbMS05XVswLTldKikoPzpcLlswLTldKik/KD86W2VFXVstK10/WzAtOV0rKT8kLyxyZXNvbHZlOm8odD0+cGFyc2VGbG9hdCh0KSwicmVzb2x2ZSIpLHN0cmluZ2lmeTpjZH1dLEYkPXtkZWZhdWx0OiEwLHRhZzoiIix0ZXN0Oi9eLyxyZXNvbHZlKHQsZSl7cmV0dXJuIGUoYFVucmVzb2x2ZWQgcGxhaW4gc2NhbGFyICR7SlNPTi5zdHJpbmdpZnkodCl9YCksdH19LEV4PVtFcixEcl0uY29uY2F0KEwkLEYkKTt2YXIga2E9e2lkZW50aWZ5Om8odD0+dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksImlkZW50aWZ5IiksZGVmYXVsdDohMSx0YWc6InRhZzp5YW1sLm9yZywyMDAyOmJpbmFyeSIscmVzb2x2ZSh0LGUpe2lmKHR5cGVvZiBhdG9iPT0iZnVuY3Rpb24iKXtsZXQgcj1hdG9iKHQucmVwbGFjZSgvW1xuXHJdL2csIiIpKSxuPW5ldyBVaW50OEFycmF5KHIubGVuZ3RoKTtmb3IobGV0IGk9MDtpPHIubGVuZ3RoOysraSluW2ldPXIuY2hhckNvZGVBdChpKTtyZXR1cm4gbn1lbHNlIHJldHVybiBlKCJUaGlzIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgcmVhZGluZyBiaW5hcnkgdGFnczsgZWl0aGVyIEJ1ZmZlciBvciBhdG9iIGlzIHJlcXVpcmVkIiksdH0sc3RyaW5naWZ5KHtjb21tZW50OnQsdHlwZTplLHZhbHVlOnJ9LG4saSxzKXtpZighcilyZXR1cm4iIjtsZXQgYT1yLGw7aWYodHlwZW9mIGJ0b2E9PSJmdW5jdGlvbiIpe2xldCBjPSIiO2ZvcihsZXQgdT0wO3U8YS5sZW5ndGg7Kyt1KWMrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVt1XSk7bD1idG9hKGMpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgd3JpdGluZyBiaW5hcnkgdGFnczsgZWl0aGVyIEJ1ZmZlciBvciBidG9hIGlzIHJlcXVpcmVkIik7aWYoZT8/KGU9US5CTE9DS19MSVRFUkFMKSxlIT09US5RVU9URV9ET1VCTEUpe2xldCBjPU1hdGgubWF4KG4ub3B0aW9ucy5saW5lV2lkdGgtbi5pbmRlbnQubGVuZ3RoLG4ub3B0aW9ucy5taW5Db250ZW50V2lkdGgpLHU9TWF0aC5jZWlsKGwubGVuZ3RoL2MpLGY9bmV3IEFycmF5KHUpO2ZvcihsZXQgcD0wLGg9MDtwPHU7KytwLGgrPWMpZltwXT1sLnN1YnN0cihoLGMpO2w9Zi5qb2luKGU9PT1RLkJMT0NLX0xJVEVSQUw/YApgOiIgIil9cmV0dXJuIFNuKHtjb21tZW50OnQsdHlwZTplLHZhbHVlOmx9LG4saSxzKX19O2Z1bmN0aW9uIHVkKHQsZSl7aWYoUXQodCkpZm9yKGxldCByPTA7cjx0Lml0ZW1zLmxlbmd0aDsrK3Ipe2xldCBuPXQuaXRlbXNbcl07aWYoIWRlKG4pKXtpZihHdChuKSl7bi5pdGVtcy5sZW5ndGg+MSYmZSgiRWFjaCBwYWlyIG11c3QgaGF2ZSBpdHMgb3duIHNlcXVlbmNlIGluZGljYXRvciIpO2xldCBpPW4uaXRlbXNbMF18fG5ldyBqZShuZXcgUShudWxsKSk7aWYobi5jb21tZW50QmVmb3JlJiYoaS5rZXkuY29tbWVudEJlZm9yZT1pLmtleS5jb21tZW50QmVmb3JlP2Ake24uY29tbWVudEJlZm9yZX0KJHtpLmtleS5jb21tZW50QmVmb3JlfWA6bi5jb21tZW50QmVmb3JlKSxuLmNvbW1lbnQpe2xldCBzPWkudmFsdWU/P2kua2V5O3MuY29tbWVudD1zLmNvbW1lbnQ/YCR7bi5jb21tZW50fQoke3MuY29tbWVudH1gOm4uY29tbWVudH1uPWl9dC5pdGVtc1tyXT1kZShuKT9uOm5ldyBqZShuKX19ZWxzZSBlKCJFeHBlY3RlZCBhIHNlcXVlbmNlIGZvciB0aGlzIHRhZyIpO3JldHVybiB0fW8odWQsInJlc29sdmVQYWlycyIpO2Z1bmN0aW9uIGZkKHQsZSxyKXtsZXR7cmVwbGFjZXI6bn09cixpPW5ldyB1dCh0KTtpLnRhZz0idGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiO2xldCBzPTA7aWYoZSYmU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlmb3IobGV0IGEgb2YgZSl7dHlwZW9mIG49PSJmdW5jdGlvbiImJihhPW4uY2FsbChlLFN0cmluZyhzKyspLGEpKTtsZXQgbCxjO2lmKEFycmF5LmlzQXJyYXkoYSkpaWYoYS5sZW5ndGg9PT0yKWw9YVswXSxjPWFbMV07ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBba2V5LCB2YWx1ZV0gdHVwbGU6ICR7YX1gKTtlbHNlIGlmKGEmJmEgaW5zdGFuY2VvZiBPYmplY3Qpe2xldCB1PU9iamVjdC5rZXlzKGEpO2lmKHUubGVuZ3RoPT09MSlsPXVbMF0sYz1hW2xdO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgdHVwbGUgd2l0aCBvbmUga2V5LCBub3QgJHt1Lmxlbmd0aH0ga2V5c2ApfWVsc2UgbD1hO2kuaXRlbXMucHVzaChGbyhsLGMscikpfXJldHVybiBpfW8oZmQsImNyZWF0ZVBhaXJzIik7dmFyIFNhPXtjb2xsZWN0aW9uOiJzZXEiLGRlZmF1bHQ6ITEsdGFnOiJ0YWc6eWFtbC5vcmcsMjAwMjpwYWlycyIscmVzb2x2ZTp1ZCxjcmVhdGVOb2RlOmZkfTt2YXIgQW89Y2xhc3MgdCBleHRlbmRzIHV0e3N0YXRpY3tvKHRoaXMsIllBTUxPTWFwIil9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkPXFlLnByb3RvdHlwZS5hZGQuYmluZCh0aGlzKSx0aGlzLmRlbGV0ZT1xZS5wcm90b3R5cGUuZGVsZXRlLmJpbmQodGhpcyksdGhpcy5nZXQ9cWUucHJvdG90eXBlLmdldC5iaW5kKHRoaXMpLHRoaXMuaGFzPXFlLnByb3RvdHlwZS5oYXMuYmluZCh0aGlzKSx0aGlzLnNldD1xZS5wcm90b3R5cGUuc2V0LmJpbmQodGhpcyksdGhpcy50YWc9dC50YWd9dG9KU09OKGUscil7aWYoIXIpcmV0dXJuIHN1cGVyLnRvSlNPTihlKTtsZXQgbj1uZXcgTWFwO3I/Lm9uQ3JlYXRlJiZyLm9uQ3JlYXRlKG4pO2ZvcihsZXQgaSBvZiB0aGlzLml0ZW1zKXtsZXQgcyxhO2lmKGRlKGkpPyhzPXJ0KGkua2V5LCIiLHIpLGE9cnQoaS52YWx1ZSxzLHIpKTpzPXJ0KGksIiIsciksbi5oYXMocykpdGhyb3cgbmV3IEVycm9yKCJPcmRlcmVkIG1hcHMgbXVzdCBub3QgaW5jbHVkZSBkdXBsaWNhdGUga2V5cyIpO24uc2V0KHMsYSl9cmV0dXJuIG59c3RhdGljIGZyb20oZSxyLG4pe2xldCBpPWZkKGUscixuKSxzPW5ldyB0aGlzO3JldHVybiBzLml0ZW1zPWkuaXRlbXMsc319O0FvLnRhZz0idGFnOnlhbWwub3JnLDIwMDI6b21hcCI7dmFyIFRhPXtjb2xsZWN0aW9uOiJzZXEiLGlkZW50aWZ5Om8odD0+dCBpbnN0YW5jZW9mIE1hcCwiaWRlbnRpZnkiKSxub2RlQ2xhc3M6QW8sZGVmYXVsdDohMSx0YWc6InRhZzp5YW1sLm9yZywyMDAyOm9tYXAiLHJlc29sdmUodCxlKXtsZXQgcj11ZCh0LGUpLG49W107Zm9yKGxldHtrZXk6aX1vZiByLml0ZW1zKWNlKGkpJiYobi5pbmNsdWRlcyhpLnZhbHVlKT9lKGBPcmRlcmVkIG1hcHMgbXVzdCBub3QgaW5jbHVkZSBkdXBsaWNhdGUga2V5czogJHtpLnZhbHVlfWApOm4ucHVzaChpLnZhbHVlKSk7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IEFvLHIpfSxjcmVhdGVOb2RlOm8oKHQsZSxyKT0+QW8uZnJvbSh0LGUsciksImNyZWF0ZU5vZGUiKX07ZnVuY3Rpb24geUMoe3ZhbHVlOnQsc291cmNlOmV9LHIpe3JldHVybiBlJiYodD9wZDpoZCkudGVzdC50ZXN0KGUpP2U6dD9yLm9wdGlvbnMudHJ1ZVN0cjpyLm9wdGlvbnMuZmFsc2VTdHJ9byh5QywiYm9vbFN0cmluZ2lmeSIpO3ZhciBwZD17aWRlbnRpZnk6byh0PT50PT09ITAsImlkZW50aWZ5IiksZGVmYXVsdDohMCx0YWc6InRhZzp5YW1sLm9yZywyMDAyOmJvb2wiLHRlc3Q6L14oPzpZfHl8W1l5XWVzfFlFU3xbVHRdcnVlfFRSVUV8W09vXW58T04pJC8scmVzb2x2ZTpvKCgpPT5uZXcgUSghMCksInJlc29sdmUiKSxzdHJpbmdpZnk6eUN9LGhkPXtpZGVudGlmeTpvKHQ9PnQ9PT0hMSwiaWRlbnRpZnkiKSxkZWZhdWx0OiEwLHRhZzoidGFnOnlhbWwub3JnLDIwMDI6Ym9vbCIsdGVzdDovXig/Ok58bnxbTm5db3xOT3xbRmZdYWxzZXxGQUxTRXxbT29dZmZ8T0ZGKSQvLHJlc29sdmU6bygoKT0+bmV3IFEoITEpLCJyZXNvbHZlIiksc3RyaW5naWZ5OnlDfTt2YXIgRHg9e2lkZW50aWZ5Om8odD0+dHlwZW9mIHQ9PSJudW1iZXIiLCJpZGVudGlmeSIpLGRlZmF1bHQ6ITAsdGFnOiJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCIsdGVzdDovXig/OlstK10/XC4oPzppbmZ8SW5mfElORil8XC5uYW58XC5OYU58XC5OQU4pJC8scmVzb2x2ZTpvKHQ9PnQuc2xpY2UoLTMpLnRvTG93ZXJDYXNlKCk9PT0ibmFuIj9OYU46dFswXT09PSItIj9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLCJyZXNvbHZlIiksc3RyaW5naWZ5OnZ0fSxDeD17aWRlbnRpZnk6byh0PT50eXBlb2YgdD09Im51bWJlciIsImlkZW50aWZ5IiksZGVmYXVsdDohMCx0YWc6InRhZzp5YW1sLm9yZywyMDAyOmZsb2F0Iixmb3JtYXQ6IkVYUCIsdGVzdDovXlstK10/KD86WzAtOV1bMC05X10qKT8oPzpcLlswLTlfXSopP1tlRV1bLStdP1swLTldKyQvLHJlc29sdmU6byh0PT5wYXJzZUZsb2F0KHQucmVwbGFjZSgvXy9nLCIiKSksInJlc29sdmUiKSxzdHJpbmdpZnkodCl7bGV0IGU9TnVtYmVyKHQudmFsdWUpO3JldHVybiBpc0Zpbml0ZShlKT9lLnRvRXhwb25lbnRpYWwoKTp2dCh0KX19LE14PXtpZGVudGlmeTpvKHQ9PnR5cGVvZiB0PT0ibnVtYmVyIiwiaWRlbnRpZnkiKSxkZWZhdWx0OiEwLHRhZzoidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQiLHRlc3Q6L15bLStdPyg/OlswLTldWzAtOV9dKik/XC5bMC05X10qJC8scmVzb2x2ZSh0KXtsZXQgZT1uZXcgUShwYXJzZUZsb2F0KHQucmVwbGFjZSgvXy9nLCIiKSkpLHI9dC5pbmRleE9mKCIuIik7aWYociE9PS0xKXtsZXQgbj10LnN1YnN0cmluZyhyKzEpLnJlcGxhY2UoL18vZywiIik7bltuLmxlbmd0aC0xXT09PSIwIiYmKGUubWluRnJhY3Rpb25EaWdpdHM9bi5sZW5ndGgpfXJldHVybiBlfSxzdHJpbmdpZnk6dnR9O3ZhciB3Yz1vKHQ9PnR5cGVvZiB0PT0iYmlnaW50Inx8TnVtYmVyLmlzSW50ZWdlcih0KSwiaW50SWRlbnRpZnkiKTtmdW5jdGlvbiBkZCh0LGUscix7aW50QXNCaWdJbnQ6bn0pe2xldCBpPXRbMF07aWYoKGk9PT0iLSJ8fGk9PT0iKyIpJiYoZSs9MSksdD10LnN1YnN0cmluZyhlKS5yZXBsYWNlKC9fL2csIiIpLG4pe3N3aXRjaChyKXtjYXNlIDI6dD1gMGIke3R9YDticmVhaztjYXNlIDg6dD1gMG8ke3R9YDticmVhaztjYXNlIDE2OnQ9YDB4JHt0fWA7YnJlYWt9bGV0IGE9QmlnSW50KHQpO3JldHVybiBpPT09Ii0iP0JpZ0ludCgtMSkqYTphfWxldCBzPXBhcnNlSW50KHQscik7cmV0dXJuIGk9PT0iLSI/LTEqczpzfW8oZGQsImludFJlc29sdmUiKTtmdW5jdGlvbiBPeCh0LGUscil7bGV0e3ZhbHVlOm59PXQ7aWYod2Mobikpe2xldCBpPW4udG9TdHJpbmcoZSk7cmV0dXJuIG48MD8iLSIrcitpLnN1YnN0cigxKTpyK2l9cmV0dXJuIHZ0KHQpfW8oT3gsImludFN0cmluZ2lmeSIpO3ZhciBJeD17aWRlbnRpZnk6d2MsZGVmYXVsdDohMCx0YWc6InRhZzp5YW1sLm9yZywyMDAyOmludCIsZm9ybWF0OiJCSU4iLHRlc3Q6L15bLStdPzBiWzAtMV9dKyQvLHJlc29sdmU6bygodCxlLHIpPT5kZCh0LDIsMixyKSwicmVzb2x2ZSIpLHN0cmluZ2lmeTpvKHQ9Pk94KHQsMiwiMGIiKSwic3RyaW5naWZ5Iil9LF94PXtpZGVudGlmeTp3YyxkZWZhdWx0OiEwLHRhZzoidGFnOnlhbWwub3JnLDIwMDI6aW50Iixmb3JtYXQ6Ik9DVCIsdGVzdDovXlstK10/MFswLTdfXSskLyxyZXNvbHZlOm8oKHQsZSxyKT0+ZGQodCwxLDgsciksInJlc29sdmUiKSxzdHJpbmdpZnk6byh0PT5PeCh0LDgsIjAiKSwic3RyaW5naWZ5Iil9LFB4PXtpZGVudGlmeTp3YyxkZWZhdWx0OiEwLHRhZzoidGFnOnlhbWwub3JnLDIwMDI6aW50Iix0ZXN0Oi9eWy0rXT9bMC05XVswLTlfXSokLyxyZXNvbHZlOm8oKHQsZSxyKT0+ZGQodCwwLDEwLHIpLCJyZXNvbHZlIiksc3RyaW5naWZ5OnZ0fSxOeD17aWRlbnRpZnk6d2MsZGVmYXVsdDohMCx0YWc6InRhZzp5YW1sLm9yZywyMDAyOmludCIsZm9ybWF0OiJIRVgiLHRlc3Q6L15bLStdPzB4WzAtOWEtZkEtRl9dKyQvLHJlc29sdmU6bygodCxlLHIpPT5kZCh0LDIsMTYsciksInJlc29sdmUiKSxzdHJpbmdpZnk6byh0PT5PeCh0LDE2LCIweCIpLCJzdHJpbmdpZnkiKX07dmFyICRvPWNsYXNzIHQgZXh0ZW5kcyBxZXtzdGF0aWN7byh0aGlzLCJZQU1MU2V0Iil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy50YWc9dC50YWd9YWRkKGUpe2xldCByO2RlKGUpP3I9ZTplJiZ0eXBlb2YgZT09Im9iamVjdCImJiJrZXkiaW4gZSYmInZhbHVlImluIGUmJmUudmFsdWU9PT1udWxsP3I9bmV3IGplKGUua2V5LG51bGwpOnI9bmV3IGplKGUsbnVsbCksWW4odGhpcy5pdGVtcyxyLmtleSl8fHRoaXMuaXRlbXMucHVzaChyKX1nZXQoZSxyKXtsZXQgbj1Zbih0aGlzLml0ZW1zLGUpO3JldHVybiFyJiZkZShuKT9jZShuLmtleSk/bi5rZXkudmFsdWU6bi5rZXk6bn1zZXQoZSxyKXtpZih0eXBlb2YgciE9ImJvb2xlYW4iKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYm9vbGVhbiB2YWx1ZSBmb3Igc2V0KGtleSwgdmFsdWUpIGluIGEgWUFNTCBzZXQsIG5vdCAke3R5cGVvZiByfWApO2xldCBuPVluKHRoaXMuaXRlbXMsZSk7biYmIXI/dGhpcy5pdGVtcy5zcGxpY2UodGhpcy5pdGVtcy5pbmRleE9mKG4pLDEpOiFuJiZyJiZ0aGlzLml0ZW1zLnB1c2gobmV3IGplKGUpKX10b0pTT04oZSxyKXtyZXR1cm4gc3VwZXIudG9KU09OKGUscixTZXQpfXRvU3RyaW5nKGUscixuKXtpZighZSlyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7aWYodGhpcy5oYXNBbGxOdWxsVmFsdWVzKCEwKSlyZXR1cm4gc3VwZXIudG9TdHJpbmcoT2JqZWN0LmFzc2lnbih7fSxlLHthbGxOdWxsVmFsdWVzOiEwfSkscixuKTt0aHJvdyBuZXcgRXJyb3IoIlNldCBpdGVtcyBtdXN0IGFsbCBoYXZlIG51bGwgdmFsdWVzIil9c3RhdGljIGZyb20oZSxyLG4pe2xldHtyZXBsYWNlcjppfT1uLHM9bmV3IHRoaXMoZSk7aWYociYmU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChyKSlmb3IobGV0IGEgb2Ygcil0eXBlb2YgaT09ImZ1bmN0aW9uIiYmKGE9aS5jYWxsKHIsYSxhKSkscy5pdGVtcy5wdXNoKEZvKGEsbnVsbCxuKSk7cmV0dXJuIHN9fTskby50YWc9InRhZzp5YW1sLm9yZywyMDAyOnNldCI7dmFyIEVhPXtjb2xsZWN0aW9uOiJtYXAiLGlkZW50aWZ5Om8odD0+dCBpbnN0YW5jZW9mIFNldCwiaWRlbnRpZnkiKSxub2RlQ2xhc3M6JG8sZGVmYXVsdDohMSx0YWc6InRhZzp5YW1sLm9yZywyMDAyOnNldCIsY3JlYXRlTm9kZTpvKCh0LGUscik9PiRvLmZyb20odCxlLHIpLCJjcmVhdGVOb2RlIikscmVzb2x2ZSh0LGUpe2lmKEd0KHQpKXtpZih0Lmhhc0FsbE51bGxWYWx1ZXMoITApKXJldHVybiBPYmplY3QuYXNzaWduKG5ldyAkbyx0KTtlKCJTZXQgaXRlbXMgbXVzdCBhbGwgaGF2ZSBudWxsIHZhbHVlcyIpfWVsc2UgZSgiRXhwZWN0ZWQgYSBtYXBwaW5nIGZvciB0aGlzIHRhZyIpO3JldHVybiB0fX07ZnVuY3Rpb24gUngodCxlKXtsZXQgcj10WzBdLG49cj09PSItInx8cj09PSIrIj90LnN1YnN0cmluZygxKTp0LGk9byhhPT5lP0JpZ0ludChhKTpOdW1iZXIoYSksIm51bSIpLHM9bi5yZXBsYWNlKC9fL2csIiIpLnNwbGl0KCI6IikucmVkdWNlKChhLGwpPT5hKmkoNjApK2kobCksaSgwKSk7cmV0dXJuIHI9PT0iLSI/aSgtMSkqczpzfW8oUngsInBhcnNlU2V4YWdlc2ltYWwiKTtmdW5jdGlvbiB4Qyh0KXtsZXR7dmFsdWU6ZX09dCxyPW8oYT0+YSwibnVtIik7aWYodHlwZW9mIGU9PSJiaWdpbnQiKXI9byhhPT5CaWdJbnQoYSksIm51bSIpO2Vsc2UgaWYoaXNOYU4oZSl8fCFpc0Zpbml0ZShlKSlyZXR1cm4gdnQodCk7bGV0IG49IiI7ZTwwJiYobj0iLSIsZSo9cigtMSkpO2xldCBpPXIoNjApLHM9W2UlaV07cmV0dXJuIGU8NjA/cy51bnNoaWZ0KDApOihlPShlLXNbMF0pL2kscy51bnNoaWZ0KGUlaSksZT49NjAmJihlPShlLXNbMF0pL2kscy51bnNoaWZ0KGUpKSksbitzLm1hcChhPT5TdHJpbmcoYSkucGFkU3RhcnQoMiwiMCIpKS5qb2luKCI6IikucmVwbGFjZSgvMDAwMDAwXGQqJC8sIiIpfW8oeEMsInN0cmluZ2lmeVNleGFnZXNpbWFsIik7dmFyIHZjPXtpZGVudGlmeTpvKHQ9PnR5cGVvZiB0PT0iYmlnaW50Inx8TnVtYmVyLmlzSW50ZWdlcih0KSwiaWRlbnRpZnkiKSxkZWZhdWx0OiEwLHRhZzoidGFnOnlhbWwub3JnLDIwMDI6aW50Iixmb3JtYXQ6IlRJTUUiLHRlc3Q6L15bLStdP1swLTldWzAtOV9dKig/OjpbMC01XT9bMC05XSkrJC8scmVzb2x2ZTpvKCh0LGUse2ludEFzQmlnSW50OnJ9KT0+UngodCxyKSwicmVzb2x2ZSIpLHN0cmluZ2lmeTp4Q30sa2M9e2lkZW50aWZ5Om8odD0+dHlwZW9mIHQ9PSJudW1iZXIiLCJpZGVudGlmeSIpLGRlZmF1bHQ6ITAsdGFnOiJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCIsZm9ybWF0OiJUSU1FIix0ZXN0Oi9eWy0rXT9bMC05XVswLTlfXSooPzo6WzAtNV0/WzAtOV0pK1wuWzAtOV9dKiQvLHJlc29sdmU6byh0PT5SeCh0LCExKSwicmVzb2x2ZSIpLHN0cmluZ2lmeTp4Q30sQm89e2lkZW50aWZ5Om8odD0+dCBpbnN0YW5jZW9mIERhdGUsImlkZW50aWZ5IiksZGVmYXVsdDohMCx0YWc6InRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCIsdGVzdDpSZWdFeHAoIl4oWzAtOV17NH0pLShbMC05XXsxLDJ9KS0oWzAtOV17MSwyfSkoPzooPzp0fFR8WyBcXHRdKykoWzAtOV17MSwyfSk6KFswLTldezEsMn0pOihbMC05XXsxLDJ9KFxcLlswLTldKyk/KSg/OlsgXFx0XSooWnxbLStdWzAxMl0/WzAtOV0oPzo6WzAtOV17Mn0pPykpPyk/JCIpLHJlc29sdmUodCl7bGV0IGU9dC5tYXRjaChCby50ZXN0KTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIiEhdGltZXN0YW1wIGV4cGVjdHMgYSBkYXRlLCBzdGFydGluZyB3aXRoIHl5eXktbW0tZGQiKTtsZXRbLHIsbixpLHMsYSxsXT1lLm1hcChOdW1iZXIpLGM9ZVs3XT9OdW1iZXIoKGVbN10rIjAwIikuc3Vic3RyKDEsMykpOjAsdT1EYXRlLlVUQyhyLG4tMSxpLHN8fDAsYXx8MCxsfHwwLGMpLGY9ZVs4XTtpZihmJiZmIT09IloiKXtsZXQgcD1SeChmLCExKTtNYXRoLmFicyhwKTwzMCYmKHAqPTYwKSx1LT02ZTQqcH1yZXR1cm4gbmV3IERhdGUodSl9LHN0cmluZ2lmeTpvKCh7dmFsdWU6dH0pPT50Py50b0lTT1N0cmluZygpLnJlcGxhY2UoLyhUMDA6MDA6MDApP1wuMDAwWiQvLCIiKT8/IiIsInN0cmluZ2lmeSIpfTt2YXIgbWQ9W0VyLERyLEduLF9pLHBkLGhkLEl4LF94LFB4LE54LER4LEN4LE14LGthLFRyLFRhLFNhLEVhLHZjLGtjLEJvXTt2YXIgYkM9bmV3IE1hcChbWyJjb3JlIixUeF0sWyJmYWlsc2FmZSIsW0VyLERyLEduXV0sWyJqc29uIixFeF0sWyJ5YW1sMTEiLG1kXSxbInlhbWwtMS4xIixtZF1dKSx3Qz17YmluYXJ5OmthLGJvb2w6dmEsZmxvYXQ6Z2MsZmxvYXRFeHA6bWMsZmxvYXROYU46ZGMsZmxvYXRUaW1lOmtjLGludDp4YyxpbnRIZXg6YmMsaW50T2N0OnljLGludFRpbWU6dmMsbWFwOkVyLG1lcmdlOlRyLG51bGw6X2ksb21hcDpUYSxwYWlyczpTYSxzZXE6RHIsc2V0OkVhLHRpbWVzdGFtcDpCb30sTHg9eyJ0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnkiOmthLCJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSI6VHIsInRhZzp5YW1sLm9yZywyMDAyOm9tYXAiOlRhLCJ0YWc6eWFtbC5vcmcsMjAwMjpwYWlycyI6U2EsInRhZzp5YW1sLm9yZywyMDAyOnNldCI6RWEsInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCI6Qm99O2Z1bmN0aW9uIFNjKHQsZSxyKXtsZXQgbj1iQy5nZXQoZSk7aWYobiYmIXQpcmV0dXJuIHImJiFuLmluY2x1ZGVzKFRyKT9uLmNvbmNhdChUcik6bi5zbGljZSgpO2xldCBpPW47aWYoIWkpaWYoQXJyYXkuaXNBcnJheSh0KSlpPVtdO2Vsc2V7bGV0IHM9QXJyYXkuZnJvbShiQy5rZXlzKCkpLmZpbHRlcihhPT5hIT09InlhbWwxMSIpLm1hcChhPT5KU09OLnN0cmluZ2lmeShhKSkuam9pbigiLCAiKTt0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc2NoZW1hICIke2V9IjsgdXNlIG9uZSBvZiAke3N9IG9yIGRlZmluZSBjdXN0b21UYWdzIGFycmF5YCl9aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0IHMgb2YgdClpPWkuY29uY2F0KHMpO2Vsc2UgdHlwZW9mIHQ9PSJmdW5jdGlvbiImJihpPXQoaS5zbGljZSgpKSk7cmV0dXJuIHImJihpPWkuY29uY2F0KFRyKSksaS5yZWR1Y2UoKHMsYSk9PntsZXQgbD10eXBlb2YgYT09InN0cmluZyI/d0NbYV06YTtpZighbCl7bGV0IGM9SlNPTi5zdHJpbmdpZnkoYSksdT1PYmplY3Qua2V5cyh3QykubWFwKGY9PkpTT04uc3RyaW5naWZ5KGYpKS5qb2luKCIsICIpO3Rocm93IG5ldyBFcnJvcihgVW5rbm93biBjdXN0b20gdGFnICR7Y307IHVzZSBvbmUgb2YgJHt1fWApfXJldHVybiBzLmluY2x1ZGVzKGwpfHxzLnB1c2gobCksc30sW10pfW8oU2MsImdldFRhZ3MiKTt2YXIgQSQ9bygodCxlKT0+dC5rZXk8ZS5rZXk/LTE6dC5rZXk+ZS5rZXk/MTowLCJzb3J0TWFwRW50cmllc0J5S2V5IiksUGk9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJTY2hlbWEiKX1jb25zdHJ1Y3Rvcih7Y29tcGF0OmUsY3VzdG9tVGFnczpyLG1lcmdlOm4scmVzb2x2ZUtub3duVGFnczppLHNjaGVtYTpzLHNvcnRNYXBFbnRyaWVzOmEsdG9TdHJpbmdEZWZhdWx0czpsfSl7dGhpcy5jb21wYXQ9QXJyYXkuaXNBcnJheShlKT9TYyhlLCJjb21wYXQiKTplP1NjKG51bGwsZSk6bnVsbCx0aGlzLm5hbWU9dHlwZW9mIHM9PSJzdHJpbmciJiZzfHwiY29yZSIsdGhpcy5rbm93blRhZ3M9aT9MeDp7fSx0aGlzLnRhZ3M9U2Mocix0aGlzLm5hbWUsbiksdGhpcy50b1N0cmluZ09wdGlvbnM9bD8/bnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxrcix7dmFsdWU6RXJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxVdCx7dmFsdWU6R259KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx3bix7dmFsdWU6RHJ9KSx0aGlzLnNvcnRNYXBFbnRyaWVzPXR5cGVvZiBhPT0iZnVuY3Rpb24iP2E6YT09PSEwP0EkOm51bGx9Y2xvbmUoKXtsZXQgZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHRoaXMpKTtyZXR1cm4gZS50YWdzPXRoaXMudGFncy5zbGljZSgpLGV9fTtmdW5jdGlvbiBGeCh0LGUpe2xldCByPVtdLG49ZS5kaXJlY3RpdmVzPT09ITA7aWYoZS5kaXJlY3RpdmVzIT09ITEmJnQuZGlyZWN0aXZlcyl7bGV0IGM9dC5kaXJlY3RpdmVzLnRvU3RyaW5nKHQpO2M/KHIucHVzaChjKSxuPSEwKTp0LmRpcmVjdGl2ZXMuZG9jU3RhcnQmJihuPSEwKX1uJiZyLnB1c2goIi0tLSIpO2xldCBpPXVjKHQsZSkse2NvbW1lbnRTdHJpbmc6c309aS5vcHRpb25zO2lmKHQuY29tbWVudEJlZm9yZSl7ci5sZW5ndGghPT0xJiZyLnVuc2hpZnQoIiIpO2xldCBjPXModC5jb21tZW50QmVmb3JlKTtyLnVuc2hpZnQoY3IoYywiIikpfWxldCBhPSExLGw9bnVsbDtpZih0LmNvbnRlbnRzKXtpZih4ZSh0LmNvbnRlbnRzKSl7aWYodC5jb250ZW50cy5zcGFjZUJlZm9yZSYmbiYmci5wdXNoKCIiKSx0LmNvbnRlbnRzLmNvbW1lbnRCZWZvcmUpe2xldCBmPXModC5jb250ZW50cy5jb21tZW50QmVmb3JlKTtyLnB1c2goY3IoZiwiIikpfWkuZm9yY2VCbG9ja0luZGVudD0hIXQuY29tbWVudCxsPXQuY29udGVudHMuY29tbWVudH1sZXQgYz1sP3ZvaWQgMDooKT0+YT0hMCx1PVRuKHQuY29udGVudHMsaSwoKT0+bD1udWxsLGMpO2wmJih1Kz1Icih1LCIiLHMobCkpKSwodVswXT09PSJ8Inx8dVswXT09PSI+IikmJnJbci5sZW5ndGgtMV09PT0iLS0tIj9yW3IubGVuZ3RoLTFdPWAtLS0gJHt1fWA6ci5wdXNoKHUpfWVsc2Ugci5wdXNoKFRuKHQuY29udGVudHMsaSkpO2lmKHQuZGlyZWN0aXZlcz8uZG9jRW5kKWlmKHQuY29tbWVudCl7bGV0IGM9cyh0LmNvbW1lbnQpO2MuaW5jbHVkZXMoYApgKT8oci5wdXNoKCIuLi4iKSxyLnB1c2goY3IoYywiIikpKTpyLnB1c2goYC4uLiAke2N9YCl9ZWxzZSByLnB1c2goIi4uLiIpO2Vsc2V7bGV0IGM9dC5jb21tZW50O2MmJmEmJihjPWMucmVwbGFjZSgvXlxuKy8sIiIpKSxjJiYoKCFhfHxsKSYmcltyLmxlbmd0aC0xXSE9PSIiJiZyLnB1c2goIiIpLHIucHVzaChjcihzKGMpLCIiKSkpfXJldHVybiByLmpvaW4oYApgKStgCmB9byhGeCwic3RyaW5naWZ5RG9jdW1lbnQiKTt2YXIgQ3I9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJEb2N1bWVudCIpfWNvbnN0cnVjdG9yKGUscixuKXt0aGlzLmNvbW1lbnRCZWZvcmU9bnVsbCx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLmVycm9ycz1bXSx0aGlzLndhcm5pbmdzPVtdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLF90LHt2YWx1ZTppY30pO2xldCBpPW51bGw7dHlwZW9mIHI9PSJmdW5jdGlvbiJ8fEFycmF5LmlzQXJyYXkocik/aT1yOm49PT12b2lkIDAmJnImJihuPXIscj12b2lkIDApO2xldCBzPU9iamVjdC5hc3NpZ24oe2ludEFzQmlnSW50OiExLGtlZXBTb3VyY2VUb2tlbnM6ITEsbG9nTGV2ZWw6Indhcm4iLHByZXR0eUVycm9yczohMCxzdHJpY3Q6ITAsc3RyaW5nS2V5czohMSx1bmlxdWVLZXlzOiEwLHZlcnNpb246IjEuMiJ9LG4pO3RoaXMub3B0aW9ucz1zO2xldHt2ZXJzaW9uOmF9PXM7bj8uX2RpcmVjdGl2ZXM/KHRoaXMuZGlyZWN0aXZlcz1uLl9kaXJlY3RpdmVzLmF0RG9jdW1lbnQoKSx0aGlzLmRpcmVjdGl2ZXMueWFtbC5leHBsaWNpdCYmKGE9dGhpcy5kaXJlY3RpdmVzLnlhbWwudmVyc2lvbikpOnRoaXMuZGlyZWN0aXZlcz1uZXcgenIoe3ZlcnNpb246YX0pLHRoaXMuc2V0U2NoZW1hKGEsbiksdGhpcy5jb250ZW50cz1lPT09dm9pZCAwP251bGw6dGhpcy5jcmVhdGVOb2RlKGUsaSxuKX1jbG9uZSgpe2xldCBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUse1tfdF06e3ZhbHVlOmljfX0pO3JldHVybiBlLmNvbW1lbnRCZWZvcmU9dGhpcy5jb21tZW50QmVmb3JlLGUuY29tbWVudD10aGlzLmNvbW1lbnQsZS5lcnJvcnM9dGhpcy5lcnJvcnMuc2xpY2UoKSxlLndhcm5pbmdzPXRoaXMud2FybmluZ3Muc2xpY2UoKSxlLm9wdGlvbnM9T2JqZWN0LmFzc2lnbih7fSx0aGlzLm9wdGlvbnMpLHRoaXMuZGlyZWN0aXZlcyYmKGUuZGlyZWN0aXZlcz10aGlzLmRpcmVjdGl2ZXMuY2xvbmUoKSksZS5zY2hlbWE9dGhpcy5zY2hlbWEuY2xvbmUoKSxlLmNvbnRlbnRzPXhlKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMuY2xvbmUoZS5zY2hlbWEpOnRoaXMuY29udGVudHMsdGhpcy5yYW5nZSYmKGUucmFuZ2U9dGhpcy5yYW5nZS5zbGljZSgpKSxlfWFkZChlKXtEYSh0aGlzLmNvbnRlbnRzKSYmdGhpcy5jb250ZW50cy5hZGQoZSl9YWRkSW4oZSxyKXtEYSh0aGlzLmNvbnRlbnRzKSYmdGhpcy5jb250ZW50cy5hZGRJbihlLHIpfWNyZWF0ZUFsaWFzKGUscil7aWYoIWUuYW5jaG9yKXtsZXQgbj1LaCh0aGlzKTtlLmFuY2hvcj0hcnx8bi5oYXMocik/WGgocnx8ImEiLG4pOnJ9cmV0dXJuIG5ldyBTcihlLmFuY2hvcil9Y3JlYXRlTm9kZShlLHIsbil7bGV0IGk7aWYodHlwZW9mIHI9PSJmdW5jdGlvbiIpZT1yLmNhbGwoeyIiOmV9LCIiLGUpLGk9cjtlbHNlIGlmKEFycmF5LmlzQXJyYXkocikpe2xldCB5PW8oaz0+dHlwZW9mIGs9PSJudW1iZXIifHxrIGluc3RhbmNlb2YgU3RyaW5nfHxrIGluc3RhbmNlb2YgTnVtYmVyLCJrZXlUb1N0ciIpLHg9ci5maWx0ZXIoeSkubWFwKFN0cmluZyk7eC5sZW5ndGg+MCYmKHI9ci5jb25jYXQoeCkpLGk9cn1lbHNlIG49PT12b2lkIDAmJnImJihuPXIscj12b2lkIDApO2xldHthbGlhc0R1cGxpY2F0ZU9iamVjdHM6cyxhbmNob3JQcmVmaXg6YSxmbG93Omwsa2VlcFVuZGVmaW5lZDpjLG9uVGFnT2JqOnUsdGFnOmZ9PW4/P3t9LHtvbkFuY2hvcjpwLHNldEFuY2hvcnM6aCxzb3VyY2VPYmplY3RzOmR9PWd4KHRoaXMsYXx8ImEiKSxtPXthbGlhc0R1cGxpY2F0ZU9iamVjdHM6cz8/ITAsa2VlcFVuZGVmaW5lZDpjPz8hMSxvbkFuY2hvcjpwLG9uVGFnT2JqOnUscmVwbGFjZXI6aSxzY2hlbWE6dGhpcy5zY2hlbWEsc291cmNlT2JqZWN0czpkfSxnPWtuKGUsZixtKTtyZXR1cm4gbCYmVGUoZykmJihnLmZsb3c9ITApLGgoKSxnfWNyZWF0ZVBhaXIoZSxyLG49e30pe2xldCBpPXRoaXMuY3JlYXRlTm9kZShlLG51bGwsbikscz10aGlzLmNyZWF0ZU5vZGUocixudWxsLG4pO3JldHVybiBuZXcgamUoaSxzKX1kZWxldGUoZSl7cmV0dXJuIERhKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMuZGVsZXRlKGUpOiExfWRlbGV0ZUluKGUpe3JldHVybiBMbyhlKT90aGlzLmNvbnRlbnRzPT1udWxsPyExOih0aGlzLmNvbnRlbnRzPW51bGwsITApOkRhKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMuZGVsZXRlSW4oZSk6ITF9Z2V0KGUscil7cmV0dXJuIFRlKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMuZ2V0KGUscik6dm9pZCAwfWdldEluKGUscil7cmV0dXJuIExvKGUpPyFyJiZjZSh0aGlzLmNvbnRlbnRzKT90aGlzLmNvbnRlbnRzLnZhbHVlOnRoaXMuY29udGVudHM6VGUodGhpcy5jb250ZW50cyk/dGhpcy5jb250ZW50cy5nZXRJbihlLHIpOnZvaWQgMH1oYXMoZSl7cmV0dXJuIFRlKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMuaGFzKGUpOiExfWhhc0luKGUpe3JldHVybiBMbyhlKT90aGlzLmNvbnRlbnRzIT09dm9pZCAwOlRlKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMuaGFzSW4oZSk6ITF9c2V0KGUscil7dGhpcy5jb250ZW50cz09bnVsbD90aGlzLmNvbnRlbnRzPXlhKHRoaXMuc2NoZW1hLFtlXSxyKTpEYSh0aGlzLmNvbnRlbnRzKSYmdGhpcy5jb250ZW50cy5zZXQoZSxyKX1zZXRJbihlLHIpe0xvKGUpP3RoaXMuY29udGVudHM9cjp0aGlzLmNvbnRlbnRzPT1udWxsP3RoaXMuY29udGVudHM9eWEodGhpcy5zY2hlbWEsQXJyYXkuZnJvbShlKSxyKTpEYSh0aGlzLmNvbnRlbnRzKSYmdGhpcy5jb250ZW50cy5zZXRJbihlLHIpfXNldFNjaGVtYShlLHI9e30pe3R5cGVvZiBlPT0ibnVtYmVyIiYmKGU9U3RyaW5nKGUpKTtsZXQgbjtzd2l0Y2goZSl7Y2FzZSIxLjEiOnRoaXMuZGlyZWN0aXZlcz90aGlzLmRpcmVjdGl2ZXMueWFtbC52ZXJzaW9uPSIxLjEiOnRoaXMuZGlyZWN0aXZlcz1uZXcgenIoe3ZlcnNpb246IjEuMSJ9KSxuPXtyZXNvbHZlS25vd25UYWdzOiExLHNjaGVtYToieWFtbC0xLjEifTticmVhaztjYXNlIjEuMiI6Y2FzZSJuZXh0Ijp0aGlzLmRpcmVjdGl2ZXM/dGhpcy5kaXJlY3RpdmVzLnlhbWwudmVyc2lvbj1lOnRoaXMuZGlyZWN0aXZlcz1uZXcgenIoe3ZlcnNpb246ZX0pLG49e3Jlc29sdmVLbm93blRhZ3M6ITAsc2NoZW1hOiJjb3JlIn07YnJlYWs7Y2FzZSBudWxsOnRoaXMuZGlyZWN0aXZlcyYmZGVsZXRlIHRoaXMuZGlyZWN0aXZlcyxuPW51bGw7YnJlYWs7ZGVmYXVsdDp7bGV0IGk9SlNPTi5zdHJpbmdpZnkoZSk7dGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAnMS4xJywgJzEuMicgb3IgbnVsbCBhcyBmaXJzdCBhcmd1bWVudCwgYnV0IGZvdW5kOiAke2l9YCl9fWlmKHIuc2NoZW1hIGluc3RhbmNlb2YgT2JqZWN0KXRoaXMuc2NoZW1hPXIuc2NoZW1hO2Vsc2UgaWYobil0aGlzLnNjaGVtYT1uZXcgUGkoT2JqZWN0LmFzc2lnbihuLHIpKTtlbHNlIHRocm93IG5ldyBFcnJvcigiV2l0aCBhIG51bGwgWUFNTCB2ZXJzaW9uLCB0aGUgeyBzY2hlbWE6IFNjaGVtYSB9IG9wdGlvbiBpcyByZXF1aXJlZCIpfXRvSlMoe2pzb246ZSxqc29uQXJnOnIsbWFwQXNNYXA6bixtYXhBbGlhc0NvdW50Omksb25BbmNob3I6cyxyZXZpdmVyOmF9PXt9KXtsZXQgbD17YW5jaG9yczpuZXcgTWFwLGRvYzp0aGlzLGtlZXA6IWUsbWFwQXNNYXA6bj09PSEwLG1hcEtleVdhcm5lZDohMSxtYXhBbGlhc0NvdW50OnR5cGVvZiBpPT0ibnVtYmVyIj9pOjEwMH0sYz1ydCh0aGlzLmNvbnRlbnRzLHI/PyIiLGwpO2lmKHR5cGVvZiBzPT0iZnVuY3Rpb24iKWZvcihsZXR7Y291bnQ6dSxyZXM6Zn1vZiBsLmFuY2hvcnMudmFsdWVzKCkpcyhmLHUpO3JldHVybiB0eXBlb2YgYT09ImZ1bmN0aW9uIj9VbihhLHsiIjpjfSwiIixjKTpjfXRvSlNPTihlLHIpe3JldHVybiB0aGlzLnRvSlMoe2pzb246ITAsanNvbkFyZzplLG1hcEFzTWFwOiExLG9uQW5jaG9yOnJ9KX10b1N0cmluZyhlPXt9KXtpZih0aGlzLmVycm9ycy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoIkRvY3VtZW50IHdpdGggZXJyb3JzIGNhbm5vdCBiZSBzdHJpbmdpZmllZCIpO2lmKCJpbmRlbnQiaW4gZSYmKCFOdW1iZXIuaXNJbnRlZ2VyKGUuaW5kZW50KXx8TnVtYmVyKGUuaW5kZW50KTw9MCkpe2xldCByPUpTT04uc3RyaW5naWZ5KGUuaW5kZW50KTt0aHJvdyBuZXcgRXJyb3IoYCJpbmRlbnQiIG9wdGlvbiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgbm90ICR7cn1gKX1yZXR1cm4gRngodGhpcyxlKX19O2Z1bmN0aW9uIERhKHQpe2lmKFRlKHQpKXJldHVybiEwO3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgYSBZQU1MIGNvbGxlY3Rpb24gYXMgZG9jdW1lbnQgY29udGVudHMiKX1vKERhLCJhc3NlcnRDb2xsZWN0aW9uIik7dmFyIE5pPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiWUFNTEVycm9yIil9Y29uc3RydWN0b3IoZSxyLG4saSl7c3VwZXIoKSx0aGlzLm5hbWU9ZSx0aGlzLmNvZGU9bix0aGlzLm1lc3NhZ2U9aSx0aGlzLnBvcz1yfX0sRnQ9Y2xhc3MgZXh0ZW5kcyBOaXtzdGF0aWN7byh0aGlzLCJZQU1MUGFyc2VFcnJvciIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcigiWUFNTFBhcnNlRXJyb3IiLGUscixuKX19LFJpPWNsYXNzIGV4dGVuZHMgTml7c3RhdGlje28odGhpcywiWUFNTFdhcm5pbmciKX1jb25zdHJ1Y3RvcihlLHIsbil7c3VwZXIoIllBTUxXYXJuaW5nIixlLHIsbil9fSxDYT1vKCh0LGUpPT5yPT57aWYoci5wb3NbMF09PT0tMSlyZXR1cm47ci5saW5lUG9zPXIucG9zLm1hcChsPT5lLmxpbmVQb3MobCkpO2xldHtsaW5lOm4sY29sOml9PXIubGluZVBvc1swXTtyLm1lc3NhZ2UrPWAgYXQgbGluZSAke259LCBjb2x1bW4gJHtpfWA7bGV0IHM9aS0xLGE9dC5zdWJzdHJpbmcoZS5saW5lU3RhcnRzW24tMV0sZS5saW5lU3RhcnRzW25dKS5yZXBsYWNlKC9bXG5ccl0rJC8sIiIpO2lmKHM+PTYwJiZhLmxlbmd0aD44MCl7bGV0IGw9TWF0aC5taW4ocy0zOSxhLmxlbmd0aC03OSk7YT0iXHUyMDI2IithLnN1YnN0cmluZyhsKSxzLT1sLTF9aWYoYS5sZW5ndGg+ODAmJihhPWEuc3Vic3RyaW5nKDAsNzkpKyJcdTIwMjYiKSxuPjEmJi9eICokLy50ZXN0KGEuc3Vic3RyaW5nKDAscykpKXtsZXQgbD10LnN1YnN0cmluZyhlLmxpbmVTdGFydHNbbi0yXSxlLmxpbmVTdGFydHNbbi0xXSk7bC5sZW5ndGg+ODAmJihsPWwuc3Vic3RyaW5nKDAsNzkpK2BcdTIwMjYKYCksYT1sK2F9aWYoL1teIF0vLnRlc3QoYSkpe2xldCBsPTEsYz1yLmxpbmVQb3NbMV07Yz8ubGluZT09PW4mJmMuY29sPmkmJihsPU1hdGgubWF4KDEsTWF0aC5taW4oYy5jb2wtaSw4MC1zKSkpO2xldCB1PSIgIi5yZXBlYXQocykrIl4iLnJlcGVhdChsKTtyLm1lc3NhZ2UrPWA6Cgoke2F9CiR7dX0KYH19LCJwcmV0dGlmeUVycm9yIik7ZnVuY3Rpb24ganIodCx7ZmxvdzplLGluZGljYXRvcjpyLG5leHQ6bixvZmZzZXQ6aSxvbkVycm9yOnMscGFyZW50SW5kZW50OmEsc3RhcnRPbk5ld2xpbmU6bH0pe2xldCBjPSExLHU9bCxmPWwscD0iIixoPSIiLGQ9ITEsbT0hMSxnPW51bGwseT1udWxsLHg9bnVsbCxrPW51bGwsVD1udWxsLFI9bnVsbCxfPW51bGw7Zm9yKGxldCBGIG9mIHQpc3dpdGNoKG0mJihGLnR5cGUhPT0ic3BhY2UiJiZGLnR5cGUhPT0ibmV3bGluZSImJkYudHlwZSE9PSJjb21tYSImJnMoRi5vZmZzZXQsIk1JU1NJTkdfQ0hBUiIsIlRhZ3MgYW5kIGFuY2hvcnMgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUgbmV4dCB0b2tlbiBieSB3aGl0ZSBzcGFjZSIpLG09ITEpLGcmJih1JiZGLnR5cGUhPT0iY29tbWVudCImJkYudHlwZSE9PSJuZXdsaW5lIiYmcyhnLCJUQUJfQVNfSU5ERU5UIiwiVGFicyBhcmUgbm90IGFsbG93ZWQgYXMgaW5kZW50YXRpb24iKSxnPW51bGwpLEYudHlwZSl7Y2FzZSJzcGFjZSI6IWUmJihyIT09ImRvYy1zdGFydCJ8fG4/LnR5cGUhPT0iZmxvdy1jb2xsZWN0aW9uIikmJkYuc291cmNlLmluY2x1ZGVzKCIJIikmJihnPUYpLGY9ITA7YnJlYWs7Y2FzZSJjb21tZW50Ijp7Znx8cyhGLCJNSVNTSU5HX0NIQVIiLCJDb21tZW50cyBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIG90aGVyIHRva2VucyBieSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzIik7bGV0IFU9Ri5zb3VyY2Uuc3Vic3RyaW5nKDEpfHwiICI7cD9wKz1oK1U6cD1VLGg9IiIsdT0hMTticmVha31jYXNlIm5ld2xpbmUiOnU/cD9wKz1GLnNvdXJjZTooIVJ8fHIhPT0ic2VxLWl0ZW0taW5kIikmJihjPSEwKTpoKz1GLnNvdXJjZSx1PSEwLGQ9ITAsKHl8fHgpJiYoaz1GKSxmPSEwO2JyZWFrO2Nhc2UiYW5jaG9yIjp5JiZzKEYsIk1VTFRJUExFX0FOQ0hPUlMiLCJBIG5vZGUgY2FuIGhhdmUgYXQgbW9zdCBvbmUgYW5jaG9yIiksRi5zb3VyY2UuZW5kc1dpdGgoIjoiKSYmcyhGLm9mZnNldCtGLnNvdXJjZS5sZW5ndGgtMSwiQkFEX0FMSUFTIiwiQW5jaG9yIGVuZGluZyBpbiA6IGlzIGFtYmlndW91cyIsITApLHk9RixfPz8oXz1GLm9mZnNldCksdT0hMSxmPSExLG09ITA7YnJlYWs7Y2FzZSJ0YWciOnt4JiZzKEYsIk1VTFRJUExFX1RBR1MiLCJBIG5vZGUgY2FuIGhhdmUgYXQgbW9zdCBvbmUgdGFnIikseD1GLF8/PyhfPUYub2Zmc2V0KSx1PSExLGY9ITEsbT0hMDticmVha31jYXNlIHI6KHl8fHgpJiZzKEYsIkJBRF9QUk9QX09SREVSIixgQW5jaG9ycyBhbmQgdGFncyBtdXN0IGJlIGFmdGVyIHRoZSAke0Yuc291cmNlfSBpbmRpY2F0b3JgKSxSJiZzKEYsIlVORVhQRUNURURfVE9LRU4iLGBVbmV4cGVjdGVkICR7Ri5zb3VyY2V9IGluICR7ZT8/ImNvbGxlY3Rpb24ifWApLFI9Rix1PXI9PT0ic2VxLWl0ZW0taW5kInx8cj09PSJleHBsaWNpdC1rZXktaW5kIixmPSExO2JyZWFrO2Nhc2UiY29tbWEiOmlmKGUpe1QmJnMoRiwiVU5FWFBFQ1RFRF9UT0tFTiIsYFVuZXhwZWN0ZWQgLCBpbiAke2V9YCksVD1GLHU9ITEsZj0hMTticmVha31kZWZhdWx0OnMoRiwiVU5FWFBFQ1RFRF9UT0tFTiIsYFVuZXhwZWN0ZWQgJHtGLnR5cGV9IHRva2VuYCksdT0hMSxmPSExfWxldCBFPXRbdC5sZW5ndGgtMV0sQT1FP0Uub2Zmc2V0K0Uuc291cmNlLmxlbmd0aDppO3JldHVybiBtJiZuJiZuLnR5cGUhPT0ic3BhY2UiJiZuLnR5cGUhPT0ibmV3bGluZSImJm4udHlwZSE9PSJjb21tYSImJihuLnR5cGUhPT0ic2NhbGFyInx8bi5zb3VyY2UhPT0iIikmJnMobi5vZmZzZXQsIk1JU1NJTkdfQ0hBUiIsIlRhZ3MgYW5kIGFuY2hvcnMgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUgbmV4dCB0b2tlbiBieSB3aGl0ZSBzcGFjZSIpLGcmJih1JiZnLmluZGVudDw9YXx8bj8udHlwZT09PSJibG9jay1tYXAifHxuPy50eXBlPT09ImJsb2NrLXNlcSIpJiZzKGcsIlRBQl9BU19JTkRFTlQiLCJUYWJzIGFyZSBub3QgYWxsb3dlZCBhcyBpbmRlbnRhdGlvbiIpLHtjb21tYTpULGZvdW5kOlIsc3BhY2VCZWZvcmU6Yyxjb21tZW50OnAsaGFzTmV3bGluZTpkLGFuY2hvcjp5LHRhZzp4LG5ld2xpbmVBZnRlclByb3A6ayxlbmQ6QSxzdGFydDpfPz9BfX1vKGpyLCJyZXNvbHZlUHJvcHMiKTtmdW5jdGlvbiBRbih0KXtpZighdClyZXR1cm4gbnVsbDtzd2l0Y2godC50eXBlKXtjYXNlImFsaWFzIjpjYXNlInNjYWxhciI6Y2FzZSJkb3VibGUtcXVvdGVkLXNjYWxhciI6Y2FzZSJzaW5nbGUtcXVvdGVkLXNjYWxhciI6aWYodC5zb3VyY2UuaW5jbHVkZXMoYApgKSlyZXR1cm4hMDtpZih0LmVuZCl7Zm9yKGxldCBlIG9mIHQuZW5kKWlmKGUudHlwZT09PSJuZXdsaW5lIilyZXR1cm4hMH1yZXR1cm4hMTtjYXNlImZsb3ctY29sbGVjdGlvbiI6Zm9yKGxldCBlIG9mIHQuaXRlbXMpe2ZvcihsZXQgciBvZiBlLnN0YXJ0KWlmKHIudHlwZT09PSJuZXdsaW5lIilyZXR1cm4hMDtpZihlLnNlcCl7Zm9yKGxldCByIG9mIGUuc2VwKWlmKHIudHlwZT09PSJuZXdsaW5lIilyZXR1cm4hMH1pZihRbihlLmtleSl8fFFuKGUudmFsdWUpKXJldHVybiEwfXJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fW8oUW4sImNvbnRhaW5zTmV3bGluZSIpO2Z1bmN0aW9uIE1hKHQsZSxyKXtpZihlPy50eXBlPT09ImZsb3ctY29sbGVjdGlvbiIpe2xldCBuPWUuZW5kWzBdO24uaW5kZW50PT09dCYmKG4uc291cmNlPT09Il0ifHxuLnNvdXJjZT09PSJ9IikmJlFuKGUpJiZyKG4sIkJBRF9JTkRFTlQiLCJGbG93IGVuZCBpbmRpY2F0b3Igc2hvdWxkIGJlIG1vcmUgaW5kZW50ZWQgdGhhbiBwYXJlbnQiLCEwKX19byhNYSwiZmxvd0luZGVudENoZWNrIik7ZnVuY3Rpb24gVGModCxlLHIpe2xldHt1bmlxdWVLZXlzOm59PXQub3B0aW9ucztpZihuPT09ITEpcmV0dXJuITE7bGV0IGk9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjoocyxhKT0+cz09PWF8fGNlKHMpJiZjZShhKSYmcy52YWx1ZT09PWEudmFsdWU7cmV0dXJuIGUuc29tZShzPT5pKHMua2V5LHIpKX1vKFRjLCJtYXBJbmNsdWRlcyIpO3ZhciB2Qz0iQWxsIG1hcHBpbmcgaXRlbXMgbXVzdCBzdGFydCBhdCB0aGUgc2FtZSBjb2x1bW4iO2Z1bmN0aW9uIEF4KHtjb21wb3NlTm9kZTp0LGNvbXBvc2VFbXB0eU5vZGU6ZX0scixuLGkscyl7bGV0IGE9cz8ubm9kZUNsYXNzPz9xZSxsPW5ldyBhKHIuc2NoZW1hKTtyLmF0Um9vdCYmKHIuYXRSb290PSExKTtsZXQgYz1uLm9mZnNldCx1PW51bGw7Zm9yKGxldCBmIG9mIG4uaXRlbXMpe2xldHtzdGFydDpwLGtleTpoLHNlcDpkLHZhbHVlOm19PWYsZz1qcihwLHtpbmRpY2F0b3I6ImV4cGxpY2l0LWtleS1pbmQiLG5leHQ6aD8/ZD8uWzBdLG9mZnNldDpjLG9uRXJyb3I6aSxwYXJlbnRJbmRlbnQ6bi5pbmRlbnQsc3RhcnRPbk5ld2xpbmU6ITB9KSx5PSFnLmZvdW5kO2lmKHkpe2lmKGgmJihoLnR5cGU9PT0iYmxvY2stc2VxIj9pKGMsIkJMT0NLX0FTX0lNUExJQ0lUX0tFWSIsIkEgYmxvY2sgc2VxdWVuY2UgbWF5IG5vdCBiZSB1c2VkIGFzIGFuIGltcGxpY2l0IG1hcCBrZXkiKToiaW5kZW50ImluIGgmJmguaW5kZW50IT09bi5pbmRlbnQmJmkoYywiQkFEX0lOREVOVCIsdkMpKSwhZy5hbmNob3ImJiFnLnRhZyYmIWQpe3U9Zy5lbmQsZy5jb21tZW50JiYobC5jb21tZW50P2wuY29tbWVudCs9YApgK2cuY29tbWVudDpsLmNvbW1lbnQ9Zy5jb21tZW50KTtjb250aW51ZX0oZy5uZXdsaW5lQWZ0ZXJQcm9wfHxRbihoKSkmJmkoaD8/cFtwLmxlbmd0aC0xXSwiTVVMVElMSU5FX0lNUExJQ0lUX0tFWSIsIkltcGxpY2l0IGtleXMgbmVlZCB0byBiZSBvbiBhIHNpbmdsZSBsaW5lIil9ZWxzZSBnLmZvdW5kPy5pbmRlbnQhPT1uLmluZGVudCYmaShjLCJCQURfSU5ERU5UIix2Qyk7ci5hdEtleT0hMDtsZXQgeD1nLmVuZCxrPWg/dChyLGgsZyxpKTplKHIseCxwLG51bGwsZyxpKTtyLnNjaGVtYS5jb21wYXQmJk1hKG4uaW5kZW50LGgsaSksci5hdEtleT0hMSxUYyhyLGwuaXRlbXMsaykmJmkoeCwiRFVQTElDQVRFX0tFWSIsIk1hcCBrZXlzIG11c3QgYmUgdW5pcXVlIik7bGV0IFQ9anIoZD8/W10se2luZGljYXRvcjoibWFwLXZhbHVlLWluZCIsbmV4dDptLG9mZnNldDprLnJhbmdlWzJdLG9uRXJyb3I6aSxwYXJlbnRJbmRlbnQ6bi5pbmRlbnQsc3RhcnRPbk5ld2xpbmU6IWh8fGgudHlwZT09PSJibG9jay1zY2FsYXIifSk7aWYoYz1ULmVuZCxULmZvdW5kKXt5JiYobT8udHlwZT09PSJibG9jay1tYXAiJiYhVC5oYXNOZXdsaW5lJiZpKGMsIkJMT0NLX0FTX0lNUExJQ0lUX0tFWSIsIk5lc3RlZCBtYXBwaW5ncyBhcmUgbm90IGFsbG93ZWQgaW4gY29tcGFjdCBtYXBwaW5ncyIpLHIub3B0aW9ucy5zdHJpY3QmJmcuc3RhcnQ8VC5mb3VuZC5vZmZzZXQtMTAyNCYmaShrLnJhbmdlLCJLRVlfT1ZFUl8xMDI0X0NIQVJTIiwiVGhlIDogaW5kaWNhdG9yIG11c3QgYmUgYXQgbW9zdCAxMDI0IGNoYXJzIGFmdGVyIHRoZSBzdGFydCBvZiBhbiBpbXBsaWNpdCBibG9jayBtYXBwaW5nIGtleSIpKTtsZXQgUj1tP3QocixtLFQsaSk6ZShyLGMsZCxudWxsLFQsaSk7ci5zY2hlbWEuY29tcGF0JiZNYShuLmluZGVudCxtLGkpLGM9Ui5yYW5nZVsyXTtsZXQgXz1uZXcgamUoayxSKTtyLm9wdGlvbnMua2VlcFNvdXJjZVRva2VucyYmKF8uc3JjVG9rZW49ZiksbC5pdGVtcy5wdXNoKF8pfWVsc2V7eSYmaShrLnJhbmdlLCJNSVNTSU5HX0NIQVIiLCJJbXBsaWNpdCBtYXAga2V5cyBuZWVkIHRvIGJlIGZvbGxvd2VkIGJ5IG1hcCB2YWx1ZXMiKSxULmNvbW1lbnQmJihrLmNvbW1lbnQ/ay5jb21tZW50Kz1gCmArVC5jb21tZW50OmsuY29tbWVudD1ULmNvbW1lbnQpO2xldCBSPW5ldyBqZShrKTtyLm9wdGlvbnMua2VlcFNvdXJjZVRva2VucyYmKFIuc3JjVG9rZW49ZiksbC5pdGVtcy5wdXNoKFIpfX1yZXR1cm4gdSYmdTxjJiZpKHUsIklNUE9TU0lCTEUiLCJNYXAgY29tbWVudCB3aXRoIHRyYWlsaW5nIGNvbnRlbnQiKSxsLnJhbmdlPVtuLm9mZnNldCxjLHU/P2NdLGx9byhBeCwicmVzb2x2ZUJsb2NrTWFwIik7ZnVuY3Rpb24gJHgoe2NvbXBvc2VOb2RlOnQsY29tcG9zZUVtcHR5Tm9kZTplfSxyLG4saSxzKXtsZXQgYT1zPy5ub2RlQ2xhc3M/P3V0LGw9bmV3IGEoci5zY2hlbWEpO3IuYXRSb290JiYoci5hdFJvb3Q9ITEpLHIuYXRLZXkmJihyLmF0S2V5PSExKTtsZXQgYz1uLm9mZnNldCx1PW51bGw7Zm9yKGxldHtzdGFydDpmLHZhbHVlOnB9b2Ygbi5pdGVtcyl7bGV0IGg9anIoZix7aW5kaWNhdG9yOiJzZXEtaXRlbS1pbmQiLG5leHQ6cCxvZmZzZXQ6YyxvbkVycm9yOmkscGFyZW50SW5kZW50Om4uaW5kZW50LHN0YXJ0T25OZXdsaW5lOiEwfSk7aWYoIWguZm91bmQpaWYoaC5hbmNob3J8fGgudGFnfHxwKXA/LnR5cGU9PT0iYmxvY2stc2VxIj9pKGguZW5kLCJCQURfSU5ERU5UIiwiQWxsIHNlcXVlbmNlIGl0ZW1zIG11c3Qgc3RhcnQgYXQgdGhlIHNhbWUgY29sdW1uIik6aShjLCJNSVNTSU5HX0NIQVIiLCJTZXF1ZW5jZSBpdGVtIHdpdGhvdXQgLSBpbmRpY2F0b3IiKTtlbHNle3U9aC5lbmQsaC5jb21tZW50JiYobC5jb21tZW50PWguY29tbWVudCk7Y29udGludWV9bGV0IGQ9cD90KHIscCxoLGkpOmUocixoLmVuZCxmLG51bGwsaCxpKTtyLnNjaGVtYS5jb21wYXQmJk1hKG4uaW5kZW50LHAsaSksYz1kLnJhbmdlWzJdLGwuaXRlbXMucHVzaChkKX1yZXR1cm4gbC5yYW5nZT1bbi5vZmZzZXQsYyx1Pz9jXSxsfW8oJHgsInJlc29sdmVCbG9ja1NlcSIpO2Z1bmN0aW9uIFdyKHQsZSxyLG4pe2xldCBpPSIiO2lmKHQpe2xldCBzPSExLGE9IiI7Zm9yKGxldCBsIG9mIHQpe2xldHtzb3VyY2U6Yyx0eXBlOnV9PWw7c3dpdGNoKHUpe2Nhc2Uic3BhY2UiOnM9ITA7YnJlYWs7Y2FzZSJjb21tZW50Ijp7ciYmIXMmJm4obCwiTUlTU0lOR19DSEFSIiwiQ29tbWVudHMgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSBvdGhlciB0b2tlbnMgYnkgd2hpdGUgc3BhY2UgY2hhcmFjdGVycyIpO2xldCBmPWMuc3Vic3RyaW5nKDEpfHwiICI7aT9pKz1hK2Y6aT1mLGE9IiI7YnJlYWt9Y2FzZSJuZXdsaW5lIjppJiYoYSs9Yykscz0hMDticmVhaztkZWZhdWx0Om4obCwiVU5FWFBFQ1RFRF9UT0tFTiIsYFVuZXhwZWN0ZWQgJHt1fSBhdCBub2RlIGVuZGApfWUrPWMubGVuZ3RofX1yZXR1cm57Y29tbWVudDppLG9mZnNldDplfX1vKFdyLCJyZXNvbHZlRW5kIik7dmFyIEJ4PSJCbG9jayBjb2xsZWN0aW9ucyBhcmUgbm90IGFsbG93ZWQgd2l0aGluIGZsb3cgY29sbGVjdGlvbnMiLHp4PW8odD0+dCYmKHQudHlwZT09PSJibG9jay1tYXAifHx0LnR5cGU9PT0iYmxvY2stc2VxIiksImlzQmxvY2siKTtmdW5jdGlvbiBIeCh7Y29tcG9zZU5vZGU6dCxjb21wb3NlRW1wdHlOb2RlOmV9LHIsbixpLHMpe2xldCBhPW4uc3RhcnQuc291cmNlPT09InsiLGw9YT8iZmxvdyBtYXAiOiJmbG93IHNlcXVlbmNlIixjPXM/Lm5vZGVDbGFzcz8/KGE/cWU6dXQpLHU9bmV3IGMoci5zY2hlbWEpO3UuZmxvdz0hMDtsZXQgZj1yLmF0Um9vdDtmJiYoci5hdFJvb3Q9ITEpLHIuYXRLZXkmJihyLmF0S2V5PSExKTtsZXQgcD1uLm9mZnNldCtuLnN0YXJ0LnNvdXJjZS5sZW5ndGg7Zm9yKGxldCB5PTA7eTxuLml0ZW1zLmxlbmd0aDsrK3kpe2xldCB4PW4uaXRlbXNbeV0se3N0YXJ0Omssa2V5OlQsc2VwOlIsdmFsdWU6X309eCxFPWpyKGsse2Zsb3c6bCxpbmRpY2F0b3I6ImV4cGxpY2l0LWtleS1pbmQiLG5leHQ6VD8/Uj8uWzBdLG9mZnNldDpwLG9uRXJyb3I6aSxwYXJlbnRJbmRlbnQ6bi5pbmRlbnQsc3RhcnRPbk5ld2xpbmU6ITF9KTtpZighRS5mb3VuZCl7aWYoIUUuYW5jaG9yJiYhRS50YWcmJiFSJiYhXyl7eT09PTAmJkUuY29tbWE/aShFLmNvbW1hLCJVTkVYUEVDVEVEX1RPS0VOIixgVW5leHBlY3RlZCAsIGluICR7bH1gKTp5PG4uaXRlbXMubGVuZ3RoLTEmJmkoRS5zdGFydCwiVU5FWFBFQ1RFRF9UT0tFTiIsYFVuZXhwZWN0ZWQgZW1wdHkgaXRlbSBpbiAke2x9YCksRS5jb21tZW50JiYodS5jb21tZW50P3UuY29tbWVudCs9YApgK0UuY29tbWVudDp1LmNvbW1lbnQ9RS5jb21tZW50KSxwPUUuZW5kO2NvbnRpbnVlfSFhJiZyLm9wdGlvbnMuc3RyaWN0JiZRbihUKSYmaShULCJNVUxUSUxJTkVfSU1QTElDSVRfS0VZIiwiSW1wbGljaXQga2V5cyBvZiBmbG93IHNlcXVlbmNlIHBhaXJzIG5lZWQgdG8gYmUgb24gYSBzaW5nbGUgbGluZSIpfWlmKHk9PT0wKUUuY29tbWEmJmkoRS5jb21tYSwiVU5FWFBFQ1RFRF9UT0tFTiIsYFVuZXhwZWN0ZWQgLCBpbiAke2x9YCk7ZWxzZSBpZihFLmNvbW1hfHxpKEUuc3RhcnQsIk1JU1NJTkdfQ0hBUiIsYE1pc3NpbmcgLCBiZXR3ZWVuICR7bH0gaXRlbXNgKSxFLmNvbW1lbnQpe2xldCBBPSIiO2U6Zm9yKGxldCBGIG9mIGspc3dpdGNoKEYudHlwZSl7Y2FzZSJjb21tYSI6Y2FzZSJzcGFjZSI6YnJlYWs7Y2FzZSJjb21tZW50IjpBPUYuc291cmNlLnN1YnN0cmluZygxKTticmVhayBlO2RlZmF1bHQ6YnJlYWsgZX1pZihBKXtsZXQgRj11Lml0ZW1zW3UuaXRlbXMubGVuZ3RoLTFdO2RlKEYpJiYoRj1GLnZhbHVlPz9GLmtleSksRi5jb21tZW50P0YuY29tbWVudCs9YApgK0E6Ri5jb21tZW50PUEsRS5jb21tZW50PUUuY29tbWVudC5zdWJzdHJpbmcoQS5sZW5ndGgrMSl9fWlmKCFhJiYhUiYmIUUuZm91bmQpe2xldCBBPV8/dChyLF8sRSxpKTplKHIsRS5lbmQsUixudWxsLEUsaSk7dS5pdGVtcy5wdXNoKEEpLHA9QS5yYW5nZVsyXSx6eChfKSYmaShBLnJhbmdlLCJCTE9DS19JTl9GTE9XIixCeCl9ZWxzZXtyLmF0S2V5PSEwO2xldCBBPUUuZW5kLEY9VD90KHIsVCxFLGkpOmUocixBLGssbnVsbCxFLGkpO3p4KFQpJiZpKEYucmFuZ2UsIkJMT0NLX0lOX0ZMT1ciLEJ4KSxyLmF0S2V5PSExO2xldCBVPWpyKFI/P1tdLHtmbG93OmwsaW5kaWNhdG9yOiJtYXAtdmFsdWUtaW5kIixuZXh0Ol8sb2Zmc2V0OkYucmFuZ2VbMl0sb25FcnJvcjppLHBhcmVudEluZGVudDpuLmluZGVudCxzdGFydE9uTmV3bGluZTohMX0pO2lmKFUuZm91bmQpe2lmKCFhJiYhRS5mb3VuZCYmci5vcHRpb25zLnN0cmljdCl7aWYoUilmb3IobGV0IHogb2YgUil7aWYoej09PVUuZm91bmQpYnJlYWs7aWYoei50eXBlPT09Im5ld2xpbmUiKXtpKHosIk1VTFRJTElORV9JTVBMSUNJVF9LRVkiLCJJbXBsaWNpdCBrZXlzIG9mIGZsb3cgc2VxdWVuY2UgcGFpcnMgbmVlZCB0byBiZSBvbiBhIHNpbmdsZSBsaW5lIik7YnJlYWt9fUUuc3RhcnQ8VS5mb3VuZC5vZmZzZXQtMTAyNCYmaShVLmZvdW5kLCJLRVlfT1ZFUl8xMDI0X0NIQVJTIiwiVGhlIDogaW5kaWNhdG9yIG11c3QgYmUgYXQgbW9zdCAxMDI0IGNoYXJzIGFmdGVyIHRoZSBzdGFydCBvZiBhbiBpbXBsaWNpdCBmbG93IHNlcXVlbmNlIGtleSIpfX1lbHNlIF8mJigic291cmNlImluIF8mJl8uc291cmNlPy5bMF09PT0iOiI/aShfLCJNSVNTSU5HX0NIQVIiLGBNaXNzaW5nIHNwYWNlIGFmdGVyIDogaW4gJHtsfWApOmkoVS5zdGFydCwiTUlTU0lOR19DSEFSIixgTWlzc2luZyAsIG9yIDogYmV0d2VlbiAke2x9IGl0ZW1zYCkpO2xldCBNPV8/dChyLF8sVSxpKTpVLmZvdW5kP2UocixVLmVuZCxSLG51bGwsVSxpKTpudWxsO00/engoXykmJmkoTS5yYW5nZSwiQkxPQ0tfSU5fRkxPVyIsQngpOlUuY29tbWVudCYmKEYuY29tbWVudD9GLmNvbW1lbnQrPWAKYCtVLmNvbW1lbnQ6Ri5jb21tZW50PVUuY29tbWVudCk7bGV0IGJlPW5ldyBqZShGLE0pO2lmKHIub3B0aW9ucy5rZWVwU291cmNlVG9rZW5zJiYoYmUuc3JjVG9rZW49eCksYSl7bGV0IHo9dTtUYyhyLHouaXRlbXMsRikmJmkoQSwiRFVQTElDQVRFX0tFWSIsIk1hcCBrZXlzIG11c3QgYmUgdW5pcXVlIiksei5pdGVtcy5wdXNoKGJlKX1lbHNle2xldCB6PW5ldyBxZShyLnNjaGVtYSk7ei5mbG93PSEwLHouaXRlbXMucHVzaChiZSk7bGV0IEk9KE0/P0YpLnJhbmdlO3oucmFuZ2U9W0YucmFuZ2VbMF0sSVsxXSxJWzJdXSx1Lml0ZW1zLnB1c2goeil9cD1NP00ucmFuZ2VbMl06VS5lbmR9fWxldCBoPWE/In0iOiJdIixbZCwuLi5tXT1uLmVuZCxnPXA7aWYoZD8uc291cmNlPT09aClnPWQub2Zmc2V0K2Quc291cmNlLmxlbmd0aDtlbHNle2xldCB5PWxbMF0udG9VcHBlckNhc2UoKStsLnN1YnN0cmluZygxKSx4PWY/YCR7eX0gbXVzdCBlbmQgd2l0aCBhICR7aH1gOmAke3l9IGluIGJsb2NrIGNvbGxlY3Rpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgaW5kZW50ZWQgYW5kIGVuZCB3aXRoIGEgJHtofWA7aShwLGY/Ik1JU1NJTkdfQ0hBUiI6IkJBRF9JTkRFTlQiLHgpLGQmJmQuc291cmNlLmxlbmd0aCE9PTEmJm0udW5zaGlmdChkKX1pZihtLmxlbmd0aD4wKXtsZXQgeT1XcihtLGcsci5vcHRpb25zLnN0cmljdCxpKTt5LmNvbW1lbnQmJih1LmNvbW1lbnQ/dS5jb21tZW50Kz1gCmAreS5jb21tZW50OnUuY29tbWVudD15LmNvbW1lbnQpLHUucmFuZ2U9W24ub2Zmc2V0LGcseS5vZmZzZXRdfWVsc2UgdS5yYW5nZT1bbi5vZmZzZXQsZyxnXTtyZXR1cm4gdX1vKEh4LCJyZXNvbHZlRmxvd0NvbGxlY3Rpb24iKTtmdW5jdGlvbiBqeCh0LGUscixuLGkscyl7bGV0IGE9ci50eXBlPT09ImJsb2NrLW1hcCI/QXgodCxlLHIsbixzKTpyLnR5cGU9PT0iYmxvY2stc2VxIj8keCh0LGUscixuLHMpOkh4KHQsZSxyLG4scyksbD1hLmNvbnN0cnVjdG9yO3JldHVybiBpPT09IiEifHxpPT09bC50YWdOYW1lPyhhLnRhZz1sLnRhZ05hbWUsYSk6KGkmJihhLnRhZz1pKSxhKX1vKGp4LCJyZXNvbHZlQ29sbGVjdGlvbiIpO2Z1bmN0aW9uIFd4KHQsZSxyLG4saSl7bGV0IHM9bi50YWcsYT1zP2UuZGlyZWN0aXZlcy50YWdOYW1lKHMuc291cmNlLGg9PmkocywiVEFHX1JFU09MVkVfRkFJTEVEIixoKSk6bnVsbDtpZihyLnR5cGU9PT0iYmxvY2stc2VxIil7bGV0e2FuY2hvcjpoLG5ld2xpbmVBZnRlclByb3A6ZH09bixtPWgmJnM/aC5vZmZzZXQ+cy5vZmZzZXQ/aDpzOmg/P3M7bSYmKCFkfHxkLm9mZnNldDxtLm9mZnNldCkmJmkobSwiTUlTU0lOR19DSEFSIiwiTWlzc2luZyBuZXdsaW5lIGFmdGVyIGJsb2NrIHNlcXVlbmNlIHByb3BzIil9bGV0IGw9ci50eXBlPT09ImJsb2NrLW1hcCI/Im1hcCI6ci50eXBlPT09ImJsb2NrLXNlcSI/InNlcSI6ci5zdGFydC5zb3VyY2U9PT0ieyI/Im1hcCI6InNlcSI7aWYoIXN8fCFhfHxhPT09IiEifHxhPT09cWUudGFnTmFtZSYmbD09PSJtYXAifHxhPT09dXQudGFnTmFtZSYmbD09PSJzZXEiKXJldHVybiBqeCh0LGUscixpLGEpO2xldCBjPWUuc2NoZW1hLnRhZ3MuZmluZChoPT5oLnRhZz09PWEmJmguY29sbGVjdGlvbj09PWwpO2lmKCFjKXtsZXQgaD1lLnNjaGVtYS5rbm93blRhZ3NbYV07aWYoaD8uY29sbGVjdGlvbj09PWwpZS5zY2hlbWEudGFncy5wdXNoKE9iamVjdC5hc3NpZ24oe30saCx7ZGVmYXVsdDohMX0pKSxjPWg7ZWxzZSByZXR1cm4gaD9pKHMsIkJBRF9DT0xMRUNUSU9OX1RZUEUiLGAke2gudGFnfSB1c2VkIGZvciAke2x9IGNvbGxlY3Rpb24sIGJ1dCBleHBlY3RzICR7aC5jb2xsZWN0aW9uPz8ic2NhbGFyIn1gLCEwKTppKHMsIlRBR19SRVNPTFZFX0ZBSUxFRCIsYFVucmVzb2x2ZWQgdGFnOiAke2F9YCwhMCksangodCxlLHIsaSxhKX1sZXQgdT1qeCh0LGUscixpLGEsYyksZj1jLnJlc29sdmU/Lih1LGg9PmkocywiVEFHX1JFU09MVkVfRkFJTEVEIixoKSxlLm9wdGlvbnMpPz91LHA9eGUoZik/ZjpuZXcgUShmKTtyZXR1cm4gcC5yYW5nZT11LnJhbmdlLHAudGFnPWEsYz8uZm9ybWF0JiYocC5mb3JtYXQ9Yy5mb3JtYXQpLHB9byhXeCwiY29tcG9zZUNvbGxlY3Rpb24iKTtmdW5jdGlvbiBFYyh0LGUscil7bGV0IG49ZS5vZmZzZXQsaT0kJChlLHQub3B0aW9ucy5zdHJpY3Qscik7aWYoIWkpcmV0dXJue3ZhbHVlOiIiLHR5cGU6bnVsbCxjb21tZW50OiIiLHJhbmdlOltuLG4sbl19O2xldCBzPWkubW9kZT09PSI+Ij9RLkJMT0NLX0ZPTERFRDpRLkJMT0NLX0xJVEVSQUwsYT1lLnNvdXJjZT9CJChlLnNvdXJjZSk6W10sbD1hLmxlbmd0aDtmb3IobGV0IGc9YS5sZW5ndGgtMTtnPj0wOy0tZyl7bGV0IHk9YVtnXVsxXTtpZih5PT09IiJ8fHk9PT0iXHIiKWw9ZztlbHNlIGJyZWFrfWlmKGw9PT0wKXtsZXQgZz1pLmNob21wPT09IisiJiZhLmxlbmd0aD4wP2AKYC5yZXBlYXQoTWF0aC5tYXgoMSxhLmxlbmd0aC0xKSk6IiIseT1uK2kubGVuZ3RoO3JldHVybiBlLnNvdXJjZSYmKHkrPWUuc291cmNlLmxlbmd0aCkse3ZhbHVlOmcsdHlwZTpzLGNvbW1lbnQ6aS5jb21tZW50LHJhbmdlOltuLHkseV19fWxldCBjPWUuaW5kZW50K2kuaW5kZW50LHU9ZS5vZmZzZXQraS5sZW5ndGgsZj0wO2ZvcihsZXQgZz0wO2c8bDsrK2cpe2xldFt5LHhdPWFbZ107aWYoeD09PSIifHx4PT09IlxyIilpLmluZGVudD09PTAmJnkubGVuZ3RoPmMmJihjPXkubGVuZ3RoKTtlbHNle3kubGVuZ3RoPGMmJnIodSt5Lmxlbmd0aCwiTUlTU0lOR19DSEFSIiwiQmxvY2sgc2NhbGFycyB3aXRoIG1vcmUtaW5kZW50ZWQgbGVhZGluZyBlbXB0eSBsaW5lcyBtdXN0IHVzZSBhbiBleHBsaWNpdCBpbmRlbnRhdGlvbiBpbmRpY2F0b3IiKSxpLmluZGVudD09PTAmJihjPXkubGVuZ3RoKSxmPWcsYz09PTAmJiF0LmF0Um9vdCYmcih1LCJCQURfSU5ERU5UIiwiQmxvY2sgc2NhbGFyIHZhbHVlcyBpbiBjb2xsZWN0aW9ucyBtdXN0IGJlIGluZGVudGVkIik7YnJlYWt9dSs9eS5sZW5ndGgreC5sZW5ndGgrMX1mb3IobGV0IGc9YS5sZW5ndGgtMTtnPj1sOy0tZylhW2ddWzBdLmxlbmd0aD5jJiYobD1nKzEpO2xldCBwPSIiLGg9IiIsZD0hMTtmb3IobGV0IGc9MDtnPGY7KytnKXArPWFbZ11bMF0uc2xpY2UoYykrYApgO2ZvcihsZXQgZz1mO2c8bDsrK2cpe2xldFt5LHhdPWFbZ107dSs9eS5sZW5ndGgreC5sZW5ndGgrMTtsZXQgaz14W3gubGVuZ3RoLTFdPT09IlxyIjtpZihrJiYoeD14LnNsaWNlKDAsLTEpKSx4JiZ5Lmxlbmd0aDxjKXtsZXQgUj1gQmxvY2sgc2NhbGFyIGxpbmVzIG11c3Qgbm90IGJlIGxlc3MgaW5kZW50ZWQgdGhhbiB0aGVpciAke2kuaW5kZW50PyJleHBsaWNpdCBpbmRlbnRhdGlvbiBpbmRpY2F0b3IiOiJmaXJzdCBsaW5lIn1gO3IodS14Lmxlbmd0aC0oaz8yOjEpLCJCQURfSU5ERU5UIixSKSx5PSIifXM9PT1RLkJMT0NLX0xJVEVSQUw/KHArPWgreS5zbGljZShjKSt4LGg9YApgKTp5Lmxlbmd0aD5jfHx4WzBdPT09IgkiPyhoPT09IiAiP2g9YApgOiFkJiZoPT09YApgJiYoaD1gCgpgKSxwKz1oK3kuc2xpY2UoYykreCxoPWAKYCxkPSEwKTp4PT09IiI/aD09PWAKYD9wKz1gCmA6aD1gCmA6KHArPWgreCxoPSIgIixkPSExKX1zd2l0Y2goaS5jaG9tcCl7Y2FzZSItIjpicmVhaztjYXNlIisiOmZvcihsZXQgZz1sO2c8YS5sZW5ndGg7KytnKXArPWAKYCthW2ddWzBdLnNsaWNlKGMpO3BbcC5sZW5ndGgtMV0hPT1gCmAmJihwKz1gCmApO2JyZWFrO2RlZmF1bHQ6cCs9YApgfWxldCBtPW4raS5sZW5ndGgrZS5zb3VyY2UubGVuZ3RoO3JldHVybnt2YWx1ZTpwLHR5cGU6cyxjb21tZW50OmkuY29tbWVudCxyYW5nZTpbbixtLG1dfX1vKEVjLCJyZXNvbHZlQmxvY2tTY2FsYXIiKTtmdW5jdGlvbiAkJCh7b2Zmc2V0OnQscHJvcHM6ZX0scixuKXtpZihlWzBdLnR5cGUhPT0iYmxvY2stc2NhbGFyLWhlYWRlciIpcmV0dXJuIG4oZVswXSwiSU1QT1NTSUJMRSIsIkJsb2NrIHNjYWxhciBoZWFkZXIgbm90IGZvdW5kIiksbnVsbDtsZXR7c291cmNlOml9PWVbMF0scz1pWzBdLGE9MCxsPSIiLGM9LTE7Zm9yKGxldCBoPTE7aDxpLmxlbmd0aDsrK2gpe2xldCBkPWlbaF07aWYoIWwmJihkPT09Ii0ifHxkPT09IisiKSlsPWQ7ZWxzZXtsZXQgbT1OdW1iZXIoZCk7IWEmJm0/YT1tOmM9PT0tMSYmKGM9dCtoKX19YyE9PS0xJiZuKGMsIlVORVhQRUNURURfVE9LRU4iLGBCbG9jayBzY2FsYXIgaGVhZGVyIGluY2x1ZGVzIGV4dHJhIGNoYXJhY3RlcnM6ICR7aX1gKTtsZXQgdT0hMSxmPSIiLHA9aS5sZW5ndGg7Zm9yKGxldCBoPTE7aDxlLmxlbmd0aDsrK2gpe2xldCBkPWVbaF07c3dpdGNoKGQudHlwZSl7Y2FzZSJzcGFjZSI6dT0hMDtjYXNlIm5ld2xpbmUiOnArPWQuc291cmNlLmxlbmd0aDticmVhaztjYXNlImNvbW1lbnQiOnImJiF1JiZuKGQsIk1JU1NJTkdfQ0hBUiIsIkNvbW1lbnRzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gb3RoZXIgdG9rZW5zIGJ5IHdoaXRlIHNwYWNlIGNoYXJhY3RlcnMiKSxwKz1kLnNvdXJjZS5sZW5ndGgsZj1kLnNvdXJjZS5zdWJzdHJpbmcoMSk7YnJlYWs7Y2FzZSJlcnJvciI6bihkLCJVTkVYUEVDVEVEX1RPS0VOIixkLm1lc3NhZ2UpLHArPWQuc291cmNlLmxlbmd0aDticmVhaztkZWZhdWx0OntsZXQgbT1gVW5leHBlY3RlZCB0b2tlbiBpbiBibG9jayBzY2FsYXIgaGVhZGVyOiAke2QudHlwZX1gO24oZCwiVU5FWFBFQ1RFRF9UT0tFTiIsbSk7bGV0IGc9ZC5zb3VyY2U7ZyYmdHlwZW9mIGc9PSJzdHJpbmciJiYocCs9Zy5sZW5ndGgpfX19cmV0dXJue21vZGU6cyxpbmRlbnQ6YSxjaG9tcDpsLGNvbW1lbnQ6ZixsZW5ndGg6cH19bygkJCwicGFyc2VCbG9ja1NjYWxhckhlYWRlciIpO2Z1bmN0aW9uIEIkKHQpe2xldCBlPXQuc3BsaXQoL1xuKCAqKS8pLHI9ZVswXSxuPXIubWF0Y2goL14oICopLykscz1bbj8uWzFdP1tuWzFdLHIuc2xpY2UoblsxXS5sZW5ndGgpXTpbIiIscl1dO2ZvcihsZXQgYT0xO2E8ZS5sZW5ndGg7YSs9MilzLnB1c2goW2VbYV0sZVthKzFdXSk7cmV0dXJuIHN9byhCJCwic3BsaXRMaW5lcyIpO2Z1bmN0aW9uIERjKHQsZSxyKXtsZXR7b2Zmc2V0Om4sdHlwZTppLHNvdXJjZTpzLGVuZDphfT10LGwsYyx1PW8oKGgsZCxtKT0+cihuK2gsZCxtKSwiX29uRXJyb3IiKTtzd2l0Y2goaSl7Y2FzZSJzY2FsYXIiOmw9US5QTEFJTixjPXokKHMsdSk7YnJlYWs7Y2FzZSJzaW5nbGUtcXVvdGVkLXNjYWxhciI6bD1RLlFVT1RFX1NJTkdMRSxjPUgkKHMsdSk7YnJlYWs7Y2FzZSJkb3VibGUtcXVvdGVkLXNjYWxhciI6bD1RLlFVT1RFX0RPVUJMRSxjPWokKHMsdSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gcih0LCJVTkVYUEVDVEVEX1RPS0VOIixgRXhwZWN0ZWQgYSBmbG93IHNjYWxhciB2YWx1ZSwgYnV0IGZvdW5kOiAke2l9YCkse3ZhbHVlOiIiLHR5cGU6bnVsbCxjb21tZW50OiIiLHJhbmdlOltuLG4rcy5sZW5ndGgsbitzLmxlbmd0aF19fWxldCBmPW4rcy5sZW5ndGgscD1XcihhLGYsZSxyKTtyZXR1cm57dmFsdWU6Yyx0eXBlOmwsY29tbWVudDpwLmNvbW1lbnQscmFuZ2U6W24sZixwLm9mZnNldF19fW8oRGMsInJlc29sdmVGbG93U2NhbGFyIik7ZnVuY3Rpb24geiQodCxlKXtsZXQgcj0iIjtzd2l0Y2godFswXSl7Y2FzZSIJIjpyPSJhIHRhYiBjaGFyYWN0ZXIiO2JyZWFrO2Nhc2UiLCI6cj0iZmxvdyBpbmRpY2F0b3IgY2hhcmFjdGVyICwiO2JyZWFrO2Nhc2UiJSI6cj0iZGlyZWN0aXZlIGluZGljYXRvciBjaGFyYWN0ZXIgJSI7YnJlYWs7Y2FzZSJ8IjpjYXNlIj4iOntyPWBibG9jayBzY2FsYXIgaW5kaWNhdG9yICR7dFswXX1gO2JyZWFrfWNhc2UiQCI6Y2FzZSJgIjp7cj1gcmVzZXJ2ZWQgY2hhcmFjdGVyICR7dFswXX1gO2JyZWFrfX1yZXR1cm4gciYmZSgwLCJCQURfU0NBTEFSX1NUQVJUIixgUGxhaW4gdmFsdWUgY2Fubm90IHN0YXJ0IHdpdGggJHtyfWApLGtDKHQpfW8oeiQsInBsYWluVmFsdWUiKTtmdW5jdGlvbiBIJCh0LGUpe3JldHVybih0W3QubGVuZ3RoLTFdIT09IicifHx0Lmxlbmd0aD09PTEpJiZlKHQubGVuZ3RoLCJNSVNTSU5HX0NIQVIiLCJNaXNzaW5nIGNsb3NpbmcgJ3F1b3RlIiksa0ModC5zbGljZSgxLC0xKSkucmVwbGFjZSgvJycvZywiJyIpfW8oSCQsInNpbmdsZVF1b3RlZFZhbHVlIik7ZnVuY3Rpb24ga0ModCl7bGV0IGUscjt0cnl7ZT1uZXcgUmVnRXhwKGAoLio/KSg/PCFbIAldKVsgCV0qXHI/CmAsInN5Iikscj1uZXcgUmVnRXhwKGBbIAldKiguKj8pKD86KD88IVsgCV0pWyAJXSopP1xyPwpgLCJzeSIpfWNhdGNoe2U9LyguKj8pWyBcdF0qXHI/XG4vc3kscj0vWyBcdF0qKC4qPylbIFx0XSpccj9cbi9zeX1sZXQgbj1lLmV4ZWModCk7aWYoIW4pcmV0dXJuIHQ7bGV0IGk9blsxXSxzPSIgIixhPWUubGFzdEluZGV4O2ZvcihyLmxhc3RJbmRleD1hO249ci5leGVjKHQpOyluWzFdPT09IiI/cz09PWAKYD9pKz1zOnM9YApgOihpKz1zK25bMV0scz0iICIpLGE9ci5sYXN0SW5kZXg7bGV0IGw9L1sgXHRdKiguKikvc3k7cmV0dXJuIGwubGFzdEluZGV4PWEsbj1sLmV4ZWModCksaStzKyhuPy5bMV0/PyIiKX1vKGtDLCJmb2xkTGluZXMiKTtmdW5jdGlvbiBqJCh0LGUpe2xldCByPSIiO2ZvcihsZXQgbj0xO248dC5sZW5ndGgtMTsrK24pe2xldCBpPXRbbl07aWYoIShpPT09IlxyIiYmdFtuKzFdPT09YApgKSlpZihpPT09YApgKXtsZXR7Zm9sZDpzLG9mZnNldDphfT1XJCh0LG4pO3IrPXMsbj1hfWVsc2UgaWYoaT09PSJcXCIpe2xldCBzPXRbKytuXSxhPXEkW3NdO2lmKGEpcis9YTtlbHNlIGlmKHM9PT1gCmApZm9yKHM9dFtuKzFdO3M9PT0iICJ8fHM9PT0iCSI7KXM9dFsrK24rMV07ZWxzZSBpZihzPT09IlxyIiYmdFtuKzFdPT09YApgKWZvcihzPXRbKytuKzFdO3M9PT0iICJ8fHM9PT0iCSI7KXM9dFsrK24rMV07ZWxzZSBpZihzPT09IngifHxzPT09InUifHxzPT09IlUiKXtsZXQgbD1zPT09IngiPzI6cz09PSJ1Ij80Ojg7cis9VSQodCxuKzEsbCxlKSxuKz1sfWVsc2V7bGV0IGw9dC5zdWJzdHIobi0xLDIpO2Uobi0xLCJCQURfRFFfRVNDQVBFIixgSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UgJHtsfWApLHIrPWx9fWVsc2UgaWYoaT09PSIgInx8aT09PSIJIil7bGV0IHM9bixhPXRbbisxXTtmb3IoO2E9PT0iICJ8fGE9PT0iCSI7KWE9dFsrK24rMV07YSE9PWAKYCYmIShhPT09IlxyIiYmdFtuKzJdPT09YApgKSYmKHIrPW4+cz90LnNsaWNlKHMsbisxKTppKX1lbHNlIHIrPWl9cmV0dXJuKHRbdC5sZW5ndGgtMV0hPT0nIid8fHQubGVuZ3RoPT09MSkmJmUodC5sZW5ndGgsIk1JU1NJTkdfQ0hBUiIsJ01pc3NpbmcgY2xvc2luZyAicXVvdGUnKSxyfW8oaiQsImRvdWJsZVF1b3RlZFZhbHVlIik7ZnVuY3Rpb24gVyQodCxlKXtsZXQgcj0iIixuPXRbZSsxXTtmb3IoOyhuPT09IiAifHxuPT09IgkifHxuPT09YApgfHxuPT09IlxyIikmJiEobj09PSJcciImJnRbZSsyXSE9PWAKYCk7KW49PT1gCmAmJihyKz1gCmApLGUrPTEsbj10W2UrMV07cmV0dXJuIHJ8fChyPSIgIikse2ZvbGQ6cixvZmZzZXQ6ZX19byhXJCwiZm9sZE5ld2xpbmUiKTt2YXIgcSQ9ezA6IlwwIixhOiJceDA3IixiOiJcYiIsZToiXHgxQiIsZjoiXGYiLG46YApgLHI6IlxyIix0OiIJIix2OiJcdiIsTjoiXHg4NSIsXzoiXHhBMCIsTDoiXHUyMDI4IixQOiJcdTIwMjkiLCIgIjoiICIsJyInOiciJywiLyI6Ii8iLCJcXCI6IlxcIiwiCSI6IgkifTtmdW5jdGlvbiBVJCh0LGUscixuKXtsZXQgaT10LnN1YnN0cihlLHIpLGE9aS5sZW5ndGg9PT1yJiYvXlswLTlhLWZBLUZdKyQvLnRlc3QoaSk/cGFyc2VJbnQoaSwxNik6TmFOO3RyeXtyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoYSl9Y2F0Y2h7bGV0IGw9dC5zdWJzdHIoZS0yLHIrMik7cmV0dXJuIG4oZS0yLCJCQURfRFFfRVNDQVBFIixgSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UgJHtsfWApLGx9fW8oVSQsInBhcnNlQ2hhckNvZGUiKTtmdW5jdGlvbiBnZCh0LGUscixuKXtsZXR7dmFsdWU6aSx0eXBlOnMsY29tbWVudDphLHJhbmdlOmx9PWUudHlwZT09PSJibG9jay1zY2FsYXIiP0VjKHQsZSxuKTpEYyhlLHQub3B0aW9ucy5zdHJpY3QsbiksYz1yP3QuZGlyZWN0aXZlcy50YWdOYW1lKHIuc291cmNlLHA9Pm4ociwiVEFHX1JFU09MVkVfRkFJTEVEIixwKSk6bnVsbCx1O3Qub3B0aW9ucy5zdHJpbmdLZXlzJiZ0LmF0S2V5P3U9dC5zY2hlbWFbVXRdOmM/dT1WJCh0LnNjaGVtYSxpLGMscixuKTplLnR5cGU9PT0ic2NhbGFyIj91PVkkKHQsaSxlLG4pOnU9dC5zY2hlbWFbVXRdO2xldCBmO3RyeXtsZXQgcD11LnJlc29sdmUoaSxoPT5uKHI/P2UsIlRBR19SRVNPTFZFX0ZBSUxFRCIsaCksdC5vcHRpb25zKTtmPWNlKHApP3A6bmV3IFEocCl9Y2F0Y2gocCl7bGV0IGg9cCBpbnN0YW5jZW9mIEVycm9yP3AubWVzc2FnZTpTdHJpbmcocCk7bihyPz9lLCJUQUdfUkVTT0xWRV9GQUlMRUQiLGgpLGY9bmV3IFEoaSl9cmV0dXJuIGYucmFuZ2U9bCxmLnNvdXJjZT1pLHMmJihmLnR5cGU9cyksYyYmKGYudGFnPWMpLHUuZm9ybWF0JiYoZi5mb3JtYXQ9dS5mb3JtYXQpLGEmJihmLmNvbW1lbnQ9YSksZn1vKGdkLCJjb21wb3NlU2NhbGFyIik7ZnVuY3Rpb24gViQodCxlLHIsbixpKXtpZihyPT09IiEiKXJldHVybiB0W1V0XTtsZXQgcz1bXTtmb3IobGV0IGwgb2YgdC50YWdzKWlmKCFsLmNvbGxlY3Rpb24mJmwudGFnPT09cilpZihsLmRlZmF1bHQmJmwudGVzdClzLnB1c2gobCk7ZWxzZSByZXR1cm4gbDtmb3IobGV0IGwgb2YgcylpZihsLnRlc3Q/LnRlc3QoZSkpcmV0dXJuIGw7bGV0IGE9dC5rbm93blRhZ3Nbcl07cmV0dXJuIGEmJiFhLmNvbGxlY3Rpb24/KHQudGFncy5wdXNoKE9iamVjdC5hc3NpZ24oe30sYSx7ZGVmYXVsdDohMSx0ZXN0OnZvaWQgMH0pKSxhKTooaShuLCJUQUdfUkVTT0xWRV9GQUlMRUQiLGBVbnJlc29sdmVkIHRhZzogJHtyfWAsciE9PSJ0YWc6eWFtbC5vcmcsMjAwMjpzdHIiKSx0W1V0XSl9byhWJCwiZmluZFNjYWxhclRhZ0J5TmFtZSIpO2Z1bmN0aW9uIFkkKHthdEtleTp0LGRpcmVjdGl2ZXM6ZSxzY2hlbWE6cn0sbixpLHMpe2xldCBhPXIudGFncy5maW5kKGw9PihsLmRlZmF1bHQ9PT0hMHx8dCYmbC5kZWZhdWx0PT09ImtleSIpJiZsLnRlc3Q/LnRlc3QobikpfHxyW1V0XTtpZihyLmNvbXBhdCl7bGV0IGw9ci5jb21wYXQuZmluZChjPT5jLmRlZmF1bHQmJmMudGVzdD8udGVzdChuKSk/P3JbVXRdO2lmKGEudGFnIT09bC50YWcpe2xldCBjPWUudGFnU3RyaW5nKGEudGFnKSx1PWUudGFnU3RyaW5nKGwudGFnKSxmPWBWYWx1ZSBtYXkgYmUgcGFyc2VkIGFzIGVpdGhlciAke2N9IG9yICR7dX1gO3MoaSwiVEFHX1JFU09MVkVfRkFJTEVEIixmLCEwKX19cmV0dXJuIGF9byhZJCwiZmluZFNjYWxhclRhZ0J5VGVzdCIpO2Z1bmN0aW9uIHF4KHQsZSxyKXtpZihlKXtyPz8ocj1lLmxlbmd0aCk7Zm9yKGxldCBuPXItMTtuPj0wOy0tbil7bGV0IGk9ZVtuXTtzd2l0Y2goaS50eXBlKXtjYXNlInNwYWNlIjpjYXNlImNvbW1lbnQiOmNhc2UibmV3bGluZSI6dC09aS5zb3VyY2UubGVuZ3RoO2NvbnRpbnVlfWZvcihpPWVbKytuXTtpPy50eXBlPT09InNwYWNlIjspdCs9aS5zb3VyY2UubGVuZ3RoLGk9ZVsrK25dO2JyZWFrfX1yZXR1cm4gdH1vKHF4LCJlbXB0eVNjYWxhclBvc2l0aW9uIik7dmFyIEckPXtjb21wb3NlTm9kZTp5ZCxjb21wb3NlRW1wdHlOb2RlOkNjfTtmdW5jdGlvbiB5ZCh0LGUscixuKXtsZXQgaT10LmF0S2V5LHtzcGFjZUJlZm9yZTpzLGNvbW1lbnQ6YSxhbmNob3I6bCx0YWc6Y309cix1LGY9ITA7c3dpdGNoKGUudHlwZSl7Y2FzZSJhbGlhcyI6dT1RJCh0LGUsbiksKGx8fGMpJiZuKGUsIkFMSUFTX1BST1BTIiwiQW4gYWxpYXMgbm9kZSBtdXN0IG5vdCBzcGVjaWZ5IGFueSBwcm9wZXJ0aWVzIik7YnJlYWs7Y2FzZSJzY2FsYXIiOmNhc2Uic2luZ2xlLXF1b3RlZC1zY2FsYXIiOmNhc2UiZG91YmxlLXF1b3RlZC1zY2FsYXIiOmNhc2UiYmxvY2stc2NhbGFyIjp1PWdkKHQsZSxjLG4pLGwmJih1LmFuY2hvcj1sLnNvdXJjZS5zdWJzdHJpbmcoMSkpO2JyZWFrO2Nhc2UiYmxvY2stbWFwIjpjYXNlImJsb2NrLXNlcSI6Y2FzZSJmbG93LWNvbGxlY3Rpb24iOnRyeXt1PVd4KEckLHQsZSxyLG4pLGwmJih1LmFuY2hvcj1sLnNvdXJjZS5zdWJzdHJpbmcoMSkpfWNhdGNoKHApe2xldCBoPXAgaW5zdGFuY2VvZiBFcnJvcj9wLm1lc3NhZ2U6U3RyaW5nKHApO24oZSwiUkVTT1VSQ0VfRVhIQVVTVElPTiIsaCl9YnJlYWs7ZGVmYXVsdDp7bGV0IHA9ZS50eXBlPT09ImVycm9yIj9lLm1lc3NhZ2U6YFVuc3VwcG9ydGVkIHRva2VuICh0eXBlOiAke2UudHlwZX0pYDtuKGUsIlVORVhQRUNURURfVE9LRU4iLHApLGY9ITF9fXJldHVybiB1Pz8odT1DYyh0LGUub2Zmc2V0LHZvaWQgMCxudWxsLHIsbikpLGwmJnUuYW5jaG9yPT09IiImJm4obCwiQkFEX0FMSUFTIiwiQW5jaG9yIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmciKSxpJiZ0Lm9wdGlvbnMuc3RyaW5nS2V5cyYmKCFjZSh1KXx8dHlwZW9mIHUudmFsdWUhPSJzdHJpbmcifHx1LnRhZyYmdS50YWchPT0idGFnOnlhbWwub3JnLDIwMDI6c3RyIikmJm4oYz8/ZSwiTk9OX1NUUklOR19LRVkiLCJXaXRoIHN0cmluZ0tleXMsIGFsbCBrZXlzIG11c3QgYmUgc3RyaW5ncyIpLHMmJih1LnNwYWNlQmVmb3JlPSEwKSxhJiYoZS50eXBlPT09InNjYWxhciImJmUuc291cmNlPT09IiI/dS5jb21tZW50PWE6dS5jb21tZW50QmVmb3JlPWEpLHQub3B0aW9ucy5rZWVwU291cmNlVG9rZW5zJiZmJiYodS5zcmNUb2tlbj1lKSx1fW8oeWQsImNvbXBvc2VOb2RlIik7ZnVuY3Rpb24gQ2ModCxlLHIsbix7c3BhY2VCZWZvcmU6aSxjb21tZW50OnMsYW5jaG9yOmEsdGFnOmwsZW5kOmN9LHUpe2xldCBmPXt0eXBlOiJzY2FsYXIiLG9mZnNldDpxeChlLHIsbiksaW5kZW50Oi0xLHNvdXJjZToiIn0scD1nZCh0LGYsbCx1KTtyZXR1cm4gYSYmKHAuYW5jaG9yPWEuc291cmNlLnN1YnN0cmluZygxKSxwLmFuY2hvcj09PSIiJiZ1KGEsIkJBRF9BTElBUyIsIkFuY2hvciBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nIikpLGkmJihwLnNwYWNlQmVmb3JlPSEwKSxzJiYocC5jb21tZW50PXMscC5yYW5nZVsyXT1jKSxwfW8oQ2MsImNvbXBvc2VFbXB0eU5vZGUiKTtmdW5jdGlvbiBRJCh7b3B0aW9uczp0fSx7b2Zmc2V0OmUsc291cmNlOnIsZW5kOm59LGkpe2xldCBzPW5ldyBTcihyLnN1YnN0cmluZygxKSk7cy5zb3VyY2U9PT0iIiYmaShlLCJCQURfQUxJQVMiLCJBbGlhcyBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nIikscy5zb3VyY2UuZW5kc1dpdGgoIjoiKSYmaShlK3IubGVuZ3RoLTEsIkJBRF9BTElBUyIsIkFsaWFzIGVuZGluZyBpbiA6IGlzIGFtYmlndW91cyIsITApO2xldCBhPWUrci5sZW5ndGgsbD1XcihuLGEsdC5zdHJpY3QsaSk7cmV0dXJuIHMucmFuZ2U9W2UsYSxsLm9mZnNldF0sbC5jb21tZW50JiYocy5jb21tZW50PWwuY29tbWVudCksc31vKFEkLCJjb21wb3NlQWxpYXMiKTtmdW5jdGlvbiBVeCh0LGUse29mZnNldDpyLHN0YXJ0Om4sdmFsdWU6aSxlbmQ6c30sYSl7bGV0IGw9T2JqZWN0LmFzc2lnbih7X2RpcmVjdGl2ZXM6ZX0sdCksYz1uZXcgQ3Iodm9pZCAwLGwpLHU9e2F0S2V5OiExLGF0Um9vdDohMCxkaXJlY3RpdmVzOmMuZGlyZWN0aXZlcyxvcHRpb25zOmMub3B0aW9ucyxzY2hlbWE6Yy5zY2hlbWF9LGY9anIobix7aW5kaWNhdG9yOiJkb2Mtc3RhcnQiLG5leHQ6aT8/cz8uWzBdLG9mZnNldDpyLG9uRXJyb3I6YSxwYXJlbnRJbmRlbnQ6MCxzdGFydE9uTmV3bGluZTohMH0pO2YuZm91bmQmJihjLmRpcmVjdGl2ZXMuZG9jU3RhcnQ9ITAsaSYmKGkudHlwZT09PSJibG9jay1tYXAifHxpLnR5cGU9PT0iYmxvY2stc2VxIikmJiFmLmhhc05ld2xpbmUmJmEoZi5lbmQsIk1JU1NJTkdfQ0hBUiIsIkJsb2NrIGNvbGxlY3Rpb24gY2Fubm90IHN0YXJ0IG9uIHNhbWUgbGluZSB3aXRoIGRpcmVjdGl2ZXMtZW5kIG1hcmtlciIpKSxjLmNvbnRlbnRzPWk/eWQodSxpLGYsYSk6Q2ModSxmLmVuZCxuLG51bGwsZixhKTtsZXQgcD1jLmNvbnRlbnRzLnJhbmdlWzJdLGg9V3IocyxwLCExLGEpO3JldHVybiBoLmNvbW1lbnQmJihjLmNvbW1lbnQ9aC5jb21tZW50KSxjLnJhbmdlPVtyLHAsaC5vZmZzZXRdLGN9byhVeCwiY29tcG9zZURvYyIpO2Z1bmN0aW9uIE1jKHQpe2lmKHR5cGVvZiB0PT0ibnVtYmVyIilyZXR1cm5bdCx0KzFdO2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQubGVuZ3RoPT09Mj90Olt0WzBdLHRbMV1dO2xldHtvZmZzZXQ6ZSxzb3VyY2U6cn09dDtyZXR1cm5bZSxlKyh0eXBlb2Ygcj09InN0cmluZyI/ci5sZW5ndGg6MSldfW8oTWMsImdldEVycm9yUG9zIik7ZnVuY3Rpb24gU0ModCl7bGV0IGU9IiIscj0hMSxuPSExO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7KytpKXtsZXQgcz10W2ldO3N3aXRjaChzWzBdKXtjYXNlIiMiOmUrPShlPT09IiI/IiI6bj9gCgpgOmAKYCkrKHMuc3Vic3RyaW5nKDEpfHwiICIpLHI9ITAsbj0hMTticmVhaztjYXNlIiUiOnRbaSsxXT8uWzBdIT09IiMiJiYoaSs9MSkscj0hMTticmVhaztkZWZhdWx0OnJ8fChuPSEwKSxyPSExfX1yZXR1cm57Y29tbWVudDplLGFmdGVyRW1wdHlMaW5lOm59fW8oU0MsInBhcnNlUHJlbHVkZSIpO3ZhciBKbj1jbGFzc3tzdGF0aWN7byh0aGlzLCJDb21wb3NlciIpfWNvbnN0cnVjdG9yKGU9e30pe3RoaXMuZG9jPW51bGwsdGhpcy5hdERpcmVjdGl2ZXM9ITEsdGhpcy5wcmVsdWRlPVtdLHRoaXMuZXJyb3JzPVtdLHRoaXMud2FybmluZ3M9W10sdGhpcy5vbkVycm9yPShyLG4saSxzKT0+e2xldCBhPU1jKHIpO3M/dGhpcy53YXJuaW5ncy5wdXNoKG5ldyBSaShhLG4saSkpOnRoaXMuZXJyb3JzLnB1c2gobmV3IEZ0KGEsbixpKSl9LHRoaXMuZGlyZWN0aXZlcz1uZXcgenIoe3ZlcnNpb246ZS52ZXJzaW9ufHwiMS4yIn0pLHRoaXMub3B0aW9ucz1lfWRlY29yYXRlKGUscil7bGV0e2NvbW1lbnQ6bixhZnRlckVtcHR5TGluZTppfT1TQyh0aGlzLnByZWx1ZGUpO2lmKG4pe2xldCBzPWUuY29udGVudHM7aWYocillLmNvbW1lbnQ9ZS5jb21tZW50P2Ake2UuY29tbWVudH0KJHtufWA6bjtlbHNlIGlmKGl8fGUuZGlyZWN0aXZlcy5kb2NTdGFydHx8IXMpZS5jb21tZW50QmVmb3JlPW47ZWxzZSBpZihUZShzKSYmIXMuZmxvdyYmcy5pdGVtcy5sZW5ndGg+MCl7bGV0IGE9cy5pdGVtc1swXTtkZShhKSYmKGE9YS5rZXkpO2xldCBsPWEuY29tbWVudEJlZm9yZTthLmNvbW1lbnRCZWZvcmU9bD9gJHtufQoke2x9YDpufWVsc2V7bGV0IGE9cy5jb21tZW50QmVmb3JlO3MuY29tbWVudEJlZm9yZT1hP2Ake259CiR7YX1gOm59fWlmKHIpe2ZvcihsZXQgcz0wO3M8dGhpcy5lcnJvcnMubGVuZ3RoOysrcyllLmVycm9ycy5wdXNoKHRoaXMuZXJyb3JzW3NdKTtmb3IobGV0IHM9MDtzPHRoaXMud2FybmluZ3MubGVuZ3RoOysrcyllLndhcm5pbmdzLnB1c2godGhpcy53YXJuaW5nc1tzXSl9ZWxzZSBlLmVycm9ycz10aGlzLmVycm9ycyxlLndhcm5pbmdzPXRoaXMud2FybmluZ3M7dGhpcy5wcmVsdWRlPVtdLHRoaXMuZXJyb3JzPVtdLHRoaXMud2FybmluZ3M9W119c3RyZWFtSW5mbygpe3JldHVybntjb21tZW50OlNDKHRoaXMucHJlbHVkZSkuY29tbWVudCxkaXJlY3RpdmVzOnRoaXMuZGlyZWN0aXZlcyxlcnJvcnM6dGhpcy5lcnJvcnMsd2FybmluZ3M6dGhpcy53YXJuaW5nc319KmNvbXBvc2UoZSxyPSExLG49LTEpe2ZvcihsZXQgaSBvZiBlKXlpZWxkKnRoaXMubmV4dChpKTt5aWVsZCp0aGlzLmVuZChyLG4pfSpuZXh0KGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiZGlyZWN0aXZlIjp0aGlzLmRpcmVjdGl2ZXMuYWRkKGUuc291cmNlLChyLG4saSk9PntsZXQgcz1NYyhlKTtzWzBdKz1yLHRoaXMub25FcnJvcihzLCJCQURfRElSRUNUSVZFIixuLGkpfSksdGhpcy5wcmVsdWRlLnB1c2goZS5zb3VyY2UpLHRoaXMuYXREaXJlY3RpdmVzPSEwO2JyZWFrO2Nhc2UiZG9jdW1lbnQiOntsZXQgcj1VeCh0aGlzLm9wdGlvbnMsdGhpcy5kaXJlY3RpdmVzLGUsdGhpcy5vbkVycm9yKTt0aGlzLmF0RGlyZWN0aXZlcyYmIXIuZGlyZWN0aXZlcy5kb2NTdGFydCYmdGhpcy5vbkVycm9yKGUsIk1JU1NJTkdfQ0hBUiIsIk1pc3NpbmcgZGlyZWN0aXZlcy1lbmQvZG9jLXN0YXJ0IGluZGljYXRvciBsaW5lIiksdGhpcy5kZWNvcmF0ZShyLCExKSx0aGlzLmRvYyYmKHlpZWxkIHRoaXMuZG9jKSx0aGlzLmRvYz1yLHRoaXMuYXREaXJlY3RpdmVzPSExO2JyZWFrfWNhc2UiYnl0ZS1vcmRlci1tYXJrIjpjYXNlInNwYWNlIjpicmVhaztjYXNlImNvbW1lbnQiOmNhc2UibmV3bGluZSI6dGhpcy5wcmVsdWRlLnB1c2goZS5zb3VyY2UpO2JyZWFrO2Nhc2UiZXJyb3IiOntsZXQgcj1lLnNvdXJjZT9gJHtlLm1lc3NhZ2V9OiAke0pTT04uc3RyaW5naWZ5KGUuc291cmNlKX1gOmUubWVzc2FnZSxuPW5ldyBGdChNYyhlKSwiVU5FWFBFQ1RFRF9UT0tFTiIscik7dGhpcy5hdERpcmVjdGl2ZXN8fCF0aGlzLmRvYz90aGlzLmVycm9ycy5wdXNoKG4pOnRoaXMuZG9jLmVycm9ycy5wdXNoKG4pO2JyZWFrfWNhc2UiZG9jLWVuZCI6e2lmKCF0aGlzLmRvYyl7bGV0IG49IlVuZXhwZWN0ZWQgZG9jLWVuZCB3aXRob3V0IHByZWNlZGluZyBkb2N1bWVudCI7dGhpcy5lcnJvcnMucHVzaChuZXcgRnQoTWMoZSksIlVORVhQRUNURURfVE9LRU4iLG4pKTticmVha310aGlzLmRvYy5kaXJlY3RpdmVzLmRvY0VuZD0hMDtsZXQgcj1XcihlLmVuZCxlLm9mZnNldCtlLnNvdXJjZS5sZW5ndGgsdGhpcy5kb2Mub3B0aW9ucy5zdHJpY3QsdGhpcy5vbkVycm9yKTtpZih0aGlzLmRlY29yYXRlKHRoaXMuZG9jLCEwKSxyLmNvbW1lbnQpe2xldCBuPXRoaXMuZG9jLmNvbW1lbnQ7dGhpcy5kb2MuY29tbWVudD1uP2Ake259CiR7ci5jb21tZW50fWA6ci5jb21tZW50fXRoaXMuZG9jLnJhbmdlWzJdPXIub2Zmc2V0O2JyZWFrfWRlZmF1bHQ6dGhpcy5lcnJvcnMucHVzaChuZXcgRnQoTWMoZSksIlVORVhQRUNURURfVE9LRU4iLGBVbnN1cHBvcnRlZCB0b2tlbiAke2UudHlwZX1gKSl9fSplbmQoZT0hMSxyPS0xKXtpZih0aGlzLmRvYyl0aGlzLmRlY29yYXRlKHRoaXMuZG9jLCEwKSx5aWVsZCB0aGlzLmRvYyx0aGlzLmRvYz1udWxsO2Vsc2UgaWYoZSl7bGV0IG49T2JqZWN0LmFzc2lnbih7X2RpcmVjdGl2ZXM6dGhpcy5kaXJlY3RpdmVzfSx0aGlzLm9wdGlvbnMpLGk9bmV3IENyKHZvaWQgMCxuKTt0aGlzLmF0RGlyZWN0aXZlcyYmdGhpcy5vbkVycm9yKHIsIk1JU1NJTkdfQ0hBUiIsIk1pc3NpbmcgZGlyZWN0aXZlcy1lbmQgaW5kaWNhdG9yIGxpbmUiKSxpLnJhbmdlPVswLHIscl0sdGhpcy5kZWNvcmF0ZShpLCExKSx5aWVsZCBpfX19O3ZhciBPYz17fTtzZShPYyx7Qk9NOigpPT5PYSxET0NVTUVOVDooKT0+SWEsRkxPV19FTkQ6KCk9Pl9hLFNDQUxBUjooKT0+em8sY3JlYXRlU2NhbGFyVG9rZW46KCk9Pkd4LGlzQ29sbGVjdGlvbjooKT0+Q0MsaXNTY2FsYXI6KCk9Pk1DLHByZXR0eVRva2VuOigpPT5PQyxyZXNvbHZlQXNTY2FsYXI6KCk9Pll4LHNldFNjYWxhclZhbHVlOigpPT5ReCxzdHJpbmdpZnk6KCk9Pkp4LHRva2VuVHlwZTooKT0+d2QsdmlzaXQ6KCk9PktufSk7ZnVuY3Rpb24gWXgodCxlPSEwLHIpe2lmKHQpe2xldCBuPW8oKGkscyxhKT0+e2xldCBsPXR5cGVvZiBpPT0ibnVtYmVyIj9pOkFycmF5LmlzQXJyYXkoaSk/aVswXTppLm9mZnNldDtpZihyKXIobCxzLGEpO2Vsc2UgdGhyb3cgbmV3IEZ0KFtsLGwrMV0scyxhKX0sIl9vbkVycm9yIik7c3dpdGNoKHQudHlwZSl7Y2FzZSJzY2FsYXIiOmNhc2Uic2luZ2xlLXF1b3RlZC1zY2FsYXIiOmNhc2UiZG91YmxlLXF1b3RlZC1zY2FsYXIiOnJldHVybiBEYyh0LGUsbik7Y2FzZSJibG9jay1zY2FsYXIiOnJldHVybiBFYyh7b3B0aW9uczp7c3RyaWN0OmV9fSx0LG4pfX1yZXR1cm4gbnVsbH1vKFl4LCJyZXNvbHZlQXNTY2FsYXIiKTtmdW5jdGlvbiBHeCh0LGUpe2xldHtpbXBsaWNpdEtleTpyPSExLGluZGVudDpuLGluRmxvdzppPSExLG9mZnNldDpzPS0xLHR5cGU6YT0iUExBSU4ifT1lLGw9U24oe3R5cGU6YSx2YWx1ZTp0fSx7aW1wbGljaXRLZXk6cixpbmRlbnQ6bj4wPyIgIi5yZXBlYXQobik6IiIsaW5GbG93Omksb3B0aW9uczp7YmxvY2tRdW90ZTohMCxsaW5lV2lkdGg6LTF9fSksYz1lLmVuZD8/W3t0eXBlOiJuZXdsaW5lIixvZmZzZXQ6LTEsaW5kZW50Om4sc291cmNlOmAKYH1dO3N3aXRjaChsWzBdKXtjYXNlInwiOmNhc2UiPiI6e2xldCB1PWwuaW5kZXhPZihgCmApLGY9bC5zdWJzdHJpbmcoMCx1KSxwPWwuc3Vic3RyaW5nKHUrMSkrYApgLGg9W3t0eXBlOiJibG9jay1zY2FsYXItaGVhZGVyIixvZmZzZXQ6cyxpbmRlbnQ6bixzb3VyY2U6Zn1dO3JldHVybiBUQyhoLGMpfHxoLnB1c2goe3R5cGU6Im5ld2xpbmUiLG9mZnNldDotMSxpbmRlbnQ6bixzb3VyY2U6YApgfSkse3R5cGU6ImJsb2NrLXNjYWxhciIsb2Zmc2V0OnMsaW5kZW50Om4scHJvcHM6aCxzb3VyY2U6cH19Y2FzZSciJzpyZXR1cm57dHlwZToiZG91YmxlLXF1b3RlZC1zY2FsYXIiLG9mZnNldDpzLGluZGVudDpuLHNvdXJjZTpsLGVuZDpjfTtjYXNlIiciOnJldHVybnt0eXBlOiJzaW5nbGUtcXVvdGVkLXNjYWxhciIsb2Zmc2V0OnMsaW5kZW50Om4sc291cmNlOmwsZW5kOmN9O2RlZmF1bHQ6cmV0dXJue3R5cGU6InNjYWxhciIsb2Zmc2V0OnMsaW5kZW50Om4sc291cmNlOmwsZW5kOmN9fX1vKEd4LCJjcmVhdGVTY2FsYXJUb2tlbiIpO2Z1bmN0aW9uIFF4KHQsZSxyPXt9KXtsZXR7YWZ0ZXJLZXk6bj0hMSxpbXBsaWNpdEtleTppPSExLGluRmxvdzpzPSExLHR5cGU6YX09cixsPSJpbmRlbnQiaW4gdD90LmluZGVudDpudWxsO2lmKG4mJnR5cGVvZiBsPT0ibnVtYmVyIiYmKGwrPTIpLCFhKXN3aXRjaCh0LnR5cGUpe2Nhc2Uic2luZ2xlLXF1b3RlZC1zY2FsYXIiOmE9IlFVT1RFX1NJTkdMRSI7YnJlYWs7Y2FzZSJkb3VibGUtcXVvdGVkLXNjYWxhciI6YT0iUVVPVEVfRE9VQkxFIjticmVhaztjYXNlImJsb2NrLXNjYWxhciI6e2xldCB1PXQucHJvcHNbMF07aWYodS50eXBlIT09ImJsb2NrLXNjYWxhci1oZWFkZXIiKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBibG9jayBzY2FsYXIgaGVhZGVyIik7YT11LnNvdXJjZVswXT09PSI+Ij8iQkxPQ0tfRk9MREVEIjoiQkxPQ0tfTElURVJBTCI7YnJlYWt9ZGVmYXVsdDphPSJQTEFJTiJ9bGV0IGM9U24oe3R5cGU6YSx2YWx1ZTplfSx7aW1wbGljaXRLZXk6aXx8bD09PW51bGwsaW5kZW50OmwhPT1udWxsJiZsPjA/IiAiLnJlcGVhdChsKToiIixpbkZsb3c6cyxvcHRpb25zOntibG9ja1F1b3RlOiEwLGxpbmVXaWR0aDotMX19KTtzd2l0Y2goY1swXSl7Y2FzZSJ8IjpjYXNlIj4iOkokKHQsYyk7YnJlYWs7Y2FzZSciJzpWeCh0LGMsImRvdWJsZS1xdW90ZWQtc2NhbGFyIik7YnJlYWs7Y2FzZSInIjpWeCh0LGMsInNpbmdsZS1xdW90ZWQtc2NhbGFyIik7YnJlYWs7ZGVmYXVsdDpWeCh0LGMsInNjYWxhciIpfX1vKFF4LCJzZXRTY2FsYXJWYWx1ZSIpO2Z1bmN0aW9uIEokKHQsZSl7bGV0IHI9ZS5pbmRleE9mKGAKYCksbj1lLnN1YnN0cmluZygwLHIpLGk9ZS5zdWJzdHJpbmcocisxKStgCmA7aWYodC50eXBlPT09ImJsb2NrLXNjYWxhciIpe2xldCBzPXQucHJvcHNbMF07aWYocy50eXBlIT09ImJsb2NrLXNjYWxhci1oZWFkZXIiKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBibG9jayBzY2FsYXIgaGVhZGVyIik7cy5zb3VyY2U9bix0LnNvdXJjZT1pfWVsc2V7bGV0e29mZnNldDpzfT10LGE9ImluZGVudCJpbiB0P3QuaW5kZW50Oi0xLGw9W3t0eXBlOiJibG9jay1zY2FsYXItaGVhZGVyIixvZmZzZXQ6cyxpbmRlbnQ6YSxzb3VyY2U6bn1dO1RDKGwsImVuZCJpbiB0P3QuZW5kOnZvaWQgMCl8fGwucHVzaCh7dHlwZToibmV3bGluZSIsb2Zmc2V0Oi0xLGluZGVudDphLHNvdXJjZTpgCmB9KTtmb3IobGV0IGMgb2YgT2JqZWN0LmtleXModCkpYyE9PSJ0eXBlIiYmYyE9PSJvZmZzZXQiJiZkZWxldGUgdFtjXTtPYmplY3QuYXNzaWduKHQse3R5cGU6ImJsb2NrLXNjYWxhciIsaW5kZW50OmEscHJvcHM6bCxzb3VyY2U6aX0pfX1vKEokLCJzZXRCbG9ja1NjYWxhclZhbHVlIik7ZnVuY3Rpb24gVEModCxlKXtpZihlKWZvcihsZXQgciBvZiBlKXN3aXRjaChyLnR5cGUpe2Nhc2Uic3BhY2UiOmNhc2UiY29tbWVudCI6dC5wdXNoKHIpO2JyZWFrO2Nhc2UibmV3bGluZSI6cmV0dXJuIHQucHVzaChyKSwhMH1yZXR1cm4hMX1vKFRDLCJhZGRFbmR0b0Jsb2NrUHJvcHMiKTtmdW5jdGlvbiBWeCh0LGUscil7c3dpdGNoKHQudHlwZSl7Y2FzZSJzY2FsYXIiOmNhc2UiZG91YmxlLXF1b3RlZC1zY2FsYXIiOmNhc2Uic2luZ2xlLXF1b3RlZC1zY2FsYXIiOnQudHlwZT1yLHQuc291cmNlPWU7YnJlYWs7Y2FzZSJibG9jay1zY2FsYXIiOntsZXQgbj10LnByb3BzLnNsaWNlKDEpLGk9ZS5sZW5ndGg7dC5wcm9wc1swXS50eXBlPT09ImJsb2NrLXNjYWxhci1oZWFkZXIiJiYoaS09dC5wcm9wc1swXS5zb3VyY2UubGVuZ3RoKTtmb3IobGV0IHMgb2YgbilzLm9mZnNldCs9aTtkZWxldGUgdC5wcm9wcyxPYmplY3QuYXNzaWduKHQse3R5cGU6cixzb3VyY2U6ZSxlbmQ6bn0pO2JyZWFrfWNhc2UiYmxvY2stbWFwIjpjYXNlImJsb2NrLXNlcSI6e2xldCBpPXt0eXBlOiJuZXdsaW5lIixvZmZzZXQ6dC5vZmZzZXQrZS5sZW5ndGgsaW5kZW50OnQuaW5kZW50LHNvdXJjZTpgCmB9O2RlbGV0ZSB0Lml0ZW1zLE9iamVjdC5hc3NpZ24odCx7dHlwZTpyLHNvdXJjZTplLGVuZDpbaV19KTticmVha31kZWZhdWx0OntsZXQgbj0iaW5kZW50ImluIHQ/dC5pbmRlbnQ6LTEsaT0iZW5kImluIHQmJkFycmF5LmlzQXJyYXkodC5lbmQpP3QuZW5kLmZpbHRlcihzPT5zLnR5cGU9PT0ic3BhY2UifHxzLnR5cGU9PT0iY29tbWVudCJ8fHMudHlwZT09PSJuZXdsaW5lIik6W107Zm9yKGxldCBzIG9mIE9iamVjdC5rZXlzKHQpKXMhPT0idHlwZSImJnMhPT0ib2Zmc2V0IiYmZGVsZXRlIHRbc107T2JqZWN0LmFzc2lnbih0LHt0eXBlOnIsaW5kZW50Om4sc291cmNlOmUsZW5kOml9KX19fW8oVngsInNldEZsb3dTY2FsYXJWYWx1ZSIpO3ZhciBKeD1vKHQ9PiJ0eXBlImluIHQ/eGQodCk6YmQodCksInN0cmluZ2lmeSIpO2Z1bmN0aW9uIHhkKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UiYmxvY2stc2NhbGFyIjp7bGV0IGU9IiI7Zm9yKGxldCByIG9mIHQucHJvcHMpZSs9eGQocik7cmV0dXJuIGUrdC5zb3VyY2V9Y2FzZSJibG9jay1tYXAiOmNhc2UiYmxvY2stc2VxIjp7bGV0IGU9IiI7Zm9yKGxldCByIG9mIHQuaXRlbXMpZSs9YmQocik7cmV0dXJuIGV9Y2FzZSJmbG93LWNvbGxlY3Rpb24iOntsZXQgZT10LnN0YXJ0LnNvdXJjZTtmb3IobGV0IHIgb2YgdC5pdGVtcyllKz1iZChyKTtmb3IobGV0IHIgb2YgdC5lbmQpZSs9ci5zb3VyY2U7cmV0dXJuIGV9Y2FzZSJkb2N1bWVudCI6e2xldCBlPWJkKHQpO2lmKHQuZW5kKWZvcihsZXQgciBvZiB0LmVuZCllKz1yLnNvdXJjZTtyZXR1cm4gZX1kZWZhdWx0OntsZXQgZT10LnNvdXJjZTtpZigiZW5kImluIHQmJnQuZW5kKWZvcihsZXQgciBvZiB0LmVuZCllKz1yLnNvdXJjZTtyZXR1cm4gZX19fW8oeGQsInN0cmluZ2lmeVRva2VuIik7ZnVuY3Rpb24gYmQoe3N0YXJ0OnQsa2V5OmUsc2VwOnIsdmFsdWU6bn0pe2xldCBpPSIiO2ZvcihsZXQgcyBvZiB0KWkrPXMuc291cmNlO2lmKGUmJihpKz14ZChlKSkscilmb3IobGV0IHMgb2YgcilpKz1zLnNvdXJjZTtyZXR1cm4gbiYmKGkrPXhkKG4pKSxpfW8oYmQsInN0cmluZ2lmeUl0ZW0iKTt2YXIgS3g9U3ltYm9sKCJicmVhayB2aXNpdCIpLEskPVN5bWJvbCgic2tpcCBjaGlsZHJlbiIpLEVDPVN5bWJvbCgicmVtb3ZlIGl0ZW0iKTtmdW5jdGlvbiBLbih0LGUpeyJ0eXBlImluIHQmJnQudHlwZT09PSJkb2N1bWVudCImJih0PXtzdGFydDp0LnN0YXJ0LHZhbHVlOnQudmFsdWV9KSxEQyhPYmplY3QuZnJlZXplKFtdKSx0LGUpfW8oS24sInZpc2l0IiksS24uQlJFQUs9S3gsS24uU0tJUD1LJCxLbi5SRU1PVkU9RUMsS24uaXRlbUF0UGF0aD0odCxlKT0+e2xldCByPXQ7Zm9yKGxldFtuLGldb2YgZSl7bGV0IHM9cj8uW25dO2lmKHMmJiJpdGVtcyJpbiBzKXI9cy5pdGVtc1tpXTtlbHNlIHJldHVybn1yZXR1cm4gcn0sS24ucGFyZW50Q29sbGVjdGlvbj0odCxlKT0+e2xldCByPUtuLml0ZW1BdFBhdGgodCxlLnNsaWNlKDAsLTEpKSxuPWVbZS5sZW5ndGgtMV1bMF0saT1yPy5bbl07aWYoaSYmIml0ZW1zImluIGkpcmV0dXJuIGk7dGhyb3cgbmV3IEVycm9yKCJQYXJlbnQgY29sbGVjdGlvbiBub3QgZm91bmQiKX07ZnVuY3Rpb24gREModCxlLHIpe2xldCBuPXIoZSx0KTtpZih0eXBlb2Ygbj09InN5bWJvbCIpcmV0dXJuIG47Zm9yKGxldCBpIG9mWyJrZXkiLCJ2YWx1ZSJdKXtsZXQgcz1lW2ldO2lmKHMmJiJpdGVtcyJpbiBzKXtmb3IobGV0IGE9MDthPHMuaXRlbXMubGVuZ3RoOysrYSl7bGV0IGw9REMoT2JqZWN0LmZyZWV6ZSh0LmNvbmNhdChbW2ksYV1dKSkscy5pdGVtc1thXSxyKTtpZih0eXBlb2YgbD09Im51bWJlciIpYT1sLTE7ZWxzZXtpZihsPT09S3gpcmV0dXJuIEt4O2w9PT1FQyYmKHMuaXRlbXMuc3BsaWNlKGEsMSksYS09MSl9fXR5cGVvZiBuPT0iZnVuY3Rpb24iJiZpPT09ImtleSImJihuPW4oZSx0KSl9fXJldHVybiB0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKGUsdCk6bn1vKERDLCJfdmlzaXQiKTt2YXIgT2E9Ilx1RkVGRiIsSWE9IgIiLF9hPSIYIix6bz0iHyIsQ0M9byh0PT4hIXQmJiJpdGVtcyJpbiB0LCJpc0NvbGxlY3Rpb24iKSxNQz1vKHQ9PiEhdCYmKHQudHlwZT09PSJzY2FsYXIifHx0LnR5cGU9PT0ic2luZ2xlLXF1b3RlZC1zY2FsYXIifHx0LnR5cGU9PT0iZG91YmxlLXF1b3RlZC1zY2FsYXIifHx0LnR5cGU9PT0iYmxvY2stc2NhbGFyIiksImlzU2NhbGFyIik7ZnVuY3Rpb24gT0ModCl7c3dpdGNoKHQpe2Nhc2UgT2E6cmV0dXJuIjxCT00+IjtjYXNlIElhOnJldHVybiI8RE9DPiI7Y2FzZSBfYTpyZXR1cm4iPEZMT1dfRU5EPiI7Y2FzZSB6bzpyZXR1cm4iPFNDQUxBUj4iO2RlZmF1bHQ6cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfX1vKE9DLCJwcmV0dHlUb2tlbiIpO2Z1bmN0aW9uIHdkKHQpe3N3aXRjaCh0KXtjYXNlIE9hOnJldHVybiJieXRlLW9yZGVyLW1hcmsiO2Nhc2UgSWE6cmV0dXJuImRvYy1tb2RlIjtjYXNlIF9hOnJldHVybiJmbG93LWVycm9yLWVuZCI7Y2FzZSB6bzpyZXR1cm4ic2NhbGFyIjtjYXNlIi0tLSI6cmV0dXJuImRvYy1zdGFydCI7Y2FzZSIuLi4iOnJldHVybiJkb2MtZW5kIjtjYXNlIiI6Y2FzZWAKYDpjYXNlYFxyCmA6cmV0dXJuIm5ld2xpbmUiO2Nhc2UiLSI6cmV0dXJuInNlcS1pdGVtLWluZCI7Y2FzZSI/IjpyZXR1cm4iZXhwbGljaXQta2V5LWluZCI7Y2FzZSI6IjpyZXR1cm4ibWFwLXZhbHVlLWluZCI7Y2FzZSJ7IjpyZXR1cm4iZmxvdy1tYXAtc3RhcnQiO2Nhc2UifSI6cmV0dXJuImZsb3ctbWFwLWVuZCI7Y2FzZSJbIjpyZXR1cm4iZmxvdy1zZXEtc3RhcnQiO2Nhc2UiXSI6cmV0dXJuImZsb3ctc2VxLWVuZCI7Y2FzZSIsIjpyZXR1cm4iY29tbWEifXN3aXRjaCh0WzBdKXtjYXNlIiAiOmNhc2UiCSI6cmV0dXJuInNwYWNlIjtjYXNlIiMiOnJldHVybiJjb21tZW50IjtjYXNlIiUiOnJldHVybiJkaXJlY3RpdmUtbGluZSI7Y2FzZSIqIjpyZXR1cm4iYWxpYXMiO2Nhc2UiJiI6cmV0dXJuImFuY2hvciI7Y2FzZSIhIjpyZXR1cm4idGFnIjtjYXNlIiciOnJldHVybiJzaW5nbGUtcXVvdGVkLXNjYWxhciI7Y2FzZSciJzpyZXR1cm4iZG91YmxlLXF1b3RlZC1zY2FsYXIiO2Nhc2UifCI6Y2FzZSI+IjpyZXR1cm4iYmxvY2stc2NhbGFyLWhlYWRlciJ9cmV0dXJuIG51bGx9byh3ZCwidG9rZW5UeXBlIik7ZnVuY3Rpb24gcXIodCl7c3dpdGNoKHQpe2Nhc2Ugdm9pZCAwOmNhc2UiICI6Y2FzZWAKYDpjYXNlIlxyIjpjYXNlIgkiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fW8ocXIsImlzRW1wdHkiKTt2YXIgSUM9bmV3IFNldCgiMDEyMzQ1Njc4OUFCQ0RFRmFiY2RlZiIpLFgkPW5ldyBTZXQoIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LSM7Lz86QCY9KyRfLiF+KicoKSIpLHZkPW5ldyBTZXQoIixbXXt9IiksWiQ9bmV3IFNldChgICxbXXt9ClxyCWApLFh4PW8odD0+IXR8fFokLmhhcyh0KSwiaXNOb3RBbmNob3JDaGFyIiksTGk9Y2xhc3N7c3RhdGlje28odGhpcywiTGV4ZXIiKX1jb25zdHJ1Y3Rvcigpe3RoaXMuYXRFbmQ9ITEsdGhpcy5ibG9ja1NjYWxhckluZGVudD0tMSx0aGlzLmJsb2NrU2NhbGFyS2VlcD0hMSx0aGlzLmJ1ZmZlcj0iIix0aGlzLmZsb3dLZXk9ITEsdGhpcy5mbG93TGV2ZWw9MCx0aGlzLmluZGVudE5leHQ9MCx0aGlzLmluZGVudFZhbHVlPTAsdGhpcy5saW5lRW5kUG9zPW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy5wb3M9MH0qbGV4KGUscj0hMSl7aWYoZSl7aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IFR5cGVFcnJvcigic291cmNlIGlzIG5vdCBhIHN0cmluZyIpO3RoaXMuYnVmZmVyPXRoaXMuYnVmZmVyP3RoaXMuYnVmZmVyK2U6ZSx0aGlzLmxpbmVFbmRQb3M9bnVsbH10aGlzLmF0RW5kPSFyO2xldCBuPXRoaXMubmV4dD8/InN0cmVhbSI7Zm9yKDtuJiYocnx8dGhpcy5oYXNDaGFycygxKSk7KW49eWllbGQqdGhpcy5wYXJzZU5leHQobil9YXRMaW5lRW5kKCl7bGV0IGU9dGhpcy5wb3Mscj10aGlzLmJ1ZmZlcltlXTtmb3IoO3I9PT0iICJ8fHI9PT0iCSI7KXI9dGhpcy5idWZmZXJbKytlXTtyZXR1cm4hcnx8cj09PSIjInx8cj09PWAKYD8hMDpyPT09IlxyIj90aGlzLmJ1ZmZlcltlKzFdPT09YApgOiExfWNoYXJBdChlKXtyZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5wb3MrZV19Y29udGludWVTY2FsYXIoZSl7bGV0IHI9dGhpcy5idWZmZXJbZV07aWYodGhpcy5pbmRlbnROZXh0PjApe2xldCBuPTA7Zm9yKDtyPT09IiAiOylyPXRoaXMuYnVmZmVyWysrbitlXTtpZihyPT09IlxyIil7bGV0IGk9dGhpcy5idWZmZXJbbitlKzFdO2lmKGk9PT1gCmB8fCFpJiYhdGhpcy5hdEVuZClyZXR1cm4gZStuKzF9cmV0dXJuIHI9PT1gCmB8fG4+PXRoaXMuaW5kZW50TmV4dHx8IXImJiF0aGlzLmF0RW5kP2UrbjotMX1pZihyPT09Ii0ifHxyPT09Ii4iKXtsZXQgbj10aGlzLmJ1ZmZlci5zdWJzdHIoZSwzKTtpZigobj09PSItLS0ifHxuPT09Ii4uLiIpJiZxcih0aGlzLmJ1ZmZlcltlKzNdKSlyZXR1cm4tMX1yZXR1cm4gZX1nZXRMaW5lKCl7bGV0IGU9dGhpcy5saW5lRW5kUG9zO3JldHVybih0eXBlb2YgZSE9Im51bWJlciJ8fGUhPT0tMSYmZTx0aGlzLnBvcykmJihlPXRoaXMuYnVmZmVyLmluZGV4T2YoYApgLHRoaXMucG9zKSx0aGlzLmxpbmVFbmRQb3M9ZSksZT09PS0xP3RoaXMuYXRFbmQ/dGhpcy5idWZmZXIuc3Vic3RyaW5nKHRoaXMucG9zKTpudWxsOih0aGlzLmJ1ZmZlcltlLTFdPT09IlxyIiYmKGUtPTEpLHRoaXMuYnVmZmVyLnN1YnN0cmluZyh0aGlzLnBvcyxlKSl9aGFzQ2hhcnMoZSl7cmV0dXJuIHRoaXMucG9zK2U8PXRoaXMuYnVmZmVyLmxlbmd0aH1zZXROZXh0KGUpe3JldHVybiB0aGlzLmJ1ZmZlcj10aGlzLmJ1ZmZlci5zdWJzdHJpbmcodGhpcy5wb3MpLHRoaXMucG9zPTAsdGhpcy5saW5lRW5kUG9zPW51bGwsdGhpcy5uZXh0PWUsbnVsbH1wZWVrKGUpe3JldHVybiB0aGlzLmJ1ZmZlci5zdWJzdHIodGhpcy5wb3MsZSl9KnBhcnNlTmV4dChlKXtzd2l0Y2goZSl7Y2FzZSJzdHJlYW0iOnJldHVybiB5aWVsZCp0aGlzLnBhcnNlU3RyZWFtKCk7Y2FzZSJsaW5lLXN0YXJ0IjpyZXR1cm4geWllbGQqdGhpcy5wYXJzZUxpbmVTdGFydCgpO2Nhc2UiYmxvY2stc3RhcnQiOnJldHVybiB5aWVsZCp0aGlzLnBhcnNlQmxvY2tTdGFydCgpO2Nhc2UiZG9jIjpyZXR1cm4geWllbGQqdGhpcy5wYXJzZURvY3VtZW50KCk7Y2FzZSJmbG93IjpyZXR1cm4geWllbGQqdGhpcy5wYXJzZUZsb3dDb2xsZWN0aW9uKCk7Y2FzZSJxdW90ZWQtc2NhbGFyIjpyZXR1cm4geWllbGQqdGhpcy5wYXJzZVF1b3RlZFNjYWxhcigpO2Nhc2UiYmxvY2stc2NhbGFyIjpyZXR1cm4geWllbGQqdGhpcy5wYXJzZUJsb2NrU2NhbGFyKCk7Y2FzZSJwbGFpbi1zY2FsYXIiOnJldHVybiB5aWVsZCp0aGlzLnBhcnNlUGxhaW5TY2FsYXIoKX19KnBhcnNlU3RyZWFtKCl7bGV0IGU9dGhpcy5nZXRMaW5lKCk7aWYoZT09PW51bGwpcmV0dXJuIHRoaXMuc2V0TmV4dCgic3RyZWFtIik7aWYoZVswXT09PU9hJiYoeWllbGQqdGhpcy5wdXNoQ291bnQoMSksZT1lLnN1YnN0cmluZygxKSksZVswXT09PSIlIil7bGV0IHI9ZS5sZW5ndGgsbj1lLmluZGV4T2YoIiMiKTtmb3IoO24hPT0tMTspe2xldCBzPWVbbi0xXTtpZihzPT09IiAifHxzPT09IgkiKXtyPW4tMTticmVha31lbHNlIG49ZS5pbmRleE9mKCIjIixuKzEpfWZvcig7Oyl7bGV0IHM9ZVtyLTFdO2lmKHM9PT0iICJ8fHM9PT0iCSIpci09MTtlbHNlIGJyZWFrfWxldCBpPSh5aWVsZCp0aGlzLnB1c2hDb3VudChyKSkrKHlpZWxkKnRoaXMucHVzaFNwYWNlcyghMCkpO3JldHVybiB5aWVsZCp0aGlzLnB1c2hDb3VudChlLmxlbmd0aC1pKSx0aGlzLnB1c2hOZXdsaW5lKCksInN0cmVhbSJ9aWYodGhpcy5hdExpbmVFbmQoKSl7bGV0IHI9eWllbGQqdGhpcy5wdXNoU3BhY2VzKCEwKTtyZXR1cm4geWllbGQqdGhpcy5wdXNoQ291bnQoZS5sZW5ndGgtcikseWllbGQqdGhpcy5wdXNoTmV3bGluZSgpLCJzdHJlYW0ifXJldHVybiB5aWVsZCBJYSx5aWVsZCp0aGlzLnBhcnNlTGluZVN0YXJ0KCl9KnBhcnNlTGluZVN0YXJ0KCl7bGV0IGU9dGhpcy5jaGFyQXQoMCk7aWYoIWUmJiF0aGlzLmF0RW5kKXJldHVybiB0aGlzLnNldE5leHQoImxpbmUtc3RhcnQiKTtpZihlPT09Ii0ifHxlPT09Ii4iKXtpZighdGhpcy5hdEVuZCYmIXRoaXMuaGFzQ2hhcnMoNCkpcmV0dXJuIHRoaXMuc2V0TmV4dCgibGluZS1zdGFydCIpO2xldCByPXRoaXMucGVlaygzKTtpZigocj09PSItLS0ifHxyPT09Ii4uLiIpJiZxcih0aGlzLmNoYXJBdCgzKSkpcmV0dXJuIHlpZWxkKnRoaXMucHVzaENvdW50KDMpLHRoaXMuaW5kZW50VmFsdWU9MCx0aGlzLmluZGVudE5leHQ9MCxyPT09Ii0tLSI/ImRvYyI6InN0cmVhbSJ9cmV0dXJuIHRoaXMuaW5kZW50VmFsdWU9eWllbGQqdGhpcy5wdXNoU3BhY2VzKCExKSx0aGlzLmluZGVudE5leHQ+dGhpcy5pbmRlbnRWYWx1ZSYmIXFyKHRoaXMuY2hhckF0KDEpKSYmKHRoaXMuaW5kZW50TmV4dD10aGlzLmluZGVudFZhbHVlKSx5aWVsZCp0aGlzLnBhcnNlQmxvY2tTdGFydCgpfSpwYXJzZUJsb2NrU3RhcnQoKXtsZXRbZSxyXT10aGlzLnBlZWsoMik7aWYoIXImJiF0aGlzLmF0RW5kKXJldHVybiB0aGlzLnNldE5leHQoImJsb2NrLXN0YXJ0Iik7aWYoKGU9PT0iLSJ8fGU9PT0iPyJ8fGU9PT0iOiIpJiZxcihyKSl7bGV0IG49KHlpZWxkKnRoaXMucHVzaENvdW50KDEpKSsoeWllbGQqdGhpcy5wdXNoU3BhY2VzKCEwKSk7cmV0dXJuIHRoaXMuaW5kZW50TmV4dD10aGlzLmluZGVudFZhbHVlKzEsdGhpcy5pbmRlbnRWYWx1ZSs9biwiYmxvY2stc3RhcnQifXJldHVybiJkb2MifSpwYXJzZURvY3VtZW50KCl7eWllbGQqdGhpcy5wdXNoU3BhY2VzKCEwKTtsZXQgZT10aGlzLmdldExpbmUoKTtpZihlPT09bnVsbClyZXR1cm4gdGhpcy5zZXROZXh0KCJkb2MiKTtsZXQgcj15aWVsZCp0aGlzLnB1c2hJbmRpY2F0b3JzKCk7c3dpdGNoKGVbcl0pe2Nhc2UiIyI6eWllbGQqdGhpcy5wdXNoQ291bnQoZS5sZW5ndGgtcik7Y2FzZSB2b2lkIDA6cmV0dXJuIHlpZWxkKnRoaXMucHVzaE5ld2xpbmUoKSx5aWVsZCp0aGlzLnBhcnNlTGluZVN0YXJ0KCk7Y2FzZSJ7IjpjYXNlIlsiOnJldHVybiB5aWVsZCp0aGlzLnB1c2hDb3VudCgxKSx0aGlzLmZsb3dLZXk9ITEsdGhpcy5mbG93TGV2ZWw9MSwiZmxvdyI7Y2FzZSJ9IjpjYXNlIl0iOnJldHVybiB5aWVsZCp0aGlzLnB1c2hDb3VudCgxKSwiZG9jIjtjYXNlIioiOnJldHVybiB5aWVsZCp0aGlzLnB1c2hVbnRpbChYeCksImRvYyI7Y2FzZSciJzpjYXNlIiciOnJldHVybiB5aWVsZCp0aGlzLnBhcnNlUXVvdGVkU2NhbGFyKCk7Y2FzZSJ8IjpjYXNlIj4iOnJldHVybiByKz15aWVsZCp0aGlzLnBhcnNlQmxvY2tTY2FsYXJIZWFkZXIoKSxyKz15aWVsZCp0aGlzLnB1c2hTcGFjZXMoITApLHlpZWxkKnRoaXMucHVzaENvdW50KGUubGVuZ3RoLXIpLHlpZWxkKnRoaXMucHVzaE5ld2xpbmUoKSx5aWVsZCp0aGlzLnBhcnNlQmxvY2tTY2FsYXIoKTtkZWZhdWx0OnJldHVybiB5aWVsZCp0aGlzLnBhcnNlUGxhaW5TY2FsYXIoKX19KnBhcnNlRmxvd0NvbGxlY3Rpb24oKXtsZXQgZSxyLG49LTE7ZG8gZT15aWVsZCp0aGlzLnB1c2hOZXdsaW5lKCksZT4wPyhyPXlpZWxkKnRoaXMucHVzaFNwYWNlcyghMSksdGhpcy5pbmRlbnRWYWx1ZT1uPXIpOnI9MCxyKz15aWVsZCp0aGlzLnB1c2hTcGFjZXMoITApO3doaWxlKGUrcj4wKTtsZXQgaT10aGlzLmdldExpbmUoKTtpZihpPT09bnVsbClyZXR1cm4gdGhpcy5zZXROZXh0KCJmbG93Iik7aWYoKG4hPT0tMSYmbjx0aGlzLmluZGVudE5leHQmJmlbMF0hPT0iIyJ8fG49PT0wJiYoaS5zdGFydHNXaXRoKCItLS0iKXx8aS5zdGFydHNXaXRoKCIuLi4iKSkmJnFyKGlbM10pKSYmIShuPT09dGhpcy5pbmRlbnROZXh0LTEmJnRoaXMuZmxvd0xldmVsPT09MSYmKGlbMF09PT0iXSJ8fGlbMF09PT0ifSIpKSlyZXR1cm4gdGhpcy5mbG93TGV2ZWw9MCx5aWVsZCBfYSx5aWVsZCp0aGlzLnBhcnNlTGluZVN0YXJ0KCk7bGV0IHM9MDtmb3IoO2lbc109PT0iLCI7KXMrPXlpZWxkKnRoaXMucHVzaENvdW50KDEpLHMrPXlpZWxkKnRoaXMucHVzaFNwYWNlcyghMCksdGhpcy5mbG93S2V5PSExO3N3aXRjaChzKz15aWVsZCp0aGlzLnB1c2hJbmRpY2F0b3JzKCksaVtzXSl7Y2FzZSB2b2lkIDA6cmV0dXJuImZsb3ciO2Nhc2UiIyI6cmV0dXJuIHlpZWxkKnRoaXMucHVzaENvdW50KGkubGVuZ3RoLXMpLCJmbG93IjtjYXNlInsiOmNhc2UiWyI6cmV0dXJuIHlpZWxkKnRoaXMucHVzaENvdW50KDEpLHRoaXMuZmxvd0tleT0hMSx0aGlzLmZsb3dMZXZlbCs9MSwiZmxvdyI7Y2FzZSJ9IjpjYXNlIl0iOnJldHVybiB5aWVsZCp0aGlzLnB1c2hDb3VudCgxKSx0aGlzLmZsb3dLZXk9ITAsdGhpcy5mbG93TGV2ZWwtPTEsdGhpcy5mbG93TGV2ZWw/ImZsb3ciOiJkb2MiO2Nhc2UiKiI6cmV0dXJuIHlpZWxkKnRoaXMucHVzaFVudGlsKFh4KSwiZmxvdyI7Y2FzZSciJzpjYXNlIiciOnJldHVybiB0aGlzLmZsb3dLZXk9ITAseWllbGQqdGhpcy5wYXJzZVF1b3RlZFNjYWxhcigpO2Nhc2UiOiI6e2xldCBhPXRoaXMuY2hhckF0KDEpO2lmKHRoaXMuZmxvd0tleXx8cXIoYSl8fGE9PT0iLCIpcmV0dXJuIHRoaXMuZmxvd0tleT0hMSx5aWVsZCp0aGlzLnB1c2hDb3VudCgxKSx5aWVsZCp0aGlzLnB1c2hTcGFjZXMoITApLCJmbG93In1kZWZhdWx0OnJldHVybiB0aGlzLmZsb3dLZXk9ITEseWllbGQqdGhpcy5wYXJzZVBsYWluU2NhbGFyKCl9fSpwYXJzZVF1b3RlZFNjYWxhcigpe2xldCBlPXRoaXMuY2hhckF0KDApLHI9dGhpcy5idWZmZXIuaW5kZXhPZihlLHRoaXMucG9zKzEpO2lmKGU9PT0iJyIpZm9yKDtyIT09LTEmJnRoaXMuYnVmZmVyW3IrMV09PT0iJyI7KXI9dGhpcy5idWZmZXIuaW5kZXhPZigiJyIscisyKTtlbHNlIGZvcig7ciE9PS0xOyl7bGV0IHM9MDtmb3IoO3RoaXMuYnVmZmVyW3ItMS1zXT09PSJcXCI7KXMrPTE7aWYocyUyPT09MClicmVhaztyPXRoaXMuYnVmZmVyLmluZGV4T2YoJyInLHIrMSl9bGV0IG49dGhpcy5idWZmZXIuc3Vic3RyaW5nKDAsciksaT1uLmluZGV4T2YoYApgLHRoaXMucG9zKTtpZihpIT09LTEpe2Zvcig7aSE9PS0xOyl7bGV0IHM9dGhpcy5jb250aW51ZVNjYWxhcihpKzEpO2lmKHM9PT0tMSlicmVhaztpPW4uaW5kZXhPZihgCmAscyl9aSE9PS0xJiYocj1pLShuW2ktMV09PT0iXHIiPzI6MSkpfWlmKHI9PT0tMSl7aWYoIXRoaXMuYXRFbmQpcmV0dXJuIHRoaXMuc2V0TmV4dCgicXVvdGVkLXNjYWxhciIpO3I9dGhpcy5idWZmZXIubGVuZ3RofXJldHVybiB5aWVsZCp0aGlzLnB1c2hUb0luZGV4KHIrMSwhMSksdGhpcy5mbG93TGV2ZWw/ImZsb3ciOiJkb2MifSpwYXJzZUJsb2NrU2NhbGFySGVhZGVyKCl7dGhpcy5ibG9ja1NjYWxhckluZGVudD0tMSx0aGlzLmJsb2NrU2NhbGFyS2VlcD0hMTtsZXQgZT10aGlzLnBvcztmb3IoOzspe2xldCByPXRoaXMuYnVmZmVyWysrZV07aWYocj09PSIrIil0aGlzLmJsb2NrU2NhbGFyS2VlcD0hMDtlbHNlIGlmKHI+IjAiJiZyPD0iOSIpdGhpcy5ibG9ja1NjYWxhckluZGVudD1OdW1iZXIociktMTtlbHNlIGlmKHIhPT0iLSIpYnJlYWt9cmV0dXJuIHlpZWxkKnRoaXMucHVzaFVudGlsKHI9PnFyKHIpfHxyPT09IiMiKX0qcGFyc2VCbG9ja1NjYWxhcigpe2xldCBlPXRoaXMucG9zLTEscj0wLG47ZTpmb3IobGV0IHM9dGhpcy5wb3M7bj10aGlzLmJ1ZmZlcltzXTsrK3Mpc3dpdGNoKG4pe2Nhc2UiICI6cis9MTticmVhaztjYXNlYApgOmU9cyxyPTA7YnJlYWs7Y2FzZSJcciI6e2xldCBhPXRoaXMuYnVmZmVyW3MrMV07aWYoIWEmJiF0aGlzLmF0RW5kKXJldHVybiB0aGlzLnNldE5leHQoImJsb2NrLXNjYWxhciIpO2lmKGE9PT1gCmApYnJlYWt9ZGVmYXVsdDpicmVhayBlfWlmKCFuJiYhdGhpcy5hdEVuZClyZXR1cm4gdGhpcy5zZXROZXh0KCJibG9jay1zY2FsYXIiKTtpZihyPj10aGlzLmluZGVudE5leHQpe3RoaXMuYmxvY2tTY2FsYXJJbmRlbnQ9PT0tMT90aGlzLmluZGVudE5leHQ9cjp0aGlzLmluZGVudE5leHQ9dGhpcy5ibG9ja1NjYWxhckluZGVudCsodGhpcy5pbmRlbnROZXh0PT09MD8xOnRoaXMuaW5kZW50TmV4dCk7ZG97bGV0IHM9dGhpcy5jb250aW51ZVNjYWxhcihlKzEpO2lmKHM9PT0tMSlicmVhaztlPXRoaXMuYnVmZmVyLmluZGV4T2YoYApgLHMpfXdoaWxlKGUhPT0tMSk7aWYoZT09PS0xKXtpZighdGhpcy5hdEVuZClyZXR1cm4gdGhpcy5zZXROZXh0KCJibG9jay1zY2FsYXIiKTtlPXRoaXMuYnVmZmVyLmxlbmd0aH19bGV0IGk9ZSsxO2ZvcihuPXRoaXMuYnVmZmVyW2ldO249PT0iICI7KW49dGhpcy5idWZmZXJbKytpXTtpZihuPT09IgkiKXtmb3IoO249PT0iCSJ8fG49PT0iICJ8fG49PT0iXHIifHxuPT09YApgOyluPXRoaXMuYnVmZmVyWysraV07ZT1pLTF9ZWxzZSBpZighdGhpcy5ibG9ja1NjYWxhcktlZXApZG97bGV0IHM9ZS0xLGE9dGhpcy5idWZmZXJbc107YT09PSJcciImJihhPXRoaXMuYnVmZmVyWy0tc10pO2xldCBsPXM7Zm9yKDthPT09IiAiOylhPXRoaXMuYnVmZmVyWy0tc107aWYoYT09PWAKYCYmcz49dGhpcy5wb3MmJnMrMStyPmwpZT1zO2Vsc2UgYnJlYWt9d2hpbGUoITApO3JldHVybiB5aWVsZCB6byx5aWVsZCp0aGlzLnB1c2hUb0luZGV4KGUrMSwhMCkseWllbGQqdGhpcy5wYXJzZUxpbmVTdGFydCgpfSpwYXJzZVBsYWluU2NhbGFyKCl7bGV0IGU9dGhpcy5mbG93TGV2ZWw+MCxyPXRoaXMucG9zLTEsbj10aGlzLnBvcy0xLGk7Zm9yKDtpPXRoaXMuYnVmZmVyWysrbl07KWlmKGk9PT0iOiIpe2xldCBzPXRoaXMuYnVmZmVyW24rMV07aWYocXIocyl8fGUmJnZkLmhhcyhzKSlicmVhaztyPW59ZWxzZSBpZihxcihpKSl7bGV0IHM9dGhpcy5idWZmZXJbbisxXTtpZihpPT09IlxyIiYmKHM9PT1gCmA/KG4rPTEsaT1gCmAscz10aGlzLmJ1ZmZlcltuKzFdKTpyPW4pLHM9PT0iIyJ8fGUmJnZkLmhhcyhzKSlicmVhaztpZihpPT09YApgKXtsZXQgYT10aGlzLmNvbnRpbnVlU2NhbGFyKG4rMSk7aWYoYT09PS0xKWJyZWFrO249TWF0aC5tYXgobixhLTIpfX1lbHNle2lmKGUmJnZkLmhhcyhpKSlicmVhaztyPW59cmV0dXJuIWkmJiF0aGlzLmF0RW5kP3RoaXMuc2V0TmV4dCgicGxhaW4tc2NhbGFyIik6KHlpZWxkIHpvLHlpZWxkKnRoaXMucHVzaFRvSW5kZXgocisxLCEwKSxlPyJmbG93IjoiZG9jIil9KnB1c2hDb3VudChlKXtyZXR1cm4gZT4wPyh5aWVsZCB0aGlzLmJ1ZmZlci5zdWJzdHIodGhpcy5wb3MsZSksdGhpcy5wb3MrPWUsZSk6MH0qcHVzaFRvSW5kZXgoZSxyKXtsZXQgbj10aGlzLmJ1ZmZlci5zbGljZSh0aGlzLnBvcyxlKTtyZXR1cm4gbj8oeWllbGQgbix0aGlzLnBvcys9bi5sZW5ndGgsbi5sZW5ndGgpOihyJiYoeWllbGQiIiksMCl9KnB1c2hJbmRpY2F0b3JzKCl7bGV0IGU9MDtlOmZvcig7Oyl7c3dpdGNoKHRoaXMuY2hhckF0KDApKXtjYXNlIiEiOmUrPXlpZWxkKnRoaXMucHVzaFRhZygpLGUrPXlpZWxkKnRoaXMucHVzaFNwYWNlcyghMCk7Y29udGludWUgZTtjYXNlIiYiOmUrPXlpZWxkKnRoaXMucHVzaFVudGlsKFh4KSxlKz15aWVsZCp0aGlzLnB1c2hTcGFjZXMoITApO2NvbnRpbnVlIGU7Y2FzZSItIjpjYXNlIj8iOmNhc2UiOiI6e2xldCByPXRoaXMuZmxvd0xldmVsPjAsbj10aGlzLmNoYXJBdCgxKTtpZihxcihuKXx8ciYmdmQuaGFzKG4pKXtyP3RoaXMuZmxvd0tleSYmKHRoaXMuZmxvd0tleT0hMSk6dGhpcy5pbmRlbnROZXh0PXRoaXMuaW5kZW50VmFsdWUrMSxlKz15aWVsZCp0aGlzLnB1c2hDb3VudCgxKSxlKz15aWVsZCp0aGlzLnB1c2hTcGFjZXMoITApO2NvbnRpbnVlIGV9fX1icmVhayBlfXJldHVybiBlfSpwdXNoVGFnKCl7aWYodGhpcy5jaGFyQXQoMSk9PT0iPCIpe2xldCBlPXRoaXMucG9zKzIscj10aGlzLmJ1ZmZlcltlXTtmb3IoOyFxcihyKSYmciE9PSI+Ijspcj10aGlzLmJ1ZmZlclsrK2VdO3JldHVybiB5aWVsZCp0aGlzLnB1c2hUb0luZGV4KHI9PT0iPiI/ZSsxOmUsITEpfWVsc2V7bGV0IGU9dGhpcy5wb3MrMSxyPXRoaXMuYnVmZmVyW2VdO2Zvcig7cjspaWYoWCQuaGFzKHIpKXI9dGhpcy5idWZmZXJbKytlXTtlbHNlIGlmKHI9PT0iJSImJklDLmhhcyh0aGlzLmJ1ZmZlcltlKzFdKSYmSUMuaGFzKHRoaXMuYnVmZmVyW2UrMl0pKXI9dGhpcy5idWZmZXJbZSs9M107ZWxzZSBicmVhaztyZXR1cm4geWllbGQqdGhpcy5wdXNoVG9JbmRleChlLCExKX19KnB1c2hOZXdsaW5lKCl7bGV0IGU9dGhpcy5idWZmZXJbdGhpcy5wb3NdO3JldHVybiBlPT09YApgP3lpZWxkKnRoaXMucHVzaENvdW50KDEpOmU9PT0iXHIiJiZ0aGlzLmNoYXJBdCgxKT09PWAKYD95aWVsZCp0aGlzLnB1c2hDb3VudCgyKTowfSpwdXNoU3BhY2VzKGUpe2xldCByPXRoaXMucG9zLTEsbjtkbyBuPXRoaXMuYnVmZmVyWysrcl07d2hpbGUobj09PSIgInx8ZSYmbj09PSIJIik7bGV0IGk9ci10aGlzLnBvcztyZXR1cm4gaT4wJiYoeWllbGQgdGhpcy5idWZmZXIuc3Vic3RyKHRoaXMucG9zLGkpLHRoaXMucG9zPXIpLGl9KnB1c2hVbnRpbChlKXtsZXQgcj10aGlzLnBvcyxuPXRoaXMuYnVmZmVyW3JdO2Zvcig7IWUobik7KW49dGhpcy5idWZmZXJbKytyXTtyZXR1cm4geWllbGQqdGhpcy5wdXNoVG9JbmRleChyLCExKX19O3ZhciBGaT1jbGFzc3tzdGF0aWN7byh0aGlzLCJMaW5lQ291bnRlciIpfWNvbnN0cnVjdG9yKCl7dGhpcy5saW5lU3RhcnRzPVtdLHRoaXMuYWRkTmV3TGluZT1lPT50aGlzLmxpbmVTdGFydHMucHVzaChlKSx0aGlzLmxpbmVQb3M9ZT0+e2xldCByPTAsbj10aGlzLmxpbmVTdGFydHMubGVuZ3RoO2Zvcig7cjxuOyl7bGV0IHM9cituPj4xO3RoaXMubGluZVN0YXJ0c1tzXTxlP3I9cysxOm49c31pZih0aGlzLmxpbmVTdGFydHNbcl09PT1lKXJldHVybntsaW5lOnIrMSxjb2w6MX07aWYocj09PTApcmV0dXJue2xpbmU6MCxjb2w6ZX07bGV0IGk9dGhpcy5saW5lU3RhcnRzW3ItMV07cmV0dXJue2xpbmU6cixjb2w6ZS1pKzF9fX19O2Z1bmN0aW9uIEFpKHQsZSl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDsrK3IpaWYodFtyXS50eXBlPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX1vKEFpLCJpbmNsdWRlc1Rva2VuIik7ZnVuY3Rpb24gX0ModCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDsrK2Upc3dpdGNoKHRbZV0udHlwZSl7Y2FzZSJzcGFjZSI6Y2FzZSJjb21tZW50IjpjYXNlIm5ld2xpbmUiOmJyZWFrO2RlZmF1bHQ6cmV0dXJuIGV9cmV0dXJuLTF9byhfQywiZmluZE5vbkVtcHR5SW5kZXgiKTtmdW5jdGlvbiBQQyh0KXtzd2l0Y2godD8udHlwZSl7Y2FzZSJhbGlhcyI6Y2FzZSJzY2FsYXIiOmNhc2Uic2luZ2xlLXF1b3RlZC1zY2FsYXIiOmNhc2UiZG91YmxlLXF1b3RlZC1zY2FsYXIiOmNhc2UiZmxvdy1jb2xsZWN0aW9uIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1vKFBDLCJpc0Zsb3dUb2tlbiIpO2Z1bmN0aW9uIGtkKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UiZG9jdW1lbnQiOnJldHVybiB0LnN0YXJ0O2Nhc2UiYmxvY2stbWFwIjp7bGV0IGU9dC5pdGVtc1t0Lml0ZW1zLmxlbmd0aC0xXTtyZXR1cm4gZS5zZXA/P2Uuc3RhcnR9Y2FzZSJibG9jay1zZXEiOnJldHVybiB0Lml0ZW1zW3QuaXRlbXMubGVuZ3RoLTFdLnN0YXJ0O2RlZmF1bHQ6cmV0dXJuW119fW8oa2QsImdldFByZXZQcm9wcyIpO2Z1bmN0aW9uIFBhKHQpe2lmKHQubGVuZ3RoPT09MClyZXR1cm5bXTtsZXQgZT10Lmxlbmd0aDtlOmZvcig7LS1lPj0wOylzd2l0Y2godFtlXS50eXBlKXtjYXNlImRvYy1zdGFydCI6Y2FzZSJleHBsaWNpdC1rZXktaW5kIjpjYXNlIm1hcC12YWx1ZS1pbmQiOmNhc2Uic2VxLWl0ZW0taW5kIjpjYXNlIm5ld2xpbmUiOmJyZWFrIGV9Zm9yKDt0WysrZV0/LnR5cGU9PT0ic3BhY2UiOyk7cmV0dXJuIHQuc3BsaWNlKGUsdC5sZW5ndGgpfW8oUGEsImdldEZpcnN0S2V5U3RhcnRQcm9wcyIpO2Z1bmN0aW9uIFNkKHQsZSl7aWYoZS5sZW5ndGg8MWU1KUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHQsZSk7ZWxzZSBmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goZVtyXSl9byhTZCwiYXJyYXlQdXNoQXJyYXkiKTtmdW5jdGlvbiBOQyh0KXtpZih0LnN0YXJ0LnR5cGU9PT0iZmxvdy1zZXEtc3RhcnQiKWZvcihsZXQgZSBvZiB0Lml0ZW1zKWUuc2VwJiYhZS52YWx1ZSYmIUFpKGUuc3RhcnQsImV4cGxpY2l0LWtleS1pbmQiKSYmIUFpKGUuc2VwLCJtYXAtdmFsdWUtaW5kIikmJihlLmtleSYmKGUudmFsdWU9ZS5rZXkpLGRlbGV0ZSBlLmtleSxQQyhlLnZhbHVlKT9lLnZhbHVlLmVuZD9TZChlLnZhbHVlLmVuZCxlLnNlcCk6ZS52YWx1ZS5lbmQ9ZS5zZXA6U2QoZS5zdGFydCxlLnNlcCksZGVsZXRlIGUuc2VwKX1vKE5DLCJmaXhGbG93U2VxSXRlbXMiKTt2YXIgWG49Y2xhc3N7c3RhdGlje28odGhpcywiUGFyc2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5hdE5ld0xpbmU9ITAsdGhpcy5hdFNjYWxhcj0hMSx0aGlzLmluZGVudD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5vbktleUxpbmU9ITEsdGhpcy5zdGFjaz1bXSx0aGlzLnNvdXJjZT0iIix0aGlzLnR5cGU9IiIsdGhpcy5sZXhlcj1uZXcgTGksdGhpcy5vbk5ld0xpbmU9ZX0qcGFyc2UoZSxyPSExKXt0aGlzLm9uTmV3TGluZSYmdGhpcy5vZmZzZXQ9PT0wJiZ0aGlzLm9uTmV3TGluZSgwKTtmb3IobGV0IG4gb2YgdGhpcy5sZXhlci5sZXgoZSxyKSl5aWVsZCp0aGlzLm5leHQobik7cnx8KHlpZWxkKnRoaXMuZW5kKCkpfSpuZXh0KGUpe2lmKHRoaXMuc291cmNlPWUsdGhpcy5hdFNjYWxhcil7dGhpcy5hdFNjYWxhcj0hMSx5aWVsZCp0aGlzLnN0ZXAoKSx0aGlzLm9mZnNldCs9ZS5sZW5ndGg7cmV0dXJufWxldCByPXdkKGUpO2lmKHIpaWYocj09PSJzY2FsYXIiKXRoaXMuYXROZXdMaW5lPSExLHRoaXMuYXRTY2FsYXI9ITAsdGhpcy50eXBlPSJzY2FsYXIiO2Vsc2V7c3dpdGNoKHRoaXMudHlwZT1yLHlpZWxkKnRoaXMuc3RlcCgpLHIpe2Nhc2UibmV3bGluZSI6dGhpcy5hdE5ld0xpbmU9ITAsdGhpcy5pbmRlbnQ9MCx0aGlzLm9uTmV3TGluZSYmdGhpcy5vbk5ld0xpbmUodGhpcy5vZmZzZXQrZS5sZW5ndGgpO2JyZWFrO2Nhc2Uic3BhY2UiOnRoaXMuYXROZXdMaW5lJiZlWzBdPT09IiAiJiYodGhpcy5pbmRlbnQrPWUubGVuZ3RoKTticmVhaztjYXNlImV4cGxpY2l0LWtleS1pbmQiOmNhc2UibWFwLXZhbHVlLWluZCI6Y2FzZSJzZXEtaXRlbS1pbmQiOnRoaXMuYXROZXdMaW5lJiYodGhpcy5pbmRlbnQrPWUubGVuZ3RoKTticmVhaztjYXNlImRvYy1tb2RlIjpjYXNlImZsb3ctZXJyb3ItZW5kIjpyZXR1cm47ZGVmYXVsdDp0aGlzLmF0TmV3TGluZT0hMX10aGlzLm9mZnNldCs9ZS5sZW5ndGh9ZWxzZXtsZXQgbj1gTm90IGEgWUFNTCB0b2tlbjogJHtlfWA7eWllbGQqdGhpcy5wb3Aoe3R5cGU6ImVycm9yIixvZmZzZXQ6dGhpcy5vZmZzZXQsbWVzc2FnZTpuLHNvdXJjZTplfSksdGhpcy5vZmZzZXQrPWUubGVuZ3RofX0qZW5kKCl7Zm9yKDt0aGlzLnN0YWNrLmxlbmd0aD4wOyl5aWVsZCp0aGlzLnBvcCgpfWdldCBzb3VyY2VUb2tlbigpe3JldHVybnt0eXBlOnRoaXMudHlwZSxvZmZzZXQ6dGhpcy5vZmZzZXQsaW5kZW50OnRoaXMuaW5kZW50LHNvdXJjZTp0aGlzLnNvdXJjZX19KnN0ZXAoKXtsZXQgZT10aGlzLnBlZWsoMSk7aWYodGhpcy50eXBlPT09ImRvYy1lbmQiJiZlPy50eXBlIT09ImRvYy1lbmQiKXtmb3IoO3RoaXMuc3RhY2subGVuZ3RoPjA7KXlpZWxkKnRoaXMucG9wKCk7dGhpcy5zdGFjay5wdXNoKHt0eXBlOiJkb2MtZW5kIixvZmZzZXQ6dGhpcy5vZmZzZXQsc291cmNlOnRoaXMuc291cmNlfSk7cmV0dXJufWlmKCFlKXJldHVybiB5aWVsZCp0aGlzLnN0cmVhbSgpO3N3aXRjaChlLnR5cGUpe2Nhc2UiZG9jdW1lbnQiOnJldHVybiB5aWVsZCp0aGlzLmRvY3VtZW50KGUpO2Nhc2UiYWxpYXMiOmNhc2Uic2NhbGFyIjpjYXNlInNpbmdsZS1xdW90ZWQtc2NhbGFyIjpjYXNlImRvdWJsZS1xdW90ZWQtc2NhbGFyIjpyZXR1cm4geWllbGQqdGhpcy5zY2FsYXIoZSk7Y2FzZSJibG9jay1zY2FsYXIiOnJldHVybiB5aWVsZCp0aGlzLmJsb2NrU2NhbGFyKGUpO2Nhc2UiYmxvY2stbWFwIjpyZXR1cm4geWllbGQqdGhpcy5ibG9ja01hcChlKTtjYXNlImJsb2NrLXNlcSI6cmV0dXJuIHlpZWxkKnRoaXMuYmxvY2tTZXF1ZW5jZShlKTtjYXNlImZsb3ctY29sbGVjdGlvbiI6cmV0dXJuIHlpZWxkKnRoaXMuZmxvd0NvbGxlY3Rpb24oZSk7Y2FzZSJkb2MtZW5kIjpyZXR1cm4geWllbGQqdGhpcy5kb2N1bWVudEVuZChlKX15aWVsZCp0aGlzLnBvcCgpfXBlZWsoZSl7cmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtZV19KnBvcChlKXtsZXQgcj1lPz90aGlzLnN0YWNrLnBvcCgpO2lmKCFyKXlpZWxke3R5cGU6ImVycm9yIixvZmZzZXQ6dGhpcy5vZmZzZXQsc291cmNlOiIiLG1lc3NhZ2U6IlRyaWVkIHRvIHBvcCBhbiBlbXB0eSBzdGFjayJ9O2Vsc2UgaWYodGhpcy5zdGFjay5sZW5ndGg9PT0wKXlpZWxkIHI7ZWxzZXtsZXQgbj10aGlzLnBlZWsoMSk7c3dpdGNoKHIudHlwZT09PSJibG9jay1zY2FsYXIiP3IuaW5kZW50PSJpbmRlbnQiaW4gbj9uLmluZGVudDowOnIudHlwZT09PSJmbG93LWNvbGxlY3Rpb24iJiZuLnR5cGU9PT0iZG9jdW1lbnQiJiYoci5pbmRlbnQ9MCksci50eXBlPT09ImZsb3ctY29sbGVjdGlvbiImJk5DKHIpLG4udHlwZSl7Y2FzZSJkb2N1bWVudCI6bi52YWx1ZT1yO2JyZWFrO2Nhc2UiYmxvY2stc2NhbGFyIjpuLnByb3BzLnB1c2gocik7YnJlYWs7Y2FzZSJibG9jay1tYXAiOntsZXQgaT1uLml0ZW1zW24uaXRlbXMubGVuZ3RoLTFdO2lmKGkudmFsdWUpe24uaXRlbXMucHVzaCh7c3RhcnQ6W10sa2V5OnIsc2VwOltdfSksdGhpcy5vbktleUxpbmU9ITA7cmV0dXJufWVsc2UgaWYoaS5zZXApaS52YWx1ZT1yO2Vsc2V7T2JqZWN0LmFzc2lnbihpLHtrZXk6cixzZXA6W119KSx0aGlzLm9uS2V5TGluZT0haS5leHBsaWNpdEtleTtyZXR1cm59YnJlYWt9Y2FzZSJibG9jay1zZXEiOntsZXQgaT1uLml0ZW1zW24uaXRlbXMubGVuZ3RoLTFdO2kudmFsdWU/bi5pdGVtcy5wdXNoKHtzdGFydDpbXSx2YWx1ZTpyfSk6aS52YWx1ZT1yO2JyZWFrfWNhc2UiZmxvdy1jb2xsZWN0aW9uIjp7bGV0IGk9bi5pdGVtc1tuLml0ZW1zLmxlbmd0aC0xXTshaXx8aS52YWx1ZT9uLml0ZW1zLnB1c2goe3N0YXJ0OltdLGtleTpyLHNlcDpbXX0pOmkuc2VwP2kudmFsdWU9cjpPYmplY3QuYXNzaWduKGkse2tleTpyLHNlcDpbXX0pO3JldHVybn1kZWZhdWx0OnlpZWxkKnRoaXMucG9wKCkseWllbGQqdGhpcy5wb3Aocil9aWYoKG4udHlwZT09PSJkb2N1bWVudCJ8fG4udHlwZT09PSJibG9jay1tYXAifHxuLnR5cGU9PT0iYmxvY2stc2VxIikmJihyLnR5cGU9PT0iYmxvY2stbWFwInx8ci50eXBlPT09ImJsb2NrLXNlcSIpKXtsZXQgaT1yLml0ZW1zW3IuaXRlbXMubGVuZ3RoLTFdO2kmJiFpLnNlcCYmIWkudmFsdWUmJmkuc3RhcnQubGVuZ3RoPjAmJl9DKGkuc3RhcnQpPT09LTEmJihyLmluZGVudD09PTB8fGkuc3RhcnQuZXZlcnkocz0+cy50eXBlIT09ImNvbW1lbnQifHxzLmluZGVudDxyLmluZGVudCkpJiYobi50eXBlPT09ImRvY3VtZW50Ij9uLmVuZD1pLnN0YXJ0Om4uaXRlbXMucHVzaCh7c3RhcnQ6aS5zdGFydH0pLHIuaXRlbXMuc3BsaWNlKC0xLDEpKX19fSpzdHJlYW0oKXtzd2l0Y2godGhpcy50eXBlKXtjYXNlImRpcmVjdGl2ZS1saW5lIjp5aWVsZHt0eXBlOiJkaXJlY3RpdmUiLG9mZnNldDp0aGlzLm9mZnNldCxzb3VyY2U6dGhpcy5zb3VyY2V9O3JldHVybjtjYXNlImJ5dGUtb3JkZXItbWFyayI6Y2FzZSJzcGFjZSI6Y2FzZSJjb21tZW50IjpjYXNlIm5ld2xpbmUiOnlpZWxkIHRoaXMuc291cmNlVG9rZW47cmV0dXJuO2Nhc2UiZG9jLW1vZGUiOmNhc2UiZG9jLXN0YXJ0Ijp7bGV0IGU9e3R5cGU6ImRvY3VtZW50IixvZmZzZXQ6dGhpcy5vZmZzZXQsc3RhcnQ6W119O3RoaXMudHlwZT09PSJkb2Mtc3RhcnQiJiZlLnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbiksdGhpcy5zdGFjay5wdXNoKGUpO3JldHVybn19eWllbGR7dHlwZToiZXJyb3IiLG9mZnNldDp0aGlzLm9mZnNldCxtZXNzYWdlOmBVbmV4cGVjdGVkICR7dGhpcy50eXBlfSB0b2tlbiBpbiBZQU1MIHN0cmVhbWAsc291cmNlOnRoaXMuc291cmNlfX0qZG9jdW1lbnQoZSl7aWYoZS52YWx1ZSlyZXR1cm4geWllbGQqdGhpcy5saW5lRW5kKGUpO3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2UiZG9jLXN0YXJ0Ijp7X0MoZS5zdGFydCkhPT0tMT8oeWllbGQqdGhpcy5wb3AoKSx5aWVsZCp0aGlzLnN0ZXAoKSk6ZS5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO3JldHVybn1jYXNlImFuY2hvciI6Y2FzZSJ0YWciOmNhc2Uic3BhY2UiOmNhc2UiY29tbWVudCI6Y2FzZSJuZXdsaW5lIjplLnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJufWxldCByPXRoaXMuc3RhcnRCbG9ja1ZhbHVlKGUpO3I/dGhpcy5zdGFjay5wdXNoKHIpOnlpZWxke3R5cGU6ImVycm9yIixvZmZzZXQ6dGhpcy5vZmZzZXQsbWVzc2FnZTpgVW5leHBlY3RlZCAke3RoaXMudHlwZX0gdG9rZW4gaW4gWUFNTCBkb2N1bWVudGAsc291cmNlOnRoaXMuc291cmNlfX0qc2NhbGFyKGUpe2lmKHRoaXMudHlwZT09PSJtYXAtdmFsdWUtaW5kIil7bGV0IHI9a2QodGhpcy5wZWVrKDIpKSxuPVBhKHIpLGk7ZS5lbmQ/KGk9ZS5lbmQsaS5wdXNoKHRoaXMuc291cmNlVG9rZW4pLGRlbGV0ZSBlLmVuZCk6aT1bdGhpcy5zb3VyY2VUb2tlbl07bGV0IHM9e3R5cGU6ImJsb2NrLW1hcCIsb2Zmc2V0OmUub2Zmc2V0LGluZGVudDplLmluZGVudCxpdGVtczpbe3N0YXJ0Om4sa2V5OmUsc2VwOml9XX07dGhpcy5vbktleUxpbmU9ITAsdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXT1zfWVsc2UgeWllbGQqdGhpcy5saW5lRW5kKGUpfSpibG9ja1NjYWxhcihlKXtzd2l0Y2godGhpcy50eXBlKXtjYXNlInNwYWNlIjpjYXNlImNvbW1lbnQiOmNhc2UibmV3bGluZSI6ZS5wcm9wcy5wdXNoKHRoaXMuc291cmNlVG9rZW4pO3JldHVybjtjYXNlInNjYWxhciI6aWYoZS5zb3VyY2U9dGhpcy5zb3VyY2UsdGhpcy5hdE5ld0xpbmU9ITAsdGhpcy5pbmRlbnQ9MCx0aGlzLm9uTmV3TGluZSl7bGV0IHI9dGhpcy5zb3VyY2UuaW5kZXhPZihgCmApKzE7Zm9yKDtyIT09MDspdGhpcy5vbk5ld0xpbmUodGhpcy5vZmZzZXQrcikscj10aGlzLnNvdXJjZS5pbmRleE9mKGAKYCxyKSsxfXlpZWxkKnRoaXMucG9wKCk7YnJlYWs7ZGVmYXVsdDp5aWVsZCp0aGlzLnBvcCgpLHlpZWxkKnRoaXMuc3RlcCgpfX0qYmxvY2tNYXAoZSl7bGV0IHI9ZS5pdGVtc1tlLml0ZW1zLmxlbmd0aC0xXTtzd2l0Y2godGhpcy50eXBlKXtjYXNlIm5ld2xpbmUiOmlmKHRoaXMub25LZXlMaW5lPSExLHIudmFsdWUpe2xldCBuPSJlbmQiaW4gci52YWx1ZT9yLnZhbHVlLmVuZDp2b2lkIDA7KEFycmF5LmlzQXJyYXkobik/bltuLmxlbmd0aC0xXTp2b2lkIDApPy50eXBlPT09ImNvbW1lbnQiP24/LnB1c2godGhpcy5zb3VyY2VUb2tlbik6ZS5pdGVtcy5wdXNoKHtzdGFydDpbdGhpcy5zb3VyY2VUb2tlbl19KX1lbHNlIHIuc2VwP3Iuc2VwLnB1c2godGhpcy5zb3VyY2VUb2tlbik6ci5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO3JldHVybjtjYXNlInNwYWNlIjpjYXNlImNvbW1lbnQiOmlmKHIudmFsdWUpZS5pdGVtcy5wdXNoKHtzdGFydDpbdGhpcy5zb3VyY2VUb2tlbl19KTtlbHNlIGlmKHIuc2VwKXIuc2VwLnB1c2godGhpcy5zb3VyY2VUb2tlbik7ZWxzZXtpZih0aGlzLmF0SW5kZW50ZWRDb21tZW50KHIuc3RhcnQsZS5pbmRlbnQpKXtsZXQgaT1lLml0ZW1zW2UuaXRlbXMubGVuZ3RoLTJdPy52YWx1ZT8uZW5kO2lmKEFycmF5LmlzQXJyYXkoaSkpe1NkKGksci5zdGFydCksaS5wdXNoKHRoaXMuc291cmNlVG9rZW4pLGUuaXRlbXMucG9wKCk7cmV0dXJufX1yLnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbil9cmV0dXJufWlmKHRoaXMuaW5kZW50Pj1lLmluZGVudCl7bGV0IG49IXRoaXMub25LZXlMaW5lJiZ0aGlzLmluZGVudD09PWUuaW5kZW50LGk9biYmKHIuc2VwfHxyLmV4cGxpY2l0S2V5KSYmdGhpcy50eXBlIT09InNlcS1pdGVtLWluZCIscz1bXTtpZihpJiZyLnNlcCYmIXIudmFsdWUpe2xldCBhPVtdO2ZvcihsZXQgbD0wO2w8ci5zZXAubGVuZ3RoOysrbCl7bGV0IGM9ci5zZXBbbF07c3dpdGNoKGMudHlwZSl7Y2FzZSJuZXdsaW5lIjphLnB1c2gobCk7YnJlYWs7Y2FzZSJzcGFjZSI6YnJlYWs7Y2FzZSJjb21tZW50IjpjLmluZGVudD5lLmluZGVudCYmKGEubGVuZ3RoPTApO2JyZWFrO2RlZmF1bHQ6YS5sZW5ndGg9MH19YS5sZW5ndGg+PTImJihzPXIuc2VwLnNwbGljZShhWzFdKSl9c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSJhbmNob3IiOmNhc2UidGFnIjppfHxyLnZhbHVlPyhzLnB1c2godGhpcy5zb3VyY2VUb2tlbiksZS5pdGVtcy5wdXNoKHtzdGFydDpzfSksdGhpcy5vbktleUxpbmU9ITApOnIuc2VwP3Iuc2VwLnB1c2godGhpcy5zb3VyY2VUb2tlbik6ci5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO3JldHVybjtjYXNlImV4cGxpY2l0LWtleS1pbmQiOiFyLnNlcCYmIXIuZXhwbGljaXRLZXk/KHIuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKSxyLmV4cGxpY2l0S2V5PSEwKTppfHxyLnZhbHVlPyhzLnB1c2godGhpcy5zb3VyY2VUb2tlbiksZS5pdGVtcy5wdXNoKHtzdGFydDpzLGV4cGxpY2l0S2V5OiEwfSkpOnRoaXMuc3RhY2sucHVzaCh7dHlwZToiYmxvY2stbWFwIixvZmZzZXQ6dGhpcy5vZmZzZXQsaW5kZW50OnRoaXMuaW5kZW50LGl0ZW1zOlt7c3RhcnQ6W3RoaXMuc291cmNlVG9rZW5dLGV4cGxpY2l0S2V5OiEwfV19KSx0aGlzLm9uS2V5TGluZT0hMDtyZXR1cm47Y2FzZSJtYXAtdmFsdWUtaW5kIjppZihyLmV4cGxpY2l0S2V5KWlmKHIuc2VwKWlmKHIudmFsdWUpZS5pdGVtcy5wdXNoKHtzdGFydDpbXSxrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfSk7ZWxzZSBpZihBaShyLnNlcCwibWFwLXZhbHVlLWluZCIpKXRoaXMuc3RhY2sucHVzaCh7dHlwZToiYmxvY2stbWFwIixvZmZzZXQ6dGhpcy5vZmZzZXQsaW5kZW50OnRoaXMuaW5kZW50LGl0ZW1zOlt7c3RhcnQ6cyxrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfV19KTtlbHNlIGlmKFBDKHIua2V5KSYmIUFpKHIuc2VwLCJuZXdsaW5lIikpe2xldCBhPVBhKHIuc3RhcnQpLGw9ci5rZXksYz1yLnNlcDtjLnB1c2godGhpcy5zb3VyY2VUb2tlbiksZGVsZXRlIHIua2V5LGRlbGV0ZSByLnNlcCx0aGlzLnN0YWNrLnB1c2goe3R5cGU6ImJsb2NrLW1hcCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxpdGVtczpbe3N0YXJ0OmEsa2V5Omwsc2VwOmN9XX0pfWVsc2Ugcy5sZW5ndGg+MD9yLnNlcD1yLnNlcC5jb25jYXQocyx0aGlzLnNvdXJjZVRva2VuKTpyLnNlcC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO2Vsc2UgaWYoQWkoci5zdGFydCwibmV3bGluZSIpKU9iamVjdC5hc3NpZ24ocix7a2V5Om51bGwsc2VwOlt0aGlzLnNvdXJjZVRva2VuXX0pO2Vsc2V7bGV0IGE9UGEoci5zdGFydCk7dGhpcy5zdGFjay5wdXNoKHt0eXBlOiJibG9jay1tYXAiLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQsaXRlbXM6W3tzdGFydDphLGtleTpudWxsLHNlcDpbdGhpcy5zb3VyY2VUb2tlbl19XX0pfWVsc2Ugci5zZXA/ci52YWx1ZXx8aT9lLml0ZW1zLnB1c2goe3N0YXJ0OnMsa2V5Om51bGwsc2VwOlt0aGlzLnNvdXJjZVRva2VuXX0pOkFpKHIuc2VwLCJtYXAtdmFsdWUtaW5kIik/dGhpcy5zdGFjay5wdXNoKHt0eXBlOiJibG9jay1tYXAiLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQsaXRlbXM6W3tzdGFydDpbXSxrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfV19KTpyLnNlcC5wdXNoKHRoaXMuc291cmNlVG9rZW4pOk9iamVjdC5hc3NpZ24ocix7a2V5Om51bGwsc2VwOlt0aGlzLnNvdXJjZVRva2VuXX0pO3RoaXMub25LZXlMaW5lPSEwO3JldHVybjtjYXNlImFsaWFzIjpjYXNlInNjYWxhciI6Y2FzZSJzaW5nbGUtcXVvdGVkLXNjYWxhciI6Y2FzZSJkb3VibGUtcXVvdGVkLXNjYWxhciI6e2xldCBhPXRoaXMuZmxvd1NjYWxhcih0aGlzLnR5cGUpO2l8fHIudmFsdWU/KGUuaXRlbXMucHVzaCh7c3RhcnQ6cyxrZXk6YSxzZXA6W119KSx0aGlzLm9uS2V5TGluZT0hMCk6ci5zZXA/dGhpcy5zdGFjay5wdXNoKGEpOihPYmplY3QuYXNzaWduKHIse2tleTphLHNlcDpbXX0pLHRoaXMub25LZXlMaW5lPSEwKTtyZXR1cm59ZGVmYXVsdDp7bGV0IGE9dGhpcy5zdGFydEJsb2NrVmFsdWUoZSk7aWYoYSl7aWYoYS50eXBlPT09ImJsb2NrLXNlcSIpe2lmKCFyLmV4cGxpY2l0S2V5JiZyLnNlcCYmIUFpKHIuc2VwLCJuZXdsaW5lIikpe3lpZWxkKnRoaXMucG9wKHt0eXBlOiJlcnJvciIsb2Zmc2V0OnRoaXMub2Zmc2V0LG1lc3NhZ2U6IlVuZXhwZWN0ZWQgYmxvY2stc2VxLWluZCBvbiBzYW1lIGxpbmUgd2l0aCBrZXkiLHNvdXJjZTp0aGlzLnNvdXJjZX0pO3JldHVybn19ZWxzZSBuJiZlLml0ZW1zLnB1c2goe3N0YXJ0OnN9KTt0aGlzLnN0YWNrLnB1c2goYSk7cmV0dXJufX19fXlpZWxkKnRoaXMucG9wKCkseWllbGQqdGhpcy5zdGVwKCl9KmJsb2NrU2VxdWVuY2UoZSl7bGV0IHI9ZS5pdGVtc1tlLml0ZW1zLmxlbmd0aC0xXTtzd2l0Y2godGhpcy50eXBlKXtjYXNlIm5ld2xpbmUiOmlmKHIudmFsdWUpe2xldCBuPSJlbmQiaW4gci52YWx1ZT9yLnZhbHVlLmVuZDp2b2lkIDA7KEFycmF5LmlzQXJyYXkobik/bltuLmxlbmd0aC0xXTp2b2lkIDApPy50eXBlPT09ImNvbW1lbnQiP24/LnB1c2godGhpcy5zb3VyY2VUb2tlbik6ZS5pdGVtcy5wdXNoKHtzdGFydDpbdGhpcy5zb3VyY2VUb2tlbl19KX1lbHNlIHIuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtyZXR1cm47Y2FzZSJzcGFjZSI6Y2FzZSJjb21tZW50IjppZihyLnZhbHVlKWUuaXRlbXMucHVzaCh7c3RhcnQ6W3RoaXMuc291cmNlVG9rZW5dfSk7ZWxzZXtpZih0aGlzLmF0SW5kZW50ZWRDb21tZW50KHIuc3RhcnQsZS5pbmRlbnQpKXtsZXQgaT1lLml0ZW1zW2UuaXRlbXMubGVuZ3RoLTJdPy52YWx1ZT8uZW5kO2lmKEFycmF5LmlzQXJyYXkoaSkpe1NkKGksci5zdGFydCksaS5wdXNoKHRoaXMuc291cmNlVG9rZW4pLGUuaXRlbXMucG9wKCk7cmV0dXJufX1yLnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbil9cmV0dXJuO2Nhc2UiYW5jaG9yIjpjYXNlInRhZyI6aWYoci52YWx1ZXx8dGhpcy5pbmRlbnQ8PWUuaW5kZW50KWJyZWFrO3Iuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtyZXR1cm47Y2FzZSJzZXEtaXRlbS1pbmQiOmlmKHRoaXMuaW5kZW50IT09ZS5pbmRlbnQpYnJlYWs7ci52YWx1ZXx8QWkoci5zdGFydCwic2VxLWl0ZW0taW5kIik/ZS5pdGVtcy5wdXNoKHtzdGFydDpbdGhpcy5zb3VyY2VUb2tlbl19KTpyLnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJufWlmKHRoaXMuaW5kZW50PmUuaW5kZW50KXtsZXQgbj10aGlzLnN0YXJ0QmxvY2tWYWx1ZShlKTtpZihuKXt0aGlzLnN0YWNrLnB1c2gobik7cmV0dXJufX15aWVsZCp0aGlzLnBvcCgpLHlpZWxkKnRoaXMuc3RlcCgpfSpmbG93Q29sbGVjdGlvbihlKXtsZXQgcj1lLml0ZW1zW2UuaXRlbXMubGVuZ3RoLTFdO2lmKHRoaXMudHlwZT09PSJmbG93LWVycm9yLWVuZCIpe2xldCBuO2RvIHlpZWxkKnRoaXMucG9wKCksbj10aGlzLnBlZWsoMSk7d2hpbGUobj8udHlwZT09PSJmbG93LWNvbGxlY3Rpb24iKX1lbHNlIGlmKGUuZW5kLmxlbmd0aD09PTApe3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2UiY29tbWEiOmNhc2UiZXhwbGljaXQta2V5LWluZCI6IXJ8fHIuc2VwP2UuaXRlbXMucHVzaCh7c3RhcnQ6W3RoaXMuc291cmNlVG9rZW5dfSk6ci5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO3JldHVybjtjYXNlIm1hcC12YWx1ZS1pbmQiOiFyfHxyLnZhbHVlP2UuaXRlbXMucHVzaCh7c3RhcnQ6W10sa2V5Om51bGwsc2VwOlt0aGlzLnNvdXJjZVRva2VuXX0pOnIuc2VwP3Iuc2VwLnB1c2godGhpcy5zb3VyY2VUb2tlbik6T2JqZWN0LmFzc2lnbihyLHtrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfSk7cmV0dXJuO2Nhc2Uic3BhY2UiOmNhc2UiY29tbWVudCI6Y2FzZSJuZXdsaW5lIjpjYXNlImFuY2hvciI6Y2FzZSJ0YWciOiFyfHxyLnZhbHVlP2UuaXRlbXMucHVzaCh7c3RhcnQ6W3RoaXMuc291cmNlVG9rZW5dfSk6ci5zZXA/ci5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTpyLnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJuO2Nhc2UiYWxpYXMiOmNhc2Uic2NhbGFyIjpjYXNlInNpbmdsZS1xdW90ZWQtc2NhbGFyIjpjYXNlImRvdWJsZS1xdW90ZWQtc2NhbGFyIjp7bGV0IGk9dGhpcy5mbG93U2NhbGFyKHRoaXMudHlwZSk7IXJ8fHIudmFsdWU/ZS5pdGVtcy5wdXNoKHtzdGFydDpbXSxrZXk6aSxzZXA6W119KTpyLnNlcD90aGlzLnN0YWNrLnB1c2goaSk6T2JqZWN0LmFzc2lnbihyLHtrZXk6aSxzZXA6W119KTtyZXR1cm59Y2FzZSJmbG93LW1hcC1lbmQiOmNhc2UiZmxvdy1zZXEtZW5kIjplLmVuZC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO3JldHVybn1sZXQgbj10aGlzLnN0YXJ0QmxvY2tWYWx1ZShlKTtuP3RoaXMuc3RhY2sucHVzaChuKTooeWllbGQqdGhpcy5wb3AoKSx5aWVsZCp0aGlzLnN0ZXAoKSl9ZWxzZXtsZXQgbj10aGlzLnBlZWsoMik7aWYobi50eXBlPT09ImJsb2NrLW1hcCImJih0aGlzLnR5cGU9PT0ibWFwLXZhbHVlLWluZCImJm4uaW5kZW50PT09ZS5pbmRlbnR8fHRoaXMudHlwZT09PSJuZXdsaW5lIiYmIW4uaXRlbXNbbi5pdGVtcy5sZW5ndGgtMV0uc2VwKSl5aWVsZCp0aGlzLnBvcCgpLHlpZWxkKnRoaXMuc3RlcCgpO2Vsc2UgaWYodGhpcy50eXBlPT09Im1hcC12YWx1ZS1pbmQiJiZuLnR5cGUhPT0iZmxvdy1jb2xsZWN0aW9uIil7bGV0IGk9a2Qobikscz1QYShpKTtOQyhlKTtsZXQgYT1lLmVuZC5zcGxpY2UoMSxlLmVuZC5sZW5ndGgpO2EucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtsZXQgbD17dHlwZToiYmxvY2stbWFwIixvZmZzZXQ6ZS5vZmZzZXQsaW5kZW50OmUuaW5kZW50LGl0ZW1zOlt7c3RhcnQ6cyxrZXk6ZSxzZXA6YX1dfTt0aGlzLm9uS2V5TGluZT0hMCx0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdPWx9ZWxzZSB5aWVsZCp0aGlzLmxpbmVFbmQoZSl9fWZsb3dTY2FsYXIoZSl7aWYodGhpcy5vbk5ld0xpbmUpe2xldCByPXRoaXMuc291cmNlLmluZGV4T2YoYApgKSsxO2Zvcig7ciE9PTA7KXRoaXMub25OZXdMaW5lKHRoaXMub2Zmc2V0K3IpLHI9dGhpcy5zb3VyY2UuaW5kZXhPZihgCmAscikrMX1yZXR1cm57dHlwZTplLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQsc291cmNlOnRoaXMuc291cmNlfX1zdGFydEJsb2NrVmFsdWUoZSl7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSJhbGlhcyI6Y2FzZSJzY2FsYXIiOmNhc2Uic2luZ2xlLXF1b3RlZC1zY2FsYXIiOmNhc2UiZG91YmxlLXF1b3RlZC1zY2FsYXIiOnJldHVybiB0aGlzLmZsb3dTY2FsYXIodGhpcy50eXBlKTtjYXNlImJsb2NrLXNjYWxhci1oZWFkZXIiOnJldHVybnt0eXBlOiJibG9jay1zY2FsYXIiLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQscHJvcHM6W3RoaXMuc291cmNlVG9rZW5dLHNvdXJjZToiIn07Y2FzZSJmbG93LW1hcC1zdGFydCI6Y2FzZSJmbG93LXNlcS1zdGFydCI6cmV0dXJue3R5cGU6ImZsb3ctY29sbGVjdGlvbiIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxzdGFydDp0aGlzLnNvdXJjZVRva2VuLGl0ZW1zOltdLGVuZDpbXX07Y2FzZSJzZXEtaXRlbS1pbmQiOnJldHVybnt0eXBlOiJibG9jay1zZXEiLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQsaXRlbXM6W3tzdGFydDpbdGhpcy5zb3VyY2VUb2tlbl19XX07Y2FzZSJleHBsaWNpdC1rZXktaW5kIjp7dGhpcy5vbktleUxpbmU9ITA7bGV0IHI9a2QoZSksbj1QYShyKTtyZXR1cm4gbi5wdXNoKHRoaXMuc291cmNlVG9rZW4pLHt0eXBlOiJibG9jay1tYXAiLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQsaXRlbXM6W3tzdGFydDpuLGV4cGxpY2l0S2V5OiEwfV19fWNhc2UibWFwLXZhbHVlLWluZCI6e3RoaXMub25LZXlMaW5lPSEwO2xldCByPWtkKGUpLG49UGEocik7cmV0dXJue3R5cGU6ImJsb2NrLW1hcCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxpdGVtczpbe3N0YXJ0Om4sa2V5Om51bGwsc2VwOlt0aGlzLnNvdXJjZVRva2VuXX1dfX19cmV0dXJuIG51bGx9YXRJbmRlbnRlZENvbW1lbnQoZSxyKXtyZXR1cm4gdGhpcy50eXBlIT09ImNvbW1lbnQifHx0aGlzLmluZGVudDw9cj8hMTplLmV2ZXJ5KG49Pm4udHlwZT09PSJuZXdsaW5lInx8bi50eXBlPT09InNwYWNlIil9KmRvY3VtZW50RW5kKGUpe3RoaXMudHlwZSE9PSJkb2MtbW9kZSImJihlLmVuZD9lLmVuZC5wdXNoKHRoaXMuc291cmNlVG9rZW4pOmUuZW5kPVt0aGlzLnNvdXJjZVRva2VuXSx0aGlzLnR5cGU9PT0ibmV3bGluZSImJih5aWVsZCp0aGlzLnBvcCgpKSl9KmxpbmVFbmQoZSl7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSJjb21tYSI6Y2FzZSJkb2Mtc3RhcnQiOmNhc2UiZG9jLWVuZCI6Y2FzZSJmbG93LXNlcS1lbmQiOmNhc2UiZmxvdy1tYXAtZW5kIjpjYXNlIm1hcC12YWx1ZS1pbmQiOnlpZWxkKnRoaXMucG9wKCkseWllbGQqdGhpcy5zdGVwKCk7YnJlYWs7Y2FzZSJuZXdsaW5lIjp0aGlzLm9uS2V5TGluZT0hMTtkZWZhdWx0OmUuZW5kP2UuZW5kLnB1c2godGhpcy5zb3VyY2VUb2tlbik6ZS5lbmQ9W3RoaXMuc291cmNlVG9rZW5dLHRoaXMudHlwZT09PSJuZXdsaW5lIiYmKHlpZWxkKnRoaXMucG9wKCkpfX19O2Z1bmN0aW9uIFJDKHQpe2xldCBlPXQucHJldHR5RXJyb3JzIT09ITE7cmV0dXJue2xpbmVDb3VudGVyOnQubGluZUNvdW50ZXJ8fGUmJm5ldyBGaXx8bnVsbCxwcmV0dHlFcnJvcnM6ZX19byhSQywicGFyc2VPcHRpb25zIik7ZnVuY3Rpb24gVGQodCxlPXt9KXtsZXR7bGluZUNvdW50ZXI6cixwcmV0dHlFcnJvcnM6bn09UkMoZSksaT1uZXcgWG4ocj8uYWRkTmV3TGluZSkscz1uZXcgSm4oZSksYT1BcnJheS5mcm9tKHMuY29tcG9zZShpLnBhcnNlKHQpKSk7aWYobiYmcilmb3IobGV0IGwgb2YgYSlsLmVycm9ycy5mb3JFYWNoKENhKHQscikpLGwud2FybmluZ3MuZm9yRWFjaChDYSh0LHIpKTtyZXR1cm4gYS5sZW5ndGg+MD9hOk9iamVjdC5hc3NpZ24oW10se2VtcHR5OiEwfSxzLnN0cmVhbUluZm8oKSl9byhUZCwicGFyc2VBbGxEb2N1bWVudHMiKTtmdW5jdGlvbiBJYyh0LGU9e30pe2xldHtsaW5lQ291bnRlcjpyLHByZXR0eUVycm9yczpufT1SQyhlKSxpPW5ldyBYbihyPy5hZGROZXdMaW5lKSxzPW5ldyBKbihlKSxhPW51bGw7Zm9yKGxldCBsIG9mIHMuY29tcG9zZShpLnBhcnNlKHQpLCEwLHQubGVuZ3RoKSlpZighYSlhPWw7ZWxzZSBpZihhLm9wdGlvbnMubG9nTGV2ZWwhPT0ic2lsZW50Iil7YS5lcnJvcnMucHVzaChuZXcgRnQobC5yYW5nZS5zbGljZSgwLDIpLCJNVUxUSVBMRV9ET0NTIiwiU291cmNlIGNvbnRhaW5zIG11bHRpcGxlIGRvY3VtZW50czsgcGxlYXNlIHVzZSBZQU1MLnBhcnNlQWxsRG9jdW1lbnRzKCkiKSk7YnJlYWt9cmV0dXJuIG4mJnImJihhLmVycm9ycy5mb3JFYWNoKENhKHQscikpLGEud2FybmluZ3MuZm9yRWFjaChDYSh0LHIpKSksYX1vKEljLCJwYXJzZURvY3VtZW50Iik7ZnVuY3Rpb24gRWQodCxlLHIpe2xldCBuO3R5cGVvZiBlPT0iZnVuY3Rpb24iP249ZTpyPT09dm9pZCAwJiZlJiZ0eXBlb2YgZT09Im9iamVjdCImJihyPWUpO2xldCBpPUljKHQscik7aWYoIWkpcmV0dXJuIG51bGw7aWYoaS53YXJuaW5ncy5mb3JFYWNoKHM9PmZjKGkub3B0aW9ucy5sb2dMZXZlbCxzKSksaS5lcnJvcnMubGVuZ3RoPjApe2lmKGkub3B0aW9ucy5sb2dMZXZlbCE9PSJzaWxlbnQiKXRocm93IGkuZXJyb3JzWzBdO2kuZXJyb3JzPVtdfXJldHVybiBpLnRvSlMoT2JqZWN0LmFzc2lnbih7cmV2aXZlcjpufSxyKSl9byhFZCwicGFyc2UiKTtmdW5jdGlvbiBEZCh0LGUscil7bGV0IG49bnVsbDtpZih0eXBlb2YgZT09ImZ1bmN0aW9uInx8QXJyYXkuaXNBcnJheShlKT9uPWU6cj09PXZvaWQgMCYmZSYmKHI9ZSksdHlwZW9mIHI9PSJzdHJpbmciJiYocj1yLmxlbmd0aCksdHlwZW9mIHI9PSJudW1iZXIiKXtsZXQgaT1NYXRoLnJvdW5kKHIpO3I9aTwxP3ZvaWQgMDppPjg/e2luZGVudDo4fTp7aW5kZW50Oml9fWlmKHQ9PT12b2lkIDApe2xldHtrZWVwVW5kZWZpbmVkOml9PXI/P2U/P3t9O2lmKCFpKXJldHVybn1yZXR1cm4gWXQodCkmJiFuP3QudG9TdHJpbmcocik6bmV3IENyKHQsbixyKS50b1N0cmluZyhyKX1vKERkLCJzdHJpbmdpZnkiKTt2YXIgZUI9Wng7dmFyIHJCPW8oYXN5bmMgdD0+SG8ucGFyc2UodCksInlhbWxTdHJpbmdUb09iamVjdCIpLG5CPW8oYXN5bmMgdD0+SG8uc3RyaW5naWZ5KHQpLCJvYmplY3RUb1lhbWxTdHJpbmciKSxpQj1vKGFzeW5jIHQ9PkhvLnBhcnNlRG9jdW1lbnQodCksImdldFlhbWxEb2NGcm9tU3RyaW5nIik7ZnVuY3Rpb24gZWIodCl7aWYodCl0aHJvdyB0fW8oZWIsImJhaWwiKTtmdW5jdGlvbiBfYyh0KXtpZih0eXBlb2YgdCE9Im9iamVjdCJ8fHQ9PT1udWxsKXJldHVybiExO2xldCBlPU9iamVjdC5nZXRQcm90b3R5cGVPZih0KTtyZXR1cm4oZT09PW51bGx8fGU9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdCkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIHQpfW8oX2MsImlzUGxhaW5PYmplY3QiKTtmdW5jdGlvbiB0Yigpe2xldCB0PVtdLGU9e3J1bjpyLHVzZTpufTtyZXR1cm4gZTtmdW5jdGlvbiByKC4uLmkpe2xldCBzPS0xLGE9aS5wb3AoKTtpZih0eXBlb2YgYSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBmdW5jdGlvbiBhcyBsYXN0IGFyZ3VtZW50LCBub3QgIithKTtsKG51bGwsLi4uaSk7ZnVuY3Rpb24gbChjLC4uLnUpe2xldCBmPXRbKytzXSxwPS0xO2lmKGMpe2EoYyk7cmV0dXJufWZvcig7KytwPGkubGVuZ3RoOykodVtwXT09PW51bGx8fHVbcF09PT12b2lkIDApJiYodVtwXT1pW3BdKTtpPXUsZj9xQyhmLGwpKC4uLnUpOmEobnVsbCwuLi51KX1vKGwsIm5leHQiKX1mdW5jdGlvbiBuKGkpe2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGBtaWRkZWx3YXJlYCB0byBiZSBhIGZ1bmN0aW9uLCBub3QgIitpKTtyZXR1cm4gdC5wdXNoKGkpLGV9fW8odGIsInRyb3VnaCIpO2Z1bmN0aW9uIHFDKHQsZSl7bGV0IHI7cmV0dXJuIG47ZnVuY3Rpb24gbiguLi5hKXtsZXQgbD10Lmxlbmd0aD5hLmxlbmd0aCxjO2wmJmEucHVzaChpKTt0cnl7Yz10LmFwcGx5KHRoaXMsYSl9Y2F0Y2godSl7bGV0IGY9dTtpZihsJiZyKXRocm93IGY7cmV0dXJuIGkoZil9bHx8KGMmJmMudGhlbiYmdHlwZW9mIGMudGhlbj09ImZ1bmN0aW9uIj9jLnRoZW4ocyxpKTpjIGluc3RhbmNlb2YgRXJyb3I/aShjKTpzKGMpKX1mdW5jdGlvbiBpKGEsLi4ubCl7cnx8KHI9ITAsZShhLC4uLmwpKX1mdW5jdGlvbiBzKGEpe2kobnVsbCxhKX19byhxQywid3JhcCIpO2Z1bmN0aW9uICRpKHQpe3JldHVybiF0fHx0eXBlb2YgdCE9Im9iamVjdCI/IiI6InBvc2l0aW9uImluIHR8fCJ0eXBlImluIHQ/VUModC5wb3NpdGlvbik6InN0YXJ0ImluIHR8fCJlbmQiaW4gdD9VQyh0KToibGluZSJpbiB0fHwiY29sdW1uImluIHQ/cmIodCk6IiJ9bygkaSwic3RyaW5naWZ5UG9zaXRpb24iKTtmdW5jdGlvbiByYih0KXtyZXR1cm4gVkModCYmdC5saW5lKSsiOiIrVkModCYmdC5jb2x1bW4pfW8ocmIsInBvaW50Iik7ZnVuY3Rpb24gVUModCl7cmV0dXJuIHJiKHQmJnQuc3RhcnQpKyItIityYih0JiZ0LmVuZCl9byhVQywicG9zaXRpb24iKTtmdW5jdGlvbiBWQyh0KXtyZXR1cm4gdCYmdHlwZW9mIHQ9PSJudW1iZXIiP3Q6MX1vKFZDLCJpbmRleCIpO3ZhciB5dD1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIlZGaWxlTWVzc2FnZSIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcigpLHR5cGVvZiByPT0ic3RyaW5nIiYmKG49cixyPXZvaWQgMCk7bGV0IGk9IiIscz17fSxhPSExO2lmKHImJigibGluZSJpbiByJiYiY29sdW1uImluIHI/cz17cGxhY2U6cn06InN0YXJ0ImluIHImJiJlbmQiaW4gcj9zPXtwbGFjZTpyfToidHlwZSJpbiByP3M9e2FuY2VzdG9yczpbcl0scGxhY2U6ci5wb3NpdGlvbn06cz17Li4ucn0pLHR5cGVvZiBlPT0ic3RyaW5nIj9pPWU6IXMuY2F1c2UmJmUmJihhPSEwLGk9ZS5tZXNzYWdlLHMuY2F1c2U9ZSksIXMucnVsZUlkJiYhcy5zb3VyY2UmJnR5cGVvZiBuPT0ic3RyaW5nIil7bGV0IGM9bi5pbmRleE9mKCI6Iik7Yz09PS0xP3MucnVsZUlkPW46KHMuc291cmNlPW4uc2xpY2UoMCxjKSxzLnJ1bGVJZD1uLnNsaWNlKGMrMSkpfWlmKCFzLnBsYWNlJiZzLmFuY2VzdG9ycyYmcy5hbmNlc3RvcnMpe2xldCBjPXMuYW5jZXN0b3JzW3MuYW5jZXN0b3JzLmxlbmd0aC0xXTtjJiYocy5wbGFjZT1jLnBvc2l0aW9uKX1sZXQgbD1zLnBsYWNlJiYic3RhcnQiaW4gcy5wbGFjZT9zLnBsYWNlLnN0YXJ0OnMucGxhY2U7dGhpcy5hbmNlc3RvcnM9cy5hbmNlc3RvcnN8fHZvaWQgMCx0aGlzLmNhdXNlPXMuY2F1c2V8fHZvaWQgMCx0aGlzLmNvbHVtbj1sP2wuY29sdW1uOnZvaWQgMCx0aGlzLmZhdGFsPXZvaWQgMCx0aGlzLmZpbGU9IiIsdGhpcy5tZXNzYWdlPWksdGhpcy5saW5lPWw/bC5saW5lOnZvaWQgMCx0aGlzLm5hbWU9JGkocy5wbGFjZSl8fCIxOjEiLHRoaXMucGxhY2U9cy5wbGFjZXx8dm9pZCAwLHRoaXMucmVhc29uPXRoaXMubWVzc2FnZSx0aGlzLnJ1bGVJZD1zLnJ1bGVJZHx8dm9pZCAwLHRoaXMuc291cmNlPXMuc291cmNlfHx2b2lkIDAsdGhpcy5zdGFjaz1hJiZzLmNhdXNlJiZ0eXBlb2Ygcy5jYXVzZS5zdGFjaz09InN0cmluZyI/cy5jYXVzZS5zdGFjazoiIix0aGlzLmFjdHVhbD12b2lkIDAsdGhpcy5leHBlY3RlZD12b2lkIDAsdGhpcy5ub3RlPXZvaWQgMCx0aGlzLnVybD12b2lkIDB9fTt5dC5wcm90b3R5cGUuZmlsZT0iIix5dC5wcm90b3R5cGUubmFtZT0iIix5dC5wcm90b3R5cGUucmVhc29uPSIiLHl0LnByb3RvdHlwZS5tZXNzYWdlPSIiLHl0LnByb3RvdHlwZS5zdGFjaz0iIix5dC5wcm90b3R5cGUuY29sdW1uPXZvaWQgMCx5dC5wcm90b3R5cGUubGluZT12b2lkIDAseXQucHJvdG90eXBlLmFuY2VzdG9ycz12b2lkIDAseXQucHJvdG90eXBlLmNhdXNlPXZvaWQgMCx5dC5wcm90b3R5cGUuZmF0YWw9dm9pZCAwLHl0LnByb3RvdHlwZS5wbGFjZT12b2lkIDAseXQucHJvdG90eXBlLnJ1bGVJZD12b2lkIDAseXQucHJvdG90eXBlLnNvdXJjZT12b2lkIDA7dmFyIFVyPXtiYXNlbmFtZTpvQixkaXJuYW1lOnNCLGV4dG5hbWU6YUIsam9pbjpsQixzZXA6Ii8ifTtmdW5jdGlvbiBvQih0LGUpe2lmKGUhPT12b2lkIDAmJnR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7UGModCk7bGV0IHI9MCxuPS0xLGk9dC5sZW5ndGgscztpZihlPT09dm9pZCAwfHxlLmxlbmd0aD09PTB8fGUubGVuZ3RoPnQubGVuZ3RoKXtmb3IoO2ktLTspaWYodC5jb2RlUG9pbnRBdChpKT09PTQ3KXtpZihzKXtyPWkrMTticmVha319ZWxzZSBuPDAmJihzPSEwLG49aSsxKTtyZXR1cm4gbjwwPyIiOnQuc2xpY2UocixuKX1pZihlPT09dClyZXR1cm4iIjtsZXQgYT0tMSxsPWUubGVuZ3RoLTE7Zm9yKDtpLS07KWlmKHQuY29kZVBvaW50QXQoaSk9PT00Nyl7aWYocyl7cj1pKzE7YnJlYWt9fWVsc2UgYTwwJiYocz0hMCxhPWkrMSksbD4tMSYmKHQuY29kZVBvaW50QXQoaSk9PT1lLmNvZGVQb2ludEF0KGwtLSk/bDwwJiYobj1pKToobD0tMSxuPWEpKTtyZXR1cm4gcj09PW4/bj1hOm48MCYmKG49dC5sZW5ndGgpLHQuc2xpY2UocixuKX1vKG9CLCJiYXNlbmFtZSIpO2Z1bmN0aW9uIHNCKHQpe2lmKFBjKHQpLHQubGVuZ3RoPT09MClyZXR1cm4iLiI7bGV0IGU9LTEscj10Lmxlbmd0aCxuO2Zvcig7LS1yOylpZih0LmNvZGVQb2ludEF0KHIpPT09NDcpe2lmKG4pe2U9cjticmVha319ZWxzZSBufHwobj0hMCk7cmV0dXJuIGU8MD90LmNvZGVQb2ludEF0KDApPT09NDc/Ii8iOiIuIjplPT09MSYmdC5jb2RlUG9pbnRBdCgwKT09PTQ3PyIvLyI6dC5zbGljZSgwLGUpfW8oc0IsImRpcm5hbWUiKTtmdW5jdGlvbiBhQih0KXtQYyh0KTtsZXQgZT10Lmxlbmd0aCxyPS0xLG49MCxpPS0xLHM9MCxhO2Zvcig7ZS0tOyl7bGV0IGw9dC5jb2RlUG9pbnRBdChlKTtpZihsPT09NDcpe2lmKGEpe249ZSsxO2JyZWFrfWNvbnRpbnVlfXI8MCYmKGE9ITAscj1lKzEpLGw9PT00Nj9pPDA/aT1lOnMhPT0xJiYocz0xKTppPi0xJiYocz0tMSl9cmV0dXJuIGk8MHx8cjwwfHxzPT09MHx8cz09PTEmJmk9PT1yLTEmJmk9PT1uKzE/IiI6dC5zbGljZShpLHIpfW8oYUIsImV4dG5hbWUiKTtmdW5jdGlvbiBsQiguLi50KXtsZXQgZT0tMSxyO2Zvcig7KytlPHQubGVuZ3RoOylQYyh0W2VdKSx0W2VdJiYocj1yPT09dm9pZCAwP3RbZV06cisiLyIrdFtlXSk7cmV0dXJuIHI9PT12b2lkIDA/Ii4iOmNCKHIpfW8obEIsImpvaW4iKTtmdW5jdGlvbiBjQih0KXtQYyh0KTtsZXQgZT10LmNvZGVQb2ludEF0KDApPT09NDcscj11Qih0LCFlKTtyZXR1cm4gci5sZW5ndGg9PT0wJiYhZSYmKHI9Ii4iKSxyLmxlbmd0aD4wJiZ0LmNvZGVQb2ludEF0KHQubGVuZ3RoLTEpPT09NDcmJihyKz0iLyIpLGU/Ii8iK3I6cn1vKGNCLCJub3JtYWxpemUiKTtmdW5jdGlvbiB1Qih0LGUpe2xldCByPSIiLG49MCxpPS0xLHM9MCxhPS0xLGwsYztmb3IoOysrYTw9dC5sZW5ndGg7KXtpZihhPHQubGVuZ3RoKWw9dC5jb2RlUG9pbnRBdChhKTtlbHNle2lmKGw9PT00NylicmVhaztsPTQ3fWlmKGw9PT00Nyl7aWYoIShpPT09YS0xfHxzPT09MSkpaWYoaSE9PWEtMSYmcz09PTIpe2lmKHIubGVuZ3RoPDJ8fG4hPT0yfHxyLmNvZGVQb2ludEF0KHIubGVuZ3RoLTEpIT09NDZ8fHIuY29kZVBvaW50QXQoci5sZW5ndGgtMikhPT00Nil7aWYoci5sZW5ndGg+Mil7aWYoYz1yLmxhc3RJbmRleE9mKCIvIiksYyE9PXIubGVuZ3RoLTEpe2M8MD8ocj0iIixuPTApOihyPXIuc2xpY2UoMCxjKSxuPXIubGVuZ3RoLTEtci5sYXN0SW5kZXhPZigiLyIpKSxpPWEscz0wO2NvbnRpbnVlfX1lbHNlIGlmKHIubGVuZ3RoPjApe3I9IiIsbj0wLGk9YSxzPTA7Y29udGludWV9fWUmJihyPXIubGVuZ3RoPjA/cisiLy4uIjoiLi4iLG49Mil9ZWxzZSByLmxlbmd0aD4wP3IrPSIvIit0LnNsaWNlKGkrMSxhKTpyPXQuc2xpY2UoaSsxLGEpLG49YS1pLTE7aT1hLHM9MH1lbHNlIGw9PT00NiYmcz4tMT9zKys6cz0tMX1yZXR1cm4gcn1vKHVCLCJub3JtYWxpemVTdHJpbmciKTtmdW5jdGlvbiBQYyh0KXtpZih0eXBlb2YgdCE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KHQpKX1vKFBjLCJhc3NlcnRQYXRoIik7dmFyIFlDPXtjd2Q6ZkJ9O2Z1bmN0aW9uIGZCKCl7cmV0dXJuIi8ifW8oZkIsImN3ZCIpO2Z1bmN0aW9uIFJhKHQpe3JldHVybiEhKHQhPT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCImJiJocmVmImluIHQmJnQuaHJlZiYmInByb3RvY29sImluIHQmJnQucHJvdG9jb2wmJnQuYXV0aD09PXZvaWQgMCl9byhSYSwiaXNVcmwiKTtmdW5jdGlvbiBHQyh0KXtpZih0eXBlb2YgdD09InN0cmluZyIpdD1uZXcgVVJMKHQpO2Vsc2UgaWYoIVJhKHQpKXtsZXQgZT1uZXcgVHlwZUVycm9yKCdUaGUgInBhdGgiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgVVJMLiBSZWNlaXZlZCBgJyt0KyJgIik7dGhyb3cgZS5jb2RlPSJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZX1pZih0LnByb3RvY29sIT09ImZpbGU6Iil7bGV0IGU9bmV3IFR5cGVFcnJvcigiVGhlIFVSTCBtdXN0IGJlIG9mIHNjaGVtZSBmaWxlIik7dGhyb3cgZS5jb2RlPSJFUlJfSU5WQUxJRF9VUkxfU0NIRU1FIixlfXJldHVybiBwQih0KX1vKEdDLCJ1cmxUb1BhdGgiKTtmdW5jdGlvbiBwQih0KXtpZih0Lmhvc3RuYW1lIT09IiIpe2xldCBuPW5ldyBUeXBlRXJyb3IoJ0ZpbGUgVVJMIGhvc3QgbXVzdCBiZSAibG9jYWxob3N0IiBvciBlbXB0eSBvbiBkYXJ3aW4nKTt0aHJvdyBuLmNvZGU9IkVSUl9JTlZBTElEX0ZJTEVfVVJMX0hPU1QiLG59bGV0IGU9dC5wYXRobmFtZSxyPS0xO2Zvcig7KytyPGUubGVuZ3RoOylpZihlLmNvZGVQb2ludEF0KHIpPT09MzcmJmUuY29kZVBvaW50QXQocisxKT09PTUwKXtsZXQgbj1lLmNvZGVQb2ludEF0KHIrMik7aWYobj09PTcwfHxuPT09MTAyKXtsZXQgaT1uZXcgVHlwZUVycm9yKCJGaWxlIFVSTCBwYXRoIG11c3Qgbm90IGluY2x1ZGUgZW5jb2RlZCAvIGNoYXJhY3RlcnMiKTt0aHJvdyBpLmNvZGU9IkVSUl9JTlZBTElEX0ZJTEVfVVJMX1BBVEgiLGl9fXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9byhwQiwiZ2V0UGF0aEZyb21VUkxQb3NpeCIpO3ZhciBuYj1bImhpc3RvcnkiLCJwYXRoIiwiYmFzZW5hbWUiLCJzdGVtIiwiZXh0bmFtZSIsImRpcm5hbWUiXSxOYz1jbGFzc3tzdGF0aWN7byh0aGlzLCJWRmlsZSIpfWNvbnN0cnVjdG9yKGUpe2xldCByO2U/UmEoZSk/cj17cGF0aDplfTp0eXBlb2YgZT09InN0cmluZyJ8fGhCKGUpP3I9e3ZhbHVlOmV9OnI9ZTpyPXt9LHRoaXMuY3dkPSJjd2QiaW4gcj8iIjpZQy5jd2QoKSx0aGlzLmRhdGE9e30sdGhpcy5oaXN0b3J5PVtdLHRoaXMubWVzc2FnZXM9W10sdGhpcy52YWx1ZSx0aGlzLm1hcCx0aGlzLnJlc3VsdCx0aGlzLnN0b3JlZDtsZXQgbj0tMTtmb3IoOysrbjxuYi5sZW5ndGg7KXtsZXQgcz1uYltuXTtzIGluIHImJnJbc10hPT12b2lkIDAmJnJbc10hPT1udWxsJiYodGhpc1tzXT1zPT09Imhpc3RvcnkiP1suLi5yW3NdXTpyW3NdKX1sZXQgaTtmb3IoaSBpbiByKW5iLmluY2x1ZGVzKGkpfHwodGhpc1tpXT1yW2ldKX1nZXQgYmFzZW5hbWUoKXtyZXR1cm4gdHlwZW9mIHRoaXMucGF0aD09InN0cmluZyI/VXIuYmFzZW5hbWUodGhpcy5wYXRoKTp2b2lkIDB9c2V0IGJhc2VuYW1lKGUpe29iKGUsImJhc2VuYW1lIiksaWIoZSwiYmFzZW5hbWUiKSx0aGlzLnBhdGg9VXIuam9pbih0aGlzLmRpcm5hbWV8fCIiLGUpfWdldCBkaXJuYW1lKCl7cmV0dXJuIHR5cGVvZiB0aGlzLnBhdGg9PSJzdHJpbmciP1VyLmRpcm5hbWUodGhpcy5wYXRoKTp2b2lkIDB9c2V0IGRpcm5hbWUoZSl7UUModGhpcy5iYXNlbmFtZSwiZGlybmFtZSIpLHRoaXMucGF0aD1Vci5qb2luKGV8fCIiLHRoaXMuYmFzZW5hbWUpfWdldCBleHRuYW1lKCl7cmV0dXJuIHR5cGVvZiB0aGlzLnBhdGg9PSJzdHJpbmciP1VyLmV4dG5hbWUodGhpcy5wYXRoKTp2b2lkIDB9c2V0IGV4dG5hbWUoZSl7aWYoaWIoZSwiZXh0bmFtZSIpLFFDKHRoaXMuZGlybmFtZSwiZXh0bmFtZSIpLGUpe2lmKGUuY29kZVBvaW50QXQoMCkhPT00Nil0aHJvdyBuZXcgRXJyb3IoImBleHRuYW1lYCBtdXN0IHN0YXJ0IHdpdGggYC5gIik7aWYoZS5pbmNsdWRlcygiLiIsMSkpdGhyb3cgbmV3IEVycm9yKCJgZXh0bmFtZWAgY2Fubm90IGNvbnRhaW4gbXVsdGlwbGUgZG90cyIpfXRoaXMucGF0aD1Vci5qb2luKHRoaXMuZGlybmFtZSx0aGlzLnN0ZW0rKGV8fCIiKSl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5oaXN0b3J5W3RoaXMuaGlzdG9yeS5sZW5ndGgtMV19c2V0IHBhdGgoZSl7UmEoZSkmJihlPUdDKGUpKSxvYihlLCJwYXRoIiksdGhpcy5wYXRoIT09ZSYmdGhpcy5oaXN0b3J5LnB1c2goZSl9Z2V0IHN0ZW0oKXtyZXR1cm4gdHlwZW9mIHRoaXMucGF0aD09InN0cmluZyI/VXIuYmFzZW5hbWUodGhpcy5wYXRoLHRoaXMuZXh0bmFtZSk6dm9pZCAwfXNldCBzdGVtKGUpe29iKGUsInN0ZW0iKSxpYihlLCJzdGVtIiksdGhpcy5wYXRoPVVyLmpvaW4odGhpcy5kaXJuYW1lfHwiIixlKyh0aGlzLmV4dG5hbWV8fCIiKSl9ZmFpbChlLHIsbil7bGV0IGk9dGhpcy5tZXNzYWdlKGUscixuKTt0aHJvdyBpLmZhdGFsPSEwLGl9aW5mbyhlLHIsbil7bGV0IGk9dGhpcy5tZXNzYWdlKGUscixuKTtyZXR1cm4gaS5mYXRhbD12b2lkIDAsaX1tZXNzYWdlKGUscixuKXtsZXQgaT1uZXcgeXQoZSxyLG4pO3JldHVybiB0aGlzLnBhdGgmJihpLm5hbWU9dGhpcy5wYXRoKyI6IitpLm5hbWUsaS5maWxlPXRoaXMucGF0aCksaS5mYXRhbD0hMSx0aGlzLm1lc3NhZ2VzLnB1c2goaSksaX10b1N0cmluZyhlKXtyZXR1cm4gdGhpcy52YWx1ZT09PXZvaWQgMD8iIjp0eXBlb2YgdGhpcy52YWx1ZT09InN0cmluZyI/dGhpcy52YWx1ZTpuZXcgVGV4dERlY29kZXIoZXx8dm9pZCAwKS5kZWNvZGUodGhpcy52YWx1ZSl9fTtmdW5jdGlvbiBpYih0LGUpe2lmKHQmJnQuaW5jbHVkZXMoVXIuc2VwKSl0aHJvdyBuZXcgRXJyb3IoImAiK2UrImAgY2Fubm90IGJlIGEgcGF0aDogZGlkIG5vdCBleHBlY3QgYCIrVXIuc2VwKyJgIil9byhpYiwiYXNzZXJ0UGFydCIpO2Z1bmN0aW9uIG9iKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJgIitlKyJgIGNhbm5vdCBiZSBlbXB0eSIpfW8ob2IsImFzc2VydE5vbkVtcHR5Iik7ZnVuY3Rpb24gUUModCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgYCIrZSsiYCByZXF1aXJlcyBgcGF0aGAgdG8gYmUgc2V0IHRvbyIpfW8oUUMsImFzc2VydFBhdGgiKTtmdW5jdGlvbiBoQih0KXtyZXR1cm4hISh0JiZ0eXBlb2YgdD09Im9iamVjdCImJiJieXRlTGVuZ3RoImluIHQmJiJieXRlT2Zmc2V0ImluIHQpfW8oaEIsImlzVWludDhBcnJheSIpO3ZhciBKQz1vKChmdW5jdGlvbih0KXtsZXQgbj10aGlzLmNvbnN0cnVjdG9yLnByb3RvdHlwZSxpPW5bdF0scz1vKGZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkocyxhcmd1bWVudHMpfSwiYXBwbHkiKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHMsbiksc30pLCJDYWxsYWJsZUluc3RhbmNlIik7dmFyIE9kPWRyKFdDKCksMSksZEI9e30uaGFzT3duUHJvcGVydHksc2I9Y2xhc3MgdCBleHRlbmRzIEpDe3N0YXRpY3tvKHRoaXMsIlByb2Nlc3NvciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoImNvcHkiKSx0aGlzLkNvbXBpbGVyPXZvaWQgMCx0aGlzLlBhcnNlcj12b2lkIDAsdGhpcy5hdHRhY2hlcnM9W10sdGhpcy5jb21waWxlcj12b2lkIDAsdGhpcy5mcmVlemVJbmRleD0tMSx0aGlzLmZyb3plbj12b2lkIDAsdGhpcy5uYW1lc3BhY2U9e30sdGhpcy5wYXJzZXI9dm9pZCAwLHRoaXMudHJhbnNmb3JtZXJzPXRiKCl9Y29weSgpe2xldCBlPW5ldyB0LHI9LTE7Zm9yKDsrK3I8dGhpcy5hdHRhY2hlcnMubGVuZ3RoOyl7bGV0IG49dGhpcy5hdHRhY2hlcnNbcl07ZS51c2UoLi4ubil9cmV0dXJuIGUuZGF0YSgoMCxPZC5kZWZhdWx0KSghMCx7fSx0aGlzLm5hbWVzcGFjZSkpLGV9ZGF0YShlLHIpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/YXJndW1lbnRzLmxlbmd0aD09PTI/KGNiKCJkYXRhIix0aGlzLmZyb3plbiksdGhpcy5uYW1lc3BhY2VbZV09cix0aGlzKTpkQi5jYWxsKHRoaXMubmFtZXNwYWNlLGUpJiZ0aGlzLm5hbWVzcGFjZVtlXXx8dm9pZCAwOmU/KGNiKCJkYXRhIix0aGlzLmZyb3plbiksdGhpcy5uYW1lc3BhY2U9ZSx0aGlzKTp0aGlzLm5hbWVzcGFjZX1mcmVlemUoKXtpZih0aGlzLmZyb3plbilyZXR1cm4gdGhpcztsZXQgZT10aGlzO2Zvcig7Kyt0aGlzLmZyZWV6ZUluZGV4PHRoaXMuYXR0YWNoZXJzLmxlbmd0aDspe2xldFtyLC4uLm5dPXRoaXMuYXR0YWNoZXJzW3RoaXMuZnJlZXplSW5kZXhdO2lmKG5bMF09PT0hMSljb250aW51ZTtuWzBdPT09ITAmJihuWzBdPXZvaWQgMCk7bGV0IGk9ci5jYWxsKGUsLi4ubik7dHlwZW9mIGk9PSJmdW5jdGlvbiImJnRoaXMudHJhbnNmb3JtZXJzLnVzZShpKX1yZXR1cm4gdGhpcy5mcm96ZW49ITAsdGhpcy5mcmVlemVJbmRleD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdGhpc31wYXJzZShlKXt0aGlzLmZyZWV6ZSgpO2xldCByPU1kKGUpLG49dGhpcy5wYXJzZXJ8fHRoaXMuUGFyc2VyO3JldHVybiBhYigicGFyc2UiLG4pLG4oU3RyaW5nKHIpLHIpfXByb2Nlc3MoZSxyKXtsZXQgbj10aGlzO3JldHVybiB0aGlzLmZyZWV6ZSgpLGFiKCJwcm9jZXNzIix0aGlzLnBhcnNlcnx8dGhpcy5QYXJzZXIpLGxiKCJwcm9jZXNzIix0aGlzLmNvbXBpbGVyfHx0aGlzLkNvbXBpbGVyKSxyP2kodm9pZCAwLHIpOm5ldyBQcm9taXNlKGkpO2Z1bmN0aW9uIGkocyxhKXtsZXQgbD1NZChlKSxjPW4ucGFyc2UobCk7bi5ydW4oYyxsLGZ1bmN0aW9uKGYscCxoKXtpZihmfHwhcHx8IWgpcmV0dXJuIHUoZik7bGV0IGQ9cCxtPW4uc3RyaW5naWZ5KGQsaCk7Z0IobSk/aC52YWx1ZT1tOmgucmVzdWx0PW0sdShmLGgpfSk7ZnVuY3Rpb24gdShmLHApe2Z8fCFwP2EoZik6cz9zKHApOnIodm9pZCAwLHApfW8odSwicmVhbERvbmUiKX1vKGksImV4ZWN1dG9yIil9cHJvY2Vzc1N5bmMoZSl7bGV0IHI9ITEsbjtyZXR1cm4gdGhpcy5mcmVlemUoKSxhYigicHJvY2Vzc1N5bmMiLHRoaXMucGFyc2VyfHx0aGlzLlBhcnNlciksbGIoInByb2Nlc3NTeW5jIix0aGlzLmNvbXBpbGVyfHx0aGlzLkNvbXBpbGVyKSx0aGlzLnByb2Nlc3MoZSxpKSxYQygicHJvY2Vzc1N5bmMiLCJwcm9jZXNzIixyKSxuO2Z1bmN0aW9uIGkocyxhKXtyPSEwLGViKHMpLG49YX1vKGksInJlYWxEb25lIil9cnVuKGUscixuKXtLQyhlKSx0aGlzLmZyZWV6ZSgpO2xldCBpPXRoaXMudHJhbnNmb3JtZXJzO3JldHVybiFuJiZ0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmKG49cixyPXZvaWQgMCksbj9zKHZvaWQgMCxuKTpuZXcgUHJvbWlzZShzKTtmdW5jdGlvbiBzKGEsbCl7bGV0IGM9TWQocik7aS5ydW4oZSxjLHUpO2Z1bmN0aW9uIHUoZixwLGgpe2xldCBkPXB8fGU7Zj9sKGYpOmE/YShkKTpuKHZvaWQgMCxkLGgpfW8odSwicmVhbERvbmUiKX1vKHMsImV4ZWN1dG9yIil9cnVuU3luYyhlLHIpe2xldCBuPSExLGk7cmV0dXJuIHRoaXMucnVuKGUscixzKSxYQygicnVuU3luYyIsInJ1biIsbiksaTtmdW5jdGlvbiBzKGEsbCl7ZWIoYSksaT1sLG49ITB9byhzLCJyZWFsRG9uZSIpfXN0cmluZ2lmeShlLHIpe3RoaXMuZnJlZXplKCk7bGV0IG49TWQociksaT10aGlzLmNvbXBpbGVyfHx0aGlzLkNvbXBpbGVyO3JldHVybiBsYigic3RyaW5naWZ5IixpKSxLQyhlKSxpKGUsbil9dXNlKGUsLi4ucil7bGV0IG49dGhpcy5hdHRhY2hlcnMsaT10aGlzLm5hbWVzcGFjZTtpZihjYigidXNlIix0aGlzLmZyb3plbiksZSE9bnVsbClpZih0eXBlb2YgZT09ImZ1bmN0aW9uIiljKGUscik7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpQXJyYXkuaXNBcnJheShlKT9sKGUpOmEoZSk7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCB1c2FibGUgdmFsdWUsIG5vdCBgIitlKyJgIik7cmV0dXJuIHRoaXM7ZnVuY3Rpb24gcyh1KXtpZih0eXBlb2YgdT09ImZ1bmN0aW9uIiljKHUsW10pO2Vsc2UgaWYodHlwZW9mIHU9PSJvYmplY3QiKWlmKEFycmF5LmlzQXJyYXkodSkpe2xldFtmLC4uLnBdPXU7YyhmLHApfWVsc2UgYSh1KTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIHVzYWJsZSB2YWx1ZSwgbm90IGAiK3UrImAiKX1mdW5jdGlvbiBhKHUpe2lmKCEoInBsdWdpbnMiaW4gdSkmJiEoInNldHRpbmdzImluIHUpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdXNhYmxlIHZhbHVlIGJ1dCByZWNlaXZlZCBhbiBlbXB0eSBwcmVzZXQsIHdoaWNoIGlzIHByb2JhYmx5IGEgbWlzdGFrZTogcHJlc2V0cyB0eXBpY2FsbHkgY29tZSB3aXRoIGBwbHVnaW5zYCBhbmQgc29tZXRpbWVzIHdpdGggYHNldHRpbmdzYCwgYnV0IHRoaXMgaGFzIG5laXRoZXIiKTtsKHUucGx1Z2lucyksdS5zZXR0aW5ncyYmKGkuc2V0dGluZ3M9KDAsT2QuZGVmYXVsdCkoITAsaS5zZXR0aW5ncyx1LnNldHRpbmdzKSl9ZnVuY3Rpb24gbCh1KXtsZXQgZj0tMTtpZih1IT1udWxsKWlmKEFycmF5LmlzQXJyYXkodSkpZm9yKDsrK2Y8dS5sZW5ndGg7KXtsZXQgcD11W2ZdO3MocCl9ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGxpc3Qgb2YgcGx1Z2lucywgbm90IGAiK3UrImAiKX1mdW5jdGlvbiBjKHUsZil7bGV0IHA9LTEsaD0tMTtmb3IoOysrcDxuLmxlbmd0aDspaWYobltwXVswXT09PXUpe2g9cDticmVha31pZihoPT09LTEpbi5wdXNoKFt1LC4uLmZdKTtlbHNlIGlmKGYubGVuZ3RoPjApe2xldFtkLC4uLm1dPWYsZz1uW2hdWzFdO19jKGcpJiZfYyhkKSYmKGQ9KDAsT2QuZGVmYXVsdCkoITAsZyxkKSksbltoXT1bdSxkLC4uLm1dfX19fSxSYz1uZXcgc2IoKS5mcmVlemUoKTtmdW5jdGlvbiBhYih0LGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBgIit0KyJgIHdpdGhvdXQgYHBhcnNlcmAiKX1vKGFiLCJhc3NlcnRQYXJzZXIiKTtmdW5jdGlvbiBsYih0LGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBgIit0KyJgIHdpdGhvdXQgYGNvbXBpbGVyYCIpfW8obGIsImFzc2VydENvbXBpbGVyIik7ZnVuY3Rpb24gY2IodCxlKXtpZihlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNhbGwgYCIrdCsiYCBvbiBhIGZyb3plbiBwcm9jZXNzb3IuXG5DcmVhdGUgYSBuZXcgcHJvY2Vzc29yIGZpcnN0LCBieSBjYWxsaW5nIGl0OiB1c2UgYHByb2Nlc3NvcigpYCBpbnN0ZWFkIG9mIGBwcm9jZXNzb3JgLiIpfW8oY2IsImFzc2VydFVuZnJvemVuIik7ZnVuY3Rpb24gS0ModCl7aWYoIV9jKHQpfHx0eXBlb2YgdC50eXBlIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBub2RlLCBnb3QgYCIrdCsiYCIpfW8oS0MsImFzc2VydE5vZGUiKTtmdW5jdGlvbiBYQyh0LGUscil7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJgIit0KyJgIGZpbmlzaGVkIGFzeW5jLiBVc2UgYCIrZSsiYCBpbnN0ZWFkIil9byhYQywiYXNzZXJ0RG9uZSIpO2Z1bmN0aW9uIE1kKHQpe3JldHVybiBtQih0KT90Om5ldyBOYyh0KX1vKE1kLCJ2ZmlsZSIpO2Z1bmN0aW9uIG1CKHQpe3JldHVybiEhKHQmJnR5cGVvZiB0PT0ib2JqZWN0IiYmIm1lc3NhZ2UiaW4gdCYmIm1lc3NhZ2VzImluIHQpfW8obUIsImxvb2tzTGlrZUFWRmlsZSIpO2Z1bmN0aW9uIGdCKHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyJ8fHlCKHQpfW8oZ0IsImxvb2tzTGlrZUFWYWx1ZSIpO2Z1bmN0aW9uIHlCKHQpe3JldHVybiEhKHQmJnR5cGVvZiB0PT0ib2JqZWN0IiYmImJ5dGVMZW5ndGgiaW4gdCYmImJ5dGVPZmZzZXQiaW4gdCl9byh5QiwiaXNVaW50OEFycmF5Iik7ZnVuY3Rpb24gWmUodCxlLHIsbil7bGV0IGk9dC5sZW5ndGgscz0wLGE7aWYoZTwwP2U9LWU+aT8wOmkrZTplPWU+aT9pOmUscj1yPjA/cjowLG4ubGVuZ3RoPDFlNClhPUFycmF5LmZyb20obiksYS51bnNoaWZ0KGUsciksdC5zcGxpY2UoLi4uYSk7ZWxzZSBmb3IociYmdC5zcGxpY2UoZSxyKTtzPG4ubGVuZ3RoOylhPW4uc2xpY2UocyxzKzFlNCksYS51bnNoaWZ0KGUsMCksdC5zcGxpY2UoLi4uYSkscys9MWU0LGUrPTFlNH1vKFplLCJzcGxpY2UiKTtmdW5jdGlvbiBudCh0LGUpe3JldHVybiB0Lmxlbmd0aD4wPyhaZSh0LHQubGVuZ3RoLDAsZSksdCk6ZX1vKG50LCJwdXNoIik7dmFyIHViPXt9Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIElkKHQpe2xldCBlPXt9LHI9LTE7Zm9yKDsrK3I8dC5sZW5ndGg7KXhCKGUsdFtyXSk7cmV0dXJuIGV9byhJZCwiY29tYmluZUV4dGVuc2lvbnMiKTtmdW5jdGlvbiB4Qih0LGUpe2xldCByO2ZvcihyIGluIGUpe2xldCBpPSh1Yi5jYWxsKHQscik/dFtyXTp2b2lkIDApfHwodFtyXT17fSkscz1lW3JdLGE7aWYocylmb3IoYSBpbiBzKXt1Yi5jYWxsKGksYSl8fChpW2FdPVtdKTtsZXQgbD1zW2FdO2JCKGlbYV0sQXJyYXkuaXNBcnJheShsKT9sOmw/W2xdOltdKX19fW8oeEIsInN5bnRheEV4dGVuc2lvbiIpO2Z1bmN0aW9uIGJCKHQsZSl7bGV0IHI9LTEsbj1bXTtmb3IoOysrcjxlLmxlbmd0aDspKGVbcl0uYWRkPT09ImFmdGVyIj90Om4pLnB1c2goZVtyXSk7WmUodCwwLDAsbil9byhiQiwiY29uc3RydWN0cyIpO2Z1bmN0aW9uIF9kKHQpe2xldCBlPXt9LHI9LTE7Zm9yKDsrK3I8dC5sZW5ndGg7KXdCKGUsdFtyXSk7cmV0dXJuIGV9byhfZCwiY29tYmluZUh0bWxFeHRlbnNpb25zIik7ZnVuY3Rpb24gd0IodCxlKXtsZXQgcjtmb3IociBpbiBlKXtsZXQgaT0odWIuY2FsbCh0LHIpP3Rbcl06dm9pZCAwKXx8KHRbcl09e30pLHM9ZVtyXSxhO2lmKHMpZm9yKGEgaW4gcylpW2FdPXNbYV19fW8od0IsImh0bWxFeHRlbnNpb24iKTtmdW5jdGlvbiBLZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bXHRcblxyIF0rL2csIiAiKS5yZXBsYWNlKC9eIHwgJC9nLCIiKS50b0xvd2VyQ2FzZSgpLnRvVXBwZXJDYXNlKCl9byhLZSwibm9ybWFsaXplSWRlbnRpZmllciIpO3ZhciBaQz17fS5oYXNPd25Qcm9wZXJ0eSxlTT0vXihodHRwcz98aXJjcz98bWFpbHRvfHhtcHApJC9pLHZCPS9eaHR0cHM/JC9pO2Z1bmN0aW9uIGZiKHQpe2xldCBlPXR8fHt9LHI9ITAsbj17fSxpPVtbXV0scz1bXSxhPVtdLGM9X2QoW3tlbnRlcjp7YmxvY2tRdW90ZTpILGNvZGVGZW5jZWQ6dWUsY29kZUZlbmNlZEZlbmNlSW5mbzp5LGNvZGVGZW5jZWRGZW5jZU1ldGE6eSxjb2RlSW5kZW50ZWQ6RWUsY29kZVRleHQ6UnQsY29udGVudDpRcixkZWZpbml0aW9uOkxlLGRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZzokdCxkZWZpbml0aW9uTGFiZWxTdHJpbmc6eSxkZWZpbml0aW9uVGl0bGVTdHJpbmc6eSxlbXBoYXNpczpVaSxodG1sRmxvdzpadCxodG1sVGV4dDpwcixpbWFnZTpCZSxsYWJlbDp5LGxpbms6ZXQsbGlzdEl0ZW1NYXJrZXI6YmUsbGlzdEl0ZW1WYWx1ZTpNLGxpc3RPcmRlcmVkOkYsbGlzdFVub3JkZXJlZDpVLHBhcmFncmFwaDpHLHJlZmVyZW5jZTp5LHJlc291cmNlOkMscmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzpPLHJlc291cmNlVGl0bGVTdHJpbmc6eSxzZXRleHRIZWFkaW5nOmZyLHN0cm9uZzpWaX0sZXhpdDp7YXR4SGVhZGluZzpZZSxhdHhIZWFkaW5nU2VxdWVuY2U6WHQsYXV0b2xpbmtFbWFpbDpRTyxhdXRvbGlua1Byb3RvY29sOkdPLGJsb2NrUXVvdGU6VyxjaGFyYWN0ZXJFc2NhcGVWYWx1ZTpxLGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsOnMwLGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWM6czAsY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWU6WU8sY29kZUZlbmNlZDpTLGNvZGVGZW5jZWRGZW5jZTp3ZSxjb2RlRmVuY2VkRmVuY2VJbmZvOncsY29kZUZlbmNlZEZlbmNlTWV0YTpBLGNvZGVGbG93VmFsdWU6ZmUsY29kZUluZGVudGVkOlMsY29kZVRleHQ6cmksY29kZVRleHREYXRhOnEsZGF0YTpxLGRlZmluaXRpb246X3IsZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOmZ0LGRlZmluaXRpb25MYWJlbFN0cmluZzpEZSxkZWZpbml0aW9uVGl0bGVTdHJpbmc6TnQsZW1waGFzaXM6UHIsaGFyZEJyZWFrRXNjYXBlOkNlLGhhcmRCcmVha1RyYWlsaW5nOkNlLGh0bWxGbG93OktyLGh0bWxGbG93RGF0YTpxLGh0bWxUZXh0OktyLGh0bWxUZXh0RGF0YTpxLGltYWdlOiRlLGxhYmVsOkQsbGFiZWxUZXh0Okt0LGxpbmVFbmRpbmc6b2UsbGluazokZSxsaXN0T3JkZXJlZDp6LGxpc3RVbm9yZGVyZWQ6SSxwYXJhZ3JhcGg6WCxyZWZlcmVuY2U6QSxyZWZlcmVuY2VTdHJpbmc6dixyZXNvdXJjZTpBLHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6QixyZXNvdXJjZVRpdGxlU3RyaW5nOnJlLHNldGV4dEhlYWRpbmc6TixzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlOkpyLHNldGV4dEhlYWRpbmdUZXh0OkJ0LHN0cm9uZzpVTyx0aGVtYXRpY0JyZWFrOlZPfX0sLi4uZS5odG1sRXh0ZW5zaW9uc3x8W11dKSx1PXtkZWZpbml0aW9uczpuLHRpZ2h0U3RhY2s6YX0sZj17YnVmZmVyOnksZW5jb2RlOkUsZ2V0RGF0YTpnLGxpbmVFbmRpbmdJZk5lZWRlZDpfLG9wdGlvbnM6ZSxyYXc6VCxyZXN1bWU6eCxzZXREYXRhOm0sdGFnOmt9LHA9ZS5kZWZhdWx0TGluZUVuZGluZztyZXR1cm4gaDtmdW5jdGlvbiBoKFYpe2xldCBuZT0tMSxrdD0wLE5yPVtdLFhyPVtdLF9uPVtdO2Zvcig7KytuZTxWLmxlbmd0aDspIXAmJihWW25lXVsxXS50eXBlPT09ImxpbmVFbmRpbmcifHxWW25lXVsxXS50eXBlPT09ImxpbmVFbmRpbmdCbGFuayIpJiYocD1WW25lXVsyXS5zbGljZVNlcmlhbGl6ZShWW25lXVsxXSkpLChWW25lXVsxXS50eXBlPT09Imxpc3RPcmRlcmVkInx8VltuZV1bMV0udHlwZT09PSJsaXN0VW5vcmRlcmVkIikmJihWW25lXVswXT09PSJlbnRlciI/TnIucHVzaChuZSk6ZChWLnNsaWNlKE5yLnBvcCgpLG5lKSkpLFZbbmVdWzFdLnR5cGU9PT0iZGVmaW5pdGlvbiImJihWW25lXVswXT09PSJlbnRlciI/KF9uPW50KF9uLFYuc2xpY2Uoa3QsbmUpKSxrdD1uZSk6KFhyPW50KFhyLFYuc2xpY2Uoa3QsbmUrMSkpLGt0PW5lKzEpKTtYcj1udChYcixfbiksWHI9bnQoWHIsVi5zbGljZShrdCkpLG5lPS0xO2xldCBacj1Ycjtmb3IoYy5lbnRlci5udWxsJiZjLmVudGVyLm51bGwuY2FsbChmKTsrK25lPFYubGVuZ3RoOyl7bGV0IGEwPWNbWnJbbmVdWzBdXSxsMD1acltuZV1bMV0udHlwZSxjMD1hMFtsMF07WkMuY2FsbChhMCxsMCkmJmMwJiZjMC5jYWxsKHtzbGljZVNlcmlhbGl6ZTpacltuZV1bMl0uc2xpY2VTZXJpYWxpemUsLi4uZn0sWnJbbmVdWzFdKX1yZXR1cm4gYy5leGl0Lm51bGwmJmMuZXhpdC5udWxsLmNhbGwoZiksaVswXS5qb2luKCIiKX1mdW5jdGlvbiBkKFYpe2xldCBuZT1WLmxlbmd0aCxrdD0wLE5yPTAsWHI9ITEsX247Zm9yKDsrK2t0PG5lOyl7bGV0IFpyPVZba3RdO2lmKFpyWzFdLl9jb250YWluZXIpX249dm9pZCAwLFpyWzBdPT09ImVudGVyIj9OcisrOk5yLS07ZWxzZSBzd2l0Y2goWnJbMV0udHlwZSl7Y2FzZSJsaXN0SXRlbVByZWZpeCI6e1pyWzBdPT09ImV4aXQiJiYoX249ITApO2JyZWFrfWNhc2UibGluZVByZWZpeCI6YnJlYWs7Y2FzZSJsaW5lRW5kaW5nQmxhbmsiOntaclswXT09PSJlbnRlciImJiFOciYmKF9uP19uPXZvaWQgMDpYcj0hMCk7YnJlYWt9ZGVmYXVsdDpfbj12b2lkIDB9fVZbMF1bMV0uX2xvb3NlPVhyfWZ1bmN0aW9uIG0oVixuZSl7dVtWXT1uZX1mdW5jdGlvbiBnKFYpe3JldHVybiB1W1ZdfWZ1bmN0aW9uIHkoKXtpLnB1c2goW10pfWZ1bmN0aW9uIHgoKXtyZXR1cm4gaS5wb3AoKS5qb2luKCIiKX1mdW5jdGlvbiBrKFYpe3ImJihtKCJsYXN0V2FzVGFnIiwhMCksaVtpLmxlbmd0aC0xXS5wdXNoKFYpKX1mdW5jdGlvbiBUKFYpe20oImxhc3RXYXNUYWciKSxpW2kubGVuZ3RoLTFdLnB1c2goVil9ZnVuY3Rpb24gUigpe1QocHx8YApgKX1mdW5jdGlvbiBfKCl7bGV0IFY9aVtpLmxlbmd0aC0xXSxuZT1WW1YubGVuZ3RoLTFdLGt0PW5lP25lLmNoYXJDb2RlQXQobmUubGVuZ3RoLTEpOm51bGw7a3Q9PT0xMHx8a3Q9PT0xM3x8a3Q9PT1udWxsfHxSKCl9ZnVuY3Rpb24gRShWKXtyZXR1cm4gZygiaWdub3JlRW5jb2RlIik/VjpPaChWKX1mdW5jdGlvbiBBKCl7eCgpfWZ1bmN0aW9uIEYoVil7YS5wdXNoKCFWLl9sb29zZSksXygpLGsoIjxvbCIpLG0oImV4cGVjdEZpcnN0SXRlbSIsITApfWZ1bmN0aW9uIFUoVil7YS5wdXNoKCFWLl9sb29zZSksXygpLGsoIjx1bCIpLG0oImV4cGVjdEZpcnN0SXRlbSIsITApfWZ1bmN0aW9uIE0oVil7aWYoZygiZXhwZWN0Rmlyc3RJdGVtIikpe2xldCBuZT1OdW1iZXIucGFyc2VJbnQodGhpcy5zbGljZVNlcmlhbGl6ZShWKSwxMCk7bmUhPT0xJiZrKCcgc3RhcnQ9IicrRShTdHJpbmcobmUpKSsnIicpfX1mdW5jdGlvbiBiZSgpe2coImV4cGVjdEZpcnN0SXRlbSIpP2soIj4iKTpMKCksXygpLGsoIjxsaT4iKSxtKCJleHBlY3RGaXJzdEl0ZW0iKSxtKCJsYXN0V2FzVGFnIil9ZnVuY3Rpb24geigpe0woKSxhLnBvcCgpLFIoKSxrKCI8L29sPiIpfWZ1bmN0aW9uIEkoKXtMKCksYS5wb3AoKSxSKCksaygiPC91bD4iKX1mdW5jdGlvbiBMKCl7ZygibGFzdFdhc1RhZyIpJiYhZygic2x1cnBBbGxMaW5lRW5kaW5ncyIpJiZfKCksaygiPC9saT4iKSxtKCJzbHVycEFsbExpbmVFbmRpbmdzIil9ZnVuY3Rpb24gSCgpe2EucHVzaCghMSksXygpLGsoIjxibG9ja3F1b3RlPiIpfWZ1bmN0aW9uIFcoKXthLnBvcCgpLF8oKSxrKCI8L2Jsb2NrcXVvdGU+IiksbSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpfWZ1bmN0aW9uIEcoKXthW2EubGVuZ3RoLTFdfHwoXygpLGsoIjxwPiIpKSxtKCJzbHVycEFsbExpbmVFbmRpbmdzIil9ZnVuY3Rpb24gWCgpe2FbYS5sZW5ndGgtMV0/bSgic2x1cnBBbGxMaW5lRW5kaW5ncyIsITApOmsoIjwvcD4iKX1mdW5jdGlvbiB1ZSgpe18oKSxrKCI8cHJlPjxjb2RlIiksbSgiZmVuY2VzQ291bnQiLDApfWZ1bmN0aW9uIHcoKXtsZXQgVj14KCk7aygnIGNsYXNzPSJsYW5ndWFnZS0nK1YrJyInKX1mdW5jdGlvbiB3ZSgpe2xldCBWPWcoImZlbmNlc0NvdW50Iil8fDA7Vnx8KGsoIj4iKSxtKCJzbHVycE9uZUxpbmVFbmRpbmciLCEwKSksbSgiZmVuY2VzQ291bnQiLFYrMSl9ZnVuY3Rpb24gRWUoKXtfKCksaygiPHByZT48Y29kZT4iKX1mdW5jdGlvbiBTKCl7bGV0IFY9ZygiZmVuY2VzQ291bnQiKTtWIT09dm9pZCAwJiZWPDImJnUudGlnaHRTdGFjay5sZW5ndGg+MCYmIWcoImxhc3RXYXNUYWciKSYmUigpLGcoImZsb3dDb2RlU2VlbkRhdGEiKSYmXygpLGsoIjwvY29kZT48L3ByZT4iKSxWIT09dm9pZCAwJiZWPDImJl8oKSxtKCJmbG93Q29kZVNlZW5EYXRhIiksbSgiZmVuY2VzQ291bnQiKSxtKCJzbHVycE9uZUxpbmVFbmRpbmciKX1mdW5jdGlvbiBCZSgpe3MucHVzaCh7aW1hZ2U6ITB9KSxyPXZvaWQgMH1mdW5jdGlvbiBldCgpe3MucHVzaCh7fSl9ZnVuY3Rpb24gS3QoVil7c1tzLmxlbmd0aC0xXS5sYWJlbElkPXRoaXMuc2xpY2VTZXJpYWxpemUoVil9ZnVuY3Rpb24gRCgpe3Nbcy5sZW5ndGgtMV0ubGFiZWw9eCgpfWZ1bmN0aW9uIHYoVil7c1tzLmxlbmd0aC0xXS5yZWZlcmVuY2VJZD10aGlzLnNsaWNlU2VyaWFsaXplKFYpfWZ1bmN0aW9uIEMoKXt5KCksc1tzLmxlbmd0aC0xXS5kZXN0aW5hdGlvbj0iIn1mdW5jdGlvbiBPKCl7eSgpLG0oImlnbm9yZUVuY29kZSIsITApfWZ1bmN0aW9uIEIoKXtzW3MubGVuZ3RoLTFdLmRlc3RpbmF0aW9uPXgoKSxtKCJpZ25vcmVFbmNvZGUiKX1mdW5jdGlvbiByZSgpe3Nbcy5sZW5ndGgtMV0udGl0bGU9eCgpfWZ1bmN0aW9uICRlKCl7bGV0IFY9cy5sZW5ndGgtMSxuZT1zW1ZdLGt0PW5lLnJlZmVyZW5jZUlkfHxuZS5sYWJlbElkLE5yPW5lLmRlc3RpbmF0aW9uPT09dm9pZCAwP25bS2Uoa3QpXTpuZTtmb3Iocj0hMDtWLS07KWlmKHNbVl0uaW1hZ2Upe3I9dm9pZCAwO2JyZWFrfW5lLmltYWdlPyhrKCc8aW1nIHNyYz0iJytibihOci5kZXN0aW5hdGlvbixlLmFsbG93RGFuZ2Vyb3VzUHJvdG9jb2w/dm9pZCAwOnZCKSsnIiBhbHQ9IicpLFQobmUubGFiZWwpLGsoJyInKSk6aygnPGEgaHJlZj0iJytibihOci5kZXN0aW5hdGlvbixlLmFsbG93RGFuZ2Vyb3VzUHJvdG9jb2w/dm9pZCAwOmVNKSsnIicpLGsoTnIudGl0bGU/JyB0aXRsZT0iJytOci50aXRsZSsnIic6IiIpLG5lLmltYWdlP2soIiAvPiIpOihrKCI+IiksVChuZS5sYWJlbCksaygiPC9hPiIpKSxzLnBvcCgpfWZ1bmN0aW9uIExlKCl7eSgpLHMucHVzaCh7fSl9ZnVuY3Rpb24gRGUoVil7eCgpLHNbcy5sZW5ndGgtMV0ubGFiZWxJZD10aGlzLnNsaWNlU2VyaWFsaXplKFYpfWZ1bmN0aW9uICR0KCl7eSgpLG0oImlnbm9yZUVuY29kZSIsITApfWZ1bmN0aW9uIGZ0KCl7c1tzLmxlbmd0aC0xXS5kZXN0aW5hdGlvbj14KCksbSgiaWdub3JlRW5jb2RlIil9ZnVuY3Rpb24gTnQoKXtzW3MubGVuZ3RoLTFdLnRpdGxlPXgoKX1mdW5jdGlvbiBfcigpe2xldCBWPXNbcy5sZW5ndGgtMV0sbmU9S2UoVi5sYWJlbElkKTt4KCksWkMuY2FsbChuLG5lKXx8KG5bbmVdPXNbcy5sZW5ndGgtMV0pLHMucG9wKCl9ZnVuY3Rpb24gUXIoKXttKCJzbHVycEFsbExpbmVFbmRpbmdzIiwhMCl9ZnVuY3Rpb24gWHQoVil7ZygiaGVhZGluZ1JhbmsiKXx8KG0oImhlYWRpbmdSYW5rIix0aGlzLnNsaWNlU2VyaWFsaXplKFYpLmxlbmd0aCksXygpLGsoIjxoIitnKCJoZWFkaW5nUmFuayIpKyI+IikpfWZ1bmN0aW9uIGZyKCl7eSgpLG0oInNsdXJwQWxsTGluZUVuZGluZ3MiKX1mdW5jdGlvbiBCdCgpe20oInNsdXJwQWxsTGluZUVuZGluZ3MiLCEwKX1mdW5jdGlvbiBZZSgpe2soIjwvaCIrZygiaGVhZGluZ1JhbmsiKSsiPiIpLG0oImhlYWRpbmdSYW5rIil9ZnVuY3Rpb24gSnIoVil7bSgiaGVhZGluZ1JhbmsiLHRoaXMuc2xpY2VTZXJpYWxpemUoVikuY2hhckNvZGVBdCgwKT09PTYxPzE6Mil9ZnVuY3Rpb24gTigpe2xldCBWPXgoKTtfKCksaygiPGgiK2coImhlYWRpbmdSYW5rIikrIj4iKSxUKFYpLGsoIjwvaCIrZygiaGVhZGluZ1JhbmsiKSsiPiIpLG0oInNsdXJwQWxsTGluZUVuZGluZ3MiKSxtKCJoZWFkaW5nUmFuayIpfWZ1bmN0aW9uIHEoVil7VChFKHRoaXMuc2xpY2VTZXJpYWxpemUoVikpKX1mdW5jdGlvbiBvZShWKXtpZighZygic2x1cnBBbGxMaW5lRW5kaW5ncyIpKXtpZihnKCJzbHVycE9uZUxpbmVFbmRpbmciKSl7bSgic2x1cnBPbmVMaW5lRW5kaW5nIik7cmV0dXJufWlmKGcoImluQ29kZVRleHQiKSl7VCgiICIpO3JldHVybn1UKEUodGhpcy5zbGljZVNlcmlhbGl6ZShWKSkpfX1mdW5jdGlvbiBmZShWKXtUKEUodGhpcy5zbGljZVNlcmlhbGl6ZShWKSkpLG0oImZsb3dDb2RlU2VlbkRhdGEiLCEwKX1mdW5jdGlvbiBDZSgpe2soIjxiciAvPiIpfWZ1bmN0aW9uIFp0KCl7XygpLHByKCl9ZnVuY3Rpb24gS3IoKXttKCJpZ25vcmVFbmNvZGUiKX1mdW5jdGlvbiBwcigpe2UuYWxsb3dEYW5nZXJvdXNIdG1sJiZtKCJpZ25vcmVFbmNvZGUiLCEwKX1mdW5jdGlvbiBVaSgpe2soIjxlbT4iKX1mdW5jdGlvbiBWaSgpe2soIjxzdHJvbmc+Iil9ZnVuY3Rpb24gUnQoKXttKCJpbkNvZGVUZXh0IiwhMCksaygiPGNvZGU+Iil9ZnVuY3Rpb24gcmkoKXttKCJpbkNvZGVUZXh0IiksaygiPC9jb2RlPiIpfWZ1bmN0aW9uIFByKCl7aygiPC9lbT4iKX1mdW5jdGlvbiBVTygpe2soIjwvc3Ryb25nPiIpfWZ1bmN0aW9uIFZPKCl7XygpLGsoIjxociAvPiIpfWZ1bmN0aW9uIHMwKFYpe20oImNoYXJhY3RlclJlZmVyZW5jZVR5cGUiLFYudHlwZSl9ZnVuY3Rpb24gWU8oVil7bGV0IG5lPXRoaXMuc2xpY2VTZXJpYWxpemUoViksa3Q9ZygiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpP3BhKG5lLGcoImNoYXJhY3RlclJlZmVyZW5jZVR5cGUiKT09PSJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIj8xMDoxNik6T2kobmUpO1QoRShrdCkpLG0oImNoYXJhY3RlclJlZmVyZW5jZVR5cGUiKX1mdW5jdGlvbiBHTyhWKXtsZXQgbmU9dGhpcy5zbGljZVNlcmlhbGl6ZShWKTtrKCc8YSBocmVmPSInK2JuKG5lLGUuYWxsb3dEYW5nZXJvdXNQcm90b2NvbD92b2lkIDA6ZU0pKyciPicpLFQoRShuZSkpLGsoIjwvYT4iKX1mdW5jdGlvbiBRTyhWKXtsZXQgbmU9dGhpcy5zbGljZVNlcmlhbGl6ZShWKTtrKCc8YSBocmVmPSInK2JuKCJtYWlsdG86IituZSkrJyI+JyksVChFKG5lKSksaygiPC9hPiIpfX1vKGZiLCJjb21waWxlIik7ZnVuY3Rpb24gaWUodCxlLHIsbil7bGV0IGk9bj9uLTE6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHM9MDtyZXR1cm4gYTtmdW5jdGlvbiBhKGMpe3JldHVybiBlZShjKT8odC5lbnRlcihyKSxsKGMpKTplKGMpfWZ1bmN0aW9uIGwoYyl7cmV0dXJuIGVlKGMpJiZzKys8aT8odC5jb25zdW1lKGMpLGwpOih0LmV4aXQociksZShjKSl9fW8oaWUsImZhY3RvcnlTcGFjZSIpO3ZhciB0TT17dG9rZW5pemU6a0J9O2Z1bmN0aW9uIGtCKHQpe2xldCBlPXQuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmNvbnRlbnRJbml0aWFsLG4saSkscjtyZXR1cm4gZTtmdW5jdGlvbiBuKGwpe2lmKGw9PT1udWxsKXt0LmNvbnN1bWUobCk7cmV0dXJufXJldHVybiB0LmVudGVyKCJsaW5lRW5kaW5nIiksdC5jb25zdW1lKGwpLHQuZXhpdCgibGluZUVuZGluZyIpLGllKHQsZSwibGluZVByZWZpeCIpfWZ1bmN0aW9uIGkobCl7cmV0dXJuIHQuZW50ZXIoInBhcmFncmFwaCIpLHMobCl9ZnVuY3Rpb24gcyhsKXtsZXQgYz10LmVudGVyKCJjaHVua1RleHQiLHtjb250ZW50VHlwZToidGV4dCIscHJldmlvdXM6cn0pO3JldHVybiByJiYoci5uZXh0PWMpLHI9YyxhKGwpfWZ1bmN0aW9uIGEobCl7aWYobD09PW51bGwpe3QuZXhpdCgiY2h1bmtUZXh0IiksdC5leGl0KCJwYXJhZ3JhcGgiKSx0LmNvbnN1bWUobCk7cmV0dXJufXJldHVybiBZKGwpPyh0LmNvbnN1bWUobCksdC5leGl0KCJjaHVua1RleHQiKSxzKToodC5jb25zdW1lKGwpLGEpfX1vKGtCLCJpbml0aWFsaXplQ29udGVudCIpO3ZhciBuTT17dG9rZW5pemU6U0J9LHJNPXt0b2tlbml6ZTpUQn07ZnVuY3Rpb24gU0IodCl7bGV0IGU9dGhpcyxyPVtdLG49MCxpLHMsYTtyZXR1cm4gbDtmdW5jdGlvbiBsKFQpe2lmKG48ci5sZW5ndGgpe2xldCBSPXJbbl07cmV0dXJuIGUuY29udGFpbmVyU3RhdGU9UlsxXSx0LmF0dGVtcHQoUlswXS5jb250aW51YXRpb24sYyx1KShUKX1yZXR1cm4gdShUKX1mdW5jdGlvbiBjKFQpe2lmKG4rKyxlLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3cpe2UuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz12b2lkIDAsaSYmaygpO2xldCBSPWUuZXZlbnRzLmxlbmd0aCxfPVIsRTtmb3IoO18tLTspaWYoZS5ldmVudHNbX11bMF09PT0iZXhpdCImJmUuZXZlbnRzW19dWzFdLnR5cGU9PT0iY2h1bmtGbG93Iil7RT1lLmV2ZW50c1tfXVsxXS5lbmQ7YnJlYWt9eChuKTtsZXQgQT1SO2Zvcig7QTxlLmV2ZW50cy5sZW5ndGg7KWUuZXZlbnRzW0FdWzFdLmVuZD17Li4uRX0sQSsrO3JldHVybiBaZShlLmV2ZW50cyxfKzEsMCxlLmV2ZW50cy5zbGljZShSKSksZS5ldmVudHMubGVuZ3RoPUEsdShUKX1yZXR1cm4gbChUKX1mdW5jdGlvbiB1KFQpe2lmKG49PT1yLmxlbmd0aCl7aWYoIWkpcmV0dXJuIGgoVCk7aWYoaS5jdXJyZW50Q29uc3RydWN0JiZpLmN1cnJlbnRDb25zdHJ1Y3QuY29uY3JldGUpcmV0dXJuIG0oVCk7ZS5pbnRlcnJ1cHQ9ISEoaS5jdXJyZW50Q29uc3RydWN0JiYhaS5fZ2ZtVGFibGVEeW5hbWljSW50ZXJydXB0SGFjayl9cmV0dXJuIGUuY29udGFpbmVyU3RhdGU9e30sdC5jaGVjayhyTSxmLHApKFQpfWZ1bmN0aW9uIGYoVCl7cmV0dXJuIGkmJmsoKSx4KG4pLGgoVCl9ZnVuY3Rpb24gcChUKXtyZXR1cm4gZS5wYXJzZXIubGF6eVtlLm5vdygpLmxpbmVdPW4hPT1yLmxlbmd0aCxhPWUubm93KCkub2Zmc2V0LG0oVCl9ZnVuY3Rpb24gaChUKXtyZXR1cm4gZS5jb250YWluZXJTdGF0ZT17fSx0LmF0dGVtcHQock0sZCxtKShUKX1mdW5jdGlvbiBkKFQpe3JldHVybiBuKyssci5wdXNoKFtlLmN1cnJlbnRDb25zdHJ1Y3QsZS5jb250YWluZXJTdGF0ZV0pLGgoVCl9ZnVuY3Rpb24gbShUKXtpZihUPT09bnVsbCl7aSYmaygpLHgoMCksdC5jb25zdW1lKFQpO3JldHVybn1yZXR1cm4gaT1pfHxlLnBhcnNlci5mbG93KGUubm93KCkpLHQuZW50ZXIoImNodW5rRmxvdyIse190b2tlbml6ZXI6aSxjb250ZW50VHlwZToiZmxvdyIscHJldmlvdXM6c30pLGcoVCl9ZnVuY3Rpb24gZyhUKXtpZihUPT09bnVsbCl7eSh0LmV4aXQoImNodW5rRmxvdyIpLCEwKSx4KDApLHQuY29uc3VtZShUKTtyZXR1cm59cmV0dXJuIFkoVCk/KHQuY29uc3VtZShUKSx5KHQuZXhpdCgiY2h1bmtGbG93IikpLG49MCxlLmludGVycnVwdD12b2lkIDAsbCk6KHQuY29uc3VtZShUKSxnKX1mdW5jdGlvbiB5KFQsUil7bGV0IF89ZS5zbGljZVN0cmVhbShUKTtpZihSJiZfLnB1c2gobnVsbCksVC5wcmV2aW91cz1zLHMmJihzLm5leHQ9VCkscz1ULGkuZGVmaW5lU2tpcChULnN0YXJ0KSxpLndyaXRlKF8pLGUucGFyc2VyLmxhenlbVC5zdGFydC5saW5lXSl7bGV0IEU9aS5ldmVudHMubGVuZ3RoO2Zvcig7RS0tOylpZihpLmV2ZW50c1tFXVsxXS5zdGFydC5vZmZzZXQ8YSYmKCFpLmV2ZW50c1tFXVsxXS5lbmR8fGkuZXZlbnRzW0VdWzFdLmVuZC5vZmZzZXQ+YSkpcmV0dXJuO2xldCBBPWUuZXZlbnRzLmxlbmd0aCxGPUEsVSxNO2Zvcig7Ri0tOylpZihlLmV2ZW50c1tGXVswXT09PSJleGl0IiYmZS5ldmVudHNbRl1bMV0udHlwZT09PSJjaHVua0Zsb3ciKXtpZihVKXtNPWUuZXZlbnRzW0ZdWzFdLmVuZDticmVha31VPSEwfWZvcih4KG4pLEU9QTtFPGUuZXZlbnRzLmxlbmd0aDspZS5ldmVudHNbRV1bMV0uZW5kPXsuLi5NfSxFKys7WmUoZS5ldmVudHMsRisxLDAsZS5ldmVudHMuc2xpY2UoQSkpLGUuZXZlbnRzLmxlbmd0aD1FfX1mdW5jdGlvbiB4KFQpe2xldCBSPXIubGVuZ3RoO2Zvcig7Ui0tID5UOyl7bGV0IF89cltSXTtlLmNvbnRhaW5lclN0YXRlPV9bMV0sX1swXS5leGl0LmNhbGwoZSx0KX1yLmxlbmd0aD1UfWZ1bmN0aW9uIGsoKXtpLndyaXRlKFtudWxsXSkscz12b2lkIDAsaT12b2lkIDAsZS5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93PXZvaWQgMH19byhTQiwiaW5pdGlhbGl6ZURvY3VtZW50Iik7ZnVuY3Rpb24gVEIodCxlLHIpe3JldHVybiBpZSh0LHQuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmRvY3VtZW50LGUsciksImxpbmVQcmVmaXgiLHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCl9byhUQiwidG9rZW5pemVDb250YWluZXIiKTtmdW5jdGlvbiBCaSh0LGUscil7bGV0IG49W10saT0tMTtmb3IoOysraTx0Lmxlbmd0aDspe2xldCBzPXRbaV0ucmVzb2x2ZUFsbDtzJiYhbi5pbmNsdWRlcyhzKSYmKGU9cyhlLHIpLG4ucHVzaChzKSl9cmV0dXJuIGV9byhCaSwicmVzb2x2ZUFsbCIpO3ZhciBMYz17bmFtZToiYXR0ZW50aW9uIixyZXNvbHZlQWxsOkVCLHRva2VuaXplOkRCfTtmdW5jdGlvbiBFQih0LGUpe2xldCByPS0xLG4saSxzLGEsbCxjLHUsZjtmb3IoOysrcjx0Lmxlbmd0aDspaWYodFtyXVswXT09PSJlbnRlciImJnRbcl1bMV0udHlwZT09PSJhdHRlbnRpb25TZXF1ZW5jZSImJnRbcl1bMV0uX2Nsb3NlKXtmb3Iobj1yO24tLTspaWYodFtuXVswXT09PSJleGl0IiYmdFtuXVsxXS50eXBlPT09ImF0dGVudGlvblNlcXVlbmNlIiYmdFtuXVsxXS5fb3BlbiYmZS5zbGljZVNlcmlhbGl6ZSh0W25dWzFdKS5jaGFyQ29kZUF0KDApPT09ZS5zbGljZVNlcmlhbGl6ZSh0W3JdWzFdKS5jaGFyQ29kZUF0KDApKXtpZigodFtuXVsxXS5fY2xvc2V8fHRbcl1bMV0uX29wZW4pJiYodFtyXVsxXS5lbmQub2Zmc2V0LXRbcl1bMV0uc3RhcnQub2Zmc2V0KSUzJiYhKCh0W25dWzFdLmVuZC5vZmZzZXQtdFtuXVsxXS5zdGFydC5vZmZzZXQrdFtyXVsxXS5lbmQub2Zmc2V0LXRbcl1bMV0uc3RhcnQub2Zmc2V0KSUzKSljb250aW51ZTtjPXRbbl1bMV0uZW5kLm9mZnNldC10W25dWzFdLnN0YXJ0Lm9mZnNldD4xJiZ0W3JdWzFdLmVuZC5vZmZzZXQtdFtyXVsxXS5zdGFydC5vZmZzZXQ+MT8yOjE7bGV0IHA9ey4uLnRbbl1bMV0uZW5kfSxoPXsuLi50W3JdWzFdLnN0YXJ0fTtpTShwLC1jKSxpTShoLGMpLGE9e3R5cGU6Yz4xPyJzdHJvbmdTZXF1ZW5jZSI6ImVtcGhhc2lzU2VxdWVuY2UiLHN0YXJ0OnAsZW5kOnsuLi50W25dWzFdLmVuZH19LGw9e3R5cGU6Yz4xPyJzdHJvbmdTZXF1ZW5jZSI6ImVtcGhhc2lzU2VxdWVuY2UiLHN0YXJ0OnsuLi50W3JdWzFdLnN0YXJ0fSxlbmQ6aH0scz17dHlwZTpjPjE/InN0cm9uZ1RleHQiOiJlbXBoYXNpc1RleHQiLHN0YXJ0OnsuLi50W25dWzFdLmVuZH0sZW5kOnsuLi50W3JdWzFdLnN0YXJ0fX0saT17dHlwZTpjPjE/InN0cm9uZyI6ImVtcGhhc2lzIixzdGFydDp7Li4uYS5zdGFydH0sZW5kOnsuLi5sLmVuZH19LHRbbl1bMV0uZW5kPXsuLi5hLnN0YXJ0fSx0W3JdWzFdLnN0YXJ0PXsuLi5sLmVuZH0sdT1bXSx0W25dWzFdLmVuZC5vZmZzZXQtdFtuXVsxXS5zdGFydC5vZmZzZXQmJih1PW50KHUsW1siZW50ZXIiLHRbbl1bMV0sZV0sWyJleGl0Iix0W25dWzFdLGVdXSkpLHU9bnQodSxbWyJlbnRlciIsaSxlXSxbImVudGVyIixhLGVdLFsiZXhpdCIsYSxlXSxbImVudGVyIixzLGVdXSksdT1udCh1LEJpKGUucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsLHQuc2xpY2UobisxLHIpLGUpKSx1PW50KHUsW1siZXhpdCIscyxlXSxbImVudGVyIixsLGVdLFsiZXhpdCIsbCxlXSxbImV4aXQiLGksZV1dKSx0W3JdWzFdLmVuZC5vZmZzZXQtdFtyXVsxXS5zdGFydC5vZmZzZXQ/KGY9Mix1PW50KHUsW1siZW50ZXIiLHRbcl1bMV0sZV0sWyJleGl0Iix0W3JdWzFdLGVdXSkpOmY9MCxaZSh0LG4tMSxyLW4rMyx1KSxyPW4rdS5sZW5ndGgtZi0yO2JyZWFrfX1mb3Iocj0tMTsrK3I8dC5sZW5ndGg7KXRbcl1bMV0udHlwZT09PSJhdHRlbnRpb25TZXF1ZW5jZSImJih0W3JdWzFdLnR5cGU9ImRhdGEiKTtyZXR1cm4gdH1vKEVCLCJyZXNvbHZlQWxsQXR0ZW50aW9uIik7ZnVuY3Rpb24gREIodCxlKXtsZXQgcj10aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmF0dGVudGlvbk1hcmtlcnMubnVsbCxuPXRoaXMucHJldmlvdXMsaT1xbihuKSxzO3JldHVybiBhO2Z1bmN0aW9uIGEoYyl7cmV0dXJuIHM9Yyx0LmVudGVyKCJhdHRlbnRpb25TZXF1ZW5jZSIpLGwoYyl9ZnVuY3Rpb24gbChjKXtpZihjPT09cylyZXR1cm4gdC5jb25zdW1lKGMpLGw7bGV0IHU9dC5leGl0KCJhdHRlbnRpb25TZXF1ZW5jZSIpLGY9cW4oYykscD0hZnx8Zj09PTImJml8fHIuaW5jbHVkZXMoYyksaD0haXx8aT09PTImJmZ8fHIuaW5jbHVkZXMobik7cmV0dXJuIHUuX29wZW49ISEocz09PTQyP3A6cCYmKGl8fCFoKSksdS5fY2xvc2U9ISEocz09PTQyP2g6aCYmKGZ8fCFwKSksZShjKX19byhEQiwidG9rZW5pemVBdHRlbnRpb24iKTtmdW5jdGlvbiBpTSh0LGUpe3QuY29sdW1uKz1lLHQub2Zmc2V0Kz1lLHQuX2J1ZmZlckluZGV4Kz1lfW8oaU0sIm1vdmVQb2ludCIpO3ZhciBwYj17bmFtZToiYXV0b2xpbmsiLHRva2VuaXplOkNCfTtmdW5jdGlvbiBDQih0LGUscil7bGV0IG49MDtyZXR1cm4gaTtmdW5jdGlvbiBpKGQpe3JldHVybiB0LmVudGVyKCJhdXRvbGluayIpLHQuZW50ZXIoImF1dG9saW5rTWFya2VyIiksdC5jb25zdW1lKGQpLHQuZXhpdCgiYXV0b2xpbmtNYXJrZXIiKSx0LmVudGVyKCJhdXRvbGlua1Byb3RvY29sIiksc31mdW5jdGlvbiBzKGQpe3JldHVybiBjdChkKT8odC5jb25zdW1lKGQpLGEpOmQ9PT02ND9yKGQpOnUoZCl9ZnVuY3Rpb24gYShkKXtyZXR1cm4gZD09PTQzfHxkPT09NDV8fGQ9PT00Nnx8UWUoZCk/KG49MSxsKGQpKTp1KGQpfWZ1bmN0aW9uIGwoZCl7cmV0dXJuIGQ9PT01OD8odC5jb25zdW1lKGQpLG49MCxjKTooZD09PTQzfHxkPT09NDV8fGQ9PT00Nnx8UWUoZCkpJiZuKys8MzI/KHQuY29uc3VtZShkKSxsKToobj0wLHUoZCkpfWZ1bmN0aW9uIGMoZCl7cmV0dXJuIGQ9PT02Mj8odC5leGl0KCJhdXRvbGlua1Byb3RvY29sIiksdC5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKSx0LmNvbnN1bWUoZCksdC5leGl0KCJhdXRvbGlua01hcmtlciIpLHQuZXhpdCgiYXV0b2xpbmsiKSxlKTpkPT09bnVsbHx8ZD09PTMyfHxkPT09NjB8fFRvKGQpP3IoZCk6KHQuY29uc3VtZShkKSxjKX1mdW5jdGlvbiB1KGQpe3JldHVybiBkPT09NjQ/KHQuY29uc3VtZShkKSxmKTpzRShkKT8odC5jb25zdW1lKGQpLHUpOnIoZCl9ZnVuY3Rpb24gZihkKXtyZXR1cm4gUWUoZCk/cChkKTpyKGQpfWZ1bmN0aW9uIHAoZCl7cmV0dXJuIGQ9PT00Nj8odC5jb25zdW1lKGQpLG49MCxmKTpkPT09NjI/KHQuZXhpdCgiYXV0b2xpbmtQcm90b2NvbCIpLnR5cGU9ImF1dG9saW5rRW1haWwiLHQuZW50ZXIoImF1dG9saW5rTWFya2VyIiksdC5jb25zdW1lKGQpLHQuZXhpdCgiYXV0b2xpbmtNYXJrZXIiKSx0LmV4aXQoImF1dG9saW5rIiksZSk6aChkKX1mdW5jdGlvbiBoKGQpe2lmKChkPT09NDV8fFFlKGQpKSYmbisrPDYzKXtsZXQgbT1kPT09NDU/aDpwO3JldHVybiB0LmNvbnN1bWUoZCksbX1yZXR1cm4gcihkKX19byhDQiwidG9rZW5pemVBdXRvbGluayIpO3ZhciBFbj17cGFydGlhbDohMCx0b2tlbml6ZTpNQn07ZnVuY3Rpb24gTUIodCxlLHIpe3JldHVybiBuO2Z1bmN0aW9uIG4ocyl7cmV0dXJuIGVlKHMpP2llKHQsaSwibGluZVByZWZpeCIpKHMpOmkocyl9ZnVuY3Rpb24gaShzKXtyZXR1cm4gcz09PW51bGx8fFkocyk/ZShzKTpyKHMpfX1vKE1CLCJ0b2tlbml6ZUJsYW5rTGluZSIpO3ZhciBQZD17Y29udGludWF0aW9uOnt0b2tlbml6ZTpJQn0sZXhpdDpfQixuYW1lOiJibG9ja1F1b3RlIix0b2tlbml6ZTpPQn07ZnVuY3Rpb24gT0IodCxlLHIpe2xldCBuPXRoaXM7cmV0dXJuIGk7ZnVuY3Rpb24gaShhKXtpZihhPT09NjIpe2xldCBsPW4uY29udGFpbmVyU3RhdGU7cmV0dXJuIGwub3Blbnx8KHQuZW50ZXIoImJsb2NrUXVvdGUiLHtfY29udGFpbmVyOiEwfSksbC5vcGVuPSEwKSx0LmVudGVyKCJibG9ja1F1b3RlUHJlZml4IiksdC5lbnRlcigiYmxvY2tRdW90ZU1hcmtlciIpLHQuY29uc3VtZShhKSx0LmV4aXQoImJsb2NrUXVvdGVNYXJrZXIiKSxzfXJldHVybiByKGEpfWZ1bmN0aW9uIHMoYSl7cmV0dXJuIGVlKGEpPyh0LmVudGVyKCJibG9ja1F1b3RlUHJlZml4V2hpdGVzcGFjZSIpLHQuY29uc3VtZShhKSx0LmV4aXQoImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlIiksdC5leGl0KCJibG9ja1F1b3RlUHJlZml4IiksZSk6KHQuZXhpdCgiYmxvY2tRdW90ZVByZWZpeCIpLGUoYSkpfX1vKE9CLCJ0b2tlbml6ZUJsb2NrUXVvdGVTdGFydCIpO2Z1bmN0aW9uIElCKHQsZSxyKXtsZXQgbj10aGlzO3JldHVybiBpO2Z1bmN0aW9uIGkoYSl7cmV0dXJuIGVlKGEpP2llKHQscywibGluZVByZWZpeCIsbi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KShhKTpzKGEpfWZ1bmN0aW9uIHMoYSl7cmV0dXJuIHQuYXR0ZW1wdChQZCxlLHIpKGEpfX1vKElCLCJ0b2tlbml6ZUJsb2NrUXVvdGVDb250aW51YXRpb24iKTtmdW5jdGlvbiBfQih0KXt0LmV4aXQoImJsb2NrUXVvdGUiKX1vKF9CLCJleGl0Iik7dmFyIE5kPXtuYW1lOiJjaGFyYWN0ZXJFc2NhcGUiLHRva2VuaXplOlBCfTtmdW5jdGlvbiBQQih0LGUscil7cmV0dXJuIG47ZnVuY3Rpb24gbihzKXtyZXR1cm4gdC5lbnRlcigiY2hhcmFjdGVyRXNjYXBlIiksdC5lbnRlcigiZXNjYXBlTWFya2VyIiksdC5jb25zdW1lKHMpLHQuZXhpdCgiZXNjYXBlTWFya2VyIiksaX1mdW5jdGlvbiBpKHMpe3JldHVybiBsRShzKT8odC5lbnRlcigiY2hhcmFjdGVyRXNjYXBlVmFsdWUiKSx0LmNvbnN1bWUocyksdC5leGl0KCJjaGFyYWN0ZXJFc2NhcGVWYWx1ZSIpLHQuZXhpdCgiY2hhcmFjdGVyRXNjYXBlIiksZSk6cihzKX19byhQQiwidG9rZW5pemVDaGFyYWN0ZXJFc2NhcGUiKTt2YXIgUmQ9e25hbWU6ImNoYXJhY3RlclJlZmVyZW5jZSIsdG9rZW5pemU6TkJ9O2Z1bmN0aW9uIE5CKHQsZSxyKXtsZXQgbj10aGlzLGk9MCxzLGE7cmV0dXJuIGw7ZnVuY3Rpb24gbChwKXtyZXR1cm4gdC5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlIiksdC5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIiksdC5jb25zdW1lKHApLHQuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIiksY31mdW5jdGlvbiBjKHApe3JldHVybiBwPT09MzU/KHQuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiKSx0LmNvbnN1bWUocCksdC5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIiksdSk6KHQuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIikscz0zMSxhPVFlLGYocCkpfWZ1bmN0aW9uIHUocCl7cmV0dXJuIHA9PT04OHx8cD09PTEyMD8odC5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWwiKSx0LmNvbnN1bWUocCksdC5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbCIpLHQuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIikscz02LGE9YUUsZik6KHQuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIikscz03LGE9S2wsZihwKSl9ZnVuY3Rpb24gZihwKXtpZihwPT09NTkmJmkpe2xldCBoPXQuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKTtyZXR1cm4gYT09PVFlJiYhT2kobi5zbGljZVNlcmlhbGl6ZShoKSk/cihwKToodC5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIiksdC5jb25zdW1lKHApLHQuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIiksdC5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2UiKSxlKX1yZXR1cm4gYShwKSYmaSsrPHM/KHQuY29uc3VtZShwKSxmKTpyKHApfX1vKE5CLCJ0b2tlbml6ZUNoYXJhY3RlclJlZmVyZW5jZSIpO3ZhciBvTT17cGFydGlhbDohMCx0b2tlbml6ZTpMQn0sTGQ9e2NvbmNyZXRlOiEwLG5hbWU6ImNvZGVGZW5jZWQiLHRva2VuaXplOlJCfTtmdW5jdGlvbiBSQih0LGUscil7bGV0IG49dGhpcyxpPXtwYXJ0aWFsOiEwLHRva2VuaXplOl99LHM9MCxhPTAsbDtyZXR1cm4gYztmdW5jdGlvbiBjKEUpe3JldHVybiB1KEUpfWZ1bmN0aW9uIHUoRSl7bGV0IEE9bi5ldmVudHNbbi5ldmVudHMubGVuZ3RoLTFdO3JldHVybiBzPUEmJkFbMV0udHlwZT09PSJsaW5lUHJlZml4Ij9BWzJdLnNsaWNlU2VyaWFsaXplKEFbMV0sITApLmxlbmd0aDowLGw9RSx0LmVudGVyKCJjb2RlRmVuY2VkIiksdC5lbnRlcigiY29kZUZlbmNlZEZlbmNlIiksdC5lbnRlcigiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxmKEUpfWZ1bmN0aW9uIGYoRSl7cmV0dXJuIEU9PT1sPyhhKyssdC5jb25zdW1lKEUpLGYpOmE8Mz9yKEUpOih0LmV4aXQoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIiksZWUoRSk/aWUodCxwLCJ3aGl0ZXNwYWNlIikoRSk6cChFKSl9ZnVuY3Rpb24gcChFKXtyZXR1cm4gRT09PW51bGx8fFkoRSk/KHQuZXhpdCgiY29kZUZlbmNlZEZlbmNlIiksbi5pbnRlcnJ1cHQ/ZShFKTp0LmNoZWNrKG9NLGcsUikoRSkpOih0LmVudGVyKCJjb2RlRmVuY2VkRmVuY2VJbmZvIiksdC5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLGgoRSkpfWZ1bmN0aW9uIGgoRSl7cmV0dXJuIEU9PT1udWxsfHxZKEUpPyh0LmV4aXQoImNodW5rU3RyaW5nIiksdC5leGl0KCJjb2RlRmVuY2VkRmVuY2VJbmZvIikscChFKSk6ZWUoRSk/KHQuZXhpdCgiY2h1bmtTdHJpbmciKSx0LmV4aXQoImNvZGVGZW5jZWRGZW5jZUluZm8iKSxpZSh0LGQsIndoaXRlc3BhY2UiKShFKSk6RT09PTk2JiZFPT09bD9yKEUpOih0LmNvbnN1bWUoRSksaCl9ZnVuY3Rpb24gZChFKXtyZXR1cm4gRT09PW51bGx8fFkoRSk/cChFKToodC5lbnRlcigiY29kZUZlbmNlZEZlbmNlTWV0YSIpLHQuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxtKEUpKX1mdW5jdGlvbiBtKEUpe3JldHVybiBFPT09bnVsbHx8WShFKT8odC5leGl0KCJjaHVua1N0cmluZyIpLHQuZXhpdCgiY29kZUZlbmNlZEZlbmNlTWV0YSIpLHAoRSkpOkU9PT05NiYmRT09PWw/cihFKToodC5jb25zdW1lKEUpLG0pfWZ1bmN0aW9uIGcoRSl7cmV0dXJuIHQuYXR0ZW1wdChpLFIseSkoRSl9ZnVuY3Rpb24geShFKXtyZXR1cm4gdC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShFKSx0LmV4aXQoImxpbmVFbmRpbmciKSx4fWZ1bmN0aW9uIHgoRSl7cmV0dXJuIHM+MCYmZWUoRSk/aWUodCxrLCJsaW5lUHJlZml4IixzKzEpKEUpOmsoRSl9ZnVuY3Rpb24gayhFKXtyZXR1cm4gRT09PW51bGx8fFkoRSk/dC5jaGVjayhvTSxnLFIpKEUpOih0LmVudGVyKCJjb2RlRmxvd1ZhbHVlIiksVChFKSl9ZnVuY3Rpb24gVChFKXtyZXR1cm4gRT09PW51bGx8fFkoRSk/KHQuZXhpdCgiY29kZUZsb3dWYWx1ZSIpLGsoRSkpOih0LmNvbnN1bWUoRSksVCl9ZnVuY3Rpb24gUihFKXtyZXR1cm4gdC5leGl0KCJjb2RlRmVuY2VkIiksZShFKX1mdW5jdGlvbiBfKEUsQSxGKXtsZXQgVT0wO3JldHVybiBNO2Z1bmN0aW9uIE0oSCl7cmV0dXJuIEUuZW50ZXIoImxpbmVFbmRpbmciKSxFLmNvbnN1bWUoSCksRS5leGl0KCJsaW5lRW5kaW5nIiksYmV9ZnVuY3Rpb24gYmUoSCl7cmV0dXJuIEUuZW50ZXIoImNvZGVGZW5jZWRGZW5jZSIpLGVlKEgpP2llKEUseiwibGluZVByZWZpeCIsbi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KShIKTp6KEgpfWZ1bmN0aW9uIHooSCl7cmV0dXJuIEg9PT1sPyhFLmVudGVyKCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpLEkoSCkpOkYoSCl9ZnVuY3Rpb24gSShIKXtyZXR1cm4gSD09PWw/KFUrKyxFLmNvbnN1bWUoSCksSSk6VT49YT8oRS5leGl0KCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpLGVlKEgpP2llKEUsTCwid2hpdGVzcGFjZSIpKEgpOkwoSCkpOkYoSCl9ZnVuY3Rpb24gTChIKXtyZXR1cm4gSD09PW51bGx8fFkoSCk/KEUuZXhpdCgiY29kZUZlbmNlZEZlbmNlIiksQShIKSk6RihIKX19fW8oUkIsInRva2VuaXplQ29kZUZlbmNlZCIpO2Z1bmN0aW9uIExCKHQsZSxyKXtsZXQgbj10aGlzO3JldHVybiBpO2Z1bmN0aW9uIGkoYSl7cmV0dXJuIGE9PT1udWxsP3IoYSk6KHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUoYSksdC5leGl0KCJsaW5lRW5kaW5nIikscyl9ZnVuY3Rpb24gcyhhKXtyZXR1cm4gbi5wYXJzZXIubGF6eVtuLm5vdygpLmxpbmVdP3IoYSk6ZShhKX19byhMQiwidG9rZW5pemVOb25MYXp5Q29udGludWF0aW9uIik7dmFyIEZjPXtuYW1lOiJjb2RlSW5kZW50ZWQiLHRva2VuaXplOkFCfSxGQj17cGFydGlhbDohMCx0b2tlbml6ZTokQn07ZnVuY3Rpb24gQUIodCxlLHIpe2xldCBuPXRoaXM7cmV0dXJuIGk7ZnVuY3Rpb24gaSh1KXtyZXR1cm4gdC5lbnRlcigiY29kZUluZGVudGVkIiksaWUodCxzLCJsaW5lUHJlZml4Iiw1KSh1KX1mdW5jdGlvbiBzKHUpe2xldCBmPW4uZXZlbnRzW24uZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gZiYmZlsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZmWzJdLnNsaWNlU2VyaWFsaXplKGZbMV0sITApLmxlbmd0aD49ND9hKHUpOnIodSl9ZnVuY3Rpb24gYSh1KXtyZXR1cm4gdT09PW51bGw/Yyh1KTpZKHUpP3QuYXR0ZW1wdChGQixhLGMpKHUpOih0LmVudGVyKCJjb2RlRmxvd1ZhbHVlIiksbCh1KSl9ZnVuY3Rpb24gbCh1KXtyZXR1cm4gdT09PW51bGx8fFkodSk/KHQuZXhpdCgiY29kZUZsb3dWYWx1ZSIpLGEodSkpOih0LmNvbnN1bWUodSksbCl9ZnVuY3Rpb24gYyh1KXtyZXR1cm4gdC5leGl0KCJjb2RlSW5kZW50ZWQiKSxlKHUpfX1vKEFCLCJ0b2tlbml6ZUNvZGVJbmRlbnRlZCIpO2Z1bmN0aW9uICRCKHQsZSxyKXtsZXQgbj10aGlzO3JldHVybiBpO2Z1bmN0aW9uIGkoYSl7cmV0dXJuIG4ucGFyc2VyLmxhenlbbi5ub3coKS5saW5lXT9yKGEpOlkoYSk/KHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUoYSksdC5leGl0KCJsaW5lRW5kaW5nIiksaSk6aWUodCxzLCJsaW5lUHJlZml4Iiw1KShhKX1mdW5jdGlvbiBzKGEpe2xldCBsPW4uZXZlbnRzW24uZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gbCYmbFsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZsWzJdLnNsaWNlU2VyaWFsaXplKGxbMV0sITApLmxlbmd0aD49ND9lKGEpOlkoYSk/aShhKTpyKGEpfX1vKCRCLCJ0b2tlbml6ZUZ1cnRoZXJTdGFydCIpO3ZhciBoYj17bmFtZToiY29kZVRleHQiLHByZXZpb3VzOnpCLHJlc29sdmU6QkIsdG9rZW5pemU6SEJ9O2Z1bmN0aW9uIEJCKHQpe2xldCBlPXQubGVuZ3RoLTQscj0zLG4saTtpZigodFtyXVsxXS50eXBlPT09ImxpbmVFbmRpbmcifHx0W3JdWzFdLnR5cGU9PT0ic3BhY2UiKSYmKHRbZV1bMV0udHlwZT09PSJsaW5lRW5kaW5nInx8dFtlXVsxXS50eXBlPT09InNwYWNlIikpe2ZvcihuPXI7KytuPGU7KWlmKHRbbl1bMV0udHlwZT09PSJjb2RlVGV4dERhdGEiKXt0W3JdWzFdLnR5cGU9ImNvZGVUZXh0UGFkZGluZyIsdFtlXVsxXS50eXBlPSJjb2RlVGV4dFBhZGRpbmciLHIrPTIsZS09MjticmVha319Zm9yKG49ci0xLGUrKzsrK248PWU7KWk9PT12b2lkIDA/biE9PWUmJnRbbl1bMV0udHlwZSE9PSJsaW5lRW5kaW5nIiYmKGk9bik6KG49PT1lfHx0W25dWzFdLnR5cGU9PT0ibGluZUVuZGluZyIpJiYodFtpXVsxXS50eXBlPSJjb2RlVGV4dERhdGEiLG4hPT1pKzImJih0W2ldWzFdLmVuZD10W24tMV1bMV0uZW5kLHQuc3BsaWNlKGkrMixuLWktMiksZS09bi1pLTIsbj1pKzIpLGk9dm9pZCAwKTtyZXR1cm4gdH1vKEJCLCJyZXNvbHZlQ29kZVRleHQiKTtmdW5jdGlvbiB6Qih0KXtyZXR1cm4gdCE9PTk2fHx0aGlzLmV2ZW50c1t0aGlzLmV2ZW50cy5sZW5ndGgtMV1bMV0udHlwZT09PSJjaGFyYWN0ZXJFc2NhcGUifW8oekIsInByZXZpb3VzIik7ZnVuY3Rpb24gSEIodCxlLHIpe2xldCBuPXRoaXMsaT0wLHMsYTtyZXR1cm4gbDtmdW5jdGlvbiBsKGgpe3JldHVybiB0LmVudGVyKCJjb2RlVGV4dCIpLHQuZW50ZXIoImNvZGVUZXh0U2VxdWVuY2UiKSxjKGgpfWZ1bmN0aW9uIGMoaCl7cmV0dXJuIGg9PT05Nj8odC5jb25zdW1lKGgpLGkrKyxjKToodC5leGl0KCJjb2RlVGV4dFNlcXVlbmNlIiksdShoKSl9ZnVuY3Rpb24gdShoKXtyZXR1cm4gaD09PW51bGw/cihoKTpoPT09MzI/KHQuZW50ZXIoInNwYWNlIiksdC5jb25zdW1lKGgpLHQuZXhpdCgic3BhY2UiKSx1KTpoPT09OTY/KGE9dC5lbnRlcigiY29kZVRleHRTZXF1ZW5jZSIpLHM9MCxwKGgpKTpZKGgpPyh0LmVudGVyKCJsaW5lRW5kaW5nIiksdC5jb25zdW1lKGgpLHQuZXhpdCgibGluZUVuZGluZyIpLHUpOih0LmVudGVyKCJjb2RlVGV4dERhdGEiKSxmKGgpKX1mdW5jdGlvbiBmKGgpe3JldHVybiBoPT09bnVsbHx8aD09PTMyfHxoPT09OTZ8fFkoaCk/KHQuZXhpdCgiY29kZVRleHREYXRhIiksdShoKSk6KHQuY29uc3VtZShoKSxmKX1mdW5jdGlvbiBwKGgpe3JldHVybiBoPT09OTY/KHQuY29uc3VtZShoKSxzKysscCk6cz09PWk/KHQuZXhpdCgiY29kZVRleHRTZXF1ZW5jZSIpLHQuZXhpdCgiY29kZVRleHQiKSxlKGgpKTooYS50eXBlPSJjb2RlVGV4dERhdGEiLGYoaCkpfX1vKEhCLCJ0b2tlbml6ZUNvZGVUZXh0Iik7dmFyICRjPWNsYXNze3N0YXRpY3tvKHRoaXMsIlNwbGljZUJ1ZmZlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMubGVmdD1lP1suLi5lXTpbXSx0aGlzLnJpZ2h0PVtdfWdldChlKXtpZihlPDB8fGU+PXRoaXMubGVmdC5sZW5ndGgrdGhpcy5yaWdodC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNhbm5vdCBhY2Nlc3MgaW5kZXggYCIrZSsiYCBpbiBhIHNwbGljZSBidWZmZXIgb2Ygc2l6ZSBgIisodGhpcy5sZWZ0Lmxlbmd0aCt0aGlzLnJpZ2h0Lmxlbmd0aCkrImAiKTtyZXR1cm4gZTx0aGlzLmxlZnQubGVuZ3RoP3RoaXMubGVmdFtlXTp0aGlzLnJpZ2h0W3RoaXMucmlnaHQubGVuZ3RoLWUrdGhpcy5sZWZ0Lmxlbmd0aC0xXX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMubGVmdC5sZW5ndGgrdGhpcy5yaWdodC5sZW5ndGh9c2hpZnQoKXtyZXR1cm4gdGhpcy5zZXRDdXJzb3IoMCksdGhpcy5yaWdodC5wb3AoKX1zbGljZShlLHIpe2xldCBuPXI/P051bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXR1cm4gbjx0aGlzLmxlZnQubGVuZ3RoP3RoaXMubGVmdC5zbGljZShlLG4pOmU+dGhpcy5sZWZ0Lmxlbmd0aD90aGlzLnJpZ2h0LnNsaWNlKHRoaXMucmlnaHQubGVuZ3RoLW4rdGhpcy5sZWZ0Lmxlbmd0aCx0aGlzLnJpZ2h0Lmxlbmd0aC1lK3RoaXMubGVmdC5sZW5ndGgpLnJldmVyc2UoKTp0aGlzLmxlZnQuc2xpY2UoZSkuY29uY2F0KHRoaXMucmlnaHQuc2xpY2UodGhpcy5yaWdodC5sZW5ndGgtbit0aGlzLmxlZnQubGVuZ3RoKS5yZXZlcnNlKCkpfXNwbGljZShlLHIsbil7bGV0IGk9cnx8MDt0aGlzLnNldEN1cnNvcihNYXRoLnRydW5jKGUpKTtsZXQgcz10aGlzLnJpZ2h0LnNwbGljZSh0aGlzLnJpZ2h0Lmxlbmd0aC1pLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7cmV0dXJuIG4mJkFjKHRoaXMubGVmdCxuKSxzLnJldmVyc2UoKX1wb3AoKXtyZXR1cm4gdGhpcy5zZXRDdXJzb3IoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSx0aGlzLmxlZnQucG9wKCl9cHVzaChlKXt0aGlzLnNldEN1cnNvcihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHRoaXMubGVmdC5wdXNoKGUpfXB1c2hNYW55KGUpe3RoaXMuc2V0Q3Vyc29yKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksQWModGhpcy5sZWZ0LGUpfXVuc2hpZnQoZSl7dGhpcy5zZXRDdXJzb3IoMCksdGhpcy5yaWdodC5wdXNoKGUpfXVuc2hpZnRNYW55KGUpe3RoaXMuc2V0Q3Vyc29yKDApLEFjKHRoaXMucmlnaHQsZS5yZXZlcnNlKCkpfXNldEN1cnNvcihlKXtpZighKGU9PT10aGlzLmxlZnQubGVuZ3RofHxlPnRoaXMubGVmdC5sZW5ndGgmJnRoaXMucmlnaHQubGVuZ3RoPT09MHx8ZTwwJiZ0aGlzLmxlZnQubGVuZ3RoPT09MCkpaWYoZTx0aGlzLmxlZnQubGVuZ3RoKXtsZXQgcj10aGlzLmxlZnQuc3BsaWNlKGUsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtBYyh0aGlzLnJpZ2h0LHIucmV2ZXJzZSgpKX1lbHNle2xldCByPXRoaXMucmlnaHQuc3BsaWNlKHRoaXMubGVmdC5sZW5ndGgrdGhpcy5yaWdodC5sZW5ndGgtZSxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO0FjKHRoaXMubGVmdCxyLnJldmVyc2UoKSl9fX07ZnVuY3Rpb24gQWModCxlKXtsZXQgcj0wO2lmKGUubGVuZ3RoPDFlNCl0LnB1c2goLi4uZSk7ZWxzZSBmb3IoO3I8ZS5sZW5ndGg7KXQucHVzaCguLi5lLnNsaWNlKHIscisxZTQpKSxyKz0xZTR9byhBYywiY2h1bmtlZFB1c2giKTtmdW5jdGlvbiBGZCh0KXtsZXQgZT17fSxyPS0xLG4saSxzLGEsbCxjLHUsZj1uZXcgJGModCk7Zm9yKDsrK3I8Zi5sZW5ndGg7KXtmb3IoO3IgaW4gZTspcj1lW3JdO2lmKG49Zi5nZXQociksciYmblsxXS50eXBlPT09ImNodW5rRmxvdyImJmYuZ2V0KHItMSlbMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeCImJihjPW5bMV0uX3Rva2VuaXplci5ldmVudHMscz0wLHM8Yy5sZW5ndGgmJmNbc11bMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiJiYocys9MiksczxjLmxlbmd0aCYmY1tzXVsxXS50eXBlPT09ImNvbnRlbnQiKSlmb3IoOysrczxjLmxlbmd0aCYmY1tzXVsxXS50eXBlIT09ImNvbnRlbnQiOyljW3NdWzFdLnR5cGU9PT0iY2h1bmtUZXh0IiYmKGNbc11bMV0uX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtPSEwLHMrKyk7aWYoblswXT09PSJlbnRlciIpblsxXS5jb250ZW50VHlwZSYmKE9iamVjdC5hc3NpZ24oZSxqQihmLHIpKSxyPWVbcl0sdT0hMCk7ZWxzZSBpZihuWzFdLl9jb250YWluZXIpe2ZvcihzPXIsaT12b2lkIDA7cy0tOylpZihhPWYuZ2V0KHMpLGFbMV0udHlwZT09PSJsaW5lRW5kaW5nInx8YVsxXS50eXBlPT09ImxpbmVFbmRpbmdCbGFuayIpYVswXT09PSJlbnRlciImJihpJiYoZi5nZXQoaSlbMV0udHlwZT0ibGluZUVuZGluZ0JsYW5rIiksYVsxXS50eXBlPSJsaW5lRW5kaW5nIixpPXMpO2Vsc2UgaWYoIShhWzFdLnR5cGU9PT0ibGluZVByZWZpeCJ8fGFbMV0udHlwZT09PSJsaXN0SXRlbUluZGVudCIpKWJyZWFrO2kmJihuWzFdLmVuZD17Li4uZi5nZXQoaSlbMV0uc3RhcnR9LGw9Zi5zbGljZShpLHIpLGwudW5zaGlmdChuKSxmLnNwbGljZShpLHItaSsxLGwpKX19cmV0dXJuIFplKHQsMCxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksZi5zbGljZSgwKSksIXV9byhGZCwic3VidG9rZW5pemUiKTtmdW5jdGlvbiBqQih0LGUpe2xldCByPXQuZ2V0KGUpWzFdLG49dC5nZXQoZSlbMl0saT1lLTEscz1bXSxhPXIuX3Rva2VuaXplcjthfHwoYT1uLnBhcnNlcltyLmNvbnRlbnRUeXBlXShyLnN0YXJ0KSxyLl9jb250ZW50VHlwZVRleHRUcmFpbGluZyYmKGEuX2NvbnRlbnRUeXBlVGV4dFRyYWlsaW5nPSEwKSk7bGV0IGw9YS5ldmVudHMsYz1bXSx1PXt9LGYscCxoPS0xLGQ9cixtPTAsZz0wLHk9W2ddO2Zvcig7ZDspe2Zvcig7dC5nZXQoKytpKVsxXSE9PWQ7KTtzLnB1c2goaSksZC5fdG9rZW5pemVyfHwoZj1uLnNsaWNlU3RyZWFtKGQpLGQubmV4dHx8Zi5wdXNoKG51bGwpLHAmJmEuZGVmaW5lU2tpcChkLnN0YXJ0KSxkLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSYmKGEuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbT0hMCksYS53cml0ZShmKSxkLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSYmKGEuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbT12b2lkIDApKSxwPWQsZD1kLm5leHR9Zm9yKGQ9cjsrK2g8bC5sZW5ndGg7KWxbaF1bMF09PT0iZXhpdCImJmxbaC0xXVswXT09PSJlbnRlciImJmxbaF1bMV0udHlwZT09PWxbaC0xXVsxXS50eXBlJiZsW2hdWzFdLnN0YXJ0LmxpbmUhPT1sW2hdWzFdLmVuZC5saW5lJiYoZz1oKzEseS5wdXNoKGcpLGQuX3Rva2VuaXplcj12b2lkIDAsZC5wcmV2aW91cz12b2lkIDAsZD1kLm5leHQpO2ZvcihhLmV2ZW50cz1bXSxkPyhkLl90b2tlbml6ZXI9dm9pZCAwLGQucHJldmlvdXM9dm9pZCAwKTp5LnBvcCgpLGg9eS5sZW5ndGg7aC0tOyl7bGV0IHg9bC5zbGljZSh5W2hdLHlbaCsxXSksaz1zLnBvcCgpO2MucHVzaChbayxrK3gubGVuZ3RoLTFdKSx0LnNwbGljZShrLDIseCl9Zm9yKGMucmV2ZXJzZSgpLGg9LTE7KytoPGMubGVuZ3RoOyl1W20rY1toXVswXV09bStjW2hdWzFdLG0rPWNbaF1bMV0tY1toXVswXS0xO3JldHVybiB1fW8oakIsInN1YmNvbnRlbnQiKTt2YXIgZGI9e3Jlc29sdmU6cUIsdG9rZW5pemU6VUJ9LFdCPXtwYXJ0aWFsOiEwLHRva2VuaXplOlZCfTtmdW5jdGlvbiBxQih0KXtyZXR1cm4gRmQodCksdH1vKHFCLCJyZXNvbHZlQ29udGVudCIpO2Z1bmN0aW9uIFVCKHQsZSl7bGV0IHI7cmV0dXJuIG47ZnVuY3Rpb24gbihsKXtyZXR1cm4gdC5lbnRlcigiY29udGVudCIpLHI9dC5lbnRlcigiY2h1bmtDb250ZW50Iix7Y29udGVudFR5cGU6ImNvbnRlbnQifSksaShsKX1mdW5jdGlvbiBpKGwpe3JldHVybiBsPT09bnVsbD9zKGwpOlkobCk/dC5jaGVjayhXQixhLHMpKGwpOih0LmNvbnN1bWUobCksaSl9ZnVuY3Rpb24gcyhsKXtyZXR1cm4gdC5leGl0KCJjaHVua0NvbnRlbnQiKSx0LmV4aXQoImNvbnRlbnQiKSxlKGwpfWZ1bmN0aW9uIGEobCl7cmV0dXJuIHQuY29uc3VtZShsKSx0LmV4aXQoImNodW5rQ29udGVudCIpLHIubmV4dD10LmVudGVyKCJjaHVua0NvbnRlbnQiLHtjb250ZW50VHlwZToiY29udGVudCIscHJldmlvdXM6cn0pLHI9ci5uZXh0LGl9fW8oVUIsInRva2VuaXplQ29udGVudCIpO2Z1bmN0aW9uIFZCKHQsZSxyKXtsZXQgbj10aGlzO3JldHVybiBpO2Z1bmN0aW9uIGkoYSl7cmV0dXJuIHQuZXhpdCgiY2h1bmtDb250ZW50IiksdC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShhKSx0LmV4aXQoImxpbmVFbmRpbmciKSxpZSh0LHMsImxpbmVQcmVmaXgiKX1mdW5jdGlvbiBzKGEpe2lmKGE9PT1udWxsfHxZKGEpKXJldHVybiByKGEpO2xldCBsPW4uZXZlbnRzW24uZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4hbi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpJiZsJiZsWzFdLnR5cGU9PT0ibGluZVByZWZpeCImJmxbMl0uc2xpY2VTZXJpYWxpemUobFsxXSwhMCkubGVuZ3RoPj00P2UoYSk6dC5pbnRlcnJ1cHQobi5wYXJzZXIuY29uc3RydWN0cy5mbG93LHIsZSkoYSl9fW8oVkIsInRva2VuaXplQ29udGludWF0aW9uIik7ZnVuY3Rpb24gQWQodCxlLHIsbixpLHMsYSxsLGMpe2xldCB1PWN8fE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxmPTA7cmV0dXJuIHA7ZnVuY3Rpb24gcCh4KXtyZXR1cm4geD09PTYwPyh0LmVudGVyKG4pLHQuZW50ZXIoaSksdC5lbnRlcihzKSx0LmNvbnN1bWUoeCksdC5leGl0KHMpLGgpOng9PT1udWxsfHx4PT09MzJ8fHg9PT00MXx8VG8oeCk/cih4KToodC5lbnRlcihuKSx0LmVudGVyKGEpLHQuZW50ZXIobCksdC5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLGcoeCkpfWZ1bmN0aW9uIGgoeCl7cmV0dXJuIHg9PT02Mj8odC5lbnRlcihzKSx0LmNvbnN1bWUoeCksdC5leGl0KHMpLHQuZXhpdChpKSx0LmV4aXQobiksZSk6KHQuZW50ZXIobCksdC5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLGQoeCkpfWZ1bmN0aW9uIGQoeCl7cmV0dXJuIHg9PT02Mj8odC5leGl0KCJjaHVua1N0cmluZyIpLHQuZXhpdChsKSxoKHgpKTp4PT09bnVsbHx8eD09PTYwfHxZKHgpP3IoeCk6KHQuY29uc3VtZSh4KSx4PT09OTI/bTpkKX1mdW5jdGlvbiBtKHgpe3JldHVybiB4PT09NjB8fHg9PT02Mnx8eD09PTkyPyh0LmNvbnN1bWUoeCksZCk6ZCh4KX1mdW5jdGlvbiBnKHgpe3JldHVybiFmJiYoeD09PW51bGx8fHg9PT00MXx8eWUoeCkpPyh0LmV4aXQoImNodW5rU3RyaW5nIiksdC5leGl0KGwpLHQuZXhpdChhKSx0LmV4aXQobiksZSh4KSk6Zjx1JiZ4PT09NDA/KHQuY29uc3VtZSh4KSxmKyssZyk6eD09PTQxPyh0LmNvbnN1bWUoeCksZi0tLGcpOng9PT1udWxsfHx4PT09MzJ8fHg9PT00MHx8VG8oeCk/cih4KToodC5jb25zdW1lKHgpLHg9PT05Mj95OmcpfWZ1bmN0aW9uIHkoeCl7cmV0dXJuIHg9PT00MHx8eD09PTQxfHx4PT09OTI/KHQuY29uc3VtZSh4KSxnKTpnKHgpfX1vKEFkLCJmYWN0b3J5RGVzdGluYXRpb24iKTtmdW5jdGlvbiAkZCh0LGUscixuLGkscyl7bGV0IGE9dGhpcyxsPTAsYztyZXR1cm4gdTtmdW5jdGlvbiB1KGQpe3JldHVybiB0LmVudGVyKG4pLHQuZW50ZXIoaSksdC5jb25zdW1lKGQpLHQuZXhpdChpKSx0LmVudGVyKHMpLGZ9ZnVuY3Rpb24gZihkKXtyZXR1cm4gbD45OTl8fGQ9PT1udWxsfHxkPT09OTF8fGQ9PT05MyYmIWN8fGQ9PT05NCYmIWwmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIGEucGFyc2VyLmNvbnN0cnVjdHM/cihkKTpkPT09OTM/KHQuZXhpdChzKSx0LmVudGVyKGkpLHQuY29uc3VtZShkKSx0LmV4aXQoaSksdC5leGl0KG4pLGUpOlkoZCk/KHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUoZCksdC5leGl0KCJsaW5lRW5kaW5nIiksZik6KHQuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxwKGQpKX1mdW5jdGlvbiBwKGQpe3JldHVybiBkPT09bnVsbHx8ZD09PTkxfHxkPT09OTN8fFkoZCl8fGwrKz45OTk/KHQuZXhpdCgiY2h1bmtTdHJpbmciKSxmKGQpKToodC5jb25zdW1lKGQpLGN8fChjPSFlZShkKSksZD09PTkyP2g6cCl9ZnVuY3Rpb24gaChkKXtyZXR1cm4gZD09PTkxfHxkPT09OTJ8fGQ9PT05Mz8odC5jb25zdW1lKGQpLGwrKyxwKTpwKGQpfX1vKCRkLCJmYWN0b3J5TGFiZWwiKTtmdW5jdGlvbiBCZCh0LGUscixuLGkscyl7bGV0IGE7cmV0dXJuIGw7ZnVuY3Rpb24gbChoKXtyZXR1cm4gaD09PTM0fHxoPT09Mzl8fGg9PT00MD8odC5lbnRlcihuKSx0LmVudGVyKGkpLHQuY29uc3VtZShoKSx0LmV4aXQoaSksYT1oPT09NDA/NDE6aCxjKTpyKGgpfWZ1bmN0aW9uIGMoaCl7cmV0dXJuIGg9PT1hPyh0LmVudGVyKGkpLHQuY29uc3VtZShoKSx0LmV4aXQoaSksdC5leGl0KG4pLGUpOih0LmVudGVyKHMpLHUoaCkpfWZ1bmN0aW9uIHUoaCl7cmV0dXJuIGg9PT1hPyh0LmV4aXQocyksYyhhKSk6aD09PW51bGw/cihoKTpZKGgpPyh0LmVudGVyKCJsaW5lRW5kaW5nIiksdC5jb25zdW1lKGgpLHQuZXhpdCgibGluZUVuZGluZyIpLGllKHQsdSwibGluZVByZWZpeCIpKToodC5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLGYoaCkpfWZ1bmN0aW9uIGYoaCl7cmV0dXJuIGg9PT1hfHxoPT09bnVsbHx8WShoKT8odC5leGl0KCJjaHVua1N0cmluZyIpLHUoaCkpOih0LmNvbnN1bWUoaCksaD09PTkyP3A6Zil9ZnVuY3Rpb24gcChoKXtyZXR1cm4gaD09PWF8fGg9PT05Mj8odC5jb25zdW1lKGgpLGYpOmYoaCl9fW8oQmQsImZhY3RvcnlUaXRsZSIpO2Z1bmN0aW9uIGpvKHQsZSl7bGV0IHI7cmV0dXJuIG47ZnVuY3Rpb24gbihpKXtyZXR1cm4gWShpKT8odC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShpKSx0LmV4aXQoImxpbmVFbmRpbmciKSxyPSEwLG4pOmVlKGkpP2llKHQsbixyPyJsaW5lUHJlZml4IjoibGluZVN1ZmZpeCIpKGkpOmUoaSl9fW8oam8sImZhY3RvcnlXaGl0ZXNwYWNlIik7dmFyIG1iPXtuYW1lOiJkZWZpbml0aW9uIix0b2tlbml6ZTpHQn0sWUI9e3BhcnRpYWw6ITAsdG9rZW5pemU6UUJ9O2Z1bmN0aW9uIEdCKHQsZSxyKXtsZXQgbj10aGlzLGk7cmV0dXJuIHM7ZnVuY3Rpb24gcyhkKXtyZXR1cm4gdC5lbnRlcigiZGVmaW5pdGlvbiIpLGEoZCl9ZnVuY3Rpb24gYShkKXtyZXR1cm4gJGQuY2FsbChuLHQsbCxyLCJkZWZpbml0aW9uTGFiZWwiLCJkZWZpbml0aW9uTGFiZWxNYXJrZXIiLCJkZWZpbml0aW9uTGFiZWxTdHJpbmciKShkKX1mdW5jdGlvbiBsKGQpe3JldHVybiBpPUtlKG4uc2xpY2VTZXJpYWxpemUobi5ldmVudHNbbi5ldmVudHMubGVuZ3RoLTFdWzFdKS5zbGljZSgxLC0xKSksZD09PTU4Pyh0LmVudGVyKCJkZWZpbml0aW9uTWFya2VyIiksdC5jb25zdW1lKGQpLHQuZXhpdCgiZGVmaW5pdGlvbk1hcmtlciIpLGMpOnIoZCl9ZnVuY3Rpb24gYyhkKXtyZXR1cm4geWUoZCk/am8odCx1KShkKTp1KGQpfWZ1bmN0aW9uIHUoZCl7cmV0dXJuIEFkKHQsZixyLCJkZWZpbml0aW9uRGVzdGluYXRpb24iLCJkZWZpbml0aW9uRGVzdGluYXRpb25MaXRlcmFsIiwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uTGl0ZXJhbE1hcmtlciIsImRlZmluaXRpb25EZXN0aW5hdGlvblJhdyIsImRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZyIpKGQpfWZ1bmN0aW9uIGYoZCl7cmV0dXJuIHQuYXR0ZW1wdChZQixwLHApKGQpfWZ1bmN0aW9uIHAoZCl7cmV0dXJuIGVlKGQpP2llKHQsaCwid2hpdGVzcGFjZSIpKGQpOmgoZCl9ZnVuY3Rpb24gaChkKXtyZXR1cm4gZD09PW51bGx8fFkoZCk/KHQuZXhpdCgiZGVmaW5pdGlvbiIpLG4ucGFyc2VyLmRlZmluZWQucHVzaChpKSxlKGQpKTpyKGQpfX1vKEdCLCJ0b2tlbml6ZURlZmluaXRpb24iKTtmdW5jdGlvbiBRQih0LGUscil7cmV0dXJuIG47ZnVuY3Rpb24gbihsKXtyZXR1cm4geWUobCk/am8odCxpKShsKTpyKGwpfWZ1bmN0aW9uIGkobCl7cmV0dXJuIEJkKHQscyxyLCJkZWZpbml0aW9uVGl0bGUiLCJkZWZpbml0aW9uVGl0bGVNYXJrZXIiLCJkZWZpbml0aW9uVGl0bGVTdHJpbmciKShsKX1mdW5jdGlvbiBzKGwpe3JldHVybiBlZShsKT9pZSh0LGEsIndoaXRlc3BhY2UiKShsKTphKGwpfWZ1bmN0aW9uIGEobCl7cmV0dXJuIGw9PT1udWxsfHxZKGwpP2UobCk6cihsKX19byhRQiwidG9rZW5pemVUaXRsZUJlZm9yZSIpO3ZhciBnYj17bmFtZToiaGFyZEJyZWFrRXNjYXBlIix0b2tlbml6ZTpKQn07ZnVuY3Rpb24gSkIodCxlLHIpe3JldHVybiBuO2Z1bmN0aW9uIG4ocyl7cmV0dXJuIHQuZW50ZXIoImhhcmRCcmVha0VzY2FwZSIpLHQuY29uc3VtZShzKSxpfWZ1bmN0aW9uIGkocyl7cmV0dXJuIFkocyk/KHQuZXhpdCgiaGFyZEJyZWFrRXNjYXBlIiksZShzKSk6cihzKX19byhKQiwidG9rZW5pemVIYXJkQnJlYWtFc2NhcGUiKTt2YXIgeWI9e25hbWU6ImhlYWRpbmdBdHgiLHJlc29sdmU6S0IsdG9rZW5pemU6WEJ9O2Z1bmN0aW9uIEtCKHQsZSl7bGV0IHI9dC5sZW5ndGgtMixuPTMsaSxzO3JldHVybiB0W25dWzFdLnR5cGU9PT0id2hpdGVzcGFjZSImJihuKz0yKSxyLTI+biYmdFtyXVsxXS50eXBlPT09IndoaXRlc3BhY2UiJiYoci09MiksdFtyXVsxXS50eXBlPT09ImF0eEhlYWRpbmdTZXF1ZW5jZSImJihuPT09ci0xfHxyLTQ+biYmdFtyLTJdWzFdLnR5cGU9PT0id2hpdGVzcGFjZSIpJiYoci09bisxPT09cj8yOjQpLHI+biYmKGk9e3R5cGU6ImF0eEhlYWRpbmdUZXh0IixzdGFydDp0W25dWzFdLnN0YXJ0LGVuZDp0W3JdWzFdLmVuZH0scz17dHlwZToiY2h1bmtUZXh0IixzdGFydDp0W25dWzFdLnN0YXJ0LGVuZDp0W3JdWzFdLmVuZCxjb250ZW50VHlwZToidGV4dCJ9LFplKHQsbixyLW4rMSxbWyJlbnRlciIsaSxlXSxbImVudGVyIixzLGVdLFsiZXhpdCIscyxlXSxbImV4aXQiLGksZV1dKSksdH1vKEtCLCJyZXNvbHZlSGVhZGluZ0F0eCIpO2Z1bmN0aW9uIFhCKHQsZSxyKXtsZXQgbj0wO3JldHVybiBpO2Z1bmN0aW9uIGkoZil7cmV0dXJuIHQuZW50ZXIoImF0eEhlYWRpbmciKSxzKGYpfWZ1bmN0aW9uIHMoZil7cmV0dXJuIHQuZW50ZXIoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLGEoZil9ZnVuY3Rpb24gYShmKXtyZXR1cm4gZj09PTM1JiZuKys8Nj8odC5jb25zdW1lKGYpLGEpOmY9PT1udWxsfHx5ZShmKT8odC5leGl0KCJhdHhIZWFkaW5nU2VxdWVuY2UiKSxsKGYpKTpyKGYpfWZ1bmN0aW9uIGwoZil7cmV0dXJuIGY9PT0zNT8odC5lbnRlcigiYXR4SGVhZGluZ1NlcXVlbmNlIiksYyhmKSk6Zj09PW51bGx8fFkoZik/KHQuZXhpdCgiYXR4SGVhZGluZyIpLGUoZikpOmVlKGYpP2llKHQsbCwid2hpdGVzcGFjZSIpKGYpOih0LmVudGVyKCJhdHhIZWFkaW5nVGV4dCIpLHUoZikpfWZ1bmN0aW9uIGMoZil7cmV0dXJuIGY9PT0zNT8odC5jb25zdW1lKGYpLGMpOih0LmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLGwoZikpfWZ1bmN0aW9uIHUoZil7cmV0dXJuIGY9PT1udWxsfHxmPT09MzV8fHllKGYpPyh0LmV4aXQoImF0eEhlYWRpbmdUZXh0IiksbChmKSk6KHQuY29uc3VtZShmKSx1KX19byhYQiwidG9rZW5pemVIZWFkaW5nQXR4Iik7dmFyIHNNPVsiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImJhc2UiLCJiYXNlZm9udCIsImJsb2NrcXVvdGUiLCJib2R5IiwiY2FwdGlvbiIsImNlbnRlciIsImNvbCIsImNvbGdyb3VwIiwiZGQiLCJkZXRhaWxzIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImZvcm0iLCJmcmFtZSIsImZyYW1lc2V0IiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhyIiwiaHRtbCIsImlmcmFtZSIsImxlZ2VuZCIsImxpIiwibGluayIsIm1haW4iLCJtZW51IiwibWVudWl0ZW0iLCJuYXYiLCJub2ZyYW1lcyIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJwIiwicGFyYW0iLCJzZWFyY2giLCJzZWN0aW9uIiwic3VtbWFyeSIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpdGxlIiwidHIiLCJ0cmFjayIsInVsIl0seGI9WyJwcmUiLCJzY3JpcHQiLCJzdHlsZSIsInRleHRhcmVhIl07dmFyIGJiPXtjb25jcmV0ZTohMCxuYW1lOiJodG1sRmxvdyIscmVzb2x2ZVRvOnR6LHRva2VuaXplOnJ6fSxaQj17cGFydGlhbDohMCx0b2tlbml6ZTppen0sZXo9e3BhcnRpYWw6ITAsdG9rZW5pemU6bnp9O2Z1bmN0aW9uIHR6KHQpe2xldCBlPXQubGVuZ3RoO2Zvcig7ZS0tJiYhKHRbZV1bMF09PT0iZW50ZXIiJiZ0W2VdWzFdLnR5cGU9PT0iaHRtbEZsb3ciKTspO3JldHVybiBlPjEmJnRbZS0yXVsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiYodFtlXVsxXS5zdGFydD10W2UtMl1bMV0uc3RhcnQsdFtlKzFdWzFdLnN0YXJ0PXRbZS0yXVsxXS5zdGFydCx0LnNwbGljZShlLTIsMikpLHR9byh0eiwicmVzb2x2ZVRvSHRtbEZsb3ciKTtmdW5jdGlvbiByeih0LGUscil7bGV0IG49dGhpcyxpLHMsYSxsLGM7cmV0dXJuIHU7ZnVuY3Rpb24gdShTKXtyZXR1cm4gZihTKX1mdW5jdGlvbiBmKFMpe3JldHVybiB0LmVudGVyKCJodG1sRmxvdyIpLHQuZW50ZXIoImh0bWxGbG93RGF0YSIpLHQuY29uc3VtZShTKSxwfWZ1bmN0aW9uIHAoUyl7cmV0dXJuIFM9PT0zMz8odC5jb25zdW1lKFMpLGgpOlM9PT00Nz8odC5jb25zdW1lKFMpLHM9ITAsZyk6Uz09PTYzPyh0LmNvbnN1bWUoUyksaT0zLG4uaW50ZXJydXB0P2U6dyk6Y3QoUyk/KHQuY29uc3VtZShTKSxhPVN0cmluZy5mcm9tQ2hhckNvZGUoUykseSk6cihTKX1mdW5jdGlvbiBoKFMpe3JldHVybiBTPT09NDU/KHQuY29uc3VtZShTKSxpPTIsZCk6Uz09PTkxPyh0LmNvbnN1bWUoUyksaT01LGw9MCxtKTpjdChTKT8odC5jb25zdW1lKFMpLGk9NCxuLmludGVycnVwdD9lOncpOnIoUyl9ZnVuY3Rpb24gZChTKXtyZXR1cm4gUz09PTQ1Pyh0LmNvbnN1bWUoUyksbi5pbnRlcnJ1cHQ/ZTp3KTpyKFMpfWZ1bmN0aW9uIG0oUyl7bGV0IEJlPSJDREFUQVsiO3JldHVybiBTPT09QmUuY2hhckNvZGVBdChsKyspPyh0LmNvbnN1bWUoUyksbD09PUJlLmxlbmd0aD9uLmludGVycnVwdD9lOno6bSk6cihTKX1mdW5jdGlvbiBnKFMpe3JldHVybiBjdChTKT8odC5jb25zdW1lKFMpLGE9U3RyaW5nLmZyb21DaGFyQ29kZShTKSx5KTpyKFMpfWZ1bmN0aW9uIHkoUyl7aWYoUz09PW51bGx8fFM9PT00N3x8Uz09PTYyfHx5ZShTKSl7bGV0IEJlPVM9PT00NyxldD1hLnRvTG93ZXJDYXNlKCk7cmV0dXJuIUJlJiYhcyYmeGIuaW5jbHVkZXMoZXQpPyhpPTEsbi5pbnRlcnJ1cHQ/ZShTKTp6KFMpKTpzTS5pbmNsdWRlcyhhLnRvTG93ZXJDYXNlKCkpPyhpPTYsQmU/KHQuY29uc3VtZShTKSx4KTpuLmludGVycnVwdD9lKFMpOnooUykpOihpPTcsbi5pbnRlcnJ1cHQmJiFuLnBhcnNlci5sYXp5W24ubm93KCkubGluZV0/cihTKTpzP2soUyk6VChTKSl9cmV0dXJuIFM9PT00NXx8UWUoUyk/KHQuY29uc3VtZShTKSxhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFMpLHkpOnIoUyl9ZnVuY3Rpb24geChTKXtyZXR1cm4gUz09PTYyPyh0LmNvbnN1bWUoUyksbi5pbnRlcnJ1cHQ/ZTp6KTpyKFMpfWZ1bmN0aW9uIGsoUyl7cmV0dXJuIGVlKFMpPyh0LmNvbnN1bWUoUyksayk6TShTKX1mdW5jdGlvbiBUKFMpe3JldHVybiBTPT09NDc/KHQuY29uc3VtZShTKSxNKTpTPT09NTh8fFM9PT05NXx8Y3QoUyk/KHQuY29uc3VtZShTKSxSKTplZShTKT8odC5jb25zdW1lKFMpLFQpOk0oUyl9ZnVuY3Rpb24gUihTKXtyZXR1cm4gUz09PTQ1fHxTPT09NDZ8fFM9PT01OHx8Uz09PTk1fHxRZShTKT8odC5jb25zdW1lKFMpLFIpOl8oUyl9ZnVuY3Rpb24gXyhTKXtyZXR1cm4gUz09PTYxPyh0LmNvbnN1bWUoUyksRSk6ZWUoUyk/KHQuY29uc3VtZShTKSxfKTpUKFMpfWZ1bmN0aW9uIEUoUyl7cmV0dXJuIFM9PT1udWxsfHxTPT09NjB8fFM9PT02MXx8Uz09PTYyfHxTPT09OTY/cihTKTpTPT09MzR8fFM9PT0zOT8odC5jb25zdW1lKFMpLGM9UyxBKTplZShTKT8odC5jb25zdW1lKFMpLEUpOkYoUyl9ZnVuY3Rpb24gQShTKXtyZXR1cm4gUz09PWM/KHQuY29uc3VtZShTKSxjPW51bGwsVSk6Uz09PW51bGx8fFkoUyk/cihTKToodC5jb25zdW1lKFMpLEEpfWZ1bmN0aW9uIEYoUyl7cmV0dXJuIFM9PT1udWxsfHxTPT09MzR8fFM9PT0zOXx8Uz09PTQ3fHxTPT09NjB8fFM9PT02MXx8Uz09PTYyfHxTPT09OTZ8fHllKFMpP18oUyk6KHQuY29uc3VtZShTKSxGKX1mdW5jdGlvbiBVKFMpe3JldHVybiBTPT09NDd8fFM9PT02Mnx8ZWUoUyk/VChTKTpyKFMpfWZ1bmN0aW9uIE0oUyl7cmV0dXJuIFM9PT02Mj8odC5jb25zdW1lKFMpLGJlKTpyKFMpfWZ1bmN0aW9uIGJlKFMpe3JldHVybiBTPT09bnVsbHx8WShTKT96KFMpOmVlKFMpPyh0LmNvbnN1bWUoUyksYmUpOnIoUyl9ZnVuY3Rpb24geihTKXtyZXR1cm4gUz09PTQ1JiZpPT09Mj8odC5jb25zdW1lKFMpLFcpOlM9PT02MCYmaT09PTE/KHQuY29uc3VtZShTKSxHKTpTPT09NjImJmk9PT00Pyh0LmNvbnN1bWUoUyksd2UpOlM9PT02MyYmaT09PTM/KHQuY29uc3VtZShTKSx3KTpTPT09OTMmJmk9PT01Pyh0LmNvbnN1bWUoUyksdWUpOlkoUykmJihpPT09Nnx8aT09PTcpPyh0LmV4aXQoImh0bWxGbG93RGF0YSIpLHQuY2hlY2soWkIsRWUsSSkoUykpOlM9PT1udWxsfHxZKFMpPyh0LmV4aXQoImh0bWxGbG93RGF0YSIpLEkoUykpOih0LmNvbnN1bWUoUykseil9ZnVuY3Rpb24gSShTKXtyZXR1cm4gdC5jaGVjayhleixMLEVlKShTKX1mdW5jdGlvbiBMKFMpe3JldHVybiB0LmVudGVyKCJsaW5lRW5kaW5nIiksdC5jb25zdW1lKFMpLHQuZXhpdCgibGluZUVuZGluZyIpLEh9ZnVuY3Rpb24gSChTKXtyZXR1cm4gUz09PW51bGx8fFkoUyk/SShTKToodC5lbnRlcigiaHRtbEZsb3dEYXRhIikseihTKSl9ZnVuY3Rpb24gVyhTKXtyZXR1cm4gUz09PTQ1Pyh0LmNvbnN1bWUoUyksdyk6eihTKX1mdW5jdGlvbiBHKFMpe3JldHVybiBTPT09NDc/KHQuY29uc3VtZShTKSxhPSIiLFgpOnooUyl9ZnVuY3Rpb24gWChTKXtpZihTPT09NjIpe2xldCBCZT1hLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHhiLmluY2x1ZGVzKEJlKT8odC5jb25zdW1lKFMpLHdlKTp6KFMpfXJldHVybiBjdChTKSYmYS5sZW5ndGg8OD8odC5jb25zdW1lKFMpLGErPVN0cmluZy5mcm9tQ2hhckNvZGUoUyksWCk6eihTKX1mdW5jdGlvbiB1ZShTKXtyZXR1cm4gUz09PTkzPyh0LmNvbnN1bWUoUyksdyk6eihTKX1mdW5jdGlvbiB3KFMpe3JldHVybiBTPT09NjI/KHQuY29uc3VtZShTKSx3ZSk6Uz09PTQ1JiZpPT09Mj8odC5jb25zdW1lKFMpLHcpOnooUyl9ZnVuY3Rpb24gd2UoUyl7cmV0dXJuIFM9PT1udWxsfHxZKFMpPyh0LmV4aXQoImh0bWxGbG93RGF0YSIpLEVlKFMpKToodC5jb25zdW1lKFMpLHdlKX1mdW5jdGlvbiBFZShTKXtyZXR1cm4gdC5leGl0KCJodG1sRmxvdyIpLGUoUyl9fW8ocnosInRva2VuaXplSHRtbEZsb3ciKTtmdW5jdGlvbiBueih0LGUscil7bGV0IG49dGhpcztyZXR1cm4gaTtmdW5jdGlvbiBpKGEpe3JldHVybiBZKGEpPyh0LmVudGVyKCJsaW5lRW5kaW5nIiksdC5jb25zdW1lKGEpLHQuZXhpdCgibGluZUVuZGluZyIpLHMpOnIoYSl9ZnVuY3Rpb24gcyhhKXtyZXR1cm4gbi5wYXJzZXIubGF6eVtuLm5vdygpLmxpbmVdP3IoYSk6ZShhKX19byhueiwidG9rZW5pemVOb25MYXp5Q29udGludWF0aW9uU3RhcnQiKTtmdW5jdGlvbiBpeih0LGUscil7cmV0dXJuIG47ZnVuY3Rpb24gbihpKXtyZXR1cm4gdC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShpKSx0LmV4aXQoImxpbmVFbmRpbmciKSx0LmF0dGVtcHQoRW4sZSxyKX19byhpeiwidG9rZW5pemVCbGFua0xpbmVCZWZvcmUiKTt2YXIgd2I9e25hbWU6Imh0bWxUZXh0Iix0b2tlbml6ZTpven07ZnVuY3Rpb24gb3oodCxlLHIpe2xldCBuPXRoaXMsaSxzLGE7cmV0dXJuIGw7ZnVuY3Rpb24gbCh3KXtyZXR1cm4gdC5lbnRlcigiaHRtbFRleHQiKSx0LmVudGVyKCJodG1sVGV4dERhdGEiKSx0LmNvbnN1bWUodyksY31mdW5jdGlvbiBjKHcpe3JldHVybiB3PT09MzM/KHQuY29uc3VtZSh3KSx1KTp3PT09NDc/KHQuY29uc3VtZSh3KSxfKTp3PT09NjM/KHQuY29uc3VtZSh3KSxUKTpjdCh3KT8odC5jb25zdW1lKHcpLEYpOnIodyl9ZnVuY3Rpb24gdSh3KXtyZXR1cm4gdz09PTQ1Pyh0LmNvbnN1bWUodyksZik6dz09PTkxPyh0LmNvbnN1bWUodykscz0wLG0pOmN0KHcpPyh0LmNvbnN1bWUodyksayk6cih3KX1mdW5jdGlvbiBmKHcpe3JldHVybiB3PT09NDU/KHQuY29uc3VtZSh3KSxkKTpyKHcpfWZ1bmN0aW9uIHAodyl7cmV0dXJuIHc9PT1udWxsP3Iodyk6dz09PTQ1Pyh0LmNvbnN1bWUodyksaCk6WSh3KT8oYT1wLEcodykpOih0LmNvbnN1bWUodykscCl9ZnVuY3Rpb24gaCh3KXtyZXR1cm4gdz09PTQ1Pyh0LmNvbnN1bWUodyksZCk6cCh3KX1mdW5jdGlvbiBkKHcpe3JldHVybiB3PT09NjI/Vyh3KTp3PT09NDU/aCh3KTpwKHcpfWZ1bmN0aW9uIG0odyl7bGV0IHdlPSJDREFUQVsiO3JldHVybiB3PT09d2UuY2hhckNvZGVBdChzKyspPyh0LmNvbnN1bWUodykscz09PXdlLmxlbmd0aD9nOm0pOnIodyl9ZnVuY3Rpb24gZyh3KXtyZXR1cm4gdz09PW51bGw/cih3KTp3PT09OTM/KHQuY29uc3VtZSh3KSx5KTpZKHcpPyhhPWcsRyh3KSk6KHQuY29uc3VtZSh3KSxnKX1mdW5jdGlvbiB5KHcpe3JldHVybiB3PT09OTM/KHQuY29uc3VtZSh3KSx4KTpnKHcpfWZ1bmN0aW9uIHgodyl7cmV0dXJuIHc9PT02Mj9XKHcpOnc9PT05Mz8odC5jb25zdW1lKHcpLHgpOmcodyl9ZnVuY3Rpb24gayh3KXtyZXR1cm4gdz09PW51bGx8fHc9PT02Mj9XKHcpOlkodyk/KGE9ayxHKHcpKToodC5jb25zdW1lKHcpLGspfWZ1bmN0aW9uIFQodyl7cmV0dXJuIHc9PT1udWxsP3Iodyk6dz09PTYzPyh0LmNvbnN1bWUodyksUik6WSh3KT8oYT1ULEcodykpOih0LmNvbnN1bWUodyksVCl9ZnVuY3Rpb24gUih3KXtyZXR1cm4gdz09PTYyP1codyk6VCh3KX1mdW5jdGlvbiBfKHcpe3JldHVybiBjdCh3KT8odC5jb25zdW1lKHcpLEUpOnIodyl9ZnVuY3Rpb24gRSh3KXtyZXR1cm4gdz09PTQ1fHxRZSh3KT8odC5jb25zdW1lKHcpLEUpOkEodyl9ZnVuY3Rpb24gQSh3KXtyZXR1cm4gWSh3KT8oYT1BLEcodykpOmVlKHcpPyh0LmNvbnN1bWUodyksQSk6Vyh3KX1mdW5jdGlvbiBGKHcpe3JldHVybiB3PT09NDV8fFFlKHcpPyh0LmNvbnN1bWUodyksRik6dz09PTQ3fHx3PT09NjJ8fHllKHcpP1Uodyk6cih3KX1mdW5jdGlvbiBVKHcpe3JldHVybiB3PT09NDc/KHQuY29uc3VtZSh3KSxXKTp3PT09NTh8fHc9PT05NXx8Y3Qodyk/KHQuY29uc3VtZSh3KSxNKTpZKHcpPyhhPVUsRyh3KSk6ZWUodyk/KHQuY29uc3VtZSh3KSxVKTpXKHcpfWZ1bmN0aW9uIE0odyl7cmV0dXJuIHc9PT00NXx8dz09PTQ2fHx3PT09NTh8fHc9PT05NXx8UWUodyk/KHQuY29uc3VtZSh3KSxNKTpiZSh3KX1mdW5jdGlvbiBiZSh3KXtyZXR1cm4gdz09PTYxPyh0LmNvbnN1bWUodykseik6WSh3KT8oYT1iZSxHKHcpKTplZSh3KT8odC5jb25zdW1lKHcpLGJlKTpVKHcpfWZ1bmN0aW9uIHoodyl7cmV0dXJuIHc9PT1udWxsfHx3PT09NjB8fHc9PT02MXx8dz09PTYyfHx3PT09OTY/cih3KTp3PT09MzR8fHc9PT0zOT8odC5jb25zdW1lKHcpLGk9dyxJKTpZKHcpPyhhPXosRyh3KSk6ZWUodyk/KHQuY29uc3VtZSh3KSx6KToodC5jb25zdW1lKHcpLEwpfWZ1bmN0aW9uIEkodyl7cmV0dXJuIHc9PT1pPyh0LmNvbnN1bWUodyksaT12b2lkIDAsSCk6dz09PW51bGw/cih3KTpZKHcpPyhhPUksRyh3KSk6KHQuY29uc3VtZSh3KSxJKX1mdW5jdGlvbiBMKHcpe3JldHVybiB3PT09bnVsbHx8dz09PTM0fHx3PT09Mzl8fHc9PT02MHx8dz09PTYxfHx3PT09OTY/cih3KTp3PT09NDd8fHc9PT02Mnx8eWUodyk/VSh3KToodC5jb25zdW1lKHcpLEwpfWZ1bmN0aW9uIEgodyl7cmV0dXJuIHc9PT00N3x8dz09PTYyfHx5ZSh3KT9VKHcpOnIodyl9ZnVuY3Rpb24gVyh3KXtyZXR1cm4gdz09PTYyPyh0LmNvbnN1bWUodyksdC5leGl0KCJodG1sVGV4dERhdGEiKSx0LmV4aXQoImh0bWxUZXh0IiksZSk6cih3KX1mdW5jdGlvbiBHKHcpe3JldHVybiB0LmV4aXQoImh0bWxUZXh0RGF0YSIpLHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUodyksdC5leGl0KCJsaW5lRW5kaW5nIiksWH1mdW5jdGlvbiBYKHcpe3JldHVybiBlZSh3KT9pZSh0LHVlLCJsaW5lUHJlZml4IixuLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpKHcpOnVlKHcpfWZ1bmN0aW9uIHVlKHcpe3JldHVybiB0LmVudGVyKCJodG1sVGV4dERhdGEiKSxhKHcpfX1vKG96LCJ0b2tlbml6ZUh0bWxUZXh0Iik7dmFyIFdvPXtuYW1lOiJsYWJlbEVuZCIscmVzb2x2ZUFsbDpjeixyZXNvbHZlVG86dXosdG9rZW5pemU6Znp9LHN6PXt0b2tlbml6ZTpwen0sYXo9e3Rva2VuaXplOmh6fSxsej17dG9rZW5pemU6ZHp9O2Z1bmN0aW9uIGN6KHQpe2xldCBlPS0xLHI9W107Zm9yKDsrK2U8dC5sZW5ndGg7KXtsZXQgbj10W2VdWzFdO2lmKHIucHVzaCh0W2VdKSxuLnR5cGU9PT0ibGFiZWxJbWFnZSJ8fG4udHlwZT09PSJsYWJlbExpbmsifHxuLnR5cGU9PT0ibGFiZWxFbmQiKXtsZXQgaT1uLnR5cGU9PT0ibGFiZWxJbWFnZSI/NDoyO24udHlwZT0iZGF0YSIsZSs9aX19cmV0dXJuIHQubGVuZ3RoIT09ci5sZW5ndGgmJlplKHQsMCx0Lmxlbmd0aCxyKSx0fW8oY3osInJlc29sdmVBbGxMYWJlbEVuZCIpO2Z1bmN0aW9uIHV6KHQsZSl7bGV0IHI9dC5sZW5ndGgsbj0wLGkscyxhLGw7Zm9yKDtyLS07KWlmKGk9dFtyXVsxXSxzKXtpZihpLnR5cGU9PT0ibGluayJ8fGkudHlwZT09PSJsYWJlbExpbmsiJiZpLl9pbmFjdGl2ZSlicmVhazt0W3JdWzBdPT09ImVudGVyIiYmaS50eXBlPT09ImxhYmVsTGluayImJihpLl9pbmFjdGl2ZT0hMCl9ZWxzZSBpZihhKXtpZih0W3JdWzBdPT09ImVudGVyIiYmKGkudHlwZT09PSJsYWJlbEltYWdlInx8aS50eXBlPT09ImxhYmVsTGluayIpJiYhaS5fYmFsYW5jZWQmJihzPXIsaS50eXBlIT09ImxhYmVsTGluayIpKXtuPTI7YnJlYWt9fWVsc2UgaS50eXBlPT09ImxhYmVsRW5kIiYmKGE9cik7bGV0IGM9e3R5cGU6dFtzXVsxXS50eXBlPT09ImxhYmVsTGluayI/ImxpbmsiOiJpbWFnZSIsc3RhcnQ6ey4uLnRbc11bMV0uc3RhcnR9LGVuZDp7Li4udFt0Lmxlbmd0aC0xXVsxXS5lbmR9fSx1PXt0eXBlOiJsYWJlbCIsc3RhcnQ6ey4uLnRbc11bMV0uc3RhcnR9LGVuZDp7Li4udFthXVsxXS5lbmR9fSxmPXt0eXBlOiJsYWJlbFRleHQiLHN0YXJ0OnsuLi50W3MrbisyXVsxXS5lbmR9LGVuZDp7Li4udFthLTJdWzFdLnN0YXJ0fX07cmV0dXJuIGw9W1siZW50ZXIiLGMsZV0sWyJlbnRlciIsdSxlXV0sbD1udChsLHQuc2xpY2UocysxLHMrbiszKSksbD1udChsLFtbImVudGVyIixmLGVdXSksbD1udChsLEJpKGUucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsLHQuc2xpY2UocytuKzQsYS0zKSxlKSksbD1udChsLFtbImV4aXQiLGYsZV0sdFthLTJdLHRbYS0xXSxbImV4aXQiLHUsZV1dKSxsPW50KGwsdC5zbGljZShhKzEpKSxsPW50KGwsW1siZXhpdCIsYyxlXV0pLFplKHQscyx0Lmxlbmd0aCxsKSx0fW8odXosInJlc29sdmVUb0xhYmVsRW5kIik7ZnVuY3Rpb24gZnoodCxlLHIpe2xldCBuPXRoaXMsaT1uLmV2ZW50cy5sZW5ndGgscyxhO2Zvcig7aS0tOylpZigobi5ldmVudHNbaV1bMV0udHlwZT09PSJsYWJlbEltYWdlInx8bi5ldmVudHNbaV1bMV0udHlwZT09PSJsYWJlbExpbmsiKSYmIW4uZXZlbnRzW2ldWzFdLl9iYWxhbmNlZCl7cz1uLmV2ZW50c1tpXVsxXTticmVha31yZXR1cm4gbDtmdW5jdGlvbiBsKGgpe3JldHVybiBzP3MuX2luYWN0aXZlP3AoaCk6KGE9bi5wYXJzZXIuZGVmaW5lZC5pbmNsdWRlcyhLZShuLnNsaWNlU2VyaWFsaXplKHtzdGFydDpzLmVuZCxlbmQ6bi5ub3coKX0pKSksdC5lbnRlcigibGFiZWxFbmQiKSx0LmVudGVyKCJsYWJlbE1hcmtlciIpLHQuY29uc3VtZShoKSx0LmV4aXQoImxhYmVsTWFya2VyIiksdC5leGl0KCJsYWJlbEVuZCIpLGMpOnIoaCl9ZnVuY3Rpb24gYyhoKXtyZXR1cm4gaD09PTQwP3QuYXR0ZW1wdChzeixmLGE/ZjpwKShoKTpoPT09OTE/dC5hdHRlbXB0KGF6LGYsYT91OnApKGgpOmE/ZihoKTpwKGgpfWZ1bmN0aW9uIHUoaCl7cmV0dXJuIHQuYXR0ZW1wdChseixmLHApKGgpfWZ1bmN0aW9uIGYoaCl7cmV0dXJuIGUoaCl9ZnVuY3Rpb24gcChoKXtyZXR1cm4gcy5fYmFsYW5jZWQ9ITAscihoKX19byhmeiwidG9rZW5pemVMYWJlbEVuZCIpO2Z1bmN0aW9uIHB6KHQsZSxyKXtyZXR1cm4gbjtmdW5jdGlvbiBuKHApe3JldHVybiB0LmVudGVyKCJyZXNvdXJjZSIpLHQuZW50ZXIoInJlc291cmNlTWFya2VyIiksdC5jb25zdW1lKHApLHQuZXhpdCgicmVzb3VyY2VNYXJrZXIiKSxpfWZ1bmN0aW9uIGkocCl7cmV0dXJuIHllKHApP2pvKHQscykocCk6cyhwKX1mdW5jdGlvbiBzKHApe3JldHVybiBwPT09NDE/ZihwKTpBZCh0LGEsbCwicmVzb3VyY2VEZXN0aW5hdGlvbiIsInJlc291cmNlRGVzdGluYXRpb25MaXRlcmFsIiwicmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLCJyZXNvdXJjZURlc3RpbmF0aW9uUmF3IiwicmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZyIsMzIpKHApfWZ1bmN0aW9uIGEocCl7cmV0dXJuIHllKHApP2pvKHQsYykocCk6ZihwKX1mdW5jdGlvbiBsKHApe3JldHVybiByKHApfWZ1bmN0aW9uIGMocCl7cmV0dXJuIHA9PT0zNHx8cD09PTM5fHxwPT09NDA/QmQodCx1LHIsInJlc291cmNlVGl0bGUiLCJyZXNvdXJjZVRpdGxlTWFya2VyIiwicmVzb3VyY2VUaXRsZVN0cmluZyIpKHApOmYocCl9ZnVuY3Rpb24gdShwKXtyZXR1cm4geWUocCk/am8odCxmKShwKTpmKHApfWZ1bmN0aW9uIGYocCl7cmV0dXJuIHA9PT00MT8odC5lbnRlcigicmVzb3VyY2VNYXJrZXIiKSx0LmNvbnN1bWUocCksdC5leGl0KCJyZXNvdXJjZU1hcmtlciIpLHQuZXhpdCgicmVzb3VyY2UiKSxlKTpyKHApfX1vKHB6LCJ0b2tlbml6ZVJlc291cmNlIik7ZnVuY3Rpb24gaHoodCxlLHIpe2xldCBuPXRoaXM7cmV0dXJuIGk7ZnVuY3Rpb24gaShsKXtyZXR1cm4gJGQuY2FsbChuLHQscyxhLCJyZWZlcmVuY2UiLCJyZWZlcmVuY2VNYXJrZXIiLCJyZWZlcmVuY2VTdHJpbmciKShsKX1mdW5jdGlvbiBzKGwpe3JldHVybiBuLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKEtlKG4uc2xpY2VTZXJpYWxpemUobi5ldmVudHNbbi5ldmVudHMubGVuZ3RoLTFdWzFdKS5zbGljZSgxLC0xKSkpP2UobCk6cihsKX1mdW5jdGlvbiBhKGwpe3JldHVybiByKGwpfX1vKGh6LCJ0b2tlbml6ZVJlZmVyZW5jZUZ1bGwiKTtmdW5jdGlvbiBkeih0LGUscil7cmV0dXJuIG47ZnVuY3Rpb24gbihzKXtyZXR1cm4gdC5lbnRlcigicmVmZXJlbmNlIiksdC5lbnRlcigicmVmZXJlbmNlTWFya2VyIiksdC5jb25zdW1lKHMpLHQuZXhpdCgicmVmZXJlbmNlTWFya2VyIiksaX1mdW5jdGlvbiBpKHMpe3JldHVybiBzPT09OTM/KHQuZW50ZXIoInJlZmVyZW5jZU1hcmtlciIpLHQuY29uc3VtZShzKSx0LmV4aXQoInJlZmVyZW5jZU1hcmtlciIpLHQuZXhpdCgicmVmZXJlbmNlIiksZSk6cihzKX19byhkeiwidG9rZW5pemVSZWZlcmVuY2VDb2xsYXBzZWQiKTt2YXIgdmI9e25hbWU6ImxhYmVsU3RhcnRJbWFnZSIscmVzb2x2ZUFsbDpXby5yZXNvbHZlQWxsLHRva2VuaXplOm16fTtmdW5jdGlvbiBteih0LGUscil7bGV0IG49dGhpcztyZXR1cm4gaTtmdW5jdGlvbiBpKGwpe3JldHVybiB0LmVudGVyKCJsYWJlbEltYWdlIiksdC5lbnRlcigibGFiZWxJbWFnZU1hcmtlciIpLHQuY29uc3VtZShsKSx0LmV4aXQoImxhYmVsSW1hZ2VNYXJrZXIiKSxzfWZ1bmN0aW9uIHMobCl7cmV0dXJuIGw9PT05MT8odC5lbnRlcigibGFiZWxNYXJrZXIiKSx0LmNvbnN1bWUobCksdC5leGl0KCJsYWJlbE1hcmtlciIpLHQuZXhpdCgibGFiZWxJbWFnZSIpLGEpOnIobCl9ZnVuY3Rpb24gYShsKXtyZXR1cm4gbD09PTk0JiYiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCJpbiBuLnBhcnNlci5jb25zdHJ1Y3RzP3IobCk6ZShsKX19byhteiwidG9rZW5pemVMYWJlbFN0YXJ0SW1hZ2UiKTt2YXIga2I9e25hbWU6ImxhYmVsU3RhcnRMaW5rIixyZXNvbHZlQWxsOldvLnJlc29sdmVBbGwsdG9rZW5pemU6Z3p9O2Z1bmN0aW9uIGd6KHQsZSxyKXtsZXQgbj10aGlzO3JldHVybiBpO2Z1bmN0aW9uIGkoYSl7cmV0dXJuIHQuZW50ZXIoImxhYmVsTGluayIpLHQuZW50ZXIoImxhYmVsTWFya2VyIiksdC5jb25zdW1lKGEpLHQuZXhpdCgibGFiZWxNYXJrZXIiKSx0LmV4aXQoImxhYmVsTGluayIpLHN9ZnVuY3Rpb24gcyhhKXtyZXR1cm4gYT09PTk0JiYiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCJpbiBuLnBhcnNlci5jb25zdHJ1Y3RzP3IoYSk6ZShhKX19byhneiwidG9rZW5pemVMYWJlbFN0YXJ0TGluayIpO3ZhciBCYz17bmFtZToibGluZUVuZGluZyIsdG9rZW5pemU6eXp9O2Z1bmN0aW9uIHl6KHQsZSl7cmV0dXJuIHI7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShuKSx0LmV4aXQoImxpbmVFbmRpbmciKSxpZSh0LGUsImxpbmVQcmVmaXgiKX19byh5eiwidG9rZW5pemVMaW5lRW5kaW5nIik7dmFyIHFvPXtuYW1lOiJ0aGVtYXRpY0JyZWFrIix0b2tlbml6ZTp4en07ZnVuY3Rpb24geHoodCxlLHIpe2xldCBuPTAsaTtyZXR1cm4gcztmdW5jdGlvbiBzKHUpe3JldHVybiB0LmVudGVyKCJ0aGVtYXRpY0JyZWFrIiksYSh1KX1mdW5jdGlvbiBhKHUpe3JldHVybiBpPXUsbCh1KX1mdW5jdGlvbiBsKHUpe3JldHVybiB1PT09aT8odC5lbnRlcigidGhlbWF0aWNCcmVha1NlcXVlbmNlIiksYyh1KSk6bj49MyYmKHU9PT1udWxsfHxZKHUpKT8odC5leGl0KCJ0aGVtYXRpY0JyZWFrIiksZSh1KSk6cih1KX1mdW5jdGlvbiBjKHUpe3JldHVybiB1PT09aT8odC5jb25zdW1lKHUpLG4rKyxjKToodC5leGl0KCJ0aGVtYXRpY0JyZWFrU2VxdWVuY2UiKSxlZSh1KT9pZSh0LGwsIndoaXRlc3BhY2UiKSh1KTpsKHUpKX19byh4eiwidG9rZW5pemVUaGVtYXRpY0JyZWFrIik7dmFyIFB0PXtjb250aW51YXRpb246e3Rva2VuaXplOmt6fSxleGl0OlR6LG5hbWU6Imxpc3QiLHRva2VuaXplOnZ6fSxiej17cGFydGlhbDohMCx0b2tlbml6ZTpFen0sd3o9e3BhcnRpYWw6ITAsdG9rZW5pemU6U3p9O2Z1bmN0aW9uIHZ6KHQsZSxyKXtsZXQgbj10aGlzLGk9bi5ldmVudHNbbi5ldmVudHMubGVuZ3RoLTFdLHM9aSYmaVsxXS50eXBlPT09ImxpbmVQcmVmaXgiP2lbMl0uc2xpY2VTZXJpYWxpemUoaVsxXSwhMCkubGVuZ3RoOjAsYT0wO3JldHVybiBsO2Z1bmN0aW9uIGwoZCl7bGV0IG09bi5jb250YWluZXJTdGF0ZS50eXBlfHwoZD09PTQyfHxkPT09NDN8fGQ9PT00NT8ibGlzdFVub3JkZXJlZCI6Imxpc3RPcmRlcmVkIik7aWYobT09PSJsaXN0VW5vcmRlcmVkIj8hbi5jb250YWluZXJTdGF0ZS5tYXJrZXJ8fGQ9PT1uLmNvbnRhaW5lclN0YXRlLm1hcmtlcjpLbChkKSl7aWYobi5jb250YWluZXJTdGF0ZS50eXBlfHwobi5jb250YWluZXJTdGF0ZS50eXBlPW0sdC5lbnRlcihtLHtfY29udGFpbmVyOiEwfSkpLG09PT0ibGlzdFVub3JkZXJlZCIpcmV0dXJuIHQuZW50ZXIoImxpc3RJdGVtUHJlZml4IiksZD09PTQyfHxkPT09NDU/dC5jaGVjayhxbyxyLHUpKGQpOnUoZCk7aWYoIW4uaW50ZXJydXB0fHxkPT09NDkpcmV0dXJuIHQuZW50ZXIoImxpc3RJdGVtUHJlZml4IiksdC5lbnRlcigibGlzdEl0ZW1WYWx1ZSIpLGMoZCl9cmV0dXJuIHIoZCl9ZnVuY3Rpb24gYyhkKXtyZXR1cm4gS2woZCkmJisrYTwxMD8odC5jb25zdW1lKGQpLGMpOighbi5pbnRlcnJ1cHR8fGE8MikmJihuLmNvbnRhaW5lclN0YXRlLm1hcmtlcj9kPT09bi5jb250YWluZXJTdGF0ZS5tYXJrZXI6ZD09PTQxfHxkPT09NDYpPyh0LmV4aXQoImxpc3RJdGVtVmFsdWUiKSx1KGQpKTpyKGQpfWZ1bmN0aW9uIHUoZCl7cmV0dXJuIHQuZW50ZXIoImxpc3RJdGVtTWFya2VyIiksdC5jb25zdW1lKGQpLHQuZXhpdCgibGlzdEl0ZW1NYXJrZXIiKSxuLmNvbnRhaW5lclN0YXRlLm1hcmtlcj1uLmNvbnRhaW5lclN0YXRlLm1hcmtlcnx8ZCx0LmNoZWNrKEVuLG4uaW50ZXJydXB0P3I6Zix0LmF0dGVtcHQoYnosaCxwKSl9ZnVuY3Rpb24gZihkKXtyZXR1cm4gbi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPSEwLHMrKyxoKGQpfWZ1bmN0aW9uIHAoZCl7cmV0dXJuIGVlKGQpPyh0LmVudGVyKCJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiKSx0LmNvbnN1bWUoZCksdC5leGl0KCJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiKSxoKTpyKGQpfWZ1bmN0aW9uIGgoZCl7cmV0dXJuIG4uY29udGFpbmVyU3RhdGUuc2l6ZT1zK24uc2xpY2VTZXJpYWxpemUodC5leGl0KCJsaXN0SXRlbVByZWZpeCIpLCEwKS5sZW5ndGgsZShkKX19byh2eiwidG9rZW5pemVMaXN0U3RhcnQiKTtmdW5jdGlvbiBreih0LGUscil7bGV0IG49dGhpcztyZXR1cm4gbi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93PXZvaWQgMCx0LmNoZWNrKEVuLGkscyk7ZnVuY3Rpb24gaShsKXtyZXR1cm4gbi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz1uLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzfHxuLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmUsaWUodCxlLCJsaXN0SXRlbUluZGVudCIsbi5jb250YWluZXJTdGF0ZS5zaXplKzEpKGwpfW8oaSwib25CbGFuayIpO2Z1bmN0aW9uIHMobCl7cmV0dXJuIG4uY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXN8fCFlZShsKT8obi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz12b2lkIDAsbi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPXZvaWQgMCxhKGwpKToobi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz12b2lkIDAsbi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPXZvaWQgMCx0LmF0dGVtcHQod3osZSxhKShsKSl9byhzLCJub3RCbGFuayIpO2Z1bmN0aW9uIGEobCl7cmV0dXJuIG4uY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz0hMCxuLmludGVycnVwdD12b2lkIDAsaWUodCx0LmF0dGVtcHQoUHQsZSxyKSwibGluZVByZWZpeCIsbi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KShsKX1vKGEsIm5vdEluQ3VycmVudEl0ZW0iKX1vKGt6LCJ0b2tlbml6ZUxpc3RDb250aW51YXRpb24iKTtmdW5jdGlvbiBTeih0LGUscil7bGV0IG49dGhpcztyZXR1cm4gaWUodCxpLCJsaXN0SXRlbUluZGVudCIsbi5jb250YWluZXJTdGF0ZS5zaXplKzEpO2Z1bmN0aW9uIGkocyl7bGV0IGE9bi5ldmVudHNbbi5ldmVudHMubGVuZ3RoLTFdO3JldHVybiBhJiZhWzFdLnR5cGU9PT0ibGlzdEl0ZW1JbmRlbnQiJiZhWzJdLnNsaWNlU2VyaWFsaXplKGFbMV0sITApLmxlbmd0aD09PW4uY29udGFpbmVyU3RhdGUuc2l6ZT9lKHMpOnIocyl9fW8oU3osInRva2VuaXplSW5kZW50Iik7ZnVuY3Rpb24gVHoodCl7dC5leGl0KHRoaXMuY29udGFpbmVyU3RhdGUudHlwZSl9byhUeiwidG9rZW5pemVMaXN0RW5kIik7ZnVuY3Rpb24gRXoodCxlLHIpe2xldCBuPXRoaXM7cmV0dXJuIGllKHQsaSwibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIixuLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjUpO2Z1bmN0aW9uIGkocyl7bGV0IGE9bi5ldmVudHNbbi5ldmVudHMubGVuZ3RoLTFdO3JldHVybiFlZShzKSYmYSYmYVsxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSI/ZShzKTpyKHMpfX1vKEV6LCJ0b2tlbml6ZUxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpO3ZhciB6ZD17bmFtZToic2V0ZXh0VW5kZXJsaW5lIixyZXNvbHZlVG86RHosdG9rZW5pemU6Q3p9O2Z1bmN0aW9uIER6KHQsZSl7bGV0IHI9dC5sZW5ndGgsbixpLHM7Zm9yKDtyLS07KWlmKHRbcl1bMF09PT0iZW50ZXIiKXtpZih0W3JdWzFdLnR5cGU9PT0iY29udGVudCIpe249cjticmVha310W3JdWzFdLnR5cGU9PT0icGFyYWdyYXBoIiYmKGk9cil9ZWxzZSB0W3JdWzFdLnR5cGU9PT0iY29udGVudCImJnQuc3BsaWNlKHIsMSksIXMmJnRbcl1bMV0udHlwZT09PSJkZWZpbml0aW9uIiYmKHM9cik7bGV0IGE9e3R5cGU6InNldGV4dEhlYWRpbmciLHN0YXJ0OnsuLi50W25dWzFdLnN0YXJ0fSxlbmQ6ey4uLnRbdC5sZW5ndGgtMV1bMV0uZW5kfX07cmV0dXJuIHRbaV1bMV0udHlwZT0ic2V0ZXh0SGVhZGluZ1RleHQiLHM/KHQuc3BsaWNlKGksMCxbImVudGVyIixhLGVdKSx0LnNwbGljZShzKzEsMCxbImV4aXQiLHRbbl1bMV0sZV0pLHRbbl1bMV0uZW5kPXsuLi50W3NdWzFdLmVuZH0pOnRbbl1bMV09YSx0LnB1c2goWyJleGl0IixhLGVdKSx0fW8oRHosInJlc29sdmVUb1NldGV4dFVuZGVybGluZSIpO2Z1bmN0aW9uIEN6KHQsZSxyKXtsZXQgbj10aGlzLGk7cmV0dXJuIHM7ZnVuY3Rpb24gcyh1KXtsZXQgZj1uLmV2ZW50cy5sZW5ndGgscDtmb3IoO2YtLTspaWYobi5ldmVudHNbZl1bMV0udHlwZSE9PSJsaW5lRW5kaW5nIiYmbi5ldmVudHNbZl1bMV0udHlwZSE9PSJsaW5lUHJlZml4IiYmbi5ldmVudHNbZl1bMV0udHlwZSE9PSJjb250ZW50Iil7cD1uLmV2ZW50c1tmXVsxXS50eXBlPT09InBhcmFncmFwaCI7YnJlYWt9cmV0dXJuIW4ucGFyc2VyLmxhenlbbi5ub3coKS5saW5lXSYmKG4uaW50ZXJydXB0fHxwKT8odC5lbnRlcigic2V0ZXh0SGVhZGluZ0xpbmUiKSxpPXUsYSh1KSk6cih1KX1mdW5jdGlvbiBhKHUpe3JldHVybiB0LmVudGVyKCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIiksbCh1KX1mdW5jdGlvbiBsKHUpe3JldHVybiB1PT09aT8odC5jb25zdW1lKHUpLGwpOih0LmV4aXQoInNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2UiKSxlZSh1KT9pZSh0LGMsImxpbmVTdWZmaXgiKSh1KTpjKHUpKX1mdW5jdGlvbiBjKHUpe3JldHVybiB1PT09bnVsbHx8WSh1KT8odC5leGl0KCJzZXRleHRIZWFkaW5nTGluZSIpLGUodSkpOnIodSl9fW8oQ3osInRva2VuaXplU2V0ZXh0VW5kZXJsaW5lIik7dmFyIGFNPXt0b2tlbml6ZTpNen07ZnVuY3Rpb24gTXoodCl7bGV0IGU9dGhpcyxyPXQuYXR0ZW1wdChFbixuLHQuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3dJbml0aWFsLGksaWUodCx0LmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5mbG93LGksdC5hdHRlbXB0KGRiLGkpKSwibGluZVByZWZpeCIpKSk7cmV0dXJuIHI7ZnVuY3Rpb24gbihzKXtpZihzPT09bnVsbCl7dC5jb25zdW1lKHMpO3JldHVybn1yZXR1cm4gdC5lbnRlcigibGluZUVuZGluZ0JsYW5rIiksdC5jb25zdW1lKHMpLHQuZXhpdCgibGluZUVuZGluZ0JsYW5rIiksZS5jdXJyZW50Q29uc3RydWN0PXZvaWQgMCxyfWZ1bmN0aW9uIGkocyl7aWYocz09PW51bGwpe3QuY29uc3VtZShzKTtyZXR1cm59cmV0dXJuIHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUocyksdC5leGl0KCJsaW5lRW5kaW5nIiksZS5jdXJyZW50Q29uc3RydWN0PXZvaWQgMCxyfX1vKE16LCJpbml0aWFsaXplRmxvdyIpO3ZhciB1TT17cmVzb2x2ZUFsbDpjTSgpfSxmTT1sTSgic3RyaW5nIikscE09bE0oInRleHQiKTtmdW5jdGlvbiBsTSh0KXtyZXR1cm57cmVzb2x2ZUFsbDpjTSh0PT09InRleHQiP096OnZvaWQgMCksdG9rZW5pemU6ZX07ZnVuY3Rpb24gZShyKXtsZXQgbj10aGlzLGk9dGhpcy5wYXJzZXIuY29uc3RydWN0c1t0XSxzPXIuYXR0ZW1wdChpLGEsbCk7cmV0dXJuIGE7ZnVuY3Rpb24gYShmKXtyZXR1cm4gdShmKT9zKGYpOmwoZil9ZnVuY3Rpb24gbChmKXtpZihmPT09bnVsbCl7ci5jb25zdW1lKGYpO3JldHVybn1yZXR1cm4gci5lbnRlcigiZGF0YSIpLHIuY29uc3VtZShmKSxjfWZ1bmN0aW9uIGMoZil7cmV0dXJuIHUoZik/KHIuZXhpdCgiZGF0YSIpLHMoZikpOihyLmNvbnN1bWUoZiksYyl9ZnVuY3Rpb24gdShmKXtpZihmPT09bnVsbClyZXR1cm4hMDtsZXQgcD1pW2ZdLGg9LTE7aWYocClmb3IoOysraDxwLmxlbmd0aDspe2xldCBkPXBbaF07aWYoIWQucHJldmlvdXN8fGQucHJldmlvdXMuY2FsbChuLG4ucHJldmlvdXMpKXJldHVybiEwfXJldHVybiExfX19byhsTSwiaW5pdGlhbGl6ZUZhY3RvcnkiKTtmdW5jdGlvbiBjTSh0KXtyZXR1cm4gZTtmdW5jdGlvbiBlKHIsbil7bGV0IGk9LTEscztmb3IoOysraTw9ci5sZW5ndGg7KXM9PT12b2lkIDA/cltpXSYmcltpXVsxXS50eXBlPT09ImRhdGEiJiYocz1pLGkrKyk6KCFyW2ldfHxyW2ldWzFdLnR5cGUhPT0iZGF0YSIpJiYoaSE9PXMrMiYmKHJbc11bMV0uZW5kPXJbaS0xXVsxXS5lbmQsci5zcGxpY2UocysyLGktcy0yKSxpPXMrMikscz12b2lkIDApO3JldHVybiB0P3QocixuKTpyfX1vKGNNLCJjcmVhdGVSZXNvbHZlciIpO2Z1bmN0aW9uIE96KHQsZSl7bGV0IHI9MDtmb3IoOysrcjw9dC5sZW5ndGg7KWlmKChyPT09dC5sZW5ndGh8fHRbcl1bMV0udHlwZT09PSJsaW5lRW5kaW5nIikmJnRbci0xXVsxXS50eXBlPT09ImRhdGEiKXtsZXQgbj10W3ItMV1bMV0saT1lLnNsaWNlU3RyZWFtKG4pLHM9aS5sZW5ndGgsYT0tMSxsPTAsYztmb3IoO3MtLTspe2xldCB1PWlbc107aWYodHlwZW9mIHU9PSJzdHJpbmciKXtmb3IoYT11Lmxlbmd0aDt1LmNoYXJDb2RlQXQoYS0xKT09PTMyOylsKyssYS0tO2lmKGEpYnJlYWs7YT0tMX1lbHNlIGlmKHU9PT0tMiljPSEwLGwrKztlbHNlIGlmKHUhPT0tMSl7cysrO2JyZWFrfX1pZihlLl9jb250ZW50VHlwZVRleHRUcmFpbGluZyYmcj09PXQubGVuZ3RoJiYobD0wKSxsKXtsZXQgdT17dHlwZTpyPT09dC5sZW5ndGh8fGN8fGw8Mj8ibGluZVN1ZmZpeCI6ImhhcmRCcmVha1RyYWlsaW5nIixzdGFydDp7X2J1ZmZlckluZGV4OnM/YTpuLnN0YXJ0Ll9idWZmZXJJbmRleCthLF9pbmRleDpuLnN0YXJ0Ll9pbmRleCtzLGxpbmU6bi5lbmQubGluZSxjb2x1bW46bi5lbmQuY29sdW1uLWwsb2Zmc2V0Om4uZW5kLm9mZnNldC1sfSxlbmQ6ey4uLm4uZW5kfX07bi5lbmQ9ey4uLnUuc3RhcnR9LG4uc3RhcnQub2Zmc2V0PT09bi5lbmQub2Zmc2V0P09iamVjdC5hc3NpZ24obix1KToodC5zcGxpY2UociwwLFsiZW50ZXIiLHUsZV0sWyJleGl0Iix1LGVdKSxyKz0yKX1yKyt9cmV0dXJuIHR9byhPeiwicmVzb2x2ZUFsbExpbmVTdWZmaXhlcyIpO3ZhciBTYj17fTtzZShTYix7YXR0ZW50aW9uTWFya2VyczooKT0+QXosY29udGVudEluaXRpYWw6KCk9Pl96LGRpc2FibGU6KCk9PiR6LGRvY3VtZW50OigpPT5JeixmbG93OigpPT5OeixmbG93SW5pdGlhbDooKT0+UHosaW5zaWRlU3BhbjooKT0+Rnosc3RyaW5nOigpPT5Seix0ZXh0OigpPT5Men0pO3ZhciBJej17NDI6UHQsNDM6UHQsNDU6UHQsNDg6UHQsNDk6UHQsNTA6UHQsNTE6UHQsNTI6UHQsNTM6UHQsNTQ6UHQsNTU6UHQsNTY6UHQsNTc6UHQsNjI6UGR9LF96PXs5MTptYn0sUHo9e1stMl06RmMsWy0xXTpGYywzMjpGY30sTno9ezM1OnliLDQyOnFvLDQ1Olt6ZCxxb10sNjA6YmIsNjE6emQsOTU6cW8sOTY6TGQsMTI2OkxkfSxSej17Mzg6UmQsOTI6TmR9LEx6PXtbLTVdOkJjLFstNF06QmMsWy0zXTpCYywzMzp2YiwzODpSZCw0MjpMYyw2MDpbcGIsd2JdLDkxOmtiLDkyOltnYixOZF0sOTM6V28sOTU6TGMsOTY6aGJ9LEZ6PXtudWxsOltMYyx1TV19LEF6PXtudWxsOls0Miw5NV19LCR6PXtudWxsOltdfTtmdW5jdGlvbiBoTSh0LGUscil7bGV0IG49e19idWZmZXJJbmRleDotMSxfaW5kZXg6MCxsaW5lOnImJnIubGluZXx8MSxjb2x1bW46ciYmci5jb2x1bW58fDEsb2Zmc2V0OnImJnIub2Zmc2V0fHwwfSxpPXt9LHM9W10sYT1bXSxsPVtdLGM9ITAsdT17YXR0ZW1wdDpVKEEpLGNoZWNrOlUoRiksY29uc3VtZTpSLGVudGVyOl8sZXhpdDpFLGludGVycnVwdDpVKEYse2ludGVycnVwdDohMH0pfSxmPXtjb2RlOm51bGwsY29udGFpbmVyU3RhdGU6e30sZGVmaW5lU2tpcDp4LGV2ZW50czpbXSxub3c6eSxwYXJzZXI6dCxwcmV2aW91czpudWxsLHNsaWNlU2VyaWFsaXplOm0sc2xpY2VTdHJlYW06Zyx3cml0ZTpkfSxwPWUudG9rZW5pemUuY2FsbChmLHUpLGg7cmV0dXJuIGUucmVzb2x2ZUFsbCYmcy5wdXNoKGUpLGY7ZnVuY3Rpb24gZChJKXtyZXR1cm4gYT1udChhLEkpLGsoKSxhW2EubGVuZ3RoLTFdIT09bnVsbD9bXTooTShlLDApLGYuZXZlbnRzPUJpKHMsZi5ldmVudHMsZiksZi5ldmVudHMpfW8oZCwid3JpdGUiKTtmdW5jdGlvbiBtKEksTCl7cmV0dXJuIHp6KGcoSSksTCl9byhtLCJzbGljZVNlcmlhbGl6ZSIpO2Z1bmN0aW9uIGcoSSl7cmV0dXJuIEJ6KGEsSSl9byhnLCJzbGljZVN0cmVhbSIpO2Z1bmN0aW9uIHkoKXtsZXR7X2J1ZmZlckluZGV4OkksX2luZGV4OkwsbGluZTpILGNvbHVtbjpXLG9mZnNldDpHfT1uO3JldHVybntfYnVmZmVySW5kZXg6SSxfaW5kZXg6TCxsaW5lOkgsY29sdW1uOlcsb2Zmc2V0Okd9fW8oeSwibm93Iik7ZnVuY3Rpb24geChJKXtpW0kubGluZV09SS5jb2x1bW4seigpfW8oeCwiZGVmaW5lU2tpcCIpO2Z1bmN0aW9uIGsoKXtsZXQgSTtmb3IoO24uX2luZGV4PGEubGVuZ3RoOyl7bGV0IEw9YVtuLl9pbmRleF07aWYodHlwZW9mIEw9PSJzdHJpbmciKWZvcihJPW4uX2luZGV4LG4uX2J1ZmZlckluZGV4PDAmJihuLl9idWZmZXJJbmRleD0wKTtuLl9pbmRleD09PUkmJm4uX2J1ZmZlckluZGV4PEwubGVuZ3RoOylUKEwuY2hhckNvZGVBdChuLl9idWZmZXJJbmRleCkpO2Vsc2UgVChMKX19byhrLCJtYWluIik7ZnVuY3Rpb24gVChJKXtjPXZvaWQgMCxoPUkscD1wKEkpfW8oVCwiZ28iKTtmdW5jdGlvbiBSKEkpe1koSSk/KG4ubGluZSsrLG4uY29sdW1uPTEsbi5vZmZzZXQrPUk9PT0tMz8yOjEseigpKTpJIT09LTEmJihuLmNvbHVtbisrLG4ub2Zmc2V0KyspLG4uX2J1ZmZlckluZGV4PDA/bi5faW5kZXgrKzoobi5fYnVmZmVySW5kZXgrKyxuLl9idWZmZXJJbmRleD09PWFbbi5faW5kZXhdLmxlbmd0aCYmKG4uX2J1ZmZlckluZGV4PS0xLG4uX2luZGV4KyspKSxmLnByZXZpb3VzPUksYz0hMH1vKFIsImNvbnN1bWUiKTtmdW5jdGlvbiBfKEksTCl7bGV0IEg9THx8e307cmV0dXJuIEgudHlwZT1JLEguc3RhcnQ9eSgpLGYuZXZlbnRzLnB1c2goWyJlbnRlciIsSCxmXSksbC5wdXNoKEgpLEh9byhfLCJlbnRlciIpO2Z1bmN0aW9uIEUoSSl7bGV0IEw9bC5wb3AoKTtyZXR1cm4gTC5lbmQ9eSgpLGYuZXZlbnRzLnB1c2goWyJleGl0IixMLGZdKSxMfW8oRSwiZXhpdCIpO2Z1bmN0aW9uIEEoSSxMKXtNKEksTC5mcm9tKX1vKEEsIm9uc3VjY2Vzc2Z1bGNvbnN0cnVjdCIpO2Z1bmN0aW9uIEYoSSxMKXtMLnJlc3RvcmUoKX1vKEYsIm9uc3VjY2Vzc2Z1bGNoZWNrIik7ZnVuY3Rpb24gVShJLEwpe3JldHVybiBIO2Z1bmN0aW9uIEgoVyxHLFgpe2xldCB1ZSx3LHdlLEVlO3JldHVybiBBcnJheS5pc0FycmF5KFcpP0JlKFcpOiJ0b2tlbml6ZSJpbiBXP0JlKFtXXSk6UyhXKTtmdW5jdGlvbiBTKHYpe3JldHVybiBDO2Z1bmN0aW9uIEMoTyl7bGV0IEI9TyE9PW51bGwmJnZbT10scmU9TyE9PW51bGwmJnYubnVsbCwkZT1bLi4uQXJyYXkuaXNBcnJheShCKT9COkI/W0JdOltdLC4uLkFycmF5LmlzQXJyYXkocmUpP3JlOnJlP1tyZV06W11dO3JldHVybiBCZSgkZSkoTyl9fWZ1bmN0aW9uIEJlKHYpe3JldHVybiB1ZT12LHc9MCx2Lmxlbmd0aD09PTA/WDpldCh2W3ddKX1mdW5jdGlvbiBldCh2KXtyZXR1cm4gQztmdW5jdGlvbiBDKE8pe3JldHVybiBFZT1iZSgpLHdlPXYsdi5wYXJ0aWFsfHwoZi5jdXJyZW50Q29uc3RydWN0PXYpLHYubmFtZSYmZi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXModi5uYW1lKT9EKE8pOnYudG9rZW5pemUuY2FsbChMP09iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShmKSxMKTpmLHUsS3QsRCkoTyl9fWZ1bmN0aW9uIEt0KHYpe3JldHVybiBjPSEwLEkod2UsRWUpLEd9ZnVuY3Rpb24gRCh2KXtyZXR1cm4gYz0hMCxFZS5yZXN0b3JlKCksKyt3PHVlLmxlbmd0aD9ldCh1ZVt3XSk6WH19fW8oVSwiY29uc3RydWN0RmFjdG9yeSIpO2Z1bmN0aW9uIE0oSSxMKXtJLnJlc29sdmVBbGwmJiFzLmluY2x1ZGVzKEkpJiZzLnB1c2goSSksSS5yZXNvbHZlJiZaZShmLmV2ZW50cyxMLGYuZXZlbnRzLmxlbmd0aC1MLEkucmVzb2x2ZShmLmV2ZW50cy5zbGljZShMKSxmKSksSS5yZXNvbHZlVG8mJihmLmV2ZW50cz1JLnJlc29sdmVUbyhmLmV2ZW50cyxmKSl9byhNLCJhZGRSZXN1bHQiKTtmdW5jdGlvbiBiZSgpe2xldCBJPXkoKSxMPWYucHJldmlvdXMsSD1mLmN1cnJlbnRDb25zdHJ1Y3QsVz1mLmV2ZW50cy5sZW5ndGgsRz1BcnJheS5mcm9tKGwpO3JldHVybntmcm9tOlcscmVzdG9yZTpYfTtmdW5jdGlvbiBYKCl7bj1JLGYucHJldmlvdXM9TCxmLmN1cnJlbnRDb25zdHJ1Y3Q9SCxmLmV2ZW50cy5sZW5ndGg9VyxsPUcseigpfX1vKGJlLCJzdG9yZSIpO2Z1bmN0aW9uIHooKXtuLmxpbmUgaW4gaSYmbi5jb2x1bW48MiYmKG4uY29sdW1uPWlbbi5saW5lXSxuLm9mZnNldCs9aVtuLmxpbmVdLTEpfW8oeiwiYWNjb3VudEZvclBvdGVudGlhbFNraXAiKX1vKGhNLCJjcmVhdGVUb2tlbml6ZXIiKTtmdW5jdGlvbiBCeih0LGUpe2xldCByPWUuc3RhcnQuX2luZGV4LG49ZS5zdGFydC5fYnVmZmVySW5kZXgsaT1lLmVuZC5faW5kZXgscz1lLmVuZC5fYnVmZmVySW5kZXgsYTtpZihyPT09aSlhPVt0W3JdLnNsaWNlKG4scyldO2Vsc2V7aWYoYT10LnNsaWNlKHIsaSksbj4tMSl7bGV0IGw9YVswXTt0eXBlb2YgbD09InN0cmluZyI/YVswXT1sLnNsaWNlKG4pOmEuc2hpZnQoKX1zPjAmJmEucHVzaCh0W2ldLnNsaWNlKDAscykpfXJldHVybiBhfW8oQnosInNsaWNlQ2h1bmtzIik7ZnVuY3Rpb24genoodCxlKXtsZXQgcj0tMSxuPVtdLGk7Zm9yKDsrK3I8dC5sZW5ndGg7KXtsZXQgcz10W3JdLGE7aWYodHlwZW9mIHM9PSJzdHJpbmciKWE9cztlbHNlIHN3aXRjaChzKXtjYXNlLTU6e2E9IlxyIjticmVha31jYXNlLTQ6e2E9YApgO2JyZWFrfWNhc2UtMzp7YT1gXHIKYDticmVha31jYXNlLTI6e2E9ZT8iICI6IgkiO2JyZWFrfWNhc2UtMTp7aWYoIWUmJmkpY29udGludWU7YT0iICI7YnJlYWt9ZGVmYXVsdDphPVN0cmluZy5mcm9tQ2hhckNvZGUocyl9aT1zPT09LTIsbi5wdXNoKGEpfXJldHVybiBuLmpvaW4oIiIpfW8oenosInNlcmlhbGl6ZUNodW5rcyIpO2Z1bmN0aW9uIHpjKHQpe2xldCBuPXtjb25zdHJ1Y3RzOklkKFtTYiwuLi4odHx8e30pLmV4dGVuc2lvbnN8fFtdXSksY29udGVudDppKHRNKSxkZWZpbmVkOltdLGRvY3VtZW50Omkobk0pLGZsb3c6aShhTSksbGF6eTp7fSxzdHJpbmc6aShmTSksdGV4dDppKHBNKX07cmV0dXJuIG47ZnVuY3Rpb24gaShzKXtyZXR1cm4gYTtmdW5jdGlvbiBhKGwpe3JldHVybiBoTShuLHMsbCl9fX1vKHpjLCJwYXJzZSIpO2Z1bmN0aW9uIEhjKHQpe2Zvcig7IUZkKHQpOyk7cmV0dXJuIHR9byhIYywicG9zdHByb2Nlc3MiKTt2YXIgZE09L1tcMFx0XG5ccl0vZztmdW5jdGlvbiBqYygpe2xldCB0PTEsZT0iIixyPSEwLG47cmV0dXJuIGk7ZnVuY3Rpb24gaShzLGEsbCl7bGV0IGM9W10sdSxmLHAsaCxkO2ZvcihzPWUrKHR5cGVvZiBzPT0ic3RyaW5nIj9zLnRvU3RyaW5nKCk6bmV3IFRleHREZWNvZGVyKGF8fHZvaWQgMCkuZGVjb2RlKHMpKSxwPTAsZT0iIixyJiYocy5jaGFyQ29kZUF0KDApPT09NjUyNzkmJnArKyxyPXZvaWQgMCk7cDxzLmxlbmd0aDspe2lmKGRNLmxhc3RJbmRleD1wLHU9ZE0uZXhlYyhzKSxoPXUmJnUuaW5kZXghPT12b2lkIDA/dS5pbmRleDpzLmxlbmd0aCxkPXMuY2hhckNvZGVBdChoKSwhdSl7ZT1zLnNsaWNlKHApO2JyZWFrfWlmKGQ9PT0xMCYmcD09PWgmJm4pYy5wdXNoKC0zKSxuPXZvaWQgMDtlbHNlIHN3aXRjaChuJiYoYy5wdXNoKC01KSxuPXZvaWQgMCkscDxoJiYoYy5wdXNoKHMuc2xpY2UocCxoKSksdCs9aC1wKSxkKXtjYXNlIDA6e2MucHVzaCg2NTUzMyksdCsrO2JyZWFrfWNhc2UgOTp7Zm9yKGY9TWF0aC5jZWlsKHQvNCkqNCxjLnB1c2goLTIpO3QrKzxmOyljLnB1c2goLTEpO2JyZWFrfWNhc2UgMTA6e2MucHVzaCgtNCksdD0xO2JyZWFrfWRlZmF1bHQ6bj0hMCx0PTF9cD1oKzF9cmV0dXJuIGwmJihuJiZjLnB1c2goLTUpLGUmJmMucHVzaChlKSxjLnB1c2gobnVsbCkpLGN9fW8oamMsInByZXByb2Nlc3MiKTtmdW5jdGlvbiBzOGUodCxlLHIpe3JldHVybiB0eXBlb2YgZSE9InN0cmluZyImJihyPWUsZT12b2lkIDApLGZiKHIpKEhjKHpjKHIpLmRvY3VtZW50KCkud3JpdGUoamMoKSh0LGUsITApKSkpfW8oczhlLCJtaWNyb21hcmsiKTt2YXIgbU09e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gVGIodCxlLHIpe3JldHVybiBlJiZ0eXBlb2YgZT09Im9iamVjdCImJihyPWUsZT12b2lkIDApLEh6KHIpKEhjKHpjKHIpLmRvY3VtZW50KCkud3JpdGUoamMoKSh0LGUsITApKSkpfW8oVGIsImZyb21NYXJrZG93biIpO2Z1bmN0aW9uIEh6KHQpe2xldCBlPXt0cmFuc2Zvcm1zOltdLGNhbkNvbnRhaW5Fb2xzOlsiZW1waGFzaXMiLCJmcmFnbWVudCIsImhlYWRpbmciLCJwYXJhZ3JhcGgiLCJzdHJvbmciXSxlbnRlcjp7YXV0b2xpbms6cyhfciksYXV0b2xpbmtQcm90b2NvbDpVLGF1dG9saW5rRW1haWw6VSxhdHhIZWFkaW5nOnMoRGUpLGJsb2NrUXVvdGU6cyhPKSxjaGFyYWN0ZXJFc2NhcGU6VSxjaGFyYWN0ZXJSZWZlcmVuY2U6VSxjb2RlRmVuY2VkOnMoQiksY29kZUZlbmNlZEZlbmNlSW5mbzphLGNvZGVGZW5jZWRGZW5jZU1ldGE6YSxjb2RlSW5kZW50ZWQ6cyhCLGEpLGNvZGVUZXh0OnMocmUsYSksY29kZVRleHREYXRhOlUsZGF0YTpVLGNvZGVGbG93VmFsdWU6VSxkZWZpbml0aW9uOnMoJGUpLGRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZzphLGRlZmluaXRpb25MYWJlbFN0cmluZzphLGRlZmluaXRpb25UaXRsZVN0cmluZzphLGVtcGhhc2lzOnMoTGUpLGhhcmRCcmVha0VzY2FwZTpzKCR0KSxoYXJkQnJlYWtUcmFpbGluZzpzKCR0KSxodG1sRmxvdzpzKGZ0LGEpLGh0bWxGbG93RGF0YTpVLGh0bWxUZXh0OnMoZnQsYSksaHRtbFRleHREYXRhOlUsaW1hZ2U6cyhOdCksbGFiZWw6YSxsaW5rOnMoX3IpLGxpc3RJdGVtOnMoWHQpLGxpc3RJdGVtVmFsdWU6aCxsaXN0T3JkZXJlZDpzKFFyLHApLGxpc3RVbm9yZGVyZWQ6cyhRcikscGFyYWdyYXBoOnMoZnIpLHJlZmVyZW5jZTpTLHJlZmVyZW5jZVN0cmluZzphLHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6YSxyZXNvdXJjZVRpdGxlU3RyaW5nOmEsc2V0ZXh0SGVhZGluZzpzKERlKSxzdHJvbmc6cyhCdCksdGhlbWF0aWNCcmVhazpzKEpyKX0sZXhpdDp7YXR4SGVhZGluZzpjKCksYXR4SGVhZGluZ1NlcXVlbmNlOl8sYXV0b2xpbms6YygpLGF1dG9saW5rRW1haWw6QyxhdXRvbGlua1Byb3RvY29sOnYsYmxvY2tRdW90ZTpjKCksY2hhcmFjdGVyRXNjYXBlVmFsdWU6TSxjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbDpldCxjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljOmV0LGNoYXJhY3RlclJlZmVyZW5jZVZhbHVlOkt0LGNoYXJhY3RlclJlZmVyZW5jZTpELGNvZGVGZW5jZWQ6Yyh5KSxjb2RlRmVuY2VkRmVuY2U6Zyxjb2RlRmVuY2VkRmVuY2VJbmZvOmQsY29kZUZlbmNlZEZlbmNlTWV0YTptLGNvZGVGbG93VmFsdWU6TSxjb2RlSW5kZW50ZWQ6Yyh4KSxjb2RlVGV4dDpjKEgpLGNvZGVUZXh0RGF0YTpNLGRhdGE6TSxkZWZpbml0aW9uOmMoKSxkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6UixkZWZpbml0aW9uTGFiZWxTdHJpbmc6ayxkZWZpbml0aW9uVGl0bGVTdHJpbmc6VCxlbXBoYXNpczpjKCksaGFyZEJyZWFrRXNjYXBlOmMoeiksaGFyZEJyZWFrVHJhaWxpbmc6Yyh6KSxodG1sRmxvdzpjKEkpLGh0bWxGbG93RGF0YTpNLGh0bWxUZXh0OmMoTCksaHRtbFRleHREYXRhOk0saW1hZ2U6YyhHKSxsYWJlbDp1ZSxsYWJlbFRleHQ6WCxsaW5lRW5kaW5nOmJlLGxpbms6YyhXKSxsaXN0SXRlbTpjKCksbGlzdE9yZGVyZWQ6YygpLGxpc3RVbm9yZGVyZWQ6YygpLHBhcmFncmFwaDpjKCkscmVmZXJlbmNlU3RyaW5nOkJlLHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6dyxyZXNvdXJjZVRpdGxlU3RyaW5nOndlLHJlc291cmNlOkVlLHNldGV4dEhlYWRpbmc6YyhGKSxzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlOkEsc2V0ZXh0SGVhZGluZ1RleHQ6RSxzdHJvbmc6YygpLHRoZW1hdGljQnJlYWs6YygpfX07Z00oZSwodHx8e30pLm1kYXN0RXh0ZW5zaW9uc3x8W10pO2xldCByPXt9O3JldHVybiBuO2Z1bmN0aW9uIG4oTil7bGV0IHE9e3R5cGU6InJvb3QiLGNoaWxkcmVuOltdfSxvZT17c3RhY2s6W3FdLHRva2VuU3RhY2s6W10sY29uZmlnOmUsZW50ZXI6bCxleGl0OnUsYnVmZmVyOmEscmVzdW1lOmYsZGF0YTpyfSxmZT1bXSxDZT0tMTtmb3IoOysrQ2U8Ti5sZW5ndGg7KWlmKE5bQ2VdWzFdLnR5cGU9PT0ibGlzdE9yZGVyZWQifHxOW0NlXVsxXS50eXBlPT09Imxpc3RVbm9yZGVyZWQiKWlmKE5bQ2VdWzBdPT09ImVudGVyIilmZS5wdXNoKENlKTtlbHNle2xldCBadD1mZS5wb3AoKTtDZT1pKE4sWnQsQ2UpfWZvcihDZT0tMTsrK0NlPE4ubGVuZ3RoOyl7bGV0IFp0PWVbTltDZV1bMF1dO21NLmNhbGwoWnQsTltDZV1bMV0udHlwZSkmJlp0W05bQ2VdWzFdLnR5cGVdLmNhbGwoT2JqZWN0LmFzc2lnbih7c2xpY2VTZXJpYWxpemU6TltDZV1bMl0uc2xpY2VTZXJpYWxpemV9LG9lKSxOW0NlXVsxXSl9aWYob2UudG9rZW5TdGFjay5sZW5ndGg+MCl7bGV0IFp0PW9lLnRva2VuU3RhY2tbb2UudG9rZW5TdGFjay5sZW5ndGgtMV07KFp0WzFdfHx5TSkuY2FsbChvZSx2b2lkIDAsWnRbMF0pfWZvcihxLnBvc2l0aW9uPXtzdGFydDp6aShOLmxlbmd0aD4wP05bMF1bMV0uc3RhcnQ6e2xpbmU6MSxjb2x1bW46MSxvZmZzZXQ6MH0pLGVuZDp6aShOLmxlbmd0aD4wP05bTi5sZW5ndGgtMl1bMV0uZW5kOntsaW5lOjEsY29sdW1uOjEsb2Zmc2V0OjB9KX0sQ2U9LTE7KytDZTxlLnRyYW5zZm9ybXMubGVuZ3RoOylxPWUudHJhbnNmb3Jtc1tDZV0ocSl8fHE7cmV0dXJuIHF9ZnVuY3Rpb24gaShOLHEsb2Upe2xldCBmZT1xLTEsQ2U9LTEsWnQ9ITEsS3IscHIsVWksVmk7Zm9yKDsrK2ZlPD1vZTspe2xldCBSdD1OW2ZlXTtzd2l0Y2goUnRbMV0udHlwZSl7Y2FzZSJsaXN0VW5vcmRlcmVkIjpjYXNlImxpc3RPcmRlcmVkIjpjYXNlImJsb2NrUXVvdGUiOntSdFswXT09PSJlbnRlciI/Q2UrKzpDZS0tLFZpPXZvaWQgMDticmVha31jYXNlImxpbmVFbmRpbmdCbGFuayI6e1J0WzBdPT09ImVudGVyIiYmKEtyJiYhVmkmJiFDZSYmIVVpJiYoVWk9ZmUpLFZpPXZvaWQgMCk7YnJlYWt9Y2FzZSJsaW5lUHJlZml4IjpjYXNlImxpc3RJdGVtVmFsdWUiOmNhc2UibGlzdEl0ZW1NYXJrZXIiOmNhc2UibGlzdEl0ZW1QcmVmaXgiOmNhc2UibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIjpicmVhaztkZWZhdWx0OlZpPXZvaWQgMH1pZighQ2UmJlJ0WzBdPT09ImVudGVyIiYmUnRbMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeCJ8fENlPT09LTEmJlJ0WzBdPT09ImV4aXQiJiYoUnRbMV0udHlwZT09PSJsaXN0VW5vcmRlcmVkInx8UnRbMV0udHlwZT09PSJsaXN0T3JkZXJlZCIpKXtpZihLcil7bGV0IHJpPWZlO2Zvcihwcj12b2lkIDA7cmktLTspe2xldCBQcj1OW3JpXTtpZihQclsxXS50eXBlPT09ImxpbmVFbmRpbmcifHxQclsxXS50eXBlPT09ImxpbmVFbmRpbmdCbGFuayIpe2lmKFByWzBdPT09ImV4aXQiKWNvbnRpbnVlO3ByJiYoTltwcl1bMV0udHlwZT0ibGluZUVuZGluZ0JsYW5rIixadD0hMCksUHJbMV0udHlwZT0ibGluZUVuZGluZyIscHI9cml9ZWxzZSBpZighKFByWzFdLnR5cGU9PT0ibGluZVByZWZpeCJ8fFByWzFdLnR5cGU9PT0iYmxvY2tRdW90ZVByZWZpeCJ8fFByWzFdLnR5cGU9PT0iYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UifHxQclsxXS50eXBlPT09ImJsb2NrUXVvdGVNYXJrZXIifHxQclsxXS50eXBlPT09Imxpc3RJdGVtSW5kZW50IikpYnJlYWt9VWkmJighcHJ8fFVpPHByKSYmKEtyLl9zcHJlYWQ9ITApLEtyLmVuZD1PYmplY3QuYXNzaWduKHt9LHByP05bcHJdWzFdLnN0YXJ0OlJ0WzFdLmVuZCksTi5zcGxpY2UocHJ8fGZlLDAsWyJleGl0IixLcixSdFsyXV0pLGZlKyssb2UrK31pZihSdFsxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4Iil7bGV0IHJpPXt0eXBlOiJsaXN0SXRlbSIsX3NwcmVhZDohMSxzdGFydDpPYmplY3QuYXNzaWduKHt9LFJ0WzFdLnN0YXJ0KSxlbmQ6dm9pZCAwfTtLcj1yaSxOLnNwbGljZShmZSwwLFsiZW50ZXIiLHJpLFJ0WzJdXSksZmUrKyxvZSsrLFVpPXZvaWQgMCxWaT0hMH19fXJldHVybiBOW3FdWzFdLl9zcHJlYWQ9WnQsb2V9ZnVuY3Rpb24gcyhOLHEpe3JldHVybiBvZTtmdW5jdGlvbiBvZShmZSl7bC5jYWxsKHRoaXMsTihmZSksZmUpLHEmJnEuY2FsbCh0aGlzLGZlKX19ZnVuY3Rpb24gYSgpe3RoaXMuc3RhY2sucHVzaCh7dHlwZToiZnJhZ21lbnQiLGNoaWxkcmVuOltdfSl9ZnVuY3Rpb24gbChOLHEsb2Upe3RoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV0uY2hpbGRyZW4ucHVzaChOKSx0aGlzLnN0YWNrLnB1c2goTiksdGhpcy50b2tlblN0YWNrLnB1c2goW3Esb2V8fHZvaWQgMF0pLE4ucG9zaXRpb249e3N0YXJ0OnppKHEuc3RhcnQpLGVuZDp2b2lkIDB9fWZ1bmN0aW9uIGMoTil7cmV0dXJuIHE7ZnVuY3Rpb24gcShvZSl7TiYmTi5jYWxsKHRoaXMsb2UpLHUuY2FsbCh0aGlzLG9lKX19ZnVuY3Rpb24gdShOLHEpe2xldCBvZT10aGlzLnN0YWNrLnBvcCgpLGZlPXRoaXMudG9rZW5TdGFjay5wb3AoKTtpZihmZSlmZVswXS50eXBlIT09Ti50eXBlJiYocT9xLmNhbGwodGhpcyxOLGZlWzBdKTooZmVbMV18fHlNKS5jYWxsKHRoaXMsTixmZVswXSkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2xvc2UgYCIrTi50eXBlKyJgICgiKyRpKHtzdGFydDpOLnN0YXJ0LGVuZDpOLmVuZH0pKyIpOiBpdFx1MjAxOXMgbm90IG9wZW4iKTtvZS5wb3NpdGlvbi5lbmQ9emkoTi5lbmQpfWZ1bmN0aW9uIGYoKXtyZXR1cm4gSW8odGhpcy5zdGFjay5wb3AoKSl9ZnVuY3Rpb24gcCgpe3RoaXMuZGF0YS5leHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWU9ITB9ZnVuY3Rpb24gaChOKXtpZih0aGlzLmRhdGEuZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlKXtsZXQgcT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTJdO3Euc3RhcnQ9TnVtYmVyLnBhcnNlSW50KHRoaXMuc2xpY2VTZXJpYWxpemUoTiksMTApLHRoaXMuZGF0YS5leHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWU9dm9pZCAwfX1mdW5jdGlvbiBkKCl7bGV0IE49dGhpcy5yZXN1bWUoKSxxPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07cS5sYW5nPU59ZnVuY3Rpb24gbSgpe2xldCBOPXRoaXMucmVzdW1lKCkscT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO3EubWV0YT1OfWZ1bmN0aW9uIGcoKXt0aGlzLmRhdGEuZmxvd0NvZGVJbnNpZGV8fCh0aGlzLmJ1ZmZlcigpLHRoaXMuZGF0YS5mbG93Q29kZUluc2lkZT0hMCl9ZnVuY3Rpb24geSgpe2xldCBOPXRoaXMucmVzdW1lKCkscT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO3EudmFsdWU9Ti5yZXBsYWNlKC9eKFxyP1xufFxyKXwoXHI/XG58XHIpJC9nLCIiKSx0aGlzLmRhdGEuZmxvd0NvZGVJbnNpZGU9dm9pZCAwfWZ1bmN0aW9uIHgoKXtsZXQgTj10aGlzLnJlc3VtZSgpLHE9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtxLnZhbHVlPU4ucmVwbGFjZSgvKFxyP1xufFxyKSQvZywiIil9ZnVuY3Rpb24gayhOKXtsZXQgcT10aGlzLnJlc3VtZSgpLG9lPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07b2UubGFiZWw9cSxvZS5pZGVudGlmaWVyPUtlKHRoaXMuc2xpY2VTZXJpYWxpemUoTikpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gVCgpe2xldCBOPXRoaXMucmVzdW1lKCkscT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO3EudGl0bGU9Tn1mdW5jdGlvbiBSKCl7bGV0IE49dGhpcy5yZXN1bWUoKSxxPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07cS51cmw9Tn1mdW5jdGlvbiBfKE4pe2xldCBxPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYoIXEuZGVwdGgpe2xldCBvZT10aGlzLnNsaWNlU2VyaWFsaXplKE4pLmxlbmd0aDtxLmRlcHRoPW9lfX1mdW5jdGlvbiBFKCl7dGhpcy5kYXRhLnNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmc9ITB9ZnVuY3Rpb24gQShOKXtsZXQgcT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO3EuZGVwdGg9dGhpcy5zbGljZVNlcmlhbGl6ZShOKS5jb2RlUG9pbnRBdCgwKT09PTYxPzE6Mn1mdW5jdGlvbiBGKCl7dGhpcy5kYXRhLnNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmc9dm9pZCAwfWZ1bmN0aW9uIFUoTil7bGV0IG9lPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV0uY2hpbGRyZW4sZmU9b2Vbb2UubGVuZ3RoLTFdOyghZmV8fGZlLnR5cGUhPT0idGV4dCIpJiYoZmU9WWUoKSxmZS5wb3NpdGlvbj17c3RhcnQ6emkoTi5zdGFydCksZW5kOnZvaWQgMH0sb2UucHVzaChmZSkpLHRoaXMuc3RhY2sucHVzaChmZSl9ZnVuY3Rpb24gTShOKXtsZXQgcT10aGlzLnN0YWNrLnBvcCgpO3EudmFsdWUrPXRoaXMuc2xpY2VTZXJpYWxpemUoTikscS5wb3NpdGlvbi5lbmQ9emkoTi5lbmQpfWZ1bmN0aW9uIGJlKE4pe2xldCBxPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYodGhpcy5kYXRhLmF0SGFyZEJyZWFrKXtsZXQgb2U9cS5jaGlsZHJlbltxLmNoaWxkcmVuLmxlbmd0aC0xXTtvZS5wb3NpdGlvbi5lbmQ9emkoTi5lbmQpLHRoaXMuZGF0YS5hdEhhcmRCcmVhaz12b2lkIDA7cmV0dXJufSF0aGlzLmRhdGEuc2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZyYmZS5jYW5Db250YWluRW9scy5pbmNsdWRlcyhxLnR5cGUpJiYoVS5jYWxsKHRoaXMsTiksTS5jYWxsKHRoaXMsTikpfWZ1bmN0aW9uIHooKXt0aGlzLmRhdGEuYXRIYXJkQnJlYWs9ITB9ZnVuY3Rpb24gSSgpe2xldCBOPXRoaXMucmVzdW1lKCkscT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO3EudmFsdWU9Tn1mdW5jdGlvbiBMKCl7bGV0IE49dGhpcy5yZXN1bWUoKSxxPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07cS52YWx1ZT1OfWZ1bmN0aW9uIEgoKXtsZXQgTj10aGlzLnJlc3VtZSgpLHE9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtxLnZhbHVlPU59ZnVuY3Rpb24gVygpe2xldCBOPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYodGhpcy5kYXRhLmluUmVmZXJlbmNlKXtsZXQgcT10aGlzLmRhdGEucmVmZXJlbmNlVHlwZXx8InNob3J0Y3V0IjtOLnR5cGUrPSJSZWZlcmVuY2UiLE4ucmVmZXJlbmNlVHlwZT1xLGRlbGV0ZSBOLnVybCxkZWxldGUgTi50aXRsZX1lbHNlIGRlbGV0ZSBOLmlkZW50aWZpZXIsZGVsZXRlIE4ubGFiZWw7dGhpcy5kYXRhLnJlZmVyZW5jZVR5cGU9dm9pZCAwfWZ1bmN0aW9uIEcoKXtsZXQgTj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKHRoaXMuZGF0YS5pblJlZmVyZW5jZSl7bGV0IHE9dGhpcy5kYXRhLnJlZmVyZW5jZVR5cGV8fCJzaG9ydGN1dCI7Ti50eXBlKz0iUmVmZXJlbmNlIixOLnJlZmVyZW5jZVR5cGU9cSxkZWxldGUgTi51cmwsZGVsZXRlIE4udGl0bGV9ZWxzZSBkZWxldGUgTi5pZGVudGlmaWVyLGRlbGV0ZSBOLmxhYmVsO3RoaXMuZGF0YS5yZWZlcmVuY2VUeXBlPXZvaWQgMH1mdW5jdGlvbiBYKE4pe2xldCBxPXRoaXMuc2xpY2VTZXJpYWxpemUoTiksb2U9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0yXTtvZS5sYWJlbD1HaChxKSxvZS5pZGVudGlmaWVyPUtlKHEpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gdWUoKXtsZXQgTj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdLHE9dGhpcy5yZXN1bWUoKSxvZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKHRoaXMuZGF0YS5pblJlZmVyZW5jZT0hMCxvZS50eXBlPT09ImxpbmsiKXtsZXQgZmU9Ti5jaGlsZHJlbjtvZS5jaGlsZHJlbj1mZX1lbHNlIG9lLmFsdD1xfWZ1bmN0aW9uIHcoKXtsZXQgTj10aGlzLnJlc3VtZSgpLHE9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtxLnVybD1OfWZ1bmN0aW9uIHdlKCl7bGV0IE49dGhpcy5yZXN1bWUoKSxxPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07cS50aXRsZT1OfWZ1bmN0aW9uIEVlKCl7dGhpcy5kYXRhLmluUmVmZXJlbmNlPXZvaWQgMH1mdW5jdGlvbiBTKCl7dGhpcy5kYXRhLnJlZmVyZW5jZVR5cGU9ImNvbGxhcHNlZCJ9ZnVuY3Rpb24gQmUoTil7bGV0IHE9dGhpcy5yZXN1bWUoKSxvZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO29lLmxhYmVsPXEsb2UuaWRlbnRpZmllcj1LZSh0aGlzLnNsaWNlU2VyaWFsaXplKE4pKS50b0xvd2VyQ2FzZSgpLHRoaXMuZGF0YS5yZWZlcmVuY2VUeXBlPSJmdWxsIn1mdW5jdGlvbiBldChOKXt0aGlzLmRhdGEuY2hhcmFjdGVyUmVmZXJlbmNlVHlwZT1OLnR5cGV9ZnVuY3Rpb24gS3QoTil7bGV0IHE9dGhpcy5zbGljZVNlcmlhbGl6ZShOKSxvZT10aGlzLmRhdGEuY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSxmZTtvZT8oZmU9cGEocSxvZT09PSJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIj8xMDoxNiksdGhpcy5kYXRhLmNoYXJhY3RlclJlZmVyZW5jZVR5cGU9dm9pZCAwKTpmZT1PaShxKTtsZXQgQ2U9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtDZS52YWx1ZSs9ZmV9ZnVuY3Rpb24gRChOKXtsZXQgcT10aGlzLnN0YWNrLnBvcCgpO3EucG9zaXRpb24uZW5kPXppKE4uZW5kKX1mdW5jdGlvbiB2KE4pe00uY2FsbCh0aGlzLE4pO2xldCBxPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07cS51cmw9dGhpcy5zbGljZVNlcmlhbGl6ZShOKX1mdW5jdGlvbiBDKE4pe00uY2FsbCh0aGlzLE4pO2xldCBxPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07cS51cmw9Im1haWx0bzoiK3RoaXMuc2xpY2VTZXJpYWxpemUoTil9ZnVuY3Rpb24gTygpe3JldHVybnt0eXBlOiJibG9ja3F1b3RlIixjaGlsZHJlbjpbXX19ZnVuY3Rpb24gQigpe3JldHVybnt0eXBlOiJjb2RlIixsYW5nOm51bGwsbWV0YTpudWxsLHZhbHVlOiIifX1mdW5jdGlvbiByZSgpe3JldHVybnt0eXBlOiJpbmxpbmVDb2RlIix2YWx1ZToiIn19ZnVuY3Rpb24gJGUoKXtyZXR1cm57dHlwZToiZGVmaW5pdGlvbiIsaWRlbnRpZmllcjoiIixsYWJlbDpudWxsLHRpdGxlOm51bGwsdXJsOiIifX1mdW5jdGlvbiBMZSgpe3JldHVybnt0eXBlOiJlbXBoYXNpcyIsY2hpbGRyZW46W119fWZ1bmN0aW9uIERlKCl7cmV0dXJue3R5cGU6ImhlYWRpbmciLGRlcHRoOjAsY2hpbGRyZW46W119fWZ1bmN0aW9uICR0KCl7cmV0dXJue3R5cGU6ImJyZWFrIn19ZnVuY3Rpb24gZnQoKXtyZXR1cm57dHlwZToiaHRtbCIsdmFsdWU6IiJ9fWZ1bmN0aW9uIE50KCl7cmV0dXJue3R5cGU6ImltYWdlIix0aXRsZTpudWxsLHVybDoiIixhbHQ6bnVsbH19ZnVuY3Rpb24gX3IoKXtyZXR1cm57dHlwZToibGluayIsdGl0bGU6bnVsbCx1cmw6IiIsY2hpbGRyZW46W119fWZ1bmN0aW9uIFFyKE4pe3JldHVybnt0eXBlOiJsaXN0IixvcmRlcmVkOk4udHlwZT09PSJsaXN0T3JkZXJlZCIsc3RhcnQ6bnVsbCxzcHJlYWQ6Ti5fc3ByZWFkLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBYdChOKXtyZXR1cm57dHlwZToibGlzdEl0ZW0iLHNwcmVhZDpOLl9zcHJlYWQsY2hlY2tlZDpudWxsLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBmcigpe3JldHVybnt0eXBlOiJwYXJhZ3JhcGgiLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBCdCgpe3JldHVybnt0eXBlOiJzdHJvbmciLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBZZSgpe3JldHVybnt0eXBlOiJ0ZXh0Iix2YWx1ZToiIn19ZnVuY3Rpb24gSnIoKXtyZXR1cm57dHlwZToidGhlbWF0aWNCcmVhayJ9fX1vKEh6LCJjb21waWxlciIpO2Z1bmN0aW9uIHppKHQpe3JldHVybntsaW5lOnQubGluZSxjb2x1bW46dC5jb2x1bW4sb2Zmc2V0OnQub2Zmc2V0fX1vKHppLCJwb2ludCIpO2Z1bmN0aW9uIGdNKHQsZSl7bGV0IHI9LTE7Zm9yKDsrK3I8ZS5sZW5ndGg7KXtsZXQgbj1lW3JdO0FycmF5LmlzQXJyYXkobik/Z00odCxuKTpqeih0LG4pfX1vKGdNLCJjb25maWd1cmUiKTtmdW5jdGlvbiBqeih0LGUpe2xldCByO2ZvcihyIGluIGUpaWYobU0uY2FsbChlLHIpKXN3aXRjaChyKXtjYXNlImNhbkNvbnRhaW5Fb2xzIjp7bGV0IG49ZVtyXTtuJiZ0W3JdLnB1c2goLi4ubik7YnJlYWt9Y2FzZSJ0cmFuc2Zvcm1zIjp7bGV0IG49ZVtyXTtuJiZ0W3JdLnB1c2goLi4ubik7YnJlYWt9Y2FzZSJlbnRlciI6Y2FzZSJleGl0Ijp7bGV0IG49ZVtyXTtuJiZPYmplY3QuYXNzaWduKHRbcl0sbik7YnJlYWt9fX1vKGp6LCJleHRlbnNpb24iKTtmdW5jdGlvbiB5TSh0LGUpe3Rocm93IHQ/bmV3IEVycm9yKCJDYW5ub3QgY2xvc2UgYCIrdC50eXBlKyJgICgiKyRpKHtzdGFydDp0LnN0YXJ0LGVuZDp0LmVuZH0pKyIpOiBhIGRpZmZlcmVudCB0b2tlbiAoYCIrZS50eXBlKyJgLCAiKyRpKHtzdGFydDplLnN0YXJ0LGVuZDplLmVuZH0pKyIpIGlzIG9wZW4iKTpuZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBkb2N1bWVudCwgYSB0b2tlbiAoYCIrZS50eXBlKyJgLCAiKyRpKHtzdGFydDplLnN0YXJ0LGVuZDplLmVuZH0pKyIpIGlzIHN0aWxsIG9wZW4iKX1vKHlNLCJkZWZhdWx0T25FcnJvciIpO2Z1bmN0aW9uIExhKHQpe2xldCBlPXRoaXM7ZS5wYXJzZXI9cjtmdW5jdGlvbiByKG4pe3JldHVybiBUYihuLHsuLi5lLmRhdGEoInNldHRpbmdzIiksLi4udCxleHRlbnNpb25zOmUuZGF0YSgibWljcm9tYXJrRXh0ZW5zaW9ucyIpfHxbXSxtZGFzdEV4dGVuc2lvbnM6ZS5kYXRhKCJmcm9tTWFya2Rvd25FeHRlbnNpb25zIil8fFtdfSl9byhyLCJwYXJzZXIiKX1vKExhLCJyZW1hcmtQYXJzZSIpO2Z1bmN0aW9uIEViKHQsZSxyKXtsZXQgaT16bigocnx8e30pLmlnbm9yZXx8W10pLHM9V3ooZSksYT0tMTtmb3IoOysrYTxzLmxlbmd0aDspWGwodCwidGV4dCIsbCk7ZnVuY3Rpb24gbCh1LGYpe2xldCBwPS0xLGg7Zm9yKDsrK3A8Zi5sZW5ndGg7KXtsZXQgZD1mW3BdLG09aD9oLmNoaWxkcmVuOnZvaWQgMDtpZihpKGQsbT9tLmluZGV4T2YoZCk6dm9pZCAwLGgpKXJldHVybjtoPWR9aWYoaClyZXR1cm4gYyh1LGYpfW8obCwidmlzaXRvciIpO2Z1bmN0aW9uIGModSxmKXtsZXQgcD1mW2YubGVuZ3RoLTFdLGg9c1thXVswXSxkPXNbYV1bMV0sbT0wLHk9cC5jaGlsZHJlbi5pbmRleE9mKHUpLHg9ITEsaz1bXTtoLmxhc3RJbmRleD0wO2xldCBUPWguZXhlYyh1LnZhbHVlKTtmb3IoO1Q7KXtsZXQgUj1ULmluZGV4LF89e2luZGV4OlQuaW5kZXgsaW5wdXQ6VC5pbnB1dCxzdGFjazpbLi4uZix1XX0sRT1kKC4uLlQsXyk7aWYodHlwZW9mIEU9PSJzdHJpbmciJiYoRT1FLmxlbmd0aD4wP3t0eXBlOiJ0ZXh0Iix2YWx1ZTpFfTp2b2lkIDApLEU9PT0hMT9oLmxhc3RJbmRleD1SKzE6KG0hPT1SJiZrLnB1c2goe3R5cGU6InRleHQiLHZhbHVlOnUudmFsdWUuc2xpY2UobSxSKX0pLEFycmF5LmlzQXJyYXkoRSk/ay5wdXNoKC4uLkUpOkUmJmsucHVzaChFKSxtPVIrVFswXS5sZW5ndGgseD0hMCksIWguZ2xvYmFsKWJyZWFrO1Q9aC5leGVjKHUudmFsdWUpfXJldHVybiB4PyhtPHUudmFsdWUubGVuZ3RoJiZrLnB1c2goe3R5cGU6InRleHQiLHZhbHVlOnUudmFsdWUuc2xpY2UobSl9KSxwLmNoaWxkcmVuLnNwbGljZSh5LDEsLi4uaykpOms9W3VdLHkray5sZW5ndGh9byhjLCJoYW5kbGVyIil9byhFYiwiZmluZEFuZFJlcGxhY2UiKTtmdW5jdGlvbiBXeih0KXtsZXQgZT1bXTtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBmaW5kIGFuZCByZXBsYWNlIHR1cGxlIG9yIGxpc3Qgb2YgdHVwbGVzIik7bGV0IHI9IXRbMF18fEFycmF5LmlzQXJyYXkodFswXSk/dDpbdF0sbj0tMTtmb3IoOysrbjxyLmxlbmd0aDspe2xldCBpPXJbbl07ZS5wdXNoKFtxeihpWzBdKSxVeihpWzFdKV0pfXJldHVybiBlfW8oV3osInRvUGFpcnMiKTtmdW5jdGlvbiBxeih0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciP25ldyBSZWdFeHAobm8odCksImciKTp0fW8ocXosInRvRXhwcmVzc2lvbiIpO2Z1bmN0aW9uIFV6KHQpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fW8oVXosInRvRnVuY3Rpb24iKTt2YXIgRGI9InBocmFzaW5nIixDYj1bImF1dG9saW5rIiwibGluayIsImltYWdlIiwibGFiZWwiXTtmdW5jdGlvbiBPYigpe3JldHVybnt0cmFuc2Zvcm1zOltLel0sZW50ZXI6e2xpdGVyYWxBdXRvbGluazpWeixsaXRlcmFsQXV0b2xpbmtFbWFpbDpNYixsaXRlcmFsQXV0b2xpbmtIdHRwOk1iLGxpdGVyYWxBdXRvbGlua1d3dzpNYn0sZXhpdDp7bGl0ZXJhbEF1dG9saW5rOkp6LGxpdGVyYWxBdXRvbGlua0VtYWlsOlF6LGxpdGVyYWxBdXRvbGlua0h0dHA6WXosbGl0ZXJhbEF1dG9saW5rV3d3Okd6fX19byhPYiwiZ2ZtQXV0b2xpbmtMaXRlcmFsRnJvbU1hcmtkb3duIik7ZnVuY3Rpb24gSWIoKXtyZXR1cm57dW5zYWZlOlt7Y2hhcmFjdGVyOiJAIixiZWZvcmU6IlsrXFwtLlxcd10iLGFmdGVyOiJbXFwtLlxcd10iLGluQ29uc3RydWN0OkRiLG5vdEluQ29uc3RydWN0OkNifSx7Y2hhcmFjdGVyOiIuIixiZWZvcmU6IltXd10iLGFmdGVyOiJbXFwtLlxcd10iLGluQ29uc3RydWN0OkRiLG5vdEluQ29uc3RydWN0OkNifSx7Y2hhcmFjdGVyOiI6IixiZWZvcmU6Iltwc10iLGFmdGVyOiJcXC8iLGluQ29uc3RydWN0OkRiLG5vdEluQ29uc3RydWN0OkNifV19fW8oSWIsImdmbUF1dG9saW5rTGl0ZXJhbFRvTWFya2Rvd24iKTtmdW5jdGlvbiBWeih0KXt0aGlzLmVudGVyKHt0eXBlOiJsaW5rIix0aXRsZTpudWxsLHVybDoiIixjaGlsZHJlbjpbXX0sdCl9byhWeiwiZW50ZXJMaXRlcmFsQXV0b2xpbmsiKTtmdW5jdGlvbiBNYih0KXt0aGlzLmNvbmZpZy5lbnRlci5hdXRvbGlua1Byb3RvY29sLmNhbGwodGhpcyx0KX1vKE1iLCJlbnRlckxpdGVyYWxBdXRvbGlua1ZhbHVlIik7ZnVuY3Rpb24gWXoodCl7dGhpcy5jb25maWcuZXhpdC5hdXRvbGlua1Byb3RvY29sLmNhbGwodGhpcyx0KX1vKFl6LCJleGl0TGl0ZXJhbEF1dG9saW5rSHR0cCIpO2Z1bmN0aW9uIEd6KHQpe3RoaXMuY29uZmlnLmV4aXQuZGF0YS5jYWxsKHRoaXMsdCk7bGV0IGU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtlLnR5cGUsZS51cmw9Imh0dHA6Ly8iK3RoaXMuc2xpY2VTZXJpYWxpemUodCl9byhHeiwiZXhpdExpdGVyYWxBdXRvbGlua1d3dyIpO2Z1bmN0aW9uIFF6KHQpe3RoaXMuY29uZmlnLmV4aXQuYXV0b2xpbmtFbWFpbC5jYWxsKHRoaXMsdCl9byhReiwiZXhpdExpdGVyYWxBdXRvbGlua0VtYWlsIik7ZnVuY3Rpb24gSnoodCl7dGhpcy5leGl0KHQpfW8oSnosImV4aXRMaXRlcmFsQXV0b2xpbmsiKTtmdW5jdGlvbiBLeih0KXtFYih0LFtbLyhodHRwcz86XC9cL3x3d3coPz1cLikpKFstLlx3XSspKFteIFx0XHJcbl0qKS9naSxYel0sWy8oPzw9Xnxcc3xccHtQfXxccHtTfSkoWy0uXHcrXSspQChbLVx3XSsoPzpcLlstXHddKykrKS9ndSxael1dLHtpZ25vcmU6WyJsaW5rIiwibGlua1JlZmVyZW5jZSJdfSl9byhLeiwidHJhbnNmb3JtR2ZtQXV0b2xpbmtMaXRlcmFscyIpO2Z1bmN0aW9uIFh6KHQsZSxyLG4saSl7bGV0IHM9IiI7aWYoIXhNKGkpfHwoL153L2kudGVzdChlKSYmKHI9ZStyLGU9IiIscz0iaHR0cDovLyIpLCFlSChyKSkpcmV0dXJuITE7bGV0IGE9dEgocituKTtpZighYVswXSlyZXR1cm4hMTtsZXQgbD17dHlwZToibGluayIsdGl0bGU6bnVsbCx1cmw6cytlK2FbMF0sY2hpbGRyZW46W3t0eXBlOiJ0ZXh0Iix2YWx1ZTplK2FbMF19XX07cmV0dXJuIGFbMV0/W2wse3R5cGU6InRleHQiLHZhbHVlOmFbMV19XTpsfW8oWHosImZpbmRVcmwiKTtmdW5jdGlvbiBaeih0LGUscixuKXtyZXR1cm4heE0obiwhMCl8fC9bLVxkX10kLy50ZXN0KHIpPyExOnt0eXBlOiJsaW5rIix0aXRsZTpudWxsLHVybDoibWFpbHRvOiIrZSsiQCIrcixjaGlsZHJlbjpbe3R5cGU6InRleHQiLHZhbHVlOmUrIkAiK3J9XX19byhaeiwiZmluZEVtYWlsIik7ZnVuY3Rpb24gZUgodCl7bGV0IGU9dC5zcGxpdCgiLiIpO3JldHVybiEoZS5sZW5ndGg8Mnx8ZVtlLmxlbmd0aC0xXSYmKC9fLy50ZXN0KGVbZS5sZW5ndGgtMV0pfHwhL1thLXpBLVpcZF0vLnRlc3QoZVtlLmxlbmd0aC0xXSkpfHxlW2UubGVuZ3RoLTJdJiYoL18vLnRlc3QoZVtlLmxlbmd0aC0yXSl8fCEvW2EtekEtWlxkXS8udGVzdChlW2UubGVuZ3RoLTJdKSkpfW8oZUgsImlzQ29ycmVjdERvbWFpbiIpO2Z1bmN0aW9uIHRIKHQpe2xldCBlPS9bISImJyksLjo7PD4/XF19XSskLy5leGVjKHQpO2lmKCFlKXJldHVyblt0LHZvaWQgMF07dD10LnNsaWNlKDAsZS5pbmRleCk7bGV0IHI9ZVswXSxuPXIuaW5kZXhPZigiKSIpLGk9YWEodCwiKCIpLHM9YWEodCwiKSIpO2Zvcig7biE9PS0xJiZpPnM7KXQrPXIuc2xpY2UoMCxuKzEpLHI9ci5zbGljZShuKzEpLG49ci5pbmRleE9mKCIpIikscysrO3JldHVyblt0LHJdfW8odEgsInNwbGl0VXJsIik7ZnVuY3Rpb24geE0odCxlKXtsZXQgcj10LmlucHV0LmNoYXJDb2RlQXQodC5pbmRleC0xKTtyZXR1cm4odC5pbmRleD09PTB8fHhuKHIpfHxFbyhyKSkmJighZXx8ciE9PTQ3KX1vKHhNLCJwcmV2aW91cyIpO2JNLnBlZWs9dUg7ZnVuY3Rpb24gckgoKXt0aGlzLmJ1ZmZlcigpfW8ockgsImVudGVyRm9vdG5vdGVDYWxsU3RyaW5nIik7ZnVuY3Rpb24gbkgodCl7dGhpcy5lbnRlcih7dHlwZToiZm9vdG5vdGVSZWZlcmVuY2UiLGlkZW50aWZpZXI6IiIsbGFiZWw6IiJ9LHQpfW8obkgsImVudGVyRm9vdG5vdGVDYWxsIik7ZnVuY3Rpb24gaUgoKXt0aGlzLmJ1ZmZlcigpfW8oaUgsImVudGVyRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmciKTtmdW5jdGlvbiBvSCh0KXt0aGlzLmVudGVyKHt0eXBlOiJmb290bm90ZURlZmluaXRpb24iLGlkZW50aWZpZXI6IiIsbGFiZWw6IiIsY2hpbGRyZW46W119LHQpfW8ob0gsImVudGVyRm9vdG5vdGVEZWZpbml0aW9uIik7ZnVuY3Rpb24gc0godCl7bGV0IGU9dGhpcy5yZXN1bWUoKSxyPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07ci50eXBlLHIuaWRlbnRpZmllcj1LZSh0aGlzLnNsaWNlU2VyaWFsaXplKHQpKS50b0xvd2VyQ2FzZSgpLHIubGFiZWw9ZX1vKHNILCJleGl0Rm9vdG5vdGVDYWxsU3RyaW5nIik7ZnVuY3Rpb24gYUgodCl7dGhpcy5leGl0KHQpfW8oYUgsImV4aXRGb290bm90ZUNhbGwiKTtmdW5jdGlvbiBsSCh0KXtsZXQgZT10aGlzLnJlc3VtZSgpLHI9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtyLnR5cGUsci5pZGVudGlmaWVyPUtlKHRoaXMuc2xpY2VTZXJpYWxpemUodCkpLnRvTG93ZXJDYXNlKCksci5sYWJlbD1lfW8obEgsImV4aXRGb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZyIpO2Z1bmN0aW9uIGNIKHQpe3RoaXMuZXhpdCh0KX1vKGNILCJleGl0Rm9vdG5vdGVEZWZpbml0aW9uIik7ZnVuY3Rpb24gdUgoKXtyZXR1cm4iWyJ9byh1SCwiZm9vdG5vdGVSZWZlcmVuY2VQZWVrIik7ZnVuY3Rpb24gYk0odCxlLHIsbil7bGV0IGk9ci5jcmVhdGVUcmFja2VyKG4pLHM9aS5tb3ZlKCJbXiIpLGE9ci5lbnRlcigiZm9vdG5vdGVSZWZlcmVuY2UiKSxsPXIuZW50ZXIoInJlZmVyZW5jZSIpO3JldHVybiBzKz1pLm1vdmUoci5zYWZlKHIuYXNzb2NpYXRpb25JZCh0KSx7YWZ0ZXI6Il0iLGJlZm9yZTpzfSkpLGwoKSxhKCkscys9aS5tb3ZlKCJdIiksc31vKGJNLCJmb290bm90ZVJlZmVyZW5jZSIpO2Z1bmN0aW9uIF9iKCl7cmV0dXJue2VudGVyOntnZm1Gb290bm90ZUNhbGxTdHJpbmc6ckgsZ2ZtRm9vdG5vdGVDYWxsOm5ILGdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nOmlILGdmbUZvb3Rub3RlRGVmaW5pdGlvbjpvSH0sZXhpdDp7Z2ZtRm9vdG5vdGVDYWxsU3RyaW5nOnNILGdmbUZvb3Rub3RlQ2FsbDphSCxnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZzpsSCxnZm1Gb290bm90ZURlZmluaXRpb246Y0h9fX1vKF9iLCJnZm1Gb290bm90ZUZyb21NYXJrZG93biIpO2Z1bmN0aW9uIFBiKHQpe2xldCBlPSExO3JldHVybiB0JiZ0LmZpcnN0TGluZUJsYW5rJiYoZT0hMCkse2hhbmRsZXJzOntmb290bm90ZURlZmluaXRpb246cixmb290bm90ZVJlZmVyZW5jZTpiTX0sdW5zYWZlOlt7Y2hhcmFjdGVyOiJbIixpbkNvbnN0cnVjdDpbImxhYmVsIiwicGhyYXNpbmciLCJyZWZlcmVuY2UiXX1dfTtmdW5jdGlvbiByKG4saSxzLGEpe2xldCBsPXMuY3JlYXRlVHJhY2tlcihhKSxjPWwubW92ZSgiW14iKSx1PXMuZW50ZXIoImZvb3Rub3RlRGVmaW5pdGlvbiIpLGY9cy5lbnRlcigibGFiZWwiKTtyZXR1cm4gYys9bC5tb3ZlKHMuc2FmZShzLmFzc29jaWF0aW9uSWQobikse2JlZm9yZTpjLGFmdGVyOiJdIn0pKSxmKCksYys9bC5tb3ZlKCJdOiIpLG4uY2hpbGRyZW4mJm4uY2hpbGRyZW4ubGVuZ3RoPjAmJihsLnNoaWZ0KDQpLGMrPWwubW92ZSgoZT9gCmA6IiAiKStzLmluZGVudExpbmVzKHMuY29udGFpbmVyRmxvdyhuLGwuY3VycmVudCgpKSxlP3dNOmZIKSkpLHUoKSxjfW8ociwiZm9vdG5vdGVEZWZpbml0aW9uIil9byhQYiwiZ2ZtRm9vdG5vdGVUb01hcmtkb3duIik7ZnVuY3Rpb24gZkgodCxlLHIpe3JldHVybiBlPT09MD90OndNKHQsZSxyKX1vKGZILCJtYXBFeGNlcHRGaXJzdCIpO2Z1bmN0aW9uIHdNKHQsZSxyKXtyZXR1cm4ocj8iIjoiICAgICIpK3R9byh3TSwibWFwQWxsIik7dmFyIHBIPVsiYXV0b2xpbmsiLCJkZXN0aW5hdGlvbkxpdGVyYWwiLCJkZXN0aW5hdGlvblJhdyIsInJlZmVyZW5jZSIsInRpdGxlUXVvdGUiLCJ0aXRsZUFwb3N0cm9waGUiXTt2TS5wZWVrPW1IO2Z1bmN0aW9uIE5iKCl7cmV0dXJue2NhbkNvbnRhaW5Fb2xzOlsiZGVsZXRlIl0sZW50ZXI6e3N0cmlrZXRocm91Z2g6aEh9LGV4aXQ6e3N0cmlrZXRocm91Z2g6ZEh9fX1vKE5iLCJnZm1TdHJpa2V0aHJvdWdoRnJvbU1hcmtkb3duIik7ZnVuY3Rpb24gUmIoKXtyZXR1cm57dW5zYWZlOlt7Y2hhcmFjdGVyOiJ+IixpbkNvbnN0cnVjdDoicGhyYXNpbmciLG5vdEluQ29uc3RydWN0OnBIfV0saGFuZGxlcnM6e2RlbGV0ZTp2TX19fW8oUmIsImdmbVN0cmlrZXRocm91Z2hUb01hcmtkb3duIik7ZnVuY3Rpb24gaEgodCl7dGhpcy5lbnRlcih7dHlwZToiZGVsZXRlIixjaGlsZHJlbjpbXX0sdCl9byhoSCwiZW50ZXJTdHJpa2V0aHJvdWdoIik7ZnVuY3Rpb24gZEgodCl7dGhpcy5leGl0KHQpfW8oZEgsImV4aXRTdHJpa2V0aHJvdWdoIik7ZnVuY3Rpb24gdk0odCxlLHIsbil7bGV0IGk9ci5jcmVhdGVUcmFja2VyKG4pLHM9ci5lbnRlcigic3RyaWtldGhyb3VnaCIpLGE9aS5tb3ZlKCJ+fiIpO3JldHVybiBhKz1yLmNvbnRhaW5lclBocmFzaW5nKHQsey4uLmkuY3VycmVudCgpLGJlZm9yZTphLGFmdGVyOiJ+In0pLGErPWkubW92ZSgifn4iKSxzKCksYX1vKHZNLCJoYW5kbGVEZWxldGUiKTtmdW5jdGlvbiBtSCgpe3JldHVybiJ+In1vKG1ILCJwZWVrRGVsZXRlIik7ZnVuY3Rpb24gZ0godCl7cmV0dXJuIHQubGVuZ3RofW8oZ0gsImRlZmF1bHRTdHJpbmdMZW5ndGgiKTtmdW5jdGlvbiBTTSh0LGUpe2xldCByPWV8fHt9LG49KHIuYWxpZ258fFtdKS5jb25jYXQoKSxpPXIuc3RyaW5nTGVuZ3RofHxnSCxzPVtdLGE9W10sbD1bXSxjPVtdLHU9MCxmPS0xO2Zvcig7KytmPHQubGVuZ3RoOyl7bGV0IGc9W10seT1bXSx4PS0xO2Zvcih0W2ZdLmxlbmd0aD51JiYodT10W2ZdLmxlbmd0aCk7Kyt4PHRbZl0ubGVuZ3RoOyl7bGV0IGs9eUgodFtmXVt4XSk7aWYoci5hbGlnbkRlbGltaXRlcnMhPT0hMSl7bGV0IFQ9aShrKTt5W3hdPVQsKGNbeF09PT12b2lkIDB8fFQ+Y1t4XSkmJihjW3hdPVQpfWcucHVzaChrKX1hW2ZdPWcsbFtmXT15fWxldCBwPS0xO2lmKHR5cGVvZiBuPT0ib2JqZWN0IiYmImxlbmd0aCJpbiBuKWZvcig7KytwPHU7KXNbcF09a00obltwXSk7ZWxzZXtsZXQgZz1rTShuKTtmb3IoOysrcDx1OylzW3BdPWd9cD0tMTtsZXQgaD1bXSxkPVtdO2Zvcig7KytwPHU7KXtsZXQgZz1zW3BdLHk9IiIseD0iIjtnPT09OTk/KHk9IjoiLHg9IjoiKTpnPT09MTA4P3k9IjoiOmc9PT0xMTQmJih4PSI6Iik7bGV0IGs9ci5hbGlnbkRlbGltaXRlcnM9PT0hMT8xOk1hdGgubWF4KDEsY1twXS15Lmxlbmd0aC14Lmxlbmd0aCksVD15KyItIi5yZXBlYXQoaykreDtyLmFsaWduRGVsaW1pdGVycyE9PSExJiYoaz15Lmxlbmd0aCtrK3gubGVuZ3RoLGs+Y1twXSYmKGNbcF09ayksZFtwXT1rKSxoW3BdPVR9YS5zcGxpY2UoMSwwLGgpLGwuc3BsaWNlKDEsMCxkKSxmPS0xO2xldCBtPVtdO2Zvcig7KytmPGEubGVuZ3RoOyl7bGV0IGc9YVtmXSx5PWxbZl07cD0tMTtsZXQgeD1bXTtmb3IoOysrcDx1Oyl7bGV0IGs9Z1twXXx8IiIsVD0iIixSPSIiO2lmKHIuYWxpZ25EZWxpbWl0ZXJzIT09ITEpe2xldCBfPWNbcF0tKHlbcF18fDApLEU9c1twXTtFPT09MTE0P1Q9IiAiLnJlcGVhdChfKTpFPT09OTk/XyUyPyhUPSIgIi5yZXBlYXQoXy8yKy41KSxSPSIgIi5yZXBlYXQoXy8yLS41KSk6KFQ9IiAiLnJlcGVhdChfLzIpLFI9VCk6Uj0iICIucmVwZWF0KF8pfXIuZGVsaW1pdGVyU3RhcnQhPT0hMSYmIXAmJngucHVzaCgifCIpLHIucGFkZGluZyE9PSExJiYhKHIuYWxpZ25EZWxpbWl0ZXJzPT09ITEmJms9PT0iIikmJihyLmRlbGltaXRlclN0YXJ0IT09ITF8fHApJiZ4LnB1c2goIiAiKSxyLmFsaWduRGVsaW1pdGVycyE9PSExJiZ4LnB1c2goVCkseC5wdXNoKGspLHIuYWxpZ25EZWxpbWl0ZXJzIT09ITEmJngucHVzaChSKSxyLnBhZGRpbmchPT0hMSYmeC5wdXNoKCIgIiksKHIuZGVsaW1pdGVyRW5kIT09ITF8fHAhPT11LTEpJiZ4LnB1c2goInwiKX1tLnB1c2goci5kZWxpbWl0ZXJFbmQ9PT0hMT94LmpvaW4oIiIpLnJlcGxhY2UoLyArJC8sIiIpOnguam9pbigiIikpfXJldHVybiBtLmpvaW4oYApgKX1vKFNNLCJtYXJrZG93blRhYmxlIik7ZnVuY3Rpb24geUgodCl7cmV0dXJuIHQ9PW51bGw/IiI6U3RyaW5nKHQpfW8oeUgsInNlcmlhbGl6ZSIpO2Z1bmN0aW9uIGtNKHQpe2xldCBlPXR5cGVvZiB0PT0ic3RyaW5nIj90LmNvZGVQb2ludEF0KDApOjA7cmV0dXJuIGU9PT02N3x8ZT09PTk5Pzk5OmU9PT03Nnx8ZT09PTEwOD8xMDg6ZT09PTgyfHxlPT09MTE0PzExNDowfW8oa00sInRvQWxpZ25tZW50Iik7ZnVuY3Rpb24gRmIoKXtyZXR1cm57ZW50ZXI6e3RhYmxlOnhILHRhYmxlRGF0YTpUTSx0YWJsZUhlYWRlcjpUTSx0YWJsZVJvdzp3SH0sZXhpdDp7Y29kZVRleHQ6dkgsdGFibGU6YkgsdGFibGVEYXRhOkxiLHRhYmxlSGVhZGVyOkxiLHRhYmxlUm93OkxifX19byhGYiwiZ2ZtVGFibGVGcm9tTWFya2Rvd24iKTtmdW5jdGlvbiB4SCh0KXtsZXQgZT10Ll9hbGlnbjt0aGlzLmVudGVyKHt0eXBlOiJ0YWJsZSIsYWxpZ246ZS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ibm9uZSI/bnVsbDpyfSksY2hpbGRyZW46W119LHQpLHRoaXMuZGF0YS5pblRhYmxlPSEwfW8oeEgsImVudGVyVGFibGUiKTtmdW5jdGlvbiBiSCh0KXt0aGlzLmV4aXQodCksdGhpcy5kYXRhLmluVGFibGU9dm9pZCAwfW8oYkgsImV4aXRUYWJsZSIpO2Z1bmN0aW9uIHdIKHQpe3RoaXMuZW50ZXIoe3R5cGU6InRhYmxlUm93IixjaGlsZHJlbjpbXX0sdCl9byh3SCwiZW50ZXJSb3ciKTtmdW5jdGlvbiBMYih0KXt0aGlzLmV4aXQodCl9byhMYiwiZXhpdCIpO2Z1bmN0aW9uIFRNKHQpe3RoaXMuZW50ZXIoe3R5cGU6InRhYmxlQ2VsbCIsY2hpbGRyZW46W119LHQpfW8oVE0sImVudGVyQ2VsbCIpO2Z1bmN0aW9uIHZIKHQpe2xldCBlPXRoaXMucmVzdW1lKCk7dGhpcy5kYXRhLmluVGFibGUmJihlPWUucmVwbGFjZSgvXFwoW1xcfF0pL2csa0gpKTtsZXQgcj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO3IudHlwZSxyLnZhbHVlPWUsdGhpcy5leGl0KHQpfW8odkgsImV4aXRDb2RlVGV4dCIpO2Z1bmN0aW9uIGtIKHQsZSl7cmV0dXJuIGU9PT0ifCI/ZTp0fW8oa0gsInJlcGxhY2UiKTtmdW5jdGlvbiBBYih0KXtsZXQgZT10fHx7fSxyPWUudGFibGVDZWxsUGFkZGluZyxuPWUudGFibGVQaXBlQWxpZ24saT1lLnN0cmluZ0xlbmd0aCxzPXI/IiAiOiJ8IjtyZXR1cm57dW5zYWZlOlt7Y2hhcmFjdGVyOiJcciIsaW5Db25zdHJ1Y3Q6InRhYmxlQ2VsbCJ9LHtjaGFyYWN0ZXI6YApgLGluQ29uc3RydWN0OiJ0YWJsZUNlbGwifSx7YXRCcmVhazohMCxjaGFyYWN0ZXI6InwiLGFmdGVyOiJbCSA6LV0ifSx7Y2hhcmFjdGVyOiJ8IixpbkNvbnN0cnVjdDoidGFibGVDZWxsIn0se2F0QnJlYWs6ITAsY2hhcmFjdGVyOiI6IixhZnRlcjoiLSJ9LHthdEJyZWFrOiEwLGNoYXJhY3RlcjoiLSIsYWZ0ZXI6Ils6fC1dIn1dLGhhbmRsZXJzOntpbmxpbmVDb2RlOmgsdGFibGU6YSx0YWJsZUNlbGw6Yyx0YWJsZVJvdzpsfX07ZnVuY3Rpb24gYShkLG0sZyx5KXtyZXR1cm4gdShmKGQsZyx5KSxkLmFsaWduKX1mdW5jdGlvbiBsKGQsbSxnLHkpe2xldCB4PXAoZCxnLHkpLGs9dShbeF0pO3JldHVybiBrLnNsaWNlKDAsay5pbmRleE9mKGAKYCkpfWZ1bmN0aW9uIGMoZCxtLGcseSl7bGV0IHg9Zy5lbnRlcigidGFibGVDZWxsIiksaz1nLmVudGVyKCJwaHJhc2luZyIpLFQ9Zy5jb250YWluZXJQaHJhc2luZyhkLHsuLi55LGJlZm9yZTpzLGFmdGVyOnN9KTtyZXR1cm4gaygpLHgoKSxUfWZ1bmN0aW9uIHUoZCxtKXtyZXR1cm4gU00oZCx7YWxpZ246bSxhbGlnbkRlbGltaXRlcnM6bixwYWRkaW5nOnIsc3RyaW5nTGVuZ3RoOml9KX1mdW5jdGlvbiBmKGQsbSxnKXtsZXQgeT1kLmNoaWxkcmVuLHg9LTEsaz1bXSxUPW0uZW50ZXIoInRhYmxlIik7Zm9yKDsrK3g8eS5sZW5ndGg7KWtbeF09cCh5W3hdLG0sZyk7cmV0dXJuIFQoKSxrfWZ1bmN0aW9uIHAoZCxtLGcpe2xldCB5PWQuY2hpbGRyZW4seD0tMSxrPVtdLFQ9bS5lbnRlcigidGFibGVSb3ciKTtmb3IoOysreDx5Lmxlbmd0aDspa1t4XT1jKHlbeF0sZCxtLGcpO3JldHVybiBUKCksa31mdW5jdGlvbiBoKGQsbSxnKXtsZXQgeT1fby5pbmxpbmVDb2RlKGQsbSxnKTtyZXR1cm4gZy5zdGFjay5pbmNsdWRlcygidGFibGVDZWxsIikmJih5PXkucmVwbGFjZSgvXHwvZywiXFwkJiIpKSx5fX1vKEFiLCJnZm1UYWJsZVRvTWFya2Rvd24iKTtmdW5jdGlvbiAkYigpe3JldHVybntleGl0Ont0YXNrTGlzdENoZWNrVmFsdWVDaGVja2VkOkVNLHRhc2tMaXN0Q2hlY2tWYWx1ZVVuY2hlY2tlZDpFTSxwYXJhZ3JhcGg6U0h9fX1vKCRiLCJnZm1UYXNrTGlzdEl0ZW1Gcm9tTWFya2Rvd24iKTtmdW5jdGlvbiBCYigpe3JldHVybnt1bnNhZmU6W3thdEJyZWFrOiEwLGNoYXJhY3RlcjoiLSIsYWZ0ZXI6Ils6fC1dIn1dLGhhbmRsZXJzOntsaXN0SXRlbTpUSH19fW8oQmIsImdmbVRhc2tMaXN0SXRlbVRvTWFya2Rvd24iKTtmdW5jdGlvbiBFTSh0KXtsZXQgZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTJdO2UudHlwZSxlLmNoZWNrZWQ9dC50eXBlPT09InRhc2tMaXN0Q2hlY2tWYWx1ZUNoZWNrZWQifW8oRU0sImV4aXRDaGVjayIpO2Z1bmN0aW9uIFNIKHQpe2xldCBlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMl07aWYoZSYmZS50eXBlPT09Imxpc3RJdGVtIiYmdHlwZW9mIGUuY2hlY2tlZD09ImJvb2xlYW4iKXtsZXQgcj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO3IudHlwZTtsZXQgbj1yLmNoaWxkcmVuWzBdO2lmKG4mJm4udHlwZT09PSJ0ZXh0Iil7bGV0IGk9ZS5jaGlsZHJlbixzPS0xLGE7Zm9yKDsrK3M8aS5sZW5ndGg7KXtsZXQgbD1pW3NdO2lmKGwudHlwZT09PSJwYXJhZ3JhcGgiKXthPWw7YnJlYWt9fWE9PT1yJiYobi52YWx1ZT1uLnZhbHVlLnNsaWNlKDEpLG4udmFsdWUubGVuZ3RoPT09MD9yLmNoaWxkcmVuLnNoaWZ0KCk6ci5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmdHlwZW9mIG4ucG9zaXRpb24uc3RhcnQub2Zmc2V0PT0ibnVtYmVyIiYmKG4ucG9zaXRpb24uc3RhcnQuY29sdW1uKyssbi5wb3NpdGlvbi5zdGFydC5vZmZzZXQrKyxyLnBvc2l0aW9uLnN0YXJ0PU9iamVjdC5hc3NpZ24oe30sbi5wb3NpdGlvbi5zdGFydCkpKX19dGhpcy5leGl0KHQpfW8oU0gsImV4aXRQYXJhZ3JhcGhXaXRoVGFza0xpc3RJdGVtIik7ZnVuY3Rpb24gVEgodCxlLHIsbil7bGV0IGk9dC5jaGlsZHJlblswXSxzPXR5cGVvZiB0LmNoZWNrZWQ9PSJib29sZWFuIiYmaSYmaS50eXBlPT09InBhcmFncmFwaCIsYT0iWyIrKHQuY2hlY2tlZD8ieCI6IiAiKSsiXSAiLGw9ci5jcmVhdGVUcmFja2VyKG4pO3MmJmwubW92ZShhKTtsZXQgYz1fby5saXN0SXRlbSh0LGUscix7Li4ubiwuLi5sLmN1cnJlbnQoKX0pO3JldHVybiBzJiYoYz1jLnJlcGxhY2UoL14oPzpbKistXXxcZCtcLikoW1xyXG5dfCB7MSwzfSkvLHUpKSxjO2Z1bmN0aW9uIHUoZil7cmV0dXJuIGYrYX1vKHUsImNoZWNrIil9byhUSCwibGlzdEl0ZW1XaXRoVGFza0xpc3RJdGVtIik7ZnVuY3Rpb24gemIoKXtyZXR1cm5bT2IoKSxfYigpLE5iKCksRmIoKSwkYigpXX1vKHpiLCJnZm1Gcm9tTWFya2Rvd24iKTtmdW5jdGlvbiBIYih0KXtyZXR1cm57ZXh0ZW5zaW9uczpbSWIoKSxQYih0KSxSYigpLEFiKHQpLEJiKCldfX1vKEhiLCJnZm1Ub01hcmtkb3duIik7dmFyIEVIPXt0b2tlbml6ZTpJSCxwYXJ0aWFsOiEwfSxETT17dG9rZW5pemU6X0gscGFydGlhbDohMH0sQ009e3Rva2VuaXplOlBILHBhcnRpYWw6ITB9LE1NPXt0b2tlbml6ZTpOSCxwYXJ0aWFsOiEwfSxESD17dG9rZW5pemU6UkgscGFydGlhbDohMH0sT009e25hbWU6Ind3d0F1dG9saW5rIix0b2tlbml6ZTpNSCxwcmV2aW91czpfTX0sSU09e25hbWU6InByb3RvY29sQXV0b2xpbmsiLHRva2VuaXplOk9ILHByZXZpb3VzOlBNfSxabj17bmFtZToiZW1haWxBdXRvbGluayIsdG9rZW5pemU6Q0gscHJldmlvdXM6Tk19LERuPXt9O2Z1bmN0aW9uIHFiKCl7cmV0dXJue3RleHQ6RG59fW8ocWIsImdmbUF1dG9saW5rTGl0ZXJhbCIpO2Zvcih2YXIgVW89NDg7VW88MTIzOylEbltVb109Wm4sVW8rKyxVbz09PTU4P1VvPTY1OlVvPT09OTEmJihVbz05Nyk7RG5bNDNdPVpuLERuWzQ1XT1abixEbls0Nl09Wm4sRG5bOTVdPVpuLERuWzcyXT1bWm4sSU1dLERuWzEwNF09W1puLElNXSxEbls4N109W1puLE9NXSxEblsxMTldPVtabixPTV07ZnVuY3Rpb24gQ0godCxlLHIpe2xldCBuPXRoaXMsaSxzO3JldHVybiBhO2Z1bmN0aW9uIGEocCl7cmV0dXJuIWpiKHApfHwhTk0uY2FsbChuLG4ucHJldmlvdXMpfHxXYihuLmV2ZW50cyk/cihwKToodC5lbnRlcigibGl0ZXJhbEF1dG9saW5rIiksdC5lbnRlcigibGl0ZXJhbEF1dG9saW5rRW1haWwiKSxsKHApKX1mdW5jdGlvbiBsKHApe3JldHVybiBqYihwKT8odC5jb25zdW1lKHApLGwpOnA9PT02ND8odC5jb25zdW1lKHApLGMpOnIocCl9ZnVuY3Rpb24gYyhwKXtyZXR1cm4gcD09PTQ2P3QuY2hlY2soREgsZix1KShwKTpwPT09NDV8fHA9PT05NXx8UWUocCk/KHM9ITAsdC5jb25zdW1lKHApLGMpOmYocCl9ZnVuY3Rpb24gdShwKXtyZXR1cm4gdC5jb25zdW1lKHApLGk9ITAsY31mdW5jdGlvbiBmKHApe3JldHVybiBzJiZpJiZjdChuLnByZXZpb3VzKT8odC5leGl0KCJsaXRlcmFsQXV0b2xpbmtFbWFpbCIpLHQuZXhpdCgibGl0ZXJhbEF1dG9saW5rIiksZShwKSk6cihwKX19byhDSCwidG9rZW5pemVFbWFpbEF1dG9saW5rIik7ZnVuY3Rpb24gTUgodCxlLHIpe2xldCBuPXRoaXM7cmV0dXJuIGk7ZnVuY3Rpb24gaShhKXtyZXR1cm4gYSE9PTg3JiZhIT09MTE5fHwhX00uY2FsbChuLG4ucHJldmlvdXMpfHxXYihuLmV2ZW50cyk/cihhKToodC5lbnRlcigibGl0ZXJhbEF1dG9saW5rIiksdC5lbnRlcigibGl0ZXJhbEF1dG9saW5rV3d3IiksdC5jaGVjayhFSCx0LmF0dGVtcHQoRE0sdC5hdHRlbXB0KENNLHMpLHIpLHIpKGEpKX1mdW5jdGlvbiBzKGEpe3JldHVybiB0LmV4aXQoImxpdGVyYWxBdXRvbGlua1d3dyIpLHQuZXhpdCgibGl0ZXJhbEF1dG9saW5rIiksZShhKX19byhNSCwidG9rZW5pemVXd3dBdXRvbGluayIpO2Z1bmN0aW9uIE9IKHQsZSxyKXtsZXQgbj10aGlzLGk9IiIscz0hMTtyZXR1cm4gYTtmdW5jdGlvbiBhKHApe3JldHVybihwPT09NzJ8fHA9PT0xMDQpJiZQTS5jYWxsKG4sbi5wcmV2aW91cykmJiFXYihuLmV2ZW50cyk/KHQuZW50ZXIoImxpdGVyYWxBdXRvbGluayIpLHQuZW50ZXIoImxpdGVyYWxBdXRvbGlua0h0dHAiKSxpKz1TdHJpbmcuZnJvbUNvZGVQb2ludChwKSx0LmNvbnN1bWUocCksbCk6cihwKX1mdW5jdGlvbiBsKHApe2lmKGN0KHApJiZpLmxlbmd0aDw1KXJldHVybiBpKz1TdHJpbmcuZnJvbUNvZGVQb2ludChwKSx0LmNvbnN1bWUocCksbDtpZihwPT09NTgpe2xldCBoPWkudG9Mb3dlckNhc2UoKTtpZihoPT09Imh0dHAifHxoPT09Imh0dHBzIilyZXR1cm4gdC5jb25zdW1lKHApLGN9cmV0dXJuIHIocCl9ZnVuY3Rpb24gYyhwKXtyZXR1cm4gcD09PTQ3Pyh0LmNvbnN1bWUocCkscz91OihzPSEwLGMpKTpyKHApfWZ1bmN0aW9uIHUocCl7cmV0dXJuIHA9PT1udWxsfHxUbyhwKXx8eWUocCl8fHhuKHApfHxFbyhwKT9yKHApOnQuYXR0ZW1wdChETSx0LmF0dGVtcHQoQ00sZikscikocCl9ZnVuY3Rpb24gZihwKXtyZXR1cm4gdC5leGl0KCJsaXRlcmFsQXV0b2xpbmtIdHRwIiksdC5leGl0KCJsaXRlcmFsQXV0b2xpbmsiKSxlKHApfX1vKE9ILCJ0b2tlbml6ZVByb3RvY29sQXV0b2xpbmsiKTtmdW5jdGlvbiBJSCh0LGUscil7bGV0IG49MDtyZXR1cm4gaTtmdW5jdGlvbiBpKGEpe3JldHVybihhPT09ODd8fGE9PT0xMTkpJiZuPDM/KG4rKyx0LmNvbnN1bWUoYSksaSk6YT09PTQ2JiZuPT09Mz8odC5jb25zdW1lKGEpLHMpOnIoYSl9ZnVuY3Rpb24gcyhhKXtyZXR1cm4gYT09PW51bGw/cihhKTplKGEpfX1vKElILCJ0b2tlbml6ZVd3d1ByZWZpeCIpO2Z1bmN0aW9uIF9IKHQsZSxyKXtsZXQgbixpLHM7cmV0dXJuIGE7ZnVuY3Rpb24gYSh1KXtyZXR1cm4gdT09PTQ2fHx1PT09OTU/dC5jaGVjayhNTSxjLGwpKHUpOnU9PT1udWxsfHx5ZSh1KXx8eG4odSl8fHUhPT00NSYmRW8odSk/Yyh1KToocz0hMCx0LmNvbnN1bWUodSksYSl9ZnVuY3Rpb24gbCh1KXtyZXR1cm4gdT09PTk1P249ITA6KGk9bixuPXZvaWQgMCksdC5jb25zdW1lKHUpLGF9ZnVuY3Rpb24gYyh1KXtyZXR1cm4gaXx8bnx8IXM/cih1KTplKHUpfX1vKF9ILCJ0b2tlbml6ZURvbWFpbiIpO2Z1bmN0aW9uIFBIKHQsZSl7bGV0IHI9MCxuPTA7cmV0dXJuIGk7ZnVuY3Rpb24gaShhKXtyZXR1cm4gYT09PTQwPyhyKyssdC5jb25zdW1lKGEpLGkpOmE9PT00MSYmbjxyP3MoYSk6YT09PTMzfHxhPT09MzR8fGE9PT0zOHx8YT09PTM5fHxhPT09NDF8fGE9PT00Mnx8YT09PTQ0fHxhPT09NDZ8fGE9PT01OHx8YT09PTU5fHxhPT09NjB8fGE9PT02M3x8YT09PTkzfHxhPT09OTV8fGE9PT0xMjY/dC5jaGVjayhNTSxlLHMpKGEpOmE9PT1udWxsfHx5ZShhKXx8eG4oYSk/ZShhKToodC5jb25zdW1lKGEpLGkpfWZ1bmN0aW9uIHMoYSl7cmV0dXJuIGE9PT00MSYmbisrLHQuY29uc3VtZShhKSxpfX1vKFBILCJ0b2tlbml6ZVBhdGgiKTtmdW5jdGlvbiBOSCh0LGUscil7cmV0dXJuIG47ZnVuY3Rpb24gbihsKXtyZXR1cm4gbD09PTMzfHxsPT09MzR8fGw9PT0zOXx8bD09PTQxfHxsPT09NDJ8fGw9PT00NHx8bD09PTQ2fHxsPT09NTh8fGw9PT01OXx8bD09PTYzfHxsPT09OTV8fGw9PT0xMjY/KHQuY29uc3VtZShsKSxuKTpsPT09Mzg/KHQuY29uc3VtZShsKSxzKTpsPT09OTM/KHQuY29uc3VtZShsKSxpKTpsPT09NjB8fGw9PT1udWxsfHx5ZShsKXx8eG4obCk/ZShsKTpyKGwpfWZ1bmN0aW9uIGkobCl7cmV0dXJuIGw9PT1udWxsfHxsPT09NDB8fGw9PT05MXx8eWUobCl8fHhuKGwpP2UobCk6bihsKX1mdW5jdGlvbiBzKGwpe3JldHVybiBjdChsKT9hKGwpOnIobCl9ZnVuY3Rpb24gYShsKXtyZXR1cm4gbD09PTU5Pyh0LmNvbnN1bWUobCksbik6Y3QobCk/KHQuY29uc3VtZShsKSxhKTpyKGwpfX1vKE5ILCJ0b2tlbml6ZVRyYWlsIik7ZnVuY3Rpb24gUkgodCxlLHIpe3JldHVybiBuO2Z1bmN0aW9uIG4ocyl7cmV0dXJuIHQuY29uc3VtZShzKSxpfWZ1bmN0aW9uIGkocyl7cmV0dXJuIFFlKHMpP3Iocyk6ZShzKX19byhSSCwidG9rZW5pemVFbWFpbERvbWFpbkRvdFRyYWlsIik7ZnVuY3Rpb24gX00odCl7cmV0dXJuIHQ9PT1udWxsfHx0PT09NDB8fHQ9PT00Mnx8dD09PTk1fHx0PT09OTF8fHQ9PT05M3x8dD09PTEyNnx8eWUodCl9byhfTSwicHJldmlvdXNXd3ciKTtmdW5jdGlvbiBQTSh0KXtyZXR1cm4hY3QodCl9byhQTSwicHJldmlvdXNQcm90b2NvbCIpO2Z1bmN0aW9uIE5NKHQpe3JldHVybiEodD09PTQ3fHxqYih0KSl9byhOTSwicHJldmlvdXNFbWFpbCIpO2Z1bmN0aW9uIGpiKHQpe3JldHVybiB0PT09NDN8fHQ9PT00NXx8dD09PTQ2fHx0PT09OTV8fFFlKHQpfW8oamIsImdmbUF0ZXh0Iik7ZnVuY3Rpb24gV2IodCl7bGV0IGU9dC5sZW5ndGgscj0hMTtmb3IoO2UtLTspe2xldCBuPXRbZV1bMV07aWYoKG4udHlwZT09PSJsYWJlbExpbmsifHxuLnR5cGU9PT0ibGFiZWxJbWFnZSIpJiYhbi5fYmFsYW5jZWQpe3I9ITA7YnJlYWt9aWYobi5fZ2ZtQXV0b2xpbmtMaXRlcmFsV2Fsa2VkSW50byl7cj0hMTticmVha319cmV0dXJuIHQubGVuZ3RoPjAmJiFyJiYodFt0Lmxlbmd0aC0xXVsxXS5fZ2ZtQXV0b2xpbmtMaXRlcmFsV2Fsa2VkSW50bz0hMCkscn1vKFdiLCJwcmV2aW91c1VuYmFsYW5jZWQiKTtmdW5jdGlvbiBWYigpe3JldHVybntleGl0OntsaXRlcmFsQXV0b2xpbmtFbWFpbDpGSCxsaXRlcmFsQXV0b2xpbmtIdHRwOkFILGxpdGVyYWxBdXRvbGlua1d3dzpMSH19fW8oVmIsImdmbUF1dG9saW5rTGl0ZXJhbEh0bWwiKTtmdW5jdGlvbiBMSCh0KXtVYi5jYWxsKHRoaXMsdCwiaHR0cDovLyIpfW8oTEgsImxpdGVyYWxBdXRvbGlua1d3dyIpO2Z1bmN0aW9uIEZIKHQpe1ViLmNhbGwodGhpcyx0LCJtYWlsdG86Iil9byhGSCwibGl0ZXJhbEF1dG9saW5rRW1haWwiKTtmdW5jdGlvbiBBSCh0KXtVYi5jYWxsKHRoaXMsdCl9byhBSCwibGl0ZXJhbEF1dG9saW5rSHR0cCIpO2Z1bmN0aW9uIFViKHQsZSl7bGV0IHI9dGhpcy5zbGljZVNlcmlhbGl6ZSh0KTt0aGlzLnRhZygnPGEgaHJlZj0iJytibigoZXx8IiIpK3IpKyciPicpLHRoaXMucmF3KHRoaXMuZW5jb2RlKHIpKSx0aGlzLnRhZygiPC9hPiIpfW8oVWIsImFuY2hvckZyb21Ub2tlbiIpO3ZhciAkSD17dG9rZW5pemU6VUgscGFydGlhbDohMH07ZnVuY3Rpb24gWWIoKXtyZXR1cm57ZG9jdW1lbnQ6ezkxOntuYW1lOiJnZm1Gb290bm90ZURlZmluaXRpb24iLHRva2VuaXplOmpILGNvbnRpbnVhdGlvbjp7dG9rZW5pemU6V0h9LGV4aXQ6cUh9fSx0ZXh0Ons5MTp7bmFtZToiZ2ZtRm9vdG5vdGVDYWxsIix0b2tlbml6ZTpISH0sOTM6e25hbWU6ImdmbVBvdGVudGlhbEZvb3Rub3RlQ2FsbCIsYWRkOiJhZnRlciIsdG9rZW5pemU6QkgscmVzb2x2ZVRvOnpIfX19fW8oWWIsImdmbUZvb3Rub3RlIik7ZnVuY3Rpb24gQkgodCxlLHIpe2xldCBuPXRoaXMsaT1uLmV2ZW50cy5sZW5ndGgscz1uLnBhcnNlci5nZm1Gb290bm90ZXN8fChuLnBhcnNlci5nZm1Gb290bm90ZXM9W10pLGE7Zm9yKDtpLS07KXtsZXQgYz1uLmV2ZW50c1tpXVsxXTtpZihjLnR5cGU9PT0ibGFiZWxJbWFnZSIpe2E9YzticmVha31pZihjLnR5cGU9PT0iZ2ZtRm9vdG5vdGVDYWxsInx8Yy50eXBlPT09ImxhYmVsTGluayJ8fGMudHlwZT09PSJsYWJlbCJ8fGMudHlwZT09PSJpbWFnZSJ8fGMudHlwZT09PSJsaW5rIilicmVha31yZXR1cm4gbDtmdW5jdGlvbiBsKGMpe2lmKCFhfHwhYS5fYmFsYW5jZWQpcmV0dXJuIHIoYyk7bGV0IHU9S2Uobi5zbGljZVNlcmlhbGl6ZSh7c3RhcnQ6YS5lbmQsZW5kOm4ubm93KCl9KSk7cmV0dXJuIHUuY29kZVBvaW50QXQoMCkhPT05NHx8IXMuaW5jbHVkZXModS5zbGljZSgxKSk/cihjKToodC5lbnRlcigiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKSx0LmNvbnN1bWUoYyksdC5leGl0KCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpLGUoYykpfX1vKEJILCJ0b2tlbml6ZVBvdGVudGlhbEdmbUZvb3Rub3RlQ2FsbCIpO2Z1bmN0aW9uIHpIKHQsZSl7bGV0IHI9dC5sZW5ndGgsbjtmb3IoO3ItLTspaWYodFtyXVsxXS50eXBlPT09ImxhYmVsSW1hZ2UiJiZ0W3JdWzBdPT09ImVudGVyIil7bj10W3JdWzFdO2JyZWFrfXRbcisxXVsxXS50eXBlPSJkYXRhIix0W3IrM11bMV0udHlwZT0iZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiO2xldCBpPXt0eXBlOiJnZm1Gb290bm90ZUNhbGwiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sdFtyKzNdWzFdLnN0YXJ0KSxlbmQ6T2JqZWN0LmFzc2lnbih7fSx0W3QubGVuZ3RoLTFdWzFdLmVuZCl9LHM9e3R5cGU6ImdmbUZvb3Rub3RlQ2FsbE1hcmtlciIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSx0W3IrM11bMV0uZW5kKSxlbmQ6T2JqZWN0LmFzc2lnbih7fSx0W3IrM11bMV0uZW5kKX07cy5lbmQuY29sdW1uKysscy5lbmQub2Zmc2V0Kysscy5lbmQuX2J1ZmZlckluZGV4Kys7bGV0IGE9e3R5cGU6ImdmbUZvb3Rub3RlQ2FsbFN0cmluZyIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxzLmVuZCksZW5kOk9iamVjdC5hc3NpZ24oe30sdFt0Lmxlbmd0aC0xXVsxXS5zdGFydCl9LGw9e3R5cGU6ImNodW5rU3RyaW5nIixjb250ZW50VHlwZToic3RyaW5nIixzdGFydDpPYmplY3QuYXNzaWduKHt9LGEuc3RhcnQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGEuZW5kKX0sYz1bdFtyKzFdLHRbcisyXSxbImVudGVyIixpLGVdLHRbciszXSx0W3IrNF0sWyJlbnRlciIscyxlXSxbImV4aXQiLHMsZV0sWyJlbnRlciIsYSxlXSxbImVudGVyIixsLGVdLFsiZXhpdCIsbCxlXSxbImV4aXQiLGEsZV0sdFt0Lmxlbmd0aC0yXSx0W3QubGVuZ3RoLTFdLFsiZXhpdCIsaSxlXV07cmV0dXJuIHQuc3BsaWNlKHIsdC5sZW5ndGgtcisxLC4uLmMpLHR9byh6SCwicmVzb2x2ZVRvUG90ZW50aWFsR2ZtRm9vdG5vdGVDYWxsIik7ZnVuY3Rpb24gSEgodCxlLHIpe2xldCBuPXRoaXMsaT1uLnBhcnNlci5nZm1Gb290bm90ZXN8fChuLnBhcnNlci5nZm1Gb290bm90ZXM9W10pLHM9MCxhO3JldHVybiBsO2Z1bmN0aW9uIGwocCl7cmV0dXJuIHQuZW50ZXIoImdmbUZvb3Rub3RlQ2FsbCIpLHQuZW50ZXIoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIiksdC5jb25zdW1lKHApLHQuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKSxjfWZ1bmN0aW9uIGMocCl7cmV0dXJuIHAhPT05ND9yKHApOih0LmVudGVyKCJnZm1Gb290bm90ZUNhbGxNYXJrZXIiKSx0LmNvbnN1bWUocCksdC5leGl0KCJnZm1Gb290bm90ZUNhbGxNYXJrZXIiKSx0LmVudGVyKCJnZm1Gb290bm90ZUNhbGxTdHJpbmciKSx0LmVudGVyKCJjaHVua1N0cmluZyIpLmNvbnRlbnRUeXBlPSJzdHJpbmciLHUpfWZ1bmN0aW9uIHUocCl7aWYocz45OTl8fHA9PT05MyYmIWF8fHA9PT1udWxsfHxwPT09OTF8fHllKHApKXJldHVybiByKHApO2lmKHA9PT05Myl7dC5leGl0KCJjaHVua1N0cmluZyIpO2xldCBoPXQuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nIik7cmV0dXJuIGkuaW5jbHVkZXMoS2Uobi5zbGljZVNlcmlhbGl6ZShoKSkpPyh0LmVudGVyKCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpLHQuY29uc3VtZShwKSx0LmV4aXQoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIiksdC5leGl0KCJnZm1Gb290bm90ZUNhbGwiKSxlKTpyKHApfXJldHVybiB5ZShwKXx8KGE9ITApLHMrKyx0LmNvbnN1bWUocCkscD09PTkyP2Y6dX1mdW5jdGlvbiBmKHApe3JldHVybiBwPT09OTF8fHA9PT05Mnx8cD09PTkzPyh0LmNvbnN1bWUocCkscysrLHUpOnUocCl9fW8oSEgsInRva2VuaXplR2ZtRm9vdG5vdGVDYWxsIik7ZnVuY3Rpb24gakgodCxlLHIpe2xldCBuPXRoaXMsaT1uLnBhcnNlci5nZm1Gb290bm90ZXN8fChuLnBhcnNlci5nZm1Gb290bm90ZXM9W10pLHMsYT0wLGw7cmV0dXJuIGM7ZnVuY3Rpb24gYyhtKXtyZXR1cm4gdC5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uIikuX2NvbnRhaW5lcj0hMCx0LmVudGVyKCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbCIpLHQuZW50ZXIoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsTWFya2VyIiksdC5jb25zdW1lKG0pLHQuZXhpdCgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxNYXJrZXIiKSx1fWZ1bmN0aW9uIHUobSl7cmV0dXJuIG09PT05ND8odC5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTWFya2VyIiksdC5jb25zdW1lKG0pLHQuZXhpdCgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTWFya2VyIiksdC5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmciKSx0LmVudGVyKCJjaHVua1N0cmluZyIpLmNvbnRlbnRUeXBlPSJzdHJpbmciLGYpOnIobSl9ZnVuY3Rpb24gZihtKXtpZihhPjk5OXx8bT09PTkzJiYhbHx8bT09PW51bGx8fG09PT05MXx8eWUobSkpcmV0dXJuIHIobSk7aWYobT09PTkzKXt0LmV4aXQoImNodW5rU3RyaW5nIik7bGV0IGc9dC5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZyIpO3JldHVybiBzPUtlKG4uc2xpY2VTZXJpYWxpemUoZykpLHQuZW50ZXIoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsTWFya2VyIiksdC5jb25zdW1lKG0pLHQuZXhpdCgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxNYXJrZXIiKSx0LmV4aXQoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsIiksaH1yZXR1cm4geWUobSl8fChsPSEwKSxhKyssdC5jb25zdW1lKG0pLG09PT05Mj9wOmZ9ZnVuY3Rpb24gcChtKXtyZXR1cm4gbT09PTkxfHxtPT09OTJ8fG09PT05Mz8odC5jb25zdW1lKG0pLGErKyxmKTpmKG0pfWZ1bmN0aW9uIGgobSl7cmV0dXJuIG09PT01OD8odC5lbnRlcigiZGVmaW5pdGlvbk1hcmtlciIpLHQuY29uc3VtZShtKSx0LmV4aXQoImRlZmluaXRpb25NYXJrZXIiKSxpLmluY2x1ZGVzKHMpfHxpLnB1c2gocyksaWUodCxkLCJnZm1Gb290bm90ZURlZmluaXRpb25XaGl0ZXNwYWNlIikpOnIobSl9ZnVuY3Rpb24gZChtKXtyZXR1cm4gZShtKX19byhqSCwidG9rZW5pemVEZWZpbml0aW9uU3RhcnQiKTtmdW5jdGlvbiBXSCh0LGUscil7cmV0dXJuIHQuY2hlY2soRW4sZSx0LmF0dGVtcHQoJEgsZSxyKSl9byhXSCwidG9rZW5pemVEZWZpbml0aW9uQ29udGludWF0aW9uIik7ZnVuY3Rpb24gcUgodCl7dC5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb24iKX1vKHFILCJnZm1Gb290bm90ZURlZmluaXRpb25FbmQiKTtmdW5jdGlvbiBVSCh0LGUscil7bGV0IG49dGhpcztyZXR1cm4gaWUodCxpLCJnZm1Gb290bm90ZURlZmluaXRpb25JbmRlbnQiLDUpO2Z1bmN0aW9uIGkocyl7bGV0IGE9bi5ldmVudHNbbi5ldmVudHMubGVuZ3RoLTFdO3JldHVybiBhJiZhWzFdLnR5cGU9PT0iZ2ZtRm9vdG5vdGVEZWZpbml0aW9uSW5kZW50IiYmYVsyXS5zbGljZVNlcmlhbGl6ZShhWzFdLCEwKS5sZW5ndGg9PT00P2Uocyk6cihzKX19byhVSCwidG9rZW5pemVJbmRlbnQiKTt2YXIgVkg9e30uaGFzT3duUHJvcGVydHksWUg9e307ZnVuY3Rpb24gUk0odCxlKXtyZXR1cm4iQmFjayB0byByZWZlcmVuY2UgIisodCsxKSsoZT4xPyItIitlOiIiKX1vKFJNLCJkZWZhdWx0QmFja0xhYmVsIik7ZnVuY3Rpb24gR2IodCl7bGV0IGU9dHx8WUgscj1lLmxhYmVsfHwiRm9vdG5vdGVzIixuPWUubGFiZWxUYWdOYW1lfHwiaDIiLGk9ZS5sYWJlbEF0dHJpYnV0ZXM9PT1udWxsfHxlLmxhYmVsQXR0cmlidXRlcz09PXZvaWQgMD8nY2xhc3M9InNyLW9ubHkiJzplLmxhYmVsQXR0cmlidXRlcyxzPWUuYmFja0xhYmVsfHxSTSxhPWUuY2xvYmJlclByZWZpeD09PW51bGx8fGUuY2xvYmJlclByZWZpeD09PXZvaWQgMD8idXNlci1jb250ZW50LSI6ZS5jbG9iYmVyUHJlZml4O3JldHVybntlbnRlcjp7Z2ZtRm9vdG5vdGVEZWZpbml0aW9uKCl7dGhpcy5nZXREYXRhKCJ0aWdodFN0YWNrIikucHVzaCghMSl9LGdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nKCl7dGhpcy5idWZmZXIoKX0sZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nKCl7dGhpcy5idWZmZXIoKX19LGV4aXQ6e2dmbUZvb3Rub3RlRGVmaW5pdGlvbigpe2xldCBsPXRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9ucyIpLGM9dGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25TdGFjayIpLHU9dGhpcy5nZXREYXRhKCJ0aWdodFN0YWNrIiksZj1jLnBvcCgpLHA9dGhpcy5yZXN1bWUoKTtsfHx0aGlzLnNldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvbnMiLGw9e30pLFZILmNhbGwobCxmKXx8KGxbZl09cCksdS5wb3AoKSx0aGlzLnNldERhdGEoInNsdXJwT25lTGluZUVuZGluZyIsITApLHRoaXMuc2V0RGF0YSgibGFzdFdhc1RhZyIpfSxnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZyhsKXtsZXQgYz10aGlzLmdldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvblN0YWNrIik7Y3x8dGhpcy5zZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25TdGFjayIsYz1bXSksYy5wdXNoKEtlKHRoaXMuc2xpY2VTZXJpYWxpemUobCkpKSx0aGlzLnJlc3VtZSgpLHRoaXMuYnVmZmVyKCl9LGdmbUZvb3Rub3RlQ2FsbFN0cmluZyhsKXtsZXQgYz10aGlzLmdldERhdGEoImdmbUZvb3Rub3RlQ2FsbE9yZGVyIiksdT10aGlzLmdldERhdGEoImdmbUZvb3Rub3RlQ2FsbENvdW50cyIpLGY9S2UodGhpcy5zbGljZVNlcmlhbGl6ZShsKSkscDt0aGlzLnJlc3VtZSgpLGN8fHRoaXMuc2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsT3JkZXIiLGM9W10pLHV8fHRoaXMuc2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsQ291bnRzIix1PXt9KTtsZXQgaD1jLmluZGV4T2YoZiksZD1ibihmLnRvTG93ZXJDYXNlKCkpO2g9PT0tMT8oYy5wdXNoKGYpLHVbZl09MSxwPWMubGVuZ3RoKToodVtmXSsrLHA9aCsxKTtsZXQgbT11W2ZdO3RoaXMudGFnKCc8c3VwPjxhIGhyZWY9IiMnK2ErImZuLSIrZCsnIiBpZD0iJythKyJmbnJlZi0iK2QrKG0+MT8iLSIrbToiIikrJyIgZGF0YS1mb290bm90ZS1yZWY9IiIgYXJpYS1kZXNjcmliZWRieT0iZm9vdG5vdGUtbGFiZWwiPicrU3RyaW5nKHApKyI8L2E+PC9zdXA+Iil9LG51bGwoKXtsZXQgbD10aGlzLmdldERhdGEoImdmbUZvb3Rub3RlQ2FsbE9yZGVyIil8fFtdLGM9dGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZUNhbGxDb3VudHMiKXx8e30sdT10aGlzLmdldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvbnMiKXx8e30sZj0tMTtmb3IobC5sZW5ndGg+MCYmKHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoJzxzZWN0aW9uIGRhdGEtZm9vdG5vdGVzPSIiIGNsYXNzPSJmb290bm90ZXMiPjwnK24rJyBpZD0iZm9vdG5vdGUtbGFiZWwiJysoaT8iICIraToiIikrIj4iKSx0aGlzLnJhdyh0aGlzLmVuY29kZShyKSksdGhpcy50YWcoIjwvIituKyI+IiksdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPG9sPiIpKTsrK2Y8bC5sZW5ndGg7KXtsZXQgcD1sW2ZdLGg9Ym4ocC50b0xvd2VyQ2FzZSgpKSxkPTAsbT1bXTtmb3IoOysrZDw9Y1twXTspbS5wdXNoKCc8YSBocmVmPSIjJythKyJmbnJlZi0iK2grKGQ+MT8iLSIrZDoiIikrJyIgZGF0YS1mb290bm90ZS1iYWNrcmVmPSIiIGFyaWEtbGFiZWw9IicrdGhpcy5lbmNvZGUodHlwZW9mIHM9PSJzdHJpbmciP3M6cyhmLGQpKSsnIiBjbGFzcz0iZGF0YS1mb290bm90ZS1iYWNrcmVmIj5cdTIxQTknKyhkPjE/IjxzdXA+IitkKyI8L3N1cD4iOiIiKSsiPC9hPiIpO2xldCBnPW0uam9pbigiICIpLHk9ITE7dGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygnPGxpIGlkPSInK2ErImZuLSIraCsnIj4nKSx0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpLHRoaXMudGFnKHVbcF0ucmVwbGFjZSgvPFwvcD4oPzpccj9cbnxccik/JC8sZnVuY3Rpb24oeCl7cmV0dXJuIHk9ITAsIiAiK2creH0pKSx5fHwodGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZyhnKSksdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPC9saT4iKX1sLmxlbmd0aD4wJiYodGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPC9vbD4iKSx0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpLHRoaXMudGFnKCI8L3NlY3Rpb24+IikpfX19fW8oR2IsImdmbUZvb3Rub3RlSHRtbCIpO2Z1bmN0aW9uIFFiKCl7cmV0dXJue2VudGVyOntzdHJpa2V0aHJvdWdoKCl7dGhpcy50YWcoIjxkZWw+Iil9fSxleGl0OntzdHJpa2V0aHJvdWdoKCl7dGhpcy50YWcoIjwvZGVsPiIpfX19fW8oUWIsImdmbVN0cmlrZXRocm91Z2hIdG1sIik7ZnVuY3Rpb24gSmIodCl7bGV0IHI9KHR8fHt9KS5zaW5nbGVUaWxkZSxuPXtuYW1lOiJzdHJpa2V0aHJvdWdoIix0b2tlbml6ZTpzLHJlc29sdmVBbGw6aX07cmV0dXJuIHI9PW51bGwmJihyPSEwKSx7dGV4dDp7MTI2Om59LGluc2lkZVNwYW46e251bGw6W25dfSxhdHRlbnRpb25NYXJrZXJzOntudWxsOlsxMjZdfX07ZnVuY3Rpb24gaShhLGwpe2xldCBjPS0xO2Zvcig7KytjPGEubGVuZ3RoOylpZihhW2NdWzBdPT09ImVudGVyIiYmYVtjXVsxXS50eXBlPT09InN0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeSImJmFbY11bMV0uX2Nsb3NlKXtsZXQgdT1jO2Zvcig7dS0tOylpZihhW3VdWzBdPT09ImV4aXQiJiZhW3VdWzFdLnR5cGU9PT0ic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5IiYmYVt1XVsxXS5fb3BlbiYmYVtjXVsxXS5lbmQub2Zmc2V0LWFbY11bMV0uc3RhcnQub2Zmc2V0PT09YVt1XVsxXS5lbmQub2Zmc2V0LWFbdV1bMV0uc3RhcnQub2Zmc2V0KXthW2NdWzFdLnR5cGU9InN0cmlrZXRocm91Z2hTZXF1ZW5jZSIsYVt1XVsxXS50eXBlPSJzdHJpa2V0aHJvdWdoU2VxdWVuY2UiO2xldCBmPXt0eXBlOiJzdHJpa2V0aHJvdWdoIixzdGFydDpPYmplY3QuYXNzaWduKHt9LGFbdV1bMV0uc3RhcnQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGFbY11bMV0uZW5kKX0scD17dHlwZToic3RyaWtldGhyb3VnaFRleHQiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sYVt1XVsxXS5lbmQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGFbY11bMV0uc3RhcnQpfSxoPVtbImVudGVyIixmLGxdLFsiZW50ZXIiLGFbdV1bMV0sbF0sWyJleGl0IixhW3VdWzFdLGxdLFsiZW50ZXIiLHAsbF1dLGQ9bC5wYXJzZXIuY29uc3RydWN0cy5pbnNpZGVTcGFuLm51bGw7ZCYmWmUoaCxoLmxlbmd0aCwwLEJpKGQsYS5zbGljZSh1KzEsYyksbCkpLFplKGgsaC5sZW5ndGgsMCxbWyJleGl0IixwLGxdLFsiZW50ZXIiLGFbY11bMV0sbF0sWyJleGl0IixhW2NdWzFdLGxdLFsiZXhpdCIsZixsXV0pLFplKGEsdS0xLGMtdSszLGgpLGM9dStoLmxlbmd0aC0yO2JyZWFrfX1mb3IoYz0tMTsrK2M8YS5sZW5ndGg7KWFbY11bMV0udHlwZT09PSJzdHJpa2V0aHJvdWdoU2VxdWVuY2VUZW1wb3JhcnkiJiYoYVtjXVsxXS50eXBlPSJkYXRhIik7cmV0dXJuIGF9byhpLCJyZXNvbHZlQWxsU3RyaWtldGhyb3VnaCIpO2Z1bmN0aW9uIHMoYSxsLGMpe2xldCB1PXRoaXMucHJldmlvdXMsZj10aGlzLmV2ZW50cyxwPTA7cmV0dXJuIGg7ZnVuY3Rpb24gaChtKXtyZXR1cm4gdT09PTEyNiYmZltmLmxlbmd0aC0xXVsxXS50eXBlIT09ImNoYXJhY3RlckVzY2FwZSI/YyhtKTooYS5lbnRlcigic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5IiksZChtKSl9ZnVuY3Rpb24gZChtKXtsZXQgZz1xbih1KTtpZihtPT09MTI2KXJldHVybiBwPjE/YyhtKTooYS5jb25zdW1lKG0pLHArKyxkKTtpZihwPDImJiFyKXJldHVybiBjKG0pO2xldCB5PWEuZXhpdCgic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5IikseD1xbihtKTtyZXR1cm4geS5fb3Blbj0heHx8eD09PTImJiEhZyx5Ll9jbG9zZT0hZ3x8Zz09PTImJiEheCxsKG0pfX1vKHMsInRva2VuaXplU3RyaWtldGhyb3VnaCIpfW8oSmIsImdmbVN0cmlrZXRocm91Z2giKTt2YXIgS2I9e25vbmU6IiIsbGVmdDonIGFsaWduPSJsZWZ0IicscmlnaHQ6JyBhbGlnbj0icmlnaHQiJyxjZW50ZXI6JyBhbGlnbj0iY2VudGVyIid9O2Z1bmN0aW9uIFhiKCl7cmV0dXJue2VudGVyOnt0YWJsZSh0KXtsZXQgZT10Ll9hbGlnbjt0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpLHRoaXMudGFnKCI8dGFibGU+IiksdGhpcy5zZXREYXRhKCJ0YWJsZUFsaWduIixlKX0sdGFibGVCb2R5KCl7dGhpcy50YWcoIjx0Ym9keT4iKX0sdGFibGVEYXRhKCl7bGV0IHQ9dGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIiksZT10aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIikscj1LYlt0W2VdXTtyPT09dm9pZCAwP3RoaXMuYnVmZmVyKCk6KHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoIjx0ZCIrcisiPiIpKX0sdGFibGVIZWFkKCl7dGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPHRoZWFkPiIpfSx0YWJsZUhlYWRlcigpe2xldCB0PXRoaXMuZ2V0RGF0YSgidGFibGVBbGlnbiIpLGU9dGhpcy5nZXREYXRhKCJ0YWJsZUNvbHVtbiIpLHI9S2JbdFtlXV07dGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPHRoIityKyI+Iil9LHRhYmxlUm93KCl7dGhpcy5zZXREYXRhKCJ0YWJsZUNvbHVtbiIsMCksdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPHRyPiIpfX0sZXhpdDp7Y29kZVRleHREYXRhKHQpe2xldCBlPXRoaXMuc2xpY2VTZXJpYWxpemUodCk7dGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIikmJihlPWUucmVwbGFjZSgvXFwoW1xcfF0pL2csR0gpKSx0aGlzLnJhdyh0aGlzLmVuY29kZShlKSl9LHRhYmxlKCl7dGhpcy5zZXREYXRhKCJ0YWJsZUFsaWduIiksdGhpcy5zZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIiksdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPC90YWJsZT4iKX0sdGFibGVCb2R5KCl7dGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPC90Ym9keT4iKX0sdGFibGVEYXRhKCl7bGV0IHQ9dGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIiksZT10aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7ZSBpbiB0Pyh0aGlzLnRhZygiPC90ZD4iKSx0aGlzLnNldERhdGEoInRhYmxlQ29sdW1uIixlKzEpKTp0aGlzLnJlc3VtZSgpfSx0YWJsZUhlYWQoKXt0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpLHRoaXMudGFnKCI8L3RoZWFkPiIpfSx0YWJsZUhlYWRlcigpe2xldCB0PXRoaXMuZ2V0RGF0YSgidGFibGVDb2x1bW4iKTt0aGlzLnRhZygiPC90aD4iKSx0aGlzLnNldERhdGEoInRhYmxlQ29sdW1uIix0KzEpfSx0YWJsZVJvdygpe2xldCB0PXRoaXMuZ2V0RGF0YSgidGFibGVBbGlnbiIpLGU9dGhpcy5nZXREYXRhKCJ0YWJsZUNvbHVtbiIpO2Zvcig7ZTx0Lmxlbmd0aDspdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPHRkIitLYlt0W2VdXSsiPjwvdGQ+IiksZSsrO3RoaXMuc2V0RGF0YSgidGFibGVDb2x1bW4iLGUpLHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoIjwvdHI+Iil9fX19byhYYiwiZ2ZtVGFibGVIdG1sIik7ZnVuY3Rpb24gR0godCxlKXtyZXR1cm4gZT09PSJ8Ij9lOnR9byhHSCwicmVwbGFjZSIpO3ZhciBIZD1jbGFzc3tzdGF0aWN7byh0aGlzLCJFZGl0TWFwIil9Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1bXX1hZGQoZSxyLG4pe1FIKHRoaXMsZSxyLG4pfWNvbnN1bWUoZSl7aWYodGhpcy5tYXAuc29ydChmdW5jdGlvbihzLGEpe3JldHVybiBzWzBdLWFbMF19KSx0aGlzLm1hcC5sZW5ndGg9PT0wKXJldHVybjtsZXQgcj10aGlzLm1hcC5sZW5ndGgsbj1bXTtmb3IoO3I+MDspci09MSxuLnB1c2goZS5zbGljZSh0aGlzLm1hcFtyXVswXSt0aGlzLm1hcFtyXVsxXSksdGhpcy5tYXBbcl1bMl0pLGUubGVuZ3RoPXRoaXMubWFwW3JdWzBdO24ucHVzaChlLnNsaWNlKCkpLGUubGVuZ3RoPTA7bGV0IGk9bi5wb3AoKTtmb3IoO2k7KXtmb3IobGV0IHMgb2YgaSllLnB1c2gocyk7aT1uLnBvcCgpfXRoaXMubWFwLmxlbmd0aD0wfX07ZnVuY3Rpb24gUUgodCxlLHIsbil7bGV0IGk9MDtpZighKHI9PT0wJiZuLmxlbmd0aD09PTApKXtmb3IoO2k8dC5tYXAubGVuZ3RoOyl7aWYodC5tYXBbaV1bMF09PT1lKXt0Lm1hcFtpXVsxXSs9cix0Lm1hcFtpXVsyXS5wdXNoKC4uLm4pO3JldHVybn1pKz0xfXQubWFwLnB1c2goW2UscixuXSl9fW8oUUgsImFkZEltcGxlbWVudGF0aW9uIik7ZnVuY3Rpb24gTE0odCxlKXtsZXQgcj0hMSxuPVtdO2Zvcig7ZTx0Lmxlbmd0aDspe2xldCBpPXRbZV07aWYocil7aWYoaVswXT09PSJlbnRlciIpaVsxXS50eXBlPT09InRhYmxlQ29udGVudCImJm4ucHVzaCh0W2UrMV1bMV0udHlwZT09PSJ0YWJsZURlbGltaXRlck1hcmtlciI/ImxlZnQiOiJub25lIik7ZWxzZSBpZihpWzFdLnR5cGU9PT0idGFibGVDb250ZW50Iil7aWYodFtlLTFdWzFdLnR5cGU9PT0idGFibGVEZWxpbWl0ZXJNYXJrZXIiKXtsZXQgcz1uLmxlbmd0aC0xO25bc109bltzXT09PSJsZWZ0Ij8iY2VudGVyIjoicmlnaHQifX1lbHNlIGlmKGlbMV0udHlwZT09PSJ0YWJsZURlbGltaXRlclJvdyIpYnJlYWt9ZWxzZSBpWzBdPT09ImVudGVyIiYmaVsxXS50eXBlPT09InRhYmxlRGVsaW1pdGVyUm93IiYmKHI9ITApO2UrPTF9cmV0dXJuIG59byhMTSwiZ2ZtVGFibGVBbGlnbiIpO2Z1bmN0aW9uIFpiKCl7cmV0dXJue2Zsb3c6e251bGw6e25hbWU6InRhYmxlIix0b2tlbml6ZTpKSCxyZXNvbHZlQWxsOktIfX19fW8oWmIsImdmbVRhYmxlIik7ZnVuY3Rpb24gSkgodCxlLHIpe2xldCBuPXRoaXMsaT0wLHM9MCxhO3JldHVybiBsO2Z1bmN0aW9uIGwoTSl7bGV0IGJlPW4uZXZlbnRzLmxlbmd0aC0xO2Zvcig7YmU+LTE7KXtsZXQgTD1uLmV2ZW50c1tiZV1bMV0udHlwZTtpZihMPT09ImxpbmVFbmRpbmcifHxMPT09ImxpbmVQcmVmaXgiKWJlLS07ZWxzZSBicmVha31sZXQgej1iZT4tMT9uLmV2ZW50c1tiZV1bMV0udHlwZTpudWxsLEk9ej09PSJ0YWJsZUhlYWQifHx6PT09InRhYmxlUm93Ij9FOmM7cmV0dXJuIEk9PT1FJiZuLnBhcnNlci5sYXp5W24ubm93KCkubGluZV0/cihNKTpJKE0pfWZ1bmN0aW9uIGMoTSl7cmV0dXJuIHQuZW50ZXIoInRhYmxlSGVhZCIpLHQuZW50ZXIoInRhYmxlUm93IiksdShNKX1mdW5jdGlvbiB1KE0pe3JldHVybiBNPT09MTI0fHwoYT0hMCxzKz0xKSxmKE0pfWZ1bmN0aW9uIGYoTSl7cmV0dXJuIE09PT1udWxsP3IoTSk6WShNKT9zPjE/KHM9MCxuLmludGVycnVwdD0hMCx0LmV4aXQoInRhYmxlUm93IiksdC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShNKSx0LmV4aXQoImxpbmVFbmRpbmciKSxkKTpyKE0pOmVlKE0pP2llKHQsZiwid2hpdGVzcGFjZSIpKE0pOihzKz0xLGEmJihhPSExLGkrPTEpLE09PT0xMjQ/KHQuZW50ZXIoInRhYmxlQ2VsbERpdmlkZXIiKSx0LmNvbnN1bWUoTSksdC5leGl0KCJ0YWJsZUNlbGxEaXZpZGVyIiksYT0hMCxmKToodC5lbnRlcigiZGF0YSIpLHAoTSkpKX1mdW5jdGlvbiBwKE0pe3JldHVybiBNPT09bnVsbHx8TT09PTEyNHx8eWUoTSk/KHQuZXhpdCgiZGF0YSIpLGYoTSkpOih0LmNvbnN1bWUoTSksTT09PTkyP2g6cCl9ZnVuY3Rpb24gaChNKXtyZXR1cm4gTT09PTkyfHxNPT09MTI0Pyh0LmNvbnN1bWUoTSkscCk6cChNKX1mdW5jdGlvbiBkKE0pe3JldHVybiBuLmludGVycnVwdD0hMSxuLnBhcnNlci5sYXp5W24ubm93KCkubGluZV0/cihNKToodC5lbnRlcigidGFibGVEZWxpbWl0ZXJSb3ciKSxhPSExLGVlKE0pP2llKHQsbSwibGluZVByZWZpeCIsbi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KShNKTptKE0pKX1mdW5jdGlvbiBtKE0pe3JldHVybiBNPT09NDV8fE09PT01OD95KE0pOk09PT0xMjQ/KGE9ITAsdC5lbnRlcigidGFibGVDZWxsRGl2aWRlciIpLHQuY29uc3VtZShNKSx0LmV4aXQoInRhYmxlQ2VsbERpdmlkZXIiKSxnKTpfKE0pfWZ1bmN0aW9uIGcoTSl7cmV0dXJuIGVlKE0pP2llKHQseSwid2hpdGVzcGFjZSIpKE0pOnkoTSl9ZnVuY3Rpb24geShNKXtyZXR1cm4gTT09PTU4PyhzKz0xLGE9ITAsdC5lbnRlcigidGFibGVEZWxpbWl0ZXJNYXJrZXIiKSx0LmNvbnN1bWUoTSksdC5leGl0KCJ0YWJsZURlbGltaXRlck1hcmtlciIpLHgpOk09PT00NT8ocys9MSx4KE0pKTpNPT09bnVsbHx8WShNKT9SKE0pOl8oTSl9ZnVuY3Rpb24geChNKXtyZXR1cm4gTT09PTQ1Pyh0LmVudGVyKCJ0YWJsZURlbGltaXRlckZpbGxlciIpLGsoTSkpOl8oTSl9ZnVuY3Rpb24gayhNKXtyZXR1cm4gTT09PTQ1Pyh0LmNvbnN1bWUoTSksayk6TT09PTU4PyhhPSEwLHQuZXhpdCgidGFibGVEZWxpbWl0ZXJGaWxsZXIiKSx0LmVudGVyKCJ0YWJsZURlbGltaXRlck1hcmtlciIpLHQuY29uc3VtZShNKSx0LmV4aXQoInRhYmxlRGVsaW1pdGVyTWFya2VyIiksVCk6KHQuZXhpdCgidGFibGVEZWxpbWl0ZXJGaWxsZXIiKSxUKE0pKX1mdW5jdGlvbiBUKE0pe3JldHVybiBlZShNKT9pZSh0LFIsIndoaXRlc3BhY2UiKShNKTpSKE0pfWZ1bmN0aW9uIFIoTSl7cmV0dXJuIE09PT0xMjQ/bShNKTpNPT09bnVsbHx8WShNKT8hYXx8aSE9PXM/XyhNKToodC5leGl0KCJ0YWJsZURlbGltaXRlclJvdyIpLHQuZXhpdCgidGFibGVIZWFkIiksZShNKSk6XyhNKX1mdW5jdGlvbiBfKE0pe3JldHVybiByKE0pfWZ1bmN0aW9uIEUoTSl7cmV0dXJuIHQuZW50ZXIoInRhYmxlUm93IiksQShNKX1mdW5jdGlvbiBBKE0pe3JldHVybiBNPT09MTI0Pyh0LmVudGVyKCJ0YWJsZUNlbGxEaXZpZGVyIiksdC5jb25zdW1lKE0pLHQuZXhpdCgidGFibGVDZWxsRGl2aWRlciIpLEEpOk09PT1udWxsfHxZKE0pPyh0LmV4aXQoInRhYmxlUm93IiksZShNKSk6ZWUoTSk/aWUodCxBLCJ3aGl0ZXNwYWNlIikoTSk6KHQuZW50ZXIoImRhdGEiKSxGKE0pKX1mdW5jdGlvbiBGKE0pe3JldHVybiBNPT09bnVsbHx8TT09PTEyNHx8eWUoTSk/KHQuZXhpdCgiZGF0YSIpLEEoTSkpOih0LmNvbnN1bWUoTSksTT09PTkyP1U6Ril9ZnVuY3Rpb24gVShNKXtyZXR1cm4gTT09PTkyfHxNPT09MTI0Pyh0LmNvbnN1bWUoTSksRik6RihNKX19byhKSCwidG9rZW5pemVUYWJsZSIpO2Z1bmN0aW9uIEtIKHQsZSl7bGV0IHI9LTEsbj0hMCxpPTAscz1bMCwwLDAsMF0sYT1bMCwwLDAsMF0sbD0hMSxjPTAsdSxmLHAsaD1uZXcgSGQ7Zm9yKDsrK3I8dC5sZW5ndGg7KXtsZXQgZD10W3JdLG09ZFsxXTtkWzBdPT09ImVudGVyIj9tLnR5cGU9PT0idGFibGVIZWFkIj8obD0hMSxjIT09MCYmKEZNKGgsZSxjLHUsZiksZj12b2lkIDAsYz0wKSx1PXt0eXBlOiJ0YWJsZSIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxtLnN0YXJ0KSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxtLmVuZCl9LGguYWRkKHIsMCxbWyJlbnRlciIsdSxlXV0pKTptLnR5cGU9PT0idGFibGVSb3cifHxtLnR5cGU9PT0idGFibGVEZWxpbWl0ZXJSb3ciPyhuPSEwLHA9dm9pZCAwLHM9WzAsMCwwLDBdLGE9WzAscisxLDAsMF0sbCYmKGw9ITEsZj17dHlwZToidGFibGVCb2R5IixzdGFydDpPYmplY3QuYXNzaWduKHt9LG0uc3RhcnQpLGVuZDpPYmplY3QuYXNzaWduKHt9LG0uZW5kKX0saC5hZGQociwwLFtbImVudGVyIixmLGVdXSkpLGk9bS50eXBlPT09InRhYmxlRGVsaW1pdGVyUm93Ij8yOmY/MzoxKTppJiYobS50eXBlPT09ImRhdGEifHxtLnR5cGU9PT0idGFibGVEZWxpbWl0ZXJNYXJrZXIifHxtLnR5cGU9PT0idGFibGVEZWxpbWl0ZXJGaWxsZXIiKT8obj0hMSxhWzJdPT09MCYmKHNbMV0hPT0wJiYoYVswXT1hWzFdLHA9amQoaCxlLHMsaSx2b2lkIDAscCkscz1bMCwwLDAsMF0pLGFbMl09cikpOm0udHlwZT09PSJ0YWJsZUNlbGxEaXZpZGVyIiYmKG4/bj0hMTooc1sxXSE9PTAmJihhWzBdPWFbMV0scD1qZChoLGUscyxpLHZvaWQgMCxwKSkscz1hLGE9W3NbMV0sciwwLDBdKSk6bS50eXBlPT09InRhYmxlSGVhZCI/KGw9ITAsYz1yKTptLnR5cGU9PT0idGFibGVSb3cifHxtLnR5cGU9PT0idGFibGVEZWxpbWl0ZXJSb3ciPyhjPXIsc1sxXSE9PTA/KGFbMF09YVsxXSxwPWpkKGgsZSxzLGkscixwKSk6YVsxXSE9PTAmJihwPWpkKGgsZSxhLGkscixwKSksaT0wKTppJiYobS50eXBlPT09ImRhdGEifHxtLnR5cGU9PT0idGFibGVEZWxpbWl0ZXJNYXJrZXIifHxtLnR5cGU9PT0idGFibGVEZWxpbWl0ZXJGaWxsZXIiKSYmKGFbM109cil9Zm9yKGMhPT0wJiZGTShoLGUsYyx1LGYpLGguY29uc3VtZShlLmV2ZW50cykscj0tMTsrK3I8ZS5ldmVudHMubGVuZ3RoOyl7bGV0IGQ9ZS5ldmVudHNbcl07ZFswXT09PSJlbnRlciImJmRbMV0udHlwZT09PSJ0YWJsZSImJihkWzFdLl9hbGlnbj1MTShlLmV2ZW50cyxyKSl9cmV0dXJuIHR9byhLSCwicmVzb2x2ZVRhYmxlIik7ZnVuY3Rpb24gamQodCxlLHIsbixpLHMpe2xldCBhPW49PT0xPyJ0YWJsZUhlYWRlciI6bj09PTI/InRhYmxlRGVsaW1pdGVyIjoidGFibGVEYXRhIixsPSJ0YWJsZUNvbnRlbnQiO3JbMF0hPT0wJiYocy5lbmQ9T2JqZWN0LmFzc2lnbih7fSxGYShlLmV2ZW50cyxyWzBdKSksdC5hZGQoclswXSwwLFtbImV4aXQiLHMsZV1dKSk7bGV0IGM9RmEoZS5ldmVudHMsclsxXSk7aWYocz17dHlwZTphLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sYyksZW5kOk9iamVjdC5hc3NpZ24oe30sYyl9LHQuYWRkKHJbMV0sMCxbWyJlbnRlciIscyxlXV0pLHJbMl0hPT0wKXtsZXQgdT1GYShlLmV2ZW50cyxyWzJdKSxmPUZhKGUuZXZlbnRzLHJbM10pLHA9e3R5cGU6bCxzdGFydDpPYmplY3QuYXNzaWduKHt9LHUpLGVuZDpPYmplY3QuYXNzaWduKHt9LGYpfTtpZih0LmFkZChyWzJdLDAsW1siZW50ZXIiLHAsZV1dKSxuIT09Mil7bGV0IGg9ZS5ldmVudHNbclsyXV0sZD1lLmV2ZW50c1tyWzNdXTtpZihoWzFdLmVuZD1PYmplY3QuYXNzaWduKHt9LGRbMV0uZW5kKSxoWzFdLnR5cGU9ImNodW5rVGV4dCIsaFsxXS5jb250ZW50VHlwZT0idGV4dCIsclszXT5yWzJdKzEpe2xldCBtPXJbMl0rMSxnPXJbM10tclsyXS0xO3QuYWRkKG0sZyxbXSl9fXQuYWRkKHJbM10rMSwwLFtbImV4aXQiLHAsZV1dKX1yZXR1cm4gaSE9PXZvaWQgMCYmKHMuZW5kPU9iamVjdC5hc3NpZ24oe30sRmEoZS5ldmVudHMsaSkpLHQuYWRkKGksMCxbWyJleGl0IixzLGVdXSkscz12b2lkIDApLHN9byhqZCwiZmx1c2hDZWxsIik7ZnVuY3Rpb24gRk0odCxlLHIsbixpKXtsZXQgcz1bXSxhPUZhKGUuZXZlbnRzLHIpO2kmJihpLmVuZD1PYmplY3QuYXNzaWduKHt9LGEpLHMucHVzaChbImV4aXQiLGksZV0pKSxuLmVuZD1PYmplY3QuYXNzaWduKHt9LGEpLHMucHVzaChbImV4aXQiLG4sZV0pLHQuYWRkKHIrMSwwLHMpfW8oRk0sImZsdXNoVGFibGVFbmQiKTtmdW5jdGlvbiBGYSh0LGUpe2xldCByPXRbZV0sbj1yWzBdPT09ImVudGVyIj8ic3RhcnQiOiJlbmQiO3JldHVybiByWzFdW25dfW8oRmEsImdldFBvaW50Iik7dmFyIEFNPS88KFwvPykoaWZyYW1lfG5vZW1iZWR8bm9mcmFtZXN8cGxhaW50ZXh0fHNjcmlwdHxzdHlsZXx0aXRsZXx0ZXh0YXJlYXx4bXApKD89W1x0XG5cZlxyIC8+XSkvZ2ksWEg9bmV3IFJlZ0V4cCgiXiIrQU0uc291cmNlLCJpIik7ZnVuY3Rpb24gZXcoKXtyZXR1cm57ZXhpdDp7aHRtbEZsb3dEYXRhKHQpeyRNLmNhbGwodGhpcyx0LEFNKX0saHRtbFRleHREYXRhKHQpeyRNLmNhbGwodGhpcyx0LFhIKX19fX1vKGV3LCJnZm1UYWdmaWx0ZXJIdG1sIik7ZnVuY3Rpb24gJE0odCxlKXtsZXQgcj10aGlzLnNsaWNlU2VyaWFsaXplKHQpO3RoaXMub3B0aW9ucy5hbGxvd0Rhbmdlcm91c0h0bWwmJihyPXIucmVwbGFjZShlLCImbHQ7JDEkMiIpKSx0aGlzLnJhdyh0aGlzLmVuY29kZShyKSl9bygkTSwiZXhpdEh0bWxEYXRhIik7ZnVuY3Rpb24gdHcoKXtyZXR1cm57ZW50ZXI6e3Rhc2tMaXN0Q2hlY2soKXt0aGlzLnRhZygnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBkaXNhYmxlZD0iIiAnKX19LGV4aXQ6e3Rhc2tMaXN0Q2hlY2soKXt0aGlzLnRhZygiLz4iKX0sdGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZCgpe3RoaXMudGFnKCdjaGVja2VkPSIiICcpfX19fW8odHcsImdmbVRhc2tMaXN0SXRlbUh0bWwiKTt2YXIgWkg9e25hbWU6InRhc2tsaXN0Q2hlY2siLHRva2VuaXplOmVqfTtmdW5jdGlvbiBydygpe3JldHVybnt0ZXh0Ons5MTpaSH19fW8ocncsImdmbVRhc2tMaXN0SXRlbSIpO2Z1bmN0aW9uIGVqKHQsZSxyKXtsZXQgbj10aGlzO3JldHVybiBpO2Z1bmN0aW9uIGkoYyl7cmV0dXJuIG4ucHJldmlvdXMhPT1udWxsfHwhbi5fZ2ZtVGFza2xpc3RGaXJzdENvbnRlbnRPZkxpc3RJdGVtP3IoYyk6KHQuZW50ZXIoInRhc2tMaXN0Q2hlY2siKSx0LmVudGVyKCJ0YXNrTGlzdENoZWNrTWFya2VyIiksdC5jb25zdW1lKGMpLHQuZXhpdCgidGFza0xpc3RDaGVja01hcmtlciIpLHMpfWZ1bmN0aW9uIHMoYyl7cmV0dXJuIHllKGMpPyh0LmVudGVyKCJ0YXNrTGlzdENoZWNrVmFsdWVVbmNoZWNrZWQiKSx0LmNvbnN1bWUoYyksdC5leGl0KCJ0YXNrTGlzdENoZWNrVmFsdWVVbmNoZWNrZWQiKSxhKTpjPT09ODh8fGM9PT0xMjA/KHQuZW50ZXIoInRhc2tMaXN0Q2hlY2tWYWx1ZUNoZWNrZWQiKSx0LmNvbnN1bWUoYyksdC5leGl0KCJ0YXNrTGlzdENoZWNrVmFsdWVDaGVja2VkIiksYSk6cihjKX1mdW5jdGlvbiBhKGMpe3JldHVybiBjPT09OTM/KHQuZW50ZXIoInRhc2tMaXN0Q2hlY2tNYXJrZXIiKSx0LmNvbnN1bWUoYyksdC5leGl0KCJ0YXNrTGlzdENoZWNrTWFya2VyIiksdC5leGl0KCJ0YXNrTGlzdENoZWNrIiksbCk6cihjKX1mdW5jdGlvbiBsKGMpe3JldHVybiBZKGMpP2UoYyk6ZWUoYyk/dC5jaGVjayh7dG9rZW5pemU6dGp9LGUscikoYyk6cihjKX19byhlaiwidG9rZW5pemVUYXNrbGlzdENoZWNrIik7ZnVuY3Rpb24gdGoodCxlLHIpe3JldHVybiBpZSh0LG4sIndoaXRlc3BhY2UiKTtmdW5jdGlvbiBuKGkpe3JldHVybiBpPT09bnVsbD9yKGkpOmUoaSl9fW8odGosInNwYWNlVGhlbk5vblNwYWNlIik7ZnVuY3Rpb24gQk0odCl7cmV0dXJuIElkKFtxYigpLFliKCksSmIodCksWmIoKSxydygpXSl9byhCTSwiZ2ZtIik7ZnVuY3Rpb24gQTdlKHQpe3JldHVybiBfZChbVmIoKSxHYih0KSxRYigpLFhiKCksZXcoKSx0dygpXSl9byhBN2UsImdmbUh0bWwiKTt2YXIgcmo9e307ZnVuY3Rpb24gQWEodCl7bGV0IGU9dGhpcyxyPXR8fHJqLG49ZS5kYXRhKCksaT1uLm1pY3JvbWFya0V4dGVuc2lvbnN8fChuLm1pY3JvbWFya0V4dGVuc2lvbnM9W10pLHM9bi5mcm9tTWFya2Rvd25FeHRlbnNpb25zfHwobi5mcm9tTWFya2Rvd25FeHRlbnNpb25zPVtdKSxhPW4udG9NYXJrZG93bkV4dGVuc2lvbnN8fChuLnRvTWFya2Rvd25FeHRlbnNpb25zPVtdKTtpLnB1c2goQk0ocikpLHMucHVzaCh6YigpKSxhLnB1c2goSGIocikpfW8oQWEsInJlbWFya0dmbSIpO3ZhciBITT1kcih6TSgpLDEpLFdjPU9iamVjdC5hc3NpZ24oVm8oRXJyb3IpLHtldmFsOlZvKEV2YWxFcnJvcikscmFuZ2U6Vm8oUmFuZ2VFcnJvcikscmVmZXJlbmNlOlZvKFJlZmVyZW5jZUVycm9yKSxzeW50YXg6Vm8oU3ludGF4RXJyb3IpLHR5cGU6Vm8oVHlwZUVycm9yKSx1cmk6Vm8oVVJJRXJyb3IpfSk7ZnVuY3Rpb24gVm8odCl7cmV0dXJuIGUuZGlzcGxheU5hbWU9dC5kaXNwbGF5TmFtZXx8dC5uYW1lLGU7ZnVuY3Rpb24gZShyLC4uLm4pe2xldCBpPXImJigwLEhNLmRlZmF1bHQpKHIsLi4ubik7cmV0dXJuIG5ldyB0KGkpfW8oZSwiRm9ybWF0dGVkRXJyb3IiKX1vKFZvLCJjcmVhdGUiKTt2YXIgV2Q9e30uaGFzT3duUHJvcGVydHksak09e3lhbWw6Ii0iLHRvbWw6IisifTtmdW5jdGlvbiAkYSh0KXtsZXQgZT1bXSxyPS0xLG49QXJyYXkuaXNBcnJheSh0KT90OnQ/W3RdOlsieWFtbCJdO2Zvcig7KytyPG4ubGVuZ3RoOyllW3JdPW5qKG5bcl0pO3JldHVybiBlfW8oJGEsInRvTWF0dGVycyIpO2Z1bmN0aW9uIG5qKHQpe2xldCBlPXQ7aWYodHlwZW9mIGU9PSJzdHJpbmciKXtpZighV2QuY2FsbChqTSxlKSl0aHJvdyBXYygiTWlzc2luZyBtYXR0ZXIgZGVmaW5pdGlvbiBmb3IgYCVzYCIsZSk7ZT17dHlwZTplLG1hcmtlcjpqTVtlXX19ZWxzZSBpZih0eXBlb2YgZSE9Im9iamVjdCIpdGhyb3cgV2MoIkV4cGVjdGVkIG1hdHRlciB0byBiZSBhbiBvYmplY3QsIG5vdCBgJWpgIixlKTtpZighV2QuY2FsbChlLCJ0eXBlIikpdGhyb3cgV2MoIk1pc3NpbmcgYHR5cGVgIGluIG1hdHRlciBgJWpgIixlKTtpZighV2QuY2FsbChlLCJmZW5jZSIpJiYhV2QuY2FsbChlLCJtYXJrZXIiKSl0aHJvdyBXYygiTWlzc2luZyBgbWFya2VyYCBvciBgZmVuY2VgIGluIG1hdHRlciBgJWpgIixlKTtyZXR1cm4gZX1vKG5qLCJtYXR0ZXIiKTtmdW5jdGlvbiBvdyh0KXtsZXQgZT0kYSh0KSxyPXt9LG49LTE7Zm9yKDsrK248ZS5sZW5ndGg7KXtsZXQgaT1lW25dLHM9aXcoaSwib3BlbiIpLmNoYXJDb2RlQXQoMCksYT1paihpKSxsPXJbc107QXJyYXkuaXNBcnJheShsKT9sLnB1c2goYSk6cltzXT1bYV19cmV0dXJue2Zsb3c6cn19byhvdywiZnJvbnRtYXR0ZXIiKTtmdW5jdGlvbiBpaih0KXtsZXQgZT10LmFueXdoZXJlLHI9dC50eXBlLG49cisiRmVuY2UiLGk9bisiU2VxdWVuY2UiLHM9cisiVmFsdWUiLGE9e3Rva2VuaXplOmYscGFydGlhbDohMH0sbCxjPTA7cmV0dXJue3Rva2VuaXplOnUsY29uY3JldGU6ITB9O2Z1bmN0aW9uIHUocCxoLGQpe2xldCBtPXRoaXM7cmV0dXJuIGc7ZnVuY3Rpb24gZyhBKXtsZXQgRj1tLm5vdygpO3JldHVybiBGLmNvbHVtbj09PTEmJihGLmxpbmU9PT0xfHxlKSYmKGw9aXcodCwib3BlbiIpLGM9MCxBPT09bC5jaGFyQ29kZUF0KGMpKT8ocC5lbnRlcihyKSxwLmVudGVyKG4pLHAuZW50ZXIoaSkseShBKSk6ZChBKX1mdW5jdGlvbiB5KEEpe3JldHVybiBjPT09bC5sZW5ndGg/KHAuZXhpdChpKSxlZShBKT8ocC5lbnRlcigid2hpdGVzcGFjZSIpLHgoQSkpOmsoQSkpOkE9PT1sLmNoYXJDb2RlQXQoYysrKT8ocC5jb25zdW1lKEEpLHkpOmQoQSl9ZnVuY3Rpb24geChBKXtyZXR1cm4gZWUoQSk/KHAuY29uc3VtZShBKSx4KToocC5leGl0KCJ3aGl0ZXNwYWNlIiksayhBKSl9ZnVuY3Rpb24gayhBKXtyZXR1cm4gWShBKT8ocC5leGl0KG4pLHAuZW50ZXIoImxpbmVFbmRpbmciKSxwLmNvbnN1bWUoQSkscC5leGl0KCJsaW5lRW5kaW5nIiksbD1pdyh0LCJjbG9zZSIpLGM9MCxwLmF0dGVtcHQoYSxFLFQpKTpkKEEpfWZ1bmN0aW9uIFQoQSl7cmV0dXJuIEE9PT1udWxsfHxZKEEpP18oQSk6KHAuZW50ZXIocyksUihBKSl9ZnVuY3Rpb24gUihBKXtyZXR1cm4gQT09PW51bGx8fFkoQSk/KHAuZXhpdChzKSxfKEEpKToocC5jb25zdW1lKEEpLFIpfWZ1bmN0aW9uIF8oQSl7cmV0dXJuIEE9PT1udWxsP2QoQSk6KHAuZW50ZXIoImxpbmVFbmRpbmciKSxwLmNvbnN1bWUoQSkscC5leGl0KCJsaW5lRW5kaW5nIikscC5hdHRlbXB0KGEsRSxUKSl9ZnVuY3Rpb24gRShBKXtyZXR1cm4gcC5leGl0KHIpLGgoQSl9fWZ1bmN0aW9uIGYocCxoLGQpe2xldCBtPTA7cmV0dXJuIGc7ZnVuY3Rpb24gZyhUKXtyZXR1cm4gVD09PWwuY2hhckNvZGVBdChtKT8ocC5lbnRlcihuKSxwLmVudGVyKGkpLHkoVCkpOmQoVCl9ZnVuY3Rpb24geShUKXtyZXR1cm4gbT09PWwubGVuZ3RoPyhwLmV4aXQoaSksZWUoVCk/KHAuZW50ZXIoIndoaXRlc3BhY2UiKSx4KFQpKTprKFQpKTpUPT09bC5jaGFyQ29kZUF0KG0rKyk/KHAuY29uc3VtZShUKSx5KTpkKFQpfWZ1bmN0aW9uIHgoVCl7cmV0dXJuIGVlKFQpPyhwLmNvbnN1bWUoVCkseCk6KHAuZXhpdCgid2hpdGVzcGFjZSIpLGsoVCkpfWZ1bmN0aW9uIGsoVCl7cmV0dXJuIFQ9PT1udWxsfHxZKFQpPyhwLmV4aXQobiksaChUKSk6ZChUKX19fW8oaWosImNyZWF0ZUNvbnN0cnVjdCIpO2Z1bmN0aW9uIGl3KHQsZSl7cmV0dXJuIHQubWFya2VyP1dNKHQubWFya2VyLGUpLnJlcGVhdCgzKTpXTSh0LmZlbmNlLGUpfW8oaXcsImZlbmNlIik7ZnVuY3Rpb24gV00odCxlKXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciP3Q6dFtlXX1vKFdNLCJwaWNrIik7ZnVuY3Rpb24gYXcodCl7bGV0IGU9JGEodCkscj17fSxuPXt9LGk9LTE7Zm9yKDsrK2k8ZS5sZW5ndGg7KXtsZXQgcz1lW2ldO3Jbcy50eXBlXT1vaihzKSxuW3MudHlwZV09c2osbltzLnR5cGUrIlZhbHVlIl09YWp9cmV0dXJue2VudGVyOnIsZXhpdDpufX1vKGF3LCJmcm9udG1hdHRlckZyb21NYXJrZG93biIpO2Z1bmN0aW9uIG9qKHQpe3JldHVybiBlO2Z1bmN0aW9uIGUocil7dGhpcy5lbnRlcih7dHlwZTp0LnR5cGUsdmFsdWU6IiJ9LHIpLHRoaXMuYnVmZmVyKCl9fW8ob2osIm9wZW5lciIpO2Z1bmN0aW9uIHNqKHQpe2xldCBlPXRoaXMucmVzdW1lKCkscj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdOyJ2YWx1ZSJpbiByLHRoaXMuZXhpdCh0KSxyLnZhbHVlPWUucmVwbGFjZSgvXihccj9cbnxccil8KFxyP1xufFxyKSQvZywiIil9byhzaiwiY2xvc2UiKTtmdW5jdGlvbiBhaih0KXt0aGlzLmNvbmZpZy5lbnRlci5kYXRhLmNhbGwodGhpcyx0KSx0aGlzLmNvbmZpZy5leGl0LmRhdGEuY2FsbCh0aGlzLHQpfW8oYWosInZhbHVlIik7ZnVuY3Rpb24gbHcodCl7bGV0IGU9W10scj17fSxuPSRhKHQpLGk9LTE7Zm9yKDsrK2k8bi5sZW5ndGg7KXtsZXQgcz1uW2ldO3Jbcy50eXBlXT1saihzKTtsZXQgYT1zdyhzLCJvcGVuIik7ZS5wdXNoKHthdEJyZWFrOiEwLGNoYXJhY3RlcjphLmNoYXJBdCgwKSxhZnRlcjpubyhhLmNoYXJBdCgxKSl9KX1yZXR1cm57dW5zYWZlOmUsaGFuZGxlcnM6cn19byhsdywiZnJvbnRtYXR0ZXJUb01hcmtkb3duIik7ZnVuY3Rpb24gbGoodCl7bGV0IGU9c3codCwib3BlbiIpLHI9c3codCwiY2xvc2UiKTtyZXR1cm4gbjtmdW5jdGlvbiBuKGkpe3JldHVybiBlKyhpLnZhbHVlP2AKYCtpLnZhbHVlOiIiKStgCmArcn19byhsaiwiaGFuZGxlciIpO2Z1bmN0aW9uIHN3KHQsZSl7cmV0dXJuIHQubWFya2VyP3FNKHQubWFya2VyLGUpLnJlcGVhdCgzKTpxTSh0LmZlbmNlLGUpfW8oc3csImZlbmNlIik7ZnVuY3Rpb24gcU0odCxlKXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciP3Q6dFtlXX1vKHFNLCJwaWNrIik7dmFyIGNqPSJ5YW1sIjtmdW5jdGlvbiBCYSh0KXtsZXQgZT10aGlzLHI9dHx8Y2osbj1lLmRhdGEoKSxpPW4ubWljcm9tYXJrRXh0ZW5zaW9uc3x8KG4ubWljcm9tYXJrRXh0ZW5zaW9ucz1bXSkscz1uLmZyb21NYXJrZG93bkV4dGVuc2lvbnN8fChuLmZyb21NYXJrZG93bkV4dGVuc2lvbnM9W10pLGE9bi50b01hcmtkb3duRXh0ZW5zaW9uc3x8KG4udG9NYXJrZG93bkV4dGVuc2lvbnM9W10pO2kucHVzaChvdyhyKSkscy5wdXNoKGF3KHIpKSxhLnB1c2gobHcocikpfW8oQmEsInJlbWFya0Zyb250bWF0dGVyIik7dmFyIGN3PW8oKHQ9WyJ5YW1sIiwidG9tbCJdKT0+UmMoKS51c2UoTGEpLnVzZShBYSkudXNlKEJhLHQpLCJjcmVhdGVNYXJrZG93blByb2Nlc3NvciIpLFZNPW8odD0+e2lmKHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJNYXJrZG93biBzb3VyY2UgbXVzdCBiZSBhIHN0cmluZy4iKTtyZXR1cm4gY3coKS5wYXJzZSh0KX0sInBhcnNlTWFya2Rvd24iKTt2YXIgWU09L14tLS1bIFx0XSokLyxHTT0iXHVGRUZGIix1aj1vKHQ9PnQsInJlYWRMaW5lQXNJcyIpLFFNPW8odD0+dC5lbmRzV2l0aCgiXHIiKT90LnNsaWNlKDAsLTEpOnQsIndpdGhvdXRDYXJyaWFnZVJldHVybiIpLGZqPW8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IE5hLnlhbWxTdHJpbmdUb09iamVjdCh0KTtyZXR1cm4gZT09bnVsbD97fTp0eXBlb2YgZSE9Im9iamVjdCJ8fEFycmF5LmlzQXJyYXkoZSk/bnVsbDplfSwicGFyc2VGcm9udG1hdHRlcllhbWwiKSxKTT1vKGFzeW5jKHQsZSk9PntpZih0eXBlb2YgdCE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnJvbnRtYXR0ZXIgc291cmNlIG11c3QgYmUgYSBzdHJpbmcuIik7bGV0IG49KHQuc3RhcnRzV2l0aChHTSk/dC5zbGljZShHTS5sZW5ndGgpOnQpLnNwbGl0KGAKYCksaT1lKFFNKG5bMF0pKTtpZihpPT09bnVsbHx8IVlNLnRlc3QoaSkpcmV0dXJuIG51bGw7bGV0IHM9W107Zm9yKGxldCBhPTE7YTxuLmxlbmd0aDthKyspe2xldCBsPWUoUU0oblthXSkpO2lmKGw9PT1udWxsKXJldHVybiBudWxsO2lmKFlNLnRlc3QobCkpe2xldCBjPWF3YWl0IGZqKHMuam9pbihgCmApKTtyZXR1cm4gYz09PW51bGw/bnVsbDp7ZGF0YTpjLGNvbnRlbnQ6bi5zbGljZShhKzEpLmpvaW4oYApgKX19cy5wdXNoKGwpfXJldHVybiBudWxsfSwicmVhZEJsb2NrIiksdXc9byhhc3luYyB0PT5KTSh0LHVqKSwicmVhZEZyb250bWF0dGVyQmxvY2siKSxLTT1vKCh0LGUpPT50Pz97ZGF0YTp7fSxjb250ZW50OmV9LCJvcldob2xlU291cmNlIiksWE09byhhc3luYyB0PT5LTShhd2FpdCB1dyh0KSx0KSwicGFyc2VGcm9udG1hdHRlciIpLFpNPW8oYXN5bmModCxlKT0+e2lmKHR5cGVvZiBlIT0ic3RyaW5nInx8ZS50cmltKCk9PT0iIil0aHJvdyBuZXcgVHlwZUVycm9yKCJDb21tZW50IHByZWZpeCBtdXN0IGJlIGEgbm9uLWJsYW5rIHN0cmluZy4iKTtsZXQgcj1lLnRyaW1FbmQoKSxuPWF3YWl0IEpNKHQsaT0+aS5zdGFydHNXaXRoKGUpP2kuc2xpY2UoZS5sZW5ndGgpOmk9PT1yPyIiOm51bGwpO3JldHVybiBLTShuLHQpfSwicGFyc2VDb21tZW50RnJvbnRtYXR0ZXIiKSxlTz1vKGFzeW5jKHQsZSk9PmAtLS0KJHtPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0wPyIiOmF3YWl0IE5hLm9iamVjdFRvWWFtbFN0cmluZyhlKX0tLS0KJHt0fWAsInN0cmluZ2lmeUZyb250bWF0dGVyIik7dmFyIHFkPWNsYXNzIHR7c3RhdGlje28odGhpcywiTWRQYXJzZWRSZXN1bHQiKX1jb25zdHJ1Y3Rvcigpe3RoaXMub3JpZ2luYWxTdHJpbmc9IiIsdGhpcy50aXRsZT0iIix0aGlzLmh0bWw9IiIsdGhpcy5mcm9udG1hdHRlckRhdGE9e319c3RhdGljIGFzeW5jIGNyZWF0ZUZyb21NYXJrZG93blN0cmluZyhlKXtsZXQgcj1uZXcgdDtyZXR1cm4gYXdhaXQgci51cGRhdGVGcm9tTWFya2Rvd25TdHJpbmcoZSkscn1hc3luYyB1cGRhdGVGcm9tTWFya2Rvd25TdHJpbmcoZSl7dGhpcy5vcmlnaW5hbFN0cmluZz1lO2xldCByPWF3YWl0IHV3KGUpO3RoaXMuZnJvbnRtYXR0ZXJEYXRhPXI/ci5kYXRhOnt9O2xldCBuPWF3YWl0IGN3KHI/W106WyJ0b21sIl0pLnVzZShoYSkudXNlKGxhKS5wcm9jZXNzKHI/ci5jb250ZW50OmUpO3RoaXMuaHRtbD1uLnRvU3RyaW5nKCl9fTt2YXIgZnc9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJTbWFydE1hcmtkb3duIil9c3RhdGljIGFzeW5jIGVhc3lNYXJrZG93blRvSHRtbChlKXtyZXR1cm4oYXdhaXQgbmV3IHQoKS5nZXRNZFBhcnNlZFJlc3VsdEZyb21NYXJrZG93bihlKSkuaHRtbH1jb25zdHJ1Y3Rvcigpe31hc3luYyBnZXRNZFBhcnNlZFJlc3VsdEZyb21NYXJrZG93bihlKXtyZXR1cm4gYXdhaXQgcWQuY3JlYXRlRnJvbU1hcmtkb3duU3RyaW5nKGUpfWh0bWxUb01hcmtkb3duKGUpe2xldCByPW5ldyBJaSh7aGVhZGluZ1N0eWxlOiJhdHgiLGNvZGVCbG9ja1N0eWxlOiJmZW5jZWQifSk7cmV0dXJuIHIudXNlKG14LmdmbSksci50dXJuZG93bihlKX19O3ZhciBZbz17fTtzZShZbyx7U21hcnRSb3V0ZXI6KCk9Pnl3fSk7dmFyIGd3PWRyKHNPKCksMSk7dmFyIFZkPWNsYXNze3N0YXRpY3tvKHRoaXMsIlF1ZXJ5UGFyYW1zIil9Y29uc3RydWN0b3IoKXt9Z2V0QWxsQXNPYmplY3QoKXtsZXQgZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZS5lbnRyaWVzKCkpfXNldFF1ZXJ5UGFyYW0oZSxyLG49InJlcGxhY2UiKXt2YXIgaT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO2kuc2V0KGUsciksbj09PSJwdXNoIj9oaXN0b3J5LnB1c2hTdGF0ZShudWxsLG51bGwsIj8iK2kudG9TdHJpbmcoKSk6aGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCxudWxsLCI/IitpLnRvU3RyaW5nKCkpfWRlbGV0ZVF1ZXJ5UGFyYW0oZSxyPSJyZXBsYWNlIil7dmFyIG49bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtuLmRlbGV0ZShlKSxyPT09InB1c2giP2hpc3RvcnkucHVzaFN0YXRlKG51bGwsbnVsbCwiPyIrbi50b1N0cmluZygpKTpoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLG51bGwsIj8iK24udG9TdHJpbmcoKSl9Z2V0UXVlcnlQYXJhbShlKXtyZXR1cm4gdGhpcy5nZXRBbGxBc09iamVjdCgpW2VdfX07dmFyIFVHZT1vKHQ9Pntjb25zb2xlLmxvZyhgJWNbUm91dGVyXSVjICR7dH1gLCJjb2xvcjogcmdiKDI1NSwgMTA1LCAxMDApOyIsImNvbG9yOiBpbmhlcml0Iil9LCJyb3V0ZUxvZyIpLHl3PWNsYXNzIHR7c3RhdGlje28odGhpcywiU21hcnRSb3V0ZXIiKX1jb25zdHJ1Y3RvcihlLHI9IiIpe3RoaXMub3B0aW9ucz17ZGVidWc6ITF9LHRoaXMucXVlcnlQYXJhbXM9bmV3IFZkLHRoaXMucm91dGVzPVtdLHRoaXMub3B0aW9ucz17Li4udGhpcy5vcHRpb25zLC4uLmV9LHRoaXMuYmFzZVBhdGg9cix0aGlzLnBvcHN0YXRlTGlzdGVuZXI9bj0+e24ucHJldmVudERlZmF1bHQoKSx0aGlzLl9oYW5kbGVSb3V0ZVN0YXRlKCl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsdGhpcy5wb3BzdGF0ZUxpc3RlbmVyKX1jcmVhdGVTdWJSb3V0ZXIoZSxyKXtsZXQgbj1gJHt0aGlzLmJhc2VQYXRofSR7ZX1gO3JldHVybiBuZXcgdCh7Li4udGhpcy5vcHRpb25zLC4uLnJ9LG4pfWFzeW5jIHB1c2hVcmwoZT0iLyIscj17fSl7bGV0IG49YCR7dGhpcy5iYXNlUGF0aH0ke2V9YDtuIT09d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lP3dpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShyLHdpbmRvdy5kb2N1bWVudC50aXRsZSxuKTp3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUocix3aW5kb3cuZG9jdW1lbnQudGl0bGUsbiksYXdhaXQgdGhpcy5faGFuZGxlUm91dGVTdGF0ZSgpfW9uKGUscil7bGV0IG49YCR7dGhpcy5iYXNlUGF0aH0ke2V9YCxpPXttYXRjaEZ1bmN0aW9uOmd3Lm1hdGNoKG4pLGhhbmRsZXI6cn07cmV0dXJuIHRoaXMucm91dGVzLnB1c2goaSksbygoKT0+e3RoaXMucm91dGVzLnNwbGljZSh0aGlzLnJvdXRlcy5pbmRleE9mKGkpLDEpfSwicmVtb3ZlRnVuY3Rpb24iKX1hc3luYyBfaGFuZGxlUm91dGVTdGF0ZSgpe2xldCBlPXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxyPXRoaXMucm91dGVzLmZpbHRlcihuPT4hIW4ubWF0Y2hGdW5jdGlvbihlKSk7Zm9yKGxldCBuIG9mIHIpe2xldCBpPW4ubWF0Y2hGdW5jdGlvbihlKTtuLmhhbmRsZXIoey4uLmkudmFsdWVPZigpLHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMuZ2V0QWxsQXNPYmplY3QoKX0pfX1kZXN0cm95KCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIix0aGlzLnBvcHN0YXRlTGlzdGVuZXIpLHRoaXMucm91dGVzPVtdfX07dmFyIEdvPXt9O3NlKEdvLHtTbWFydHN0YXRlOigpPT52dyxTdGF0ZUFjdGlvbjooKT0+VmMsU3RhdGVQYXJ0OigpPT5ZYyxTdGF0ZVByb2Nlc3M6KCk9PkhhLGF0dGFjaENvbnRleHRQcm92aWRlcjooKT0+UmosY29tcHV0ZWQ6KCk9Pnd3fSk7dmFyIFVjPXt9O3NlKFVjLHtjcmVhdGVTaGEyNTZIYXNoZXI6KCk9PnphLG1kNUZyb21TdHJpbmc6KCk9PklqLHNoYTI1NkZyb21CdWZmZXI6KCk9PkRqLHNoYTI1NkZyb21GaWxlOigpPT5PaixzaGEyNTZGcm9tU3RyZWFtOigpPT5NaixzaGEyNTZGcm9tU3RyaW5nOigpPT5jTyxzaGEyNTZGcm9tU3RyaW5nU3luYzooKT0+RWosc2hhMjY1RnJvbU9iamVjdDooKT0+Q2p9KTt2YXIga2o9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKSxTaj1uZXcgVWludDMyQXJyYXkoWzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XSksTW49bygodCxlKT0+dD4+PmV8dDw8MzItZSwicm90YXRlUmlnaHQiKSxUaj1vKHQ9PnQgaW5zdGFuY2VvZiBVaW50OEFycmF5P3Q6bmV3IFVpbnQ4QXJyYXkodCksImFzQnl0ZXMiKSx4dz1jbGFzc3tzdGF0aWN7byh0aGlzLCJCcm93c2VyU2hhMjU2SGFzaGVyIil9Y29uc3RydWN0b3IoKXt0aGlzLnN0YXRlPW5ldyBVaW50MzJBcnJheShTaiksdGhpcy5ibG9jaz1uZXcgVWludDhBcnJheSg2NCksdGhpcy53b3Jkcz1uZXcgVWludDMyQXJyYXkoNjQpLHRoaXMuYmxvY2tMZW5ndGg9MCx0aGlzLnRvdGFsQnl0ZXNIaWdoPTAsdGhpcy50b3RhbEJ5dGVzTG93PTAsdGhpcy5maW5hbGl6ZWQ9ITF9dXBkYXRlKGUpe2lmKHRoaXMuZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiU0hBLTI1NiBoYXNoZXIgaXMgYWxyZWFkeSBmaW5hbGl6ZWQuIik7bGV0IHI9VGooZSk7dGhpcy5hZGRCeXRlTGVuZ3RoKHIuYnl0ZUxlbmd0aCk7bGV0IG49MDtpZih0aGlzLmJsb2NrTGVuZ3RoPjApe2xldCBpPU1hdGgubWluKDY0LXRoaXMuYmxvY2tMZW5ndGgsci5ieXRlTGVuZ3RoKTt0aGlzLmJsb2NrLnNldChyLnN1YmFycmF5KDAsaSksdGhpcy5ibG9ja0xlbmd0aCksdGhpcy5ibG9ja0xlbmd0aCs9aSxuPWksdGhpcy5ibG9ja0xlbmd0aD09PTY0JiYodGhpcy5wcm9jZXNzQmxvY2sodGhpcy5ibG9jaywwKSx0aGlzLmJsb2NrTGVuZ3RoPTApfWZvcig7bis2NDw9ci5ieXRlTGVuZ3RoOyl0aGlzLnByb2Nlc3NCbG9jayhyLG4pLG4rPTY0O3JldHVybiBuPHIuYnl0ZUxlbmd0aCYmKHRoaXMuYmxvY2suc2V0KHIuc3ViYXJyYXkobiksMCksdGhpcy5ibG9ja0xlbmd0aD1yLmJ5dGVMZW5ndGgtbiksdGhpc31kaWdlc3QoKXtpZih0aGlzLmZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIlNIQS0yNTYgaGFzaGVyIGlzIGFscmVhZHkgZmluYWxpemVkLiIpO3RoaXMuZmluYWxpemVkPSEwO2xldCBlPXRoaXMuYmxvY2tMZW5ndGg8NTY/NjQ6MTI4LHI9bmV3IFVpbnQ4QXJyYXkoZSk7ci5zZXQodGhpcy5ibG9jay5zdWJhcnJheSgwLHRoaXMuYmxvY2tMZW5ndGgpKSxyW3RoaXMuYmxvY2tMZW5ndGhdPTEyODtsZXQgbj0odGhpcy50b3RhbEJ5dGVzSGlnaDw8M3x0aGlzLnRvdGFsQnl0ZXNMb3c+Pj4yOSk+Pj4wLGk9dGhpcy50b3RhbEJ5dGVzTG93PDwzPj4+MCxzPW5ldyBEYXRhVmlldyhyLmJ1ZmZlcik7cy5zZXRVaW50MzIoZS04LG4sITEpLHMuc2V0VWludDMyKGUtNCxpLCExKTtmb3IobGV0IGw9MDtsPGU7bCs9NjQpdGhpcy5wcm9jZXNzQmxvY2socixsKTtsZXQgYT0iIjtmb3IobGV0IGwgb2YgdGhpcy5zdGF0ZSlhKz1sLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIik7cmV0dXJuIHRoaXMuYmxvY2suZmlsbCgwKSx0aGlzLndvcmRzLmZpbGwoMCksYX1hZGRCeXRlTGVuZ3RoKGUpe2xldCByPXRoaXMudG90YWxCeXRlc0xvdzt0aGlzLnRvdGFsQnl0ZXNMb3c9dGhpcy50b3RhbEJ5dGVzTG93K2U+Pj4wLHRoaXMudG90YWxCeXRlc0hpZ2g9dGhpcy50b3RhbEJ5dGVzSGlnaCtNYXRoLmZsb29yKGUvNDI5NDk2NzI5NikrKHRoaXMudG90YWxCeXRlc0xvdzxyPzE6MCk+Pj4wfXByb2Nlc3NCbG9jayhlLHIpe2xldCBuPXRoaXMud29yZHM7Zm9yKGxldCBoPTA7aDwxNjtoKyspe2xldCBkPXIraCo0O25baF09KGVbZF08PDI0fGVbZCsxXTw8MTZ8ZVtkKzJdPDw4fGVbZCszXSk+Pj4wfWZvcihsZXQgaD0xNjtoPDY0O2grKyl7bGV0IGQ9bltoLTE1XSxtPW5baC0yXSxnPU1uKGQsNyleTW4oZCwxOCleZD4+PjMseT1NbihtLDE3KV5NbihtLDE5KV5tPj4+MTA7bltoXT1uW2gtMTZdK2crbltoLTddK3k+Pj4wfWxldCBpPXRoaXMuc3RhdGVbMF0scz10aGlzLnN0YXRlWzFdLGE9dGhpcy5zdGF0ZVsyXSxsPXRoaXMuc3RhdGVbM10sYz10aGlzLnN0YXRlWzRdLHU9dGhpcy5zdGF0ZVs1XSxmPXRoaXMuc3RhdGVbNl0scD10aGlzLnN0YXRlWzddO2ZvcihsZXQgaD0wO2g8NjQ7aCsrKXtsZXQgZD1NbihjLDYpXk1uKGMsMTEpXk1uKGMsMjUpLG09YyZ1Xn5jJmYsZz1wK2QrbStraltoXStuW2hdPj4+MCx5PU1uKGksMileTW4oaSwxMyleTW4oaSwyMikseD1pJnNeaSZhXnMmYSxrPXkreD4+PjA7cD1mLGY9dSx1PWMsYz1sK2c+Pj4wLGw9YSxhPXMscz1pLGk9ZytrPj4+MH10aGlzLnN0YXRlWzBdPXRoaXMuc3RhdGVbMF0raT4+PjAsdGhpcy5zdGF0ZVsxXT10aGlzLnN0YXRlWzFdK3M+Pj4wLHRoaXMuc3RhdGVbMl09dGhpcy5zdGF0ZVsyXSthPj4+MCx0aGlzLnN0YXRlWzNdPXRoaXMuc3RhdGVbM10rbD4+PjAsdGhpcy5zdGF0ZVs0XT10aGlzLnN0YXRlWzRdK2M+Pj4wLHRoaXMuc3RhdGVbNV09dGhpcy5zdGF0ZVs1XSt1Pj4+MCx0aGlzLnN0YXRlWzZdPXRoaXMuc3RhdGVbNl0rZj4+PjAsdGhpcy5zdGF0ZVs3XT10aGlzLnN0YXRlWzddK3A+Pj4wfX0semE9bygoKT0+bmV3IHh3LCJjcmVhdGVTaGEyNTZIYXNoZXIiKTtmdW5jdGlvbiBidyh0KXtyZXR1cm4gemEoKS51cGRhdGUodCkuZGlnZXN0KCl9byhidywic2hhMjU2RmFsbGJhY2siKTt2YXIgYU89byh0PT57bGV0IGU9W10scj1uZXcgRGF0YVZpZXcodCk7Zm9yKGxldCBuPTA7bjxyLmJ5dGVMZW5ndGg7bis9NCl7bGV0IHM9ci5nZXRVaW50MzIobikudG9TdHJpbmcoMTYpLGE9IjAwMDAwMDAwIixsPShhK3MpLnNsaWNlKC1hLmxlbmd0aCk7ZS5wdXNoKGwpfXJldHVybiBlLmpvaW4oIiIpfSwiaGV4IiksbE89bygoKT0+dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5zdWJ0bGUhPT12b2lkIDAsImlzQ3J5cHRvU3VidGxlQXZhaWxhYmxlIiksY089byhhc3luYyB0PT57bGV0IGU9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpO2lmKGxPKCkpe2xldCByPWF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCJTSEEtMjU2IixlKTtyZXR1cm4gYU8ocil9ZWxzZSByZXR1cm4gYncoZSl9LCJzaGEyNTZGcm9tU3RyaW5nIiksRWo9byh0PT56YSgpLnVwZGF0ZShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodCkpLmRpZ2VzdCgpLCJzaGEyNTZGcm9tU3RyaW5nU3luYyIpLERqPW8oYXN5bmMgdD0+e2lmKGxPKCkpe2xldCBlO2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXtsZXQgaT10O2U9aS5idWZmZXIuc2xpY2UoaS5ieXRlT2Zmc2V0LGkuYnl0ZU9mZnNldCtpLmJ5dGVMZW5ndGgpfWVsc2UgZT10O2xldCByPWF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCJTSEEtMjU2IixlKTtyZXR1cm4gYU8ocil9ZWxzZXtsZXQgZT10IGluc3RhbmNlb2YgVWludDhBcnJheT90Om5ldyBVaW50OEFycmF5KHQpO3JldHVybiBidyhlKX19LCJzaGEyNTZGcm9tQnVmZmVyIiksQ2o9byhhc3luYyB0PT57bGV0IGU9bHQuc3RyaW5naWZ5KHQpO3JldHVybiBhd2FpdCBjTyhlKX0sInNoYTI2NUZyb21PYmplY3QiKSxNaj1vKGFzeW5jIHQ9PntpZighdHx8dHlwZW9mIHQuZ2V0UmVhZGVyIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoInNoYTI1NkZyb21TdHJlYW0gcmVxdWlyZXMgYSByZWFkYWJsZSBXZWIgc3RyZWFtLiIpO2xldCBlPXphKCkscj10LmdldFJlYWRlcigpLG49ITE7dHJ5e2Zvcig7Oyl7bGV0e3ZhbHVlOmksZG9uZTpzfT1hd2FpdCByLnJlYWQoKTtpZihzKXJldHVybiBuPSEwLGUuZGlnZXN0KCk7aWYoIShpIGluc3RhbmNlb2YgVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiU0hBLTI1NiBXZWIgc3RyZWFtcyBtdXN0IGVtaXQgVWludDhBcnJheXMuIik7ZS51cGRhdGUoaSl9fWNhdGNoKGkpe3Rocm93IG58fGF3YWl0IHIuY2FuY2VsKGkpLmNhdGNoKCgpPT57fSksaX1maW5hbGx5e3IucmVsZWFzZUxvY2soKX19LCJzaGEyNTZGcm9tU3RyZWFtIiksT2o9byhhc3luYyB0PT57dGhyb3cgbmV3IEVycm9yKCJzaGEyNTZGcm9tRmlsZSBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQiKX0sInNoYTI1NkZyb21GaWxlIiksSWo9byhhc3luYyB0PT57dGhyb3cgbmV3IEVycm9yKCJtZDVGcm9tU3RyaW5nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudC4gV2ViIENyeXB0byBBUEkgZG9lcyBub3Qgc3VwcG9ydCBNRDUuIil9LCJtZDVGcm9tU3RyaW5nIik7dmFyIFZjPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN0YXRlQWN0aW9uIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLnN0YXRlUGFydFJlZj1lLHRoaXMuYWN0aW9uRGVmPXJ9dHJpZ2dlcihlKXtyZXR1cm4gdGhpcy5zdGF0ZVBhcnRSZWYuZGlzcGF0Y2hBY3Rpb24odGhpcyxlKX19O2Z1bmN0aW9uIFBqKCl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudD4idSI/YWwoITApOm5ldyBrZSh0PT57dC5uZXh0KCFkb2N1bWVudC5oaWRkZW4pO2xldCBlPW8oKCk9PnQubmV4dCghZG9jdW1lbnQuaGlkZGVuKSwiaGFuZGxlciIpO3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixlKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsZSl9KX1vKFBqLCJjcmVhdGVWaXNpYmlsaXR5T2JzZXJ2YWJsZSIpO3ZhciBIYT1jbGFzc3tzdGF0aWN7byh0aGlzLCJTdGF0ZVByb2Nlc3MiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuc3RhdHVzU3ViamVjdD1uZXcgb3MoImlkbGUiKSx0aGlzLnByb2R1Y2VyU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5hdXRvUGF1c2VTdWJzY3JpcHRpb249bnVsbCx0aGlzLnByb2Nlc3NpbmdRdWV1ZT1Qcm9taXNlLnJlc29sdmUoKSx0aGlzLnN0YXRlUGFydFJlZj1lLHRoaXMucHJvZHVjZXJGbj1yLnByb2R1Y2VyLHRoaXMucmVkdWNlcj1yLnJlZHVjZXIsdGhpcy5zaWRlRWZmZWN0PXIuc2lkZUVmZmVjdCx0aGlzLmF1dG9QYXVzZU9wdGlvbj1yLmF1dG9QYXVzZT8/ITF9Z2V0IHN0YXR1cygpe3JldHVybiB0aGlzLnN0YXR1c1N1YmplY3QuZ2V0VmFsdWUoKX1nZXQgc3RhdHVzJCgpe3JldHVybiB0aGlzLnN0YXR1c1N1YmplY3QuYXNPYnNlcnZhYmxlKCl9c3RhcnQoKXtpZih0aGlzLnN0YXR1cz09PSJkaXNwb3NlZCIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc3RhcnQgYSBkaXNwb3NlZCBwcm9jZXNzIik7dGhpcy5zdGF0dXMhPT0icnVubmluZyImJih0aGlzLnN0YXR1c1N1YmplY3QubmV4dCgicnVubmluZyIpLHRoaXMuc3Vic2NyaWJlUHJvZHVjZXIoKSx0aGlzLnNldHVwQXV0b1BhdXNlKCkpfXBhdXNlKCl7aWYodGhpcy5zdGF0dXM9PT0iZGlzcG9zZWQiKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHBhdXNlIGEgZGlzcG9zZWQgcHJvY2VzcyIpO3RoaXMuc3RhdHVzPT09InJ1bm5pbmciJiYodGhpcy5zdGF0dXNTdWJqZWN0Lm5leHQoInBhdXNlZCIpLHRoaXMudW5zdWJzY3JpYmVQcm9kdWNlcigpKX1yZXN1bWUoKXtpZih0aGlzLnN0YXR1cz09PSJkaXNwb3NlZCIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVzdW1lIGEgZGlzcG9zZWQgcHJvY2VzcyIpO3RoaXMuc3RhdHVzPT09InBhdXNlZCImJih0aGlzLnN0YXR1c1N1YmplY3QubmV4dCgicnVubmluZyIpLHRoaXMuc3Vic2NyaWJlUHJvZHVjZXIoKSl9ZGlzcG9zZSgpe3RoaXMuc3RhdHVzIT09ImRpc3Bvc2VkIiYmKHRoaXMudW5zdWJzY3JpYmVQcm9kdWNlcigpLHRoaXMudGVhcmRvd25BdXRvUGF1c2UoKSx0aGlzLnN0YXR1c1N1YmplY3QubmV4dCgiZGlzcG9zZWQiKSx0aGlzLnN0YXR1c1N1YmplY3QuY29tcGxldGUoKSx0aGlzLnN0YXRlUGFydFJlZi5fcmVtb3ZlUHJvY2Vzcyh0aGlzKSl9c3Vic2NyaWJlUHJvZHVjZXIoKXt0aGlzLnVuc3Vic2NyaWJlUHJvZHVjZXIoKTtsZXQgZT10aGlzLnByb2R1Y2VyRm4oKTt0aGlzLnByb2R1Y2VyU3Vic2NyaXB0aW9uPWUuc3Vic2NyaWJlKHtuZXh0Om8ocj0+e3RoaXMucHJvY2Vzc2luZ1F1ZXVlPXRoaXMucHJvY2Vzc2luZ1F1ZXVlLnRoZW4oYXN5bmMoKT0+e3RyeXtpZih0aGlzLnNpZGVFZmZlY3QpYXdhaXQgdGhpcy5zaWRlRWZmZWN0KHIpO2Vsc2UgaWYodGhpcy5yZWR1Y2VyKXtsZXQgbj10aGlzLnN0YXRlUGFydFJlZi5nZXRTdGF0ZSgpO24hPT12b2lkIDAmJmF3YWl0IHRoaXMuc3RhdGVQYXJ0UmVmLnNldFN0YXRlKHRoaXMucmVkdWNlcihuLHIpKX19Y2F0Y2gobil7Y29uc29sZS5lcnJvcigiU3RhdGVQcm9jZXNzIHZhbHVlIGhhbmRsaW5nIGVycm9yOiIsbil9fSl9LCJuZXh0IiksZXJyb3I6byhyPT57Y29uc29sZS5lcnJvcigiU3RhdGVQcm9jZXNzIHByb2R1Y2VyIGVycm9yOiIsciksdGhpcy5zdGF0dXM9PT0icnVubmluZyImJih0aGlzLnN0YXR1c1N1YmplY3QubmV4dCgicGF1c2VkIiksdGhpcy51bnN1YnNjcmliZVByb2R1Y2VyKCkpfSwiZXJyb3IiKX0pfXVuc3Vic2NyaWJlUHJvZHVjZXIoKXt0aGlzLnByb2R1Y2VyU3Vic2NyaXB0aW9uJiYodGhpcy5wcm9kdWNlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMucHJvZHVjZXJTdWJzY3JpcHRpb249bnVsbCl9c2V0dXBBdXRvUGF1c2UoKXtpZih0aGlzLnRlYXJkb3duQXV0b1BhdXNlKCksIXRoaXMuYXV0b1BhdXNlT3B0aW9uKXJldHVybjtsZXQgZT10aGlzLmF1dG9QYXVzZU9wdGlvbj09PSJ2aXNpYmlsaXR5Ij9QaigpOnRoaXMuYXV0b1BhdXNlT3B0aW9uO3RoaXMuYXV0b1BhdXNlU3Vic2NyaXB0aW9uPWUuc3Vic2NyaWJlKHI9PnshciYmdGhpcy5zdGF0dXM9PT0icnVubmluZyI/dGhpcy5wYXVzZSgpOnImJnRoaXMuc3RhdHVzPT09InBhdXNlZCImJnRoaXMucmVzdW1lKCl9KX10ZWFyZG93bkF1dG9QYXVzZSgpe3RoaXMuYXV0b1BhdXNlU3Vic2NyaXB0aW9uJiYodGhpcy5hdXRvUGF1c2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmF1dG9QYXVzZVN1YnNjcmlwdGlvbj1udWxsKX19O3ZhciB1Tz1vKHQ9PntsZXQgZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7cmV0dXJuIGU9PT1PYmplY3QucHJvdG90eXBlfHxlPT09bnVsbH0sImlzUGxhaW5PYmplY3QiKSxZZD1vKCh0LGUpPT57bGV0IHI9bmV3IFdlYWtNYXAsbj1uZXcgV2Vha01hcCxpPW8oKHMsYSk9PntpZihPYmplY3QuaXMocyxhKSlyZXR1cm4hMDtpZihzPT09bnVsbHx8YT09PW51bGx8fHR5cGVvZiBzIT0ib2JqZWN0Inx8dHlwZW9mIGEhPSJvYmplY3QiKXJldHVybiExO2lmKHMgaW5zdGFuY2VvZiBEYXRlfHxhIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gcyBpbnN0YW5jZW9mIERhdGUmJmEgaW5zdGFuY2VvZiBEYXRlJiZPYmplY3QuaXMocy5nZXRUaW1lKCksYS5nZXRUaW1lKCkpO2xldCBsPUFycmF5LmlzQXJyYXkocyksYz1BcnJheS5pc0FycmF5KGEpO2lmKGwhPT1jfHwhbCYmKCF1TyhzKXx8IXVPKGEpKSlyZXR1cm4hMTtsZXQgdT1yLmdldChzKTtpZih1KXJldHVybiB1PT09YTtsZXQgZj1uLmdldChhKTtpZihmKXJldHVybiBmPT09cztpZihyLnNldChzLGEpLG4uc2V0KGEscyksbCYmYyl7aWYocy5sZW5ndGghPT1hLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGc9MDtnPHMubGVuZ3RoO2crKylpZighaShzW2ddLGFbZ10pKXJldHVybiExO3JldHVybiEwfWxldCBwPXMsaD1hLGQ9T2JqZWN0LmtleXMocCksbT1PYmplY3Qua2V5cyhoKTtpZihkLmxlbmd0aCE9PW0ubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZyBvZiBkKWlmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaCxnKXx8IWkocFtnXSxoW2ddKSlyZXR1cm4hMTtyZXR1cm4hMH0sImNvbXBhcmUiKTtyZXR1cm4gaSh0LGUpfSwiaXNTdGF0ZVNlbGVjdGlvbkVxdWFsIik7ZnVuY3Rpb24gTmoodCl7cmV0dXJuIG5ldyBrZShlPT57aWYodC5hYm9ydGVkKXtlLm5leHQoKSxlLmNvbXBsZXRlKCk7cmV0dXJufWxldCByPW8oKCk9PntlLm5leHQoKSxlLmNvbXBsZXRlKCl9LCJoYW5kbGVyIik7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpLCgpPT50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixyKX0pfW8oTmosImZyb21BYm9ydFNpZ25hbCIpO3ZhciBZYz1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIlN0YXRlUGFydCIpfXN0YXRpY3t0aGlzLk1BWF9ORVNURURfRElTUEFUQ0hfREVQVEg9MTB9Y29uc3RydWN0b3IoZSxyKXt0aGlzLnN0YXRlPW5ldyBvcyh2b2lkIDApLHRoaXMuZGlzcG9zZWQ9ITEsdGhpcy5jdW11bGF0aXZlRGVmZXJyZWQ9Wi5jdW11bGF0aXZlRGVmZXIoKSx0aGlzLm11dGF0aW9uUXVldWU9UHJvbWlzZS5yZXNvbHZlKCksdGhpcy5wZW5kaW5nQ3VtdWxhdGl2ZU5vdGlmaWNhdGlvbj1udWxsLHRoaXMud2ViU3RvcmU9bnVsbCx0aGlzLm1pZGRsZXdhcmVzPVtdLHRoaXMucHJvY2Vzc2VzPVtdLHRoaXMuc2VsZWN0b3JDYWNoZT1uZXcgV2Vha01hcCx0aGlzLmRlZmF1bHRTZWxlY3RPYnNlcnZhYmxlPW51bGwsdGhpcy5uYW1lPWUsciYmKHRoaXMud2ViU3RvcmVPcHRpb25zPXIpfWFzeW5jIGluaXQoKXtpZih0aGlzLndlYlN0b3JlT3B0aW9ucyl7dGhpcy53ZWJTdG9yZT1uZXcgQXIuV2ViU3RvcmUodGhpcy53ZWJTdG9yZU9wdGlvbnMpLGF3YWl0IHRoaXMud2ViU3RvcmUuaW5pdCgpO2xldCBlPWF3YWl0IHRoaXMud2ViU3RvcmUuZ2V0KFN0cmluZyh0aGlzLm5hbWUpKTtlJiZ0aGlzLnZhbGlkYXRlU3RhdGUoZSkmJih0aGlzLnN0YXRlU3RvcmU9ZSxhd2FpdCB0aGlzLm5vdGlmeUNoYW5nZSgpKX19Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5zdGF0ZVN0b3JlfWFkZE1pZGRsZXdhcmUoZSl7cmV0dXJuIHRoaXMubWlkZGxld2FyZXMucHVzaChlKSwoKT0+e2xldCByPXRoaXMubWlkZGxld2FyZXMuaW5kZXhPZihlKTtyIT09LTEmJnRoaXMubWlkZGxld2FyZXMuc3BsaWNlKHIsMSl9fWFzeW5jIHNldFN0YXRlKGUpe2lmKHRoaXMuZGlzcG9zZWQpdGhyb3cgbmV3IEVycm9yKGBTdGF0ZVBhcnQgJyR7dGhpcy5uYW1lfScgaGFzIGJlZW4gZGlzcG9zZWRgKTtyZXR1cm4gdGhpcy5tdXRhdGlvblF1ZXVlPXRoaXMubXV0YXRpb25RdWV1ZS50aGVuKCgpPT50aGlzLmFwcGx5U3RhdGUoZSksKCk9PnRoaXMuYXBwbHlTdGF0ZShlKSl9YXN5bmMgYXBwbHlTdGF0ZShlKXtsZXQgcj1lO2ZvcihsZXQgbiBvZiB0aGlzLm1pZGRsZXdhcmVzKXI9YXdhaXQgbihyLHRoaXMuc3RhdGVTdG9yZSk7aWYoIXRoaXMudmFsaWRhdGVTdGF0ZShyKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3RhdGUgc3RydWN0dXJlIGZvciBzdGF0ZSBwYXJ0ICcke3RoaXMubmFtZX0nYCk7cmV0dXJuIHRoaXMud2ViU3RvcmUmJmF3YWl0IHRoaXMud2ViU3RvcmUuc2V0KFN0cmluZyh0aGlzLm5hbWUpLHIpLHRoaXMuc3RhdGVTdG9yZT1yLGF3YWl0IHRoaXMubm90aWZ5Q2hhbmdlKCksdGhpcy5zdGF0ZVN0b3JlfXZhbGlkYXRlU3RhdGUoZSl7cmV0dXJuIGUhPW51bGx9YXN5bmMgbm90aWZ5Q2hhbmdlKCl7bGV0IGU9dGhpcy5zdGF0ZVN0b3JlO2lmKGU9PT12b2lkIDApcmV0dXJuO2lmKHRoaXMuc21hcnRzdGF0ZVJlZj8uaXNCYXRjaGluZyl7dGhpcy5zbWFydHN0YXRlUmVmLnJlZ2lzdGVyUGVuZGluZ05vdGlmaWNhdGlvbih0aGlzKTtyZXR1cm59bGV0IHI9byhhc3luYyBuPT5hd2FpdCBVYy5zaGEyNTZGcm9tU3RyaW5nKGx0LnN0YWJsZU9uZVdheVN0cmluZ2lmeShuKSksImNyZWF0ZVN0YXRlSGFzaCIpO3RyeXtsZXQgbj1hd2FpdCByKGUpO2lmKHRoaXMubGFzdFN0YXRlTm90aWZpY2F0aW9uUGF5bG9hZEhhc2gmJm49PT10aGlzLmxhc3RTdGF0ZU5vdGlmaWNhdGlvblBheWxvYWRIYXNoKXJldHVybjt0aGlzLmxhc3RTdGF0ZU5vdGlmaWNhdGlvblBheWxvYWRIYXNoPW59Y2F0Y2gobil7Y29uc29sZS5lcnJvcihgU3RhdGUgaGFzaCBjb21wdXRhdGlvbiBmYWlsZWQgZm9yICcke3RoaXMubmFtZX0nOmAsbil9dGhpcy5zdGF0ZS5uZXh0KGUpfW5vdGlmeUNoYW5nZUN1bXVsYXRpdmUoKXt0aGlzLnBlbmRpbmdDdW11bGF0aXZlTm90aWZpY2F0aW9uJiZjbGVhclRpbWVvdXQodGhpcy5wZW5kaW5nQ3VtdWxhdGl2ZU5vdGlmaWNhdGlvbiksdGhpcy5wZW5kaW5nQ3VtdWxhdGl2ZU5vdGlmaWNhdGlvbj1zZXRUaW1lb3V0KCgpPT57dGhpcy5wZW5kaW5nQ3VtdWxhdGl2ZU5vdGlmaWNhdGlvbj1udWxsLHRoaXMuc3RhdGVTdG9yZSE9PXZvaWQgMCYmdGhpcy5ub3RpZnlDaGFuZ2UoKS5jYXRjaChlPT57Y29uc29sZS5lcnJvcihgbm90aWZ5Q2hhbmdlQ3VtdWxhdGl2ZSBmYWlsZWQgZm9yICcke3RoaXMubmFtZX0nOmAsZSl9KX0sMCl9c2VsZWN0KGUscil7bGV0IG49cj8uc2lnbmFsIT1udWxsO2lmKCFuKXtpZihlKXtpZih0aGlzLnNlbGVjdG9yQ2FjaGUuaGFzKGUpKXJldHVybiB0aGlzLnNlbGVjdG9yQ2FjaGUuZ2V0KGUpfWVsc2UgaWYodGhpcy5kZWZhdWx0U2VsZWN0T2JzZXJ2YWJsZSlyZXR1cm4gdGhpcy5kZWZhdWx0U2VsZWN0T2JzZXJ2YWJsZX1sZXQgaT1lfHwoYz0+Yykscz1TeW1ib2woInNlbGVjdG9yLWVycm9yIiksYT10aGlzLnN0YXRlLnBpcGUoSWUucnhqcy5vcHMuZmlsdGVyKGM9PmMhPT12b2lkIDApLEllLnJ4anMub3BzLm1hcChjPT57dHJ5e3JldHVybiBpKGMpfWNhdGNoKHUpe3JldHVybiBjb25zb2xlLmVycm9yKGBTZWxlY3RvciBlcnJvciBpbiBzdGF0ZSBwYXJ0ICcke3RoaXMubmFtZX0nOmAsdSksc319KSxJZS5yeGpzLm9wcy5maWx0ZXIoYz0+YyE9PXMpLHVzKFlkKSk7aWYobilyZXR1cm4gYT1hLnBpcGUoZnMoTmooci5zaWduYWwpKSksYTtsZXQgbD1hLnBpcGUoQnUoe2J1ZmZlclNpemU6MSxyZWZDb3VudDohMH0pKTtyZXR1cm4gZT90aGlzLnNlbGVjdG9yQ2FjaGUuc2V0KGUsbCk6dGhpcy5kZWZhdWx0U2VsZWN0T2JzZXJ2YWJsZT1sLGx9Y3JlYXRlQWN0aW9uKGUpe3JldHVybiBuZXcgVmModGhpcyxlKX1jcmVhdGVBY3Rpb25Db250ZXh0KGUpe2xldCByPXRoaXM7cmV0dXJue2Rpc3BhdGNoOm8oYXN5bmMobixpKT0+e2lmKGU+PXQuTUFYX05FU1RFRF9ESVNQQVRDSF9ERVBUSCl0aHJvdyBuZXcgRXJyb3IoYE1heGltdW0gbmVzdGVkIGFjdGlvbiBkaXNwYXRjaCBkZXB0aCAoJHt0Lk1BWF9ORVNURURfRElTUEFUQ0hfREVQVEh9KSBleGNlZWRlZC4gQ2hlY2sgZm9yIGNpcmN1bGFyIGFjdGlvbiBkaXNwYXRjaGVzLmApO2xldCBzPXIuY3JlYXRlQWN0aW9uQ29udGV4dChlKzEpLGE9YXdhaXQgbi5hY3Rpb25EZWYocixpLHMpO3JldHVybiByLmFwcGx5U3RhdGUoYSl9LCJkaXNwYXRjaCIpfX1hc3luYyBkaXNwYXRjaEFjdGlvbihlLHIpe2lmKHRoaXMuZGlzcG9zZWQpdGhyb3cgbmV3IEVycm9yKGBTdGF0ZVBhcnQgJyR7dGhpcy5uYW1lfScgaGFzIGJlZW4gZGlzcG9zZWRgKTthd2FpdCB0aGlzLmN1bXVsYXRpdmVEZWZlcnJlZC5wcm9taXNlO2xldCBuPW8oYXN5bmMoKT0+e2xldCBpPXRoaXMuY3JlYXRlQWN0aW9uQ29udGV4dCgwKSxzPWF3YWl0IGUuYWN0aW9uRGVmKHRoaXMscixpKTtyZXR1cm4gdGhpcy5hcHBseVN0YXRlKHMpfSwiZXhlY3V0ZSIpO3JldHVybiB0aGlzLm11dGF0aW9uUXVldWU9dGhpcy5tdXRhdGlvblF1ZXVlLnRoZW4obixuKX1hc3luYyB3YWl0VW50aWxQcmVzZW50KGUscil7bGV0IG4saTt0eXBlb2Ygcj09Im51bWJlciI/bj1yOnImJihuPXIudGltZW91dE1zLGk9ci5zaWduYWwpO2xldCBzPVouZGVmZXIoKSxhPXRoaXMuc2VsZWN0KGUpLGw9ITE7aWYoaT8uYWJvcnRlZCl0aHJvdyBuZXcgRXJyb3IoIkFib3J0ZWQiKTtsZXQgYz1hLnN1YnNjcmliZShwPT57cCE9bnVsbCYmIWwmJihsPSEwLHMucmVzb2x2ZShwKSl9KSx1O24mJih1PXNldFRpbWVvdXQoKCk9PntsfHwobD0hMCxjLnVuc3Vic2NyaWJlKCkscy5yZWplY3QobmV3IEVycm9yKGB3YWl0VW50aWxQcmVzZW50IHRpbWVkIG91dCBhZnRlciAke259bXNgKSkpfSxuKSk7bGV0IGY9aT8oKT0+e2x8fChsPSEwLGMudW5zdWJzY3JpYmUoKSx1JiZjbGVhclRpbWVvdXQodSkscy5yZWplY3QobmV3IEVycm9yKCJBYm9ydGVkIikpKX06dm9pZCAwO2kmJmYmJmkuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGYpO3RyeXtyZXR1cm4gYXdhaXQgcy5wcm9taXNlfWZpbmFsbHl7Yy51bnN1YnNjcmliZSgpLHUmJmNsZWFyVGltZW91dCh1KSxpJiZmJiZpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixmKX19YXN5bmMgc3RhdGVTZXR1cChlKXtsZXQgcj1lKHRoaXMpO3RoaXMuY3VtdWxhdGl2ZURlZmVycmVkLmFkZFByb21pc2UociksYXdhaXQgdGhpcy5zZXRTdGF0ZShhd2FpdCByKX1jcmVhdGVQcm9jZXNzKGUpe2lmKHRoaXMuZGlzcG9zZWQpdGhyb3cgbmV3IEVycm9yKGBTdGF0ZVBhcnQgJyR7dGhpcy5uYW1lfScgaGFzIGJlZW4gZGlzcG9zZWRgKTtsZXQgcj1uZXcgSGEodGhpcyxlKTtyZXR1cm4gdGhpcy5wcm9jZXNzZXMucHVzaChyKSxlLmF1dG9TdGFydCYmci5zdGFydCgpLHJ9Y3JlYXRlU2NoZWR1bGVkQWN0aW9uKGUpe2lmKHRoaXMuZGlzcG9zZWQpdGhyb3cgbmV3IEVycm9yKGBTdGF0ZVBhcnQgJyR7dGhpcy5uYW1lfScgaGFzIGJlZW4gZGlzcG9zZWRgKTtsZXQgcj1uZXcgSGEodGhpcyx7cHJvZHVjZXI6bygoKT0+YWcoZS5pbnRlcnZhbE1zKSwicHJvZHVjZXIiKSxzaWRlRWZmZWN0Om8oYXN5bmMoKT0+e2F3YWl0IGUuYWN0aW9uLnRyaWdnZXIoZS5wYXlsb2FkKX0sInNpZGVFZmZlY3QiKSxhdXRvUGF1c2U6ZS5hdXRvUGF1c2U/PyExfSk7cmV0dXJuIHRoaXMucHJvY2Vzc2VzLnB1c2gociksci5zdGFydCgpLHJ9X3JlbW92ZVByb2Nlc3MoZSl7bGV0IHI9dGhpcy5wcm9jZXNzZXMuaW5kZXhPZihlKTtyIT09LTEmJnRoaXMucHJvY2Vzc2VzLnNwbGljZShyLDEpfWRpc3Bvc2UoKXtpZighdGhpcy5kaXNwb3NlZCl7dGhpcy5kaXNwb3NlZD0hMDtmb3IobGV0IGUgb2ZbLi4udGhpcy5wcm9jZXNzZXNdKWUuZGlzcG9zZSgpO3RoaXMucHJvY2Vzc2VzLmxlbmd0aD0wLHRoaXMuc3RhdGUuY29tcGxldGUoKSx0aGlzLm11dGF0aW9uUXVldWU9UHJvbWlzZS5yZXNvbHZlKCksdGhpcy5wZW5kaW5nQ3VtdWxhdGl2ZU5vdGlmaWNhdGlvbiYmKGNsZWFyVGltZW91dCh0aGlzLnBlbmRpbmdDdW11bGF0aXZlTm90aWZpY2F0aW9uKSx0aGlzLnBlbmRpbmdDdW11bGF0aXZlTm90aWZpY2F0aW9uPW51bGwpLHRoaXMubWlkZGxld2FyZXMubGVuZ3RoPTAsdGhpcy5zZWxlY3RvckNhY2hlPW5ldyBXZWFrTWFwLHRoaXMuZGVmYXVsdFNlbGVjdE9ic2VydmFibGU9bnVsbCx0aGlzLndlYlN0b3JlPW51bGwsdGhpcy5zbWFydHN0YXRlUmVmPXZvaWQgMCx0aGlzLnN0YXRlU3RvcmU9dm9pZCAwfX19O2Z1bmN0aW9uIHd3KHQsZSl7cmV0dXJuIHNnKHQubWFwKHI9PnIuc2VsZWN0KCkpKS5waXBlKGFuKHI9PmUoLi4ucikpLHVzKFlkKSl9byh3dywiY29tcHV0ZWQiKTt2YXIgdnc9Y2xhc3N7c3RhdGlje28odGhpcywiU21hcnRzdGF0ZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy5zdGF0ZVBhcnRNYXA9e30sdGhpcy5wZW5kaW5nU3RhdGVQYXJ0Q3JlYXRpb249bmV3IE1hcCx0aGlzLmJhdGNoRGVwdGg9MCx0aGlzLmlzRmx1c2hpbmc9ITEsdGhpcy5wZW5kaW5nTm90aWZpY2F0aW9ucz1uZXcgU2V0fWdldCBpc0JhdGNoaW5nKCl7cmV0dXJuIHRoaXMuYmF0Y2hEZXB0aD4wfXJlZ2lzdGVyUGVuZGluZ05vdGlmaWNhdGlvbihlKXt0aGlzLnBlbmRpbmdOb3RpZmljYXRpb25zLmFkZChlKX1hc3luYyBiYXRjaChlKXt0aGlzLmJhdGNoRGVwdGgrKzt0cnl7YXdhaXQgZSgpfWZpbmFsbHl7aWYodGhpcy5iYXRjaERlcHRoLS0sdGhpcy5iYXRjaERlcHRoPT09MCYmIXRoaXMuaXNGbHVzaGluZyl7dGhpcy5pc0ZsdXNoaW5nPSEwO3RyeXtmb3IoO3RoaXMucGVuZGluZ05vdGlmaWNhdGlvbnMuc2l6ZT4wOyl7bGV0IHI9Wy4uLnRoaXMucGVuZGluZ05vdGlmaWNhdGlvbnNdO3RoaXMucGVuZGluZ05vdGlmaWNhdGlvbnMuY2xlYXIoKTtmb3IobGV0IG4gb2Ygcil0cnl7YXdhaXQgbi5ub3RpZnlDaGFuZ2UoKX1jYXRjaChpKXtjb25zb2xlLmVycm9yKCJFcnJvciBmbHVzaGluZyBub3RpZmljYXRpb24gZm9yIHN0YXRlIHBhcnQ6IixpKX19fWZpbmFsbHl7dGhpcy5pc0ZsdXNoaW5nPSExfX19fWNvbXB1dGVkKGUscil7cmV0dXJuIHd3KGUscil9ZGlzcG9zZSgpe2ZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyh0aGlzLnN0YXRlUGFydE1hcCkpe2xldCByPXRoaXMuc3RhdGVQYXJ0TWFwW2VdO3ImJnIuZGlzcG9zZSgpfXRoaXMuc3RhdGVQYXJ0TWFwPXt9LHRoaXMucGVuZGluZ1N0YXRlUGFydENyZWF0aW9uLmNsZWFyKCksdGhpcy5wZW5kaW5nTm90aWZpY2F0aW9ucy5jbGVhcigpfWFzeW5jIGdldFN0YXRlUGFydChlLHIsbj0ic29mdCIpe2xldCBpPXRoaXMucGVuZGluZ1N0YXRlUGFydENyZWF0aW9uLmdldChlKTtpZihpKXJldHVybiBpO2xldCBzPXRoaXMuc3RhdGVQYXJ0TWFwW2VdO2lmKHMpc3dpdGNoKG4pe2Nhc2UibWFuZGF0b3J5Ijp0aHJvdyBuZXcgRXJyb3IoYFN0YXRlIHBhcnQgJyR7ZX0nIGFscmVhZHkgZXhpc3RzLCBidXQgaW5pdE1vZGUgaXMgJ21hbmRhdG9yeSdgKTtjYXNlImZvcmNlIjpzLmRpc3Bvc2UoKTticmVhaztkZWZhdWx0OnJldHVybiBzfWVsc2UgaWYocj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFN0YXRlIHBhcnQgJyR7ZX0nIGRvZXMgbm90IGV4aXN0IGFuZCBubyBpbml0aWFsIHN0YXRlIHByb3ZpZGVkYCk7bGV0IGE9dGhpcy5jcmVhdGVTdGF0ZVBhcnQoZSxyLG4pO3RoaXMucGVuZGluZ1N0YXRlUGFydENyZWF0aW9uLnNldChlLGEpO3RyeXtyZXR1cm4gYXdhaXQgYX1maW5hbGx5e3RoaXMucGVuZGluZ1N0YXRlUGFydENyZWF0aW9uLmRlbGV0ZShlKX19YXN5bmMgY3JlYXRlU3RhdGVQYXJ0KGUscixuPSJzb2Z0Iil7bGV0IGk9bmV3IFljKGUsbj09PSJwZXJzaXN0ZW50Ij97ZGJOYW1lOiJzbWFydHN0YXRlIixzdG9yZU5hbWU6ZX06dm9pZCAwKTtpLnNtYXJ0c3RhdGVSZWY9dGhpcyxhd2FpdCBpLmluaXQoKTtsZXQgcz1pLmdldFN0YXRlKCk7cmV0dXJuIG49PT0icGVyc2lzdGVudCImJnMhPT12b2lkIDA/YXdhaXQgaS5zZXRTdGF0ZSh7Li4uciwuLi5zfSk6YXdhaXQgaS5zZXRTdGF0ZShyKSx0aGlzLnN0YXRlUGFydE1hcFtlXT1pLGl9fTtmdW5jdGlvbiBSaih0LGUpe2xldHtjb250ZXh0OnIsc3RhdGVQYXJ0Om4sc2VsZWN0b3JGbjppfT1lLHM9bmV3IFNldCxhPW4uc2VsZWN0KGkpLnN1YnNjcmliZSh1PT57Zm9yKGxldCBmIG9mIHMpZih1KX0pLGw9bygoKT0+e2xldCB1PW4uZ2V0U3RhdGUoKTtpZih1IT09dm9pZCAwKXJldHVybiBpP2kodSk6dX0sImdldFZhbHVlIiksYz1vKHU9PntsZXQgZj11LHA9Zi5kZXRhaWw7aWYoISghcHx8cC5jb250ZXh0IT09cikpaWYoZi5zdG9wUHJvcGFnYXRpb24oKSxwLnN1YnNjcmliZSl7bGV0IGg9cC5jYWxsYmFjaztzLmFkZChoKTtsZXQgZD1vKCgpPT5zLmRlbGV0ZShoKSwidW5zdWJzY3JpYmUiKTtoKGwoKSxkKX1lbHNlIHAuY2FsbGJhY2sobCgpKX0sImhhbmRsZXIiKTtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0LXJlcXVlc3QiLGMpLCgpPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb250ZXh0LXJlcXVlc3QiLGMpLGEudW5zdWJzY3JpYmUoKSxzLmNsZWFyKCl9fW8oUmosImF0dGFjaENvbnRleHRQcm92aWRlciIpO3ZhciBRbz17fTtzZShRbyx7U21hcnR1cmw6KCk9Pmt3fSk7dmFyIGt3PWNsYXNzIHR7c3RhdGlje28odGhpcywiU21hcnR1cmwiKX1zdGF0aWMgY3JlYXRlRnJvbVVybChlLHIpe2xldCBuPW5ldyBVUkwoZSksaT17fSxzPVtdO24uc2VhcmNoJiZuLnNlYXJjaC5yZXBsYWNlKCI/IiwiIikuc3BsaXQoIiYiKS5tYXAodT0+e3MucHVzaCh7a2V5OnUuc3BsaXQoIj0iKVswXSx2YWx1ZTp1LnNwbGl0KCI9IilbMV19KX0pO2ZvcihsZXQgdSBvZiBzKWlbdS5rZXldPXUudmFsdWU7aWYocj8uc2VhcmNoUGFyYW1zKWZvcihsZXQgdSBvZiBPYmplY3Qua2V5cyhyLnNlYXJjaFBhcmFtcykpaVt1XT1yLnNlYXJjaFBhcmFtc1t1XTtsZXQgYT1uLnBhdGhuYW1lfHwiIjtpZihPYmplY3Qua2V5cyhpKS5sZW5ndGg+MCl7YSs9Ij8iO2xldCB1PSEwO2ZvcihsZXQgZiBvZiBPYmplY3Qua2V5cyhpKSl1P3U9ITE6YSs9IiYiLGErPWAke2Z9PSR7aVtmXX1gfWxldCBsPXsuLi5uLGhyZWY6bi5ocmVmLG9yaWdpbjpuLm9yaWdpbixwcm90b2NvbDpuLnByb3RvY29sLHVzZXJuYW1lOm4udXNlcm5hbWUscGFzc3dvcmQ6bi5wYXNzd29yZCxob3N0Om4uaG9zdCxob3N0bmFtZTpuLmhvc3RuYW1lLHBvcnQ6bi5wb3J0LHBhdGg6YSxwYXRobmFtZTpuLnBhdGhuYW1lLHNlYXJjaDpuLnNlYXJjaCxzZWFyY2hQYXJhbXM6aSxoYXNoOm4uaGFzaH07IWwucG9ydCYmbC5wcm90b2NvbD09PSJodHRwczoiJiYobC5wb3J0PSI0NDMiKSwhbC5wb3J0JiZsLnByb3RvY29sPT09Imh0dHA6IiYmKGwucG9ydD0iODAiKTtsZXQgYz1uZXcgdDtyZXR1cm4gT2JqZWN0LmFzc2lnbihjLGwpLGN9c3RhdGljIGNyZWF0ZUZyb21QYXJzZWRVcmwoZSl7bGV0IHI9bmV3IHQ7cmV0dXJuIE9iamVjdC5hc3NpZ24ocixlKSxyfWNvbnN0cnVjdG9yKCl7dGhpcy5zZWFyY2hQYXJhbXM9e319Y2xvbmUoKXtsZXQgZT1uZXcgdDtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHRoaXMpLGUuc2VhcmNoUGFyYW1zPXsuLi50aGlzLnNlYXJjaFBhcmFtc30sZX1zZXQoZSxyKXtyZXR1cm4gdGhpc1tlXT1yLHRoaXN9dG9TdHJpbmcoKXtsZXQgZT0iIjtyZXR1cm4gdGhpcy51c2VybmFtZSYmIXRoaXMucGFzc3dvcmQmJihlPWAke3RoaXMudXNlcm5hbWV9QGApLHRoaXMudXNlcm5hbWUmJnRoaXMucGFzc3dvcmQmJihlPWAke3RoaXMudXNlcm5hbWV9OiR7dGhpcy5wYXNzd29yZH1AYCksYCR7dGhpcy5wcm90b2NvbH0vLyR7ZX0ke3RoaXMuaG9zdG5hbWV9OiR7dGhpcy5wb3J0fSR7dGhpcy5wYXRofWB9fTt2YXIgQXc9e307c2UoQXcse0pzb25MZFRhZzooKT0+Sm8sTWV0YVRhZzooKT0+TXIsT3BlbmdyYXBoVGFnOigpPT5BdCxUaXRsZTooKT0+RncsV2ViU2V0dXA6KCk9PkdjfSk7dmFyIEx3PXt9O3NlKEx3LHtidXNpbmVzczooKT0+RXcsY29kZTooKT0+RHcsY29udGFpbmVyOigpPT5Ddyxjb250ZW50OigpPT5PdyxkYXRhYmFzZTooKT0+U3csZGVzY3JpcHRvcnM6KCk9Pk13LGZpbmFuY2U6KCk9PlR3LGdlbmVyYWw6KCk9Pkl3LG5ldHdvcms6KCk9PkdkLHNhYXM6KCk9PlB3LHN0b3JhZ2U6KCk9Pk53LHdlYnNpdGU6KCk9PlJ3fSk7dmFyIEV3PXt9O3ZhciBTdz17fTt2YXIgVHc9e307dmFyIER3PXt9O3ZhciBDdz17fTt2YXIgTXc9e307dmFyIE93PXt9O3ZhciBJdz17fTt2YXIgR2Q9e307c2UoR2Qse0lDbmFtZURlc2NyaXB0b3I6KCk9Pl93fSk7dmFyIF93PWNsYXNze3N0YXRpY3tvKHRoaXMsIklDbmFtZURlc2NyaXB0b3IiKX19O3ZhciBQdz17fTt2YXIgTnc9e307dmFyIFJ3PXt9O3ZhciBqaT1jbGFzc3tzdGF0aWN7byh0aGlzLCJUYWciKX1jb25zdHJ1Y3Rvcigpe3RoaXMudGFnTGV2ZWw9ImxldmVsYm91bmQifWFwcGVuZFRvRG9tKCl7IXRoaXMuZWxlbWVudFJlZi5wYXJlbnRFbGVtZW50JiYhdGhpcy5lbGVtZW50UmVmLnBhcmVudE5vZGUmJmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50UmVmKX1yZW1vdmVGcm9tRG9tKCl7dGhpcy5lbGVtZW50UmVmLnBhcmVudEVsZW1lbnQ/dGhpcy5lbGVtZW50UmVmLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50UmVmKTp0aGlzLmVsZW1lbnRSZWYucGFyZW50Tm9kZSYmdGhpcy5lbGVtZW50UmVmLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50UmVmKX19O3ZhciBKbz1jbGFzcyB0IGV4dGVuZHMgaml7c3RhdGlje28odGhpcywiSnNvbkxkVGFnIil9c3RhdGljIGNyZWF0ZUNvbXBhbnlKc29uTGQoZSl7bGV0IHI9eyJAY29udGV4dCI6Imh0dHBzOi8vc2NoZW1hLm9yZyIsIkB0eXBlIjoiQ29ycG9yYXRpb24iLG5hbWU6ZS5uYW1lLGFsdGVybmF0ZU5hbWU6ZS5uYW1lLnJlcGxhY2UoIiBHbWJIIiwiIiksdXJsOmUud2Vic2l0ZSxsb2dvOmUubG9nb1VybCxjb250YWN0UG9pbnQ6eyJAdHlwZSI6IkNvbnRhY3RQb2ludCIsdGVsZXBob25lOmUucGhvbmUsY29udGFjdFR5cGU6ImN1c3RvbWVyIHNlcnZpY2UiLGFyZWFTZXJ2ZWQ6IkRFIixhdmFpbGFibGVMYW5ndWFnZTpbImVuIiwiR2VybWFuIl19LHNhbWVBczpbXX0sbj1lLnNvY2lhbHM/LmZpbmQoYT0+YS50eXBlPT09ImZhY2Vib29rIik/LnVybDtuJiZyLnNhbWVBcy5wdXNoKG4pO2xldCBpPWUuc29jaWFscz8uZmluZChhPT5hLnR5cGU9PT0idHdpdHRlciIpPy51cmw7cmV0dXJuIGkmJnIuc2FtZUFzLnB1c2goaSksbmV3IHQocil9c3RhdGljIGNyZWF0ZU5ld3NBcnRpY2xlSnNvbkxkKGUpe2xldCByPXsiQGNvbnRleHQiOiJodHRwczovL3NjaGVtYS5vcmciLCJAdHlwZSI6Ik5ld3NBcnRpY2xlIixtYWluRW50aXR5T2ZQYWdlOnsiQHR5cGUiOiJXZWJQYWdlIiwiQGlkIjp3aW5kb3cubG9jYXRpb24uaHJlZn0saGVhZGxpbmU6IkFydGljbGUgaGVhZGxpbmUiLGltYWdlOltlLmZlYXR1cmVkSW1hZ2VVcmxdLGRhdGVQdWJsaXNoZWQ6bmV3IERhdGUoZS50aW1lc3RhbXApLnRvSVNPU3RyaW5nKCksZGF0ZU1vZGlmaWVkOm5ldyBEYXRlKGUudGltZXN0YW1wKS50b0lTT1N0cmluZygpLGF1dGhvcjp7IkB0eXBlIjoiUGVyc29uIixuYW1lOmAke2UuYXV0aG9yLmZpcnN0TmFtZX0gJHtlLmF1dGhvci5zdXJOYW1lfWB9LHB1Ymxpc2hlcjp7IkB0eXBlIjoiT3JnYW5pemF0aW9uIixuYW1lOmUuYXV0aG9yLnN1ck5hbWUsbG9nbzp7IkB0eXBlIjoiSW1hZ2VPYmplY3QiLHVybDplLmF1dGhvci5zdXJOYW1lfX0sZGVzY3JpcHRpb246ZS5hdXRob3IuZmlyc3ROYW1lfTtyZXR1cm4gbmV3IHQocil9c3RhdGljIGNyZWF0ZVByb2R1Y3RKc29uTGQoZSxyKXtsZXQgbj17IkBjb250ZXh0IjoiaHR0cHM6Ly9zY2hlbWEub3JnIiwiQHR5cGUiOiJTb2Z0d2FyZUFwcGxpY2F0aW9uIixuYW1lOmUubmFtZSxkZXNjcmlwdGlvbjplLmRlc2NyaXB0aW9uLG9wZXJhdGluZ1N5c3RlbTplLm9zLGFwcGxpY2F0aW9uQ2F0ZWdvcnk6ZS5jYXRlZ29yeSxvZmZlcnM6eyJAdHlwZSI6Ik9mZmVyIixuYW1lOiJVc2VyLWJhc2VkIFBsYW4iLHByaWNlU3BlY2lmaWNhdGlvbjp7IkB0eXBlIjoiUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb24iLHZhbHVlTmFtZToiTnVtYmVyIG9mIFVzZXJzIix2YWx1ZVJlcXVpcmVkOiEwLHByaWNlOiI0Ljk5IixwcmljZUN1cnJlbmN5OiJFVVIifX0scHVibGlzaGVyOnI/dGhpcy5jcmVhdGVDb21wYW55SnNvbkxkKHIpLmVsZW1lbnRSZWYudGV4dENvbnRlbnQ6dm9pZCAwLHNjcmVlbnNob3Q6Imh0dHBzOi8vd3d3LnNvY2lhbC5pby9zY3JlZW5zaG90LnBuZyIsdXJsOiJodHRwczovL3d3dy5zb2NpYWwuaW8vIn07cmV0dXJuIG5ldyB0KG4pfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCk7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7ci50eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIixyLnRleHQ9SlNPTi5zdHJpbmdpZnkoZSksdGhpcy5lbGVtZW50UmVmPXJ9fTt2YXIgQXQ9Y2xhc3MgdCBleHRlbmRzIGppe3N0YXRpY3tvKHRoaXMsIk9wZW5ncmFwaFRhZyIpfXN0YXRpYyBjcmVhdGVOZXdzQXJ0aWNsZU9nVGFncyhlKXtsZXQgcj1bXTtyZXR1cm4gci5wdXNoKG5ldyB0KCJvZzp1cmwiLGUudXJsPz9nbG9iYWxUaGlzLmxvY2F0aW9uLmhyZWYpKSxyLnB1c2gobmV3IHQoIm9nOnRpdGxlIixlLnRpdGxlKSksci5wdXNoKG5ldyB0KCJvZzpkZXNjcmlwdGlvbiIsZS5jb250ZW50KSksci5wdXNoKG5ldyB0KCJvZzppbWFnZSIsZS5mZWF0dXJlZEltYWdlVXJsPz8iIikpLHJ9c3RhdGljIGNyZWF0ZVByb2R1Y3RPZ1RhZ3MoZSl7bGV0IHI9W107cmV0dXJuIHIucHVzaChuZXcgdCgib2c6dHlwZSIsInByb2R1Y3QiKSksci5wdXNoKG5ldyB0KCJvZzp1cmwiLGdsb2JhbFRoaXMubG9jYXRpb24uaHJlZikpLHIucHVzaChuZXcgdCgib2c6dGl0bGUiLGAke2UubmFtZX0gLSAke2Uuc2xvZ2FufWApKSxyLnB1c2gobmV3IHQoIm9nOnNpdGVfbmFtZSIsZS5uYW1lKSksci5wdXNoKG5ldyB0KCJvZzpkZXNjcmlwdGlvbiIsZS5kZXNjcmlwdGlvbikpLHIucHVzaChuZXcgdCgib2c6aW1hZ2UiLGUubG9nb0xpbmspKSxyfXN0YXRpYyBjcmVhdGVDb21wYW55T2dUYWdzKGUpe2xldCByPVtdO3JldHVybiByLnB1c2gobmV3IHQoIm9nOnR5cGUiLCJjb21wYW55IikpLHIucHVzaChuZXcgdCgib2c6dXJsIixnbG9iYWxUaGlzLmxvY2F0aW9uLmhyZWYpKSxyLnB1c2gobmV3IHQoIm9nOnRpdGxlIixlLm5hbWUpKSxyLnB1c2gobmV3IHQoIm9nOnNpdGVfbmFtZSIsZS5uYW1lKSksci5wdXNoKG5ldyB0KCJvZzpkZXNjcmlwdGlvbiIsZS5kZXNjcmlwdGlvbikpLHIucHVzaChuZXcgdCgib2c6aW1hZ2UiLGUubG9nb1VybD8/IiIpKSxyfWNvbnN0cnVjdG9yKGUscil7c3VwZXIoKTtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJtZXRhIik7bi5zZXRBdHRyaWJ1dGUoInByb3BlcnR5IixlKSxuLmNvbnRlbnQ9cix0aGlzLmVsZW1lbnRSZWY9bn19O3ZhciBqYT1jbGFzc3tzdGF0aWN7byh0aGlzLCJUYWdMZXZlbCIpfXNldCB0aXRsZShlKXt0aGlzLnRpdGxlU3RvcmU9ZSx0aGlzLnN0YXRlPT09ImVuYWJsZWQiJiYoZG9jdW1lbnQudGl0bGU9dGhpcy50aXRsZVN0b3JlKX1nZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy50aXRsZVN0b3JlfWNvbnN0cnVjdG9yKGUscil7dGhpcy50YWdzPVtdLHRoaXMuc3RhdGU9ImRpc2FibGVkIix0aGlzLnRhZ01hbmFnZXJSZWY9ZSx0aGlzLnR5cGU9cn1hZGRUYWcoZSl7aWYoZSBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgciBvZiBlKXRoaXMuYWRkVGFnKHIpO2Vsc2UgdGhpcy50YWdzLnB1c2goZSksdGhpcy5zdGF0ZT09PSJlbmFibGVkIiYmZS5hcHBlbmRUb0RvbSgpfWFzeW5jIGFkZENvbXBhbnlJbmZvKGUpe3RoaXMuYWRkVGFnKEpvLmNyZWF0ZUNvbXBhbnlKc29uTGQoZSkpLHRoaXMuYWRkVGFnKG5ldyBBdCgib2c6dHlwZSIsImJ1c2luZXNzLmJ1c2luZXNzIikpLHRoaXMuYWRkVGFnKG5ldyBBdCgib2c6dGl0bGUiLGUubmFtZSkpLHRoaXMuYWRkVGFnKG5ldyBBdCgib2c6dXJsIixlLndlYnNpdGU/PyIiKSksdGhpcy5hZGRUYWcobmV3IEF0KCJvZzppbWFnZSIsZS5sb2dvVXJsPz8iIikpLHRoaXMuYWRkVGFnKG5ldyBBdCgiYnVzaW5lc3M6Y29udGFjdF9kYXRhOnN0cmVldF9hZGRyZXNzIixgJHtlLmFkZHJlc3Muc3RyZWV0TmFtZX0gJHtlLmFkZHJlc3MuaG91c2VOdW1iZXJ9YCkpLHRoaXMuYWRkVGFnKG5ldyBBdCgiYnVzaW5lc3M6Y29udGFjdF9kYXRhOmxvY2FsaXR5IixlLmFkZHJlc3MucG9zdGFsQ29kZSkpLHRoaXMuYWRkVGFnKG5ldyBBdCgiYnVzaW5lc3M6Y29udGFjdF9kYXRhOnJlZ2lvbiIsZS5hZGRyZXNzLmNpdHkpKSx0aGlzLmFkZFRhZyhuZXcgQXQoImJ1c2luZXNzOmNvbnRhY3RfZGF0YTpwb3N0YWxfY29kZSIsZS5hZGRyZXNzLnBvc3RhbENvZGUpKSx0aGlzLmFkZFRhZyhuZXcgQXQoImJ1c2luZXNzOmNvbnRhY3RfZGF0YTpjb3VudHJ5X25hbWUiLGUuYWRkcmVzcy5jb3VudHJ5KSl9YWRkTmV3c0FydGljbGVJbmZvKGUpe3RoaXMuYWRkVGFnKEpvLmNyZWF0ZU5ld3NBcnRpY2xlSnNvbkxkKGUpKSx0aGlzLmFkZFRhZyhBdC5jcmVhdGVOZXdzQXJ0aWNsZU9nVGFncyhlKSl9YWRkUHJvZHVjdEluZm8oZSxyKXt0aGlzLmFkZFRhZyhKby5jcmVhdGVQcm9kdWN0SnNvbkxkKGUscikpLHRoaXMuYWRkVGFnKEF0LmNyZWF0ZVByb2R1Y3RPZ1RhZ3MoZSkpfWFzeW5jIGVuYWJsZSgpe3RoaXMudGl0bGUmJihkb2N1bWVudC50aXRsZT10aGlzLnRpdGxlKTtmb3IobGV0IGUgb2YgdGhpcy50YWdzKWUuYXBwZW5kVG9Eb20oKTt0aGlzLnN0YXRlPSJlbmFibGVkIn1hc3luYyBkaXNhYmxlKCl7Zm9yKGxldCBlIG9mIHRoaXMudGFncyllLnJlbW92ZUZyb21Eb20oKTt0aGlzLnN0YXRlPSJkaXNhYmxlZCJ9fTt2YXIgTXI9Y2xhc3MgZXh0ZW5kcyBqaXtzdGF0aWN7byh0aGlzLCJNZXRhVGFnIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpO2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKTtuLm5hbWU9ZSxuLmNvbnRlbnQ9cix0aGlzLmVsZW1lbnRSZWY9bn19O3ZhciBRZD1jbGFzc3tzdGF0aWN7byh0aGlzLCJUYWdNYW5hZ2VyIil9Y29uc3RydWN0b3IoKXt0aGlzLmdsb2JhbExldmVsPW5ldyBqYSh0aGlzLCJnbG9iYWwiKSx0aGlzLmJhc2VMZXZlbD1uZXcgamEodGhpcywiYmFzZSIpfWFzeW5jIHNldHVwKGUpe3N3aXRjaCh0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTXIoImdvb2dsZSIsIm5vdHJhbnNsYXRlIikpLHRoaXMuZ2xvYmFsTGV2ZWwuYWRkVGFnKG5ldyBNcigicmV2aXNpdC1hZnRlciIsIjEgZGF5cyIpKSxlLnR3aXR0ZXJIYW5kbGUmJih0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTXIoInR3aXR0ZXI6Y2FyZCIsInN1bW1hcnlfbGFyZ2VfaW1hZ2UiKSksdGhpcy5nbG9iYWxMZXZlbC5hZGRUYWcobmV3IE1yKCJ0d2l0dGVyOnNpdGUiLGUudHdpdHRlckhhbmRsZSkpLHRoaXMuZ2xvYmFsTGV2ZWwuYWRkVGFnKG5ldyBNcigidHdpdHRlcjpjcmVhdG9yIixlLnR3aXR0ZXJIYW5kbGUpKSksdGhpcy5iYXNlTGV2ZWwudGl0bGU9ZS50aXRsZSxlLmRlc2NyaXB0aW9uJiZ0aGlzLmJhc2VMZXZlbC5hZGRUYWcobmV3IE1yKCJkZXNjcmlwdGlvbiIsZS5kZXNjcmlwdGlvbikpLGUuY2Fub25pY2FsRG9tYWluJiZ0aGlzLmJhc2VMZXZlbC5hZGRUYWcobmV3IE1yKCJjYW5vbmljYWwiLGUuY2Fub25pY2FsRG9tYWluKSksITApe2Nhc2UoZS5sZENvbXBhbnkmJiFlLmxkUHJvZHVjdCk6dGhpcy5iYXNlTGV2ZWwuYWRkQ29tcGFueUluZm8oZS5sZENvbXBhbnkpO2JyZWFrO2Nhc2UhIWUubGRQcm9kdWN0OnRoaXMuYmFzZUxldmVsLmFkZFByb2R1Y3RJbmZvKGUubGRQcm9kdWN0LGUubGRDb21wYW55KTticmVha31hd2FpdCB0aGlzLmdsb2JhbExldmVsLmVuYWJsZSgpLHRoaXMuYWN0aXZlTGV2ZWw9dGhpcy5iYXNlTGV2ZWwsYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5lbmFibGUoKX1hc3luYyBzZXRTdWJQYWdlTGV2ZWwoZSl7bGV0IHI9bmV3IGphKHRoaXMsInN1YnBhZ2UiKTtyZXR1cm4gci50aXRsZT1lLnRpdGxlLGUuZGVzY3JpcHRpb24mJnIuYWRkVGFnKG5ldyBNcigiZGVzY3JpcHRpb24iLGUuZGVzY3JpcHRpb24pKSxhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmRpc2FibGUoKSx0aGlzLmFjdGl2ZUxldmVsPXIsYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5lbmFibGUoKSxyfWFzeW5jIHJldmVydFRvQmFzZUxldmVsKCl7dGhpcy5hY3RpdmVMZXZlbCE9PXRoaXMuYmFzZUxldmVsJiYoYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5kaXNhYmxlKCksdGhpcy5hY3RpdmVMZXZlbD10aGlzLmJhc2VMZXZlbCxhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmVuYWJsZSgpKX19O3ZhciBHYz1jbGFzc3tzdGF0aWN7byh0aGlzLCJXZWJTZXR1cCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudGFnTWFuYWdlcj1uZXcgUWQsdGhpcy5yZWFkeURlZmVycmVkPVouZGVmZXIoKSx0aGlzLnJlYWR5Rm9yU21hcnRzc3JEZWZlcnJlZD1aLmRlZmVyKCksdGhpcy5yZWFkeVByb21pc2U9dGhpcy5yZWFkeURlZmVycmVkLnByb21pc2UsdGhpcy5yZWFkeUZvclNtYXJ0c3NyUHJvbWlzZT10aGlzLnJlYWR5Rm9yU21hcnRzc3JEZWZlcnJlZC5wcm9taXNlLHRoaXMub3B0aW9ucz1lLHRoaXMuc2V0dXAoKS50aGVuKCgpPT57dGhpcy5yZWFkeURlZmVycmVkLnJlc29sdmUoKSx0aGlzLm9wdGlvbnMuc21hcnRzc3JXYWl0Rm9yUmVhZHlTaWduYWx8fHRoaXMucmVhZHlGb3JTbWFydHNzckRlZmVycmVkLnJlc29sdmUoKX0pfWFzeW5jIHNldHVwKGUpe2UmJih0aGlzLm9wdGlvbnM9ZSksYXdhaXQgdGhpcy50YWdNYW5hZ2VyLnNldHVwKHRoaXMub3B0aW9ucy5tZXRhT2JqZWN0KX1yZXZlcnRUb0Jhc2VMZXZlbCgpe3RoaXMudGFnTWFuYWdlci5yZXZlcnRUb0Jhc2VMZXZlbCgpfWFzeW5jIHNldFN1YkxldmVsKGUpe3JldHVybiBhd2FpdCB0aGlzLnRhZ01hbmFnZXIuc2V0U3ViUGFnZUxldmVsKGUpfWZsYXNoVGl0bGUoZSl7fWluZm9ybVJlYWR5Rm9yU21hcnRzc3IoKXt0aGlzLm9wdGlvbnMuc21hcnRzc3JXYWl0Rm9yUmVhZHlTaWduYWx8fGNvbnNvbGUuZXJyb3IoIllvdSBoYXZlIG5vdCBpbmRpY2F0ZWQgdGhhdCB5b3UgaW5mb3JtIHNtYXJ0c3NyIGJ5IGEgZGVkaWNhdGVkIHNpZ25hbCEgUGxlYXNlIGNvbnNpZGVyIGRvaW5nIHNvISIpLHRoaXMucmVhZHlGb3JTbWFydHNzckRlZmVycmVkLnJlc29sdmUoKX19O3ZhciBGdz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUaXRsZSIpfX07dmFyIEZqPSIxLjMuMTciO2Z1bmN0aW9uIGZPKHQsZSxyKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihlLHIpKX1vKGZPLCJjbGFtcCIpO2Z1bmN0aW9uIEFqKHQsZSxyKXtyZXR1cm4oMS1yKSp0K3IqZX1vKEFqLCJsZXJwIik7ZnVuY3Rpb24gJGoodCxlLHIsbil7cmV0dXJuIEFqKHQsZSwxLU1hdGguZXhwKC1yKm4pKX1vKCRqLCJkYW1wIik7ZnVuY3Rpb24gQmoodCxlKXtyZXR1cm4odCVlK2UpJWV9byhCaiwibW9kdWxvIik7dmFyIHpqPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFuaW1hdGUiKX1pc1J1bm5pbmc9ITE7dmFsdWU9MDtmcm9tPTA7dG89MDtjdXJyZW50VGltZT0wO2xlcnA7ZHVyYXRpb247ZWFzaW5nO29uVXBkYXRlO2FkdmFuY2UodCl7aWYoIXRoaXMuaXNSdW5uaW5nKXJldHVybjtsZXQgZT0hMTtpZih0aGlzLmR1cmF0aW9uJiZ0aGlzLmVhc2luZyl7dGhpcy5jdXJyZW50VGltZSs9dDtsZXQgcj1mTygwLHRoaXMuY3VycmVudFRpbWUvdGhpcy5kdXJhdGlvbiwxKTtlPXI+PTE7bGV0IG49ZT8xOnRoaXMuZWFzaW5nKHIpO3RoaXMudmFsdWU9dGhpcy5mcm9tKyh0aGlzLnRvLXRoaXMuZnJvbSkqbn1lbHNlIHRoaXMubGVycD8odGhpcy52YWx1ZT0kaih0aGlzLnZhbHVlLHRoaXMudG8sdGhpcy5sZXJwKjYwLHQpLE1hdGgucm91bmQodGhpcy52YWx1ZSk9PT10aGlzLnRvJiYodGhpcy52YWx1ZT10aGlzLnRvLGU9ITApKToodGhpcy52YWx1ZT10aGlzLnRvLGU9ITApO2UmJnRoaXMuc3RvcCgpLHRoaXMub25VcGRhdGU/Lih0aGlzLnZhbHVlLGUpfXN0b3AoKXt0aGlzLmlzUnVubmluZz0hMX1mcm9tVG8odCxlLHtsZXJwOnIsZHVyYXRpb246bixlYXNpbmc6aSxvblN0YXJ0OnMsb25VcGRhdGU6YX0pe3RoaXMuZnJvbT10aGlzLnZhbHVlPXQsdGhpcy50bz1lLHRoaXMubGVycD1yLHRoaXMuZHVyYXRpb249bix0aGlzLmVhc2luZz1pLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLmlzUnVubmluZz0hMCxzPy4oKSx0aGlzLm9uVXBkYXRlPWF9fTtmdW5jdGlvbiBIaih0LGUpe2xldCByO3JldHVybiBmdW5jdGlvbiguLi5uKXtsZXQgaT10aGlzO2NsZWFyVGltZW91dChyKSxyPXNldFRpbWVvdXQoKCk9PntyPXZvaWQgMCx0LmFwcGx5KGksbil9LGUpfX1vKEhqLCJkZWJvdW5jZSIpO3ZhciBqaj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEaW1lbnNpb25zIil9Y29uc3RydWN0b3IodCxlLHthdXRvUmVzaXplOnI9ITAsZGVib3VuY2U6bj0yNTB9PXt9KXt0aGlzLndyYXBwZXI9dCx0aGlzLmNvbnRlbnQ9ZSxyJiYodGhpcy5kZWJvdW5jZWRSZXNpemU9SGoodGhpcy5yZXNpemUsbiksdGhpcy53cmFwcGVyIGluc3RhbmNlb2YgV2luZG93P3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuZGVib3VuY2VkUmVzaXplLCExKToodGhpcy53cmFwcGVyUmVzaXplT2JzZXJ2ZXI9bmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuZGVib3VuY2VkUmVzaXplKSx0aGlzLndyYXBwZXJSZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMud3JhcHBlcikpLHRoaXMuY29udGVudFJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcih0aGlzLmRlYm91bmNlZFJlc2l6ZSksdGhpcy5jb250ZW50UmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNvbnRlbnQpKSx0aGlzLnJlc2l6ZSgpfXdpZHRoPTA7aGVpZ2h0PTA7c2Nyb2xsSGVpZ2h0PTA7c2Nyb2xsV2lkdGg9MDtkZWJvdW5jZWRSZXNpemU7d3JhcHBlclJlc2l6ZU9ic2VydmVyO2NvbnRlbnRSZXNpemVPYnNlcnZlcjtkZXN0cm95KCl7dGhpcy53cmFwcGVyUmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKSx0aGlzLmNvbnRlbnRSZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpLHRoaXMud3JhcHBlcj09PXdpbmRvdyYmdGhpcy5kZWJvdW5jZWRSZXNpemUmJndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuZGVib3VuY2VkUmVzaXplLCExKX1yZXNpemU9bygoKT0+e3RoaXMub25XcmFwcGVyUmVzaXplKCksdGhpcy5vbkNvbnRlbnRSZXNpemUoKX0sInJlc2l6ZSIpO29uV3JhcHBlclJlc2l6ZT1vKCgpPT57dGhpcy53cmFwcGVyIGluc3RhbmNlb2YgV2luZG93Pyh0aGlzLndpZHRoPXdpbmRvdy5pbm5lcldpZHRoLHRoaXMuaGVpZ2h0PXdpbmRvdy5pbm5lckhlaWdodCk6KHRoaXMud2lkdGg9dGhpcy53cmFwcGVyLmNsaWVudFdpZHRoLHRoaXMuaGVpZ2h0PXRoaXMud3JhcHBlci5jbGllbnRIZWlnaHQpfSwib25XcmFwcGVyUmVzaXplIik7b25Db250ZW50UmVzaXplPW8oKCk9Pnt0aGlzLndyYXBwZXIgaW5zdGFuY2VvZiBXaW5kb3c/KHRoaXMuc2Nyb2xsSGVpZ2h0PXRoaXMuY29udGVudC5zY3JvbGxIZWlnaHQsdGhpcy5zY3JvbGxXaWR0aD10aGlzLmNvbnRlbnQuc2Nyb2xsV2lkdGgpOih0aGlzLnNjcm9sbEhlaWdodD10aGlzLndyYXBwZXIuc2Nyb2xsSGVpZ2h0LHRoaXMuc2Nyb2xsV2lkdGg9dGhpcy53cmFwcGVyLnNjcm9sbFdpZHRoKX0sIm9uQ29udGVudFJlc2l6ZSIpO2dldCBsaW1pdCgpe3JldHVybnt4OnRoaXMuc2Nyb2xsV2lkdGgtdGhpcy53aWR0aCx5OnRoaXMuc2Nyb2xsSGVpZ2h0LXRoaXMuaGVpZ2h0fX19LHBPPWNsYXNze3N0YXRpY3tvKHRoaXMsIkVtaXR0ZXIiKX1ldmVudHM9e307ZW1pdCh0LC4uLmUpe2xldCByPXRoaXMuZXZlbnRzW3RdfHxbXTtmb3IobGV0IG49MCxpPXIubGVuZ3RoO248aTtuKyspcltuXT8uKC4uLmUpfW9uKHQsZSl7cmV0dXJuIHRoaXMuZXZlbnRzW3RdPy5wdXNoKGUpfHwodGhpcy5ldmVudHNbdF09W2VdKSwoKT0+e3RoaXMuZXZlbnRzW3RdPXRoaXMuZXZlbnRzW3RdPy5maWx0ZXIocj0+ZSE9PXIpfX1vZmYodCxlKXt0aGlzLmV2ZW50c1t0XT10aGlzLmV2ZW50c1t0XT8uZmlsdGVyKHI9PmUhPT1yKX1kZXN0cm95KCl7dGhpcy5ldmVudHM9e319fSxoTz0xMDAvNixXaT17cGFzc2l2ZTohMX0sV2o9Y2xhc3N7c3RhdGlje28odGhpcywiVmlydHVhbFNjcm9sbCIpfWNvbnN0cnVjdG9yKHQsZT17d2hlZWxNdWx0aXBsaWVyOjEsdG91Y2hNdWx0aXBsaWVyOjF9KXt0aGlzLmVsZW1lbnQ9dCx0aGlzLm9wdGlvbnM9ZSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLm9uV2luZG93UmVzaXplLCExKSx0aGlzLm9uV2luZG93UmVzaXplKCksdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIix0aGlzLm9uV2hlZWwsV2kpLHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLm9uVG91Y2hTdGFydCxXaSksdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5vblRvdWNoTW92ZSxXaSksdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLm9uVG91Y2hFbmQsV2kpfXRvdWNoU3RhcnQ9e3g6MCx5OjB9O2xhc3REZWx0YT17eDowLHk6MH07d2luZG93PXt3aWR0aDowLGhlaWdodDowfTtlbWl0dGVyPW5ldyBwTztvbih0LGUpe3JldHVybiB0aGlzLmVtaXR0ZXIub24odCxlKX1kZXN0cm95KCl7dGhpcy5lbWl0dGVyLmRlc3Ryb3koKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLm9uV2luZG93UmVzaXplLCExKSx0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMub25XaGVlbCxXaSksdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMub25Ub3VjaFN0YXJ0LFdpKSx0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLm9uVG91Y2hNb3ZlLFdpKSx0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMub25Ub3VjaEVuZCxXaSl9b25Ub3VjaFN0YXJ0PW8odD0+e2xldHtjbGllbnRYOmUsY2xpZW50WTpyfT10LnRhcmdldFRvdWNoZXM/dC50YXJnZXRUb3VjaGVzWzBdOnQ7dGhpcy50b3VjaFN0YXJ0Lng9ZSx0aGlzLnRvdWNoU3RhcnQueT1yLHRoaXMubGFzdERlbHRhPXt4OjAseTowfSx0aGlzLmVtaXR0ZXIuZW1pdCgic2Nyb2xsIix7ZGVsdGFYOjAsZGVsdGFZOjAsZXZlbnQ6dH0pfSwib25Ub3VjaFN0YXJ0Iik7b25Ub3VjaE1vdmU9byh0PT57bGV0e2NsaWVudFg6ZSxjbGllbnRZOnJ9PXQudGFyZ2V0VG91Y2hlcz90LnRhcmdldFRvdWNoZXNbMF06dCxuPS0oZS10aGlzLnRvdWNoU3RhcnQueCkqdGhpcy5vcHRpb25zLnRvdWNoTXVsdGlwbGllcixpPS0oci10aGlzLnRvdWNoU3RhcnQueSkqdGhpcy5vcHRpb25zLnRvdWNoTXVsdGlwbGllcjt0aGlzLnRvdWNoU3RhcnQueD1lLHRoaXMudG91Y2hTdGFydC55PXIsdGhpcy5sYXN0RGVsdGE9e3g6bix5Oml9LHRoaXMuZW1pdHRlci5lbWl0KCJzY3JvbGwiLHtkZWx0YVg6bixkZWx0YVk6aSxldmVudDp0fSl9LCJvblRvdWNoTW92ZSIpO29uVG91Y2hFbmQ9byh0PT57dGhpcy5lbWl0dGVyLmVtaXQoInNjcm9sbCIse2RlbHRhWDp0aGlzLmxhc3REZWx0YS54LGRlbHRhWTp0aGlzLmxhc3REZWx0YS55LGV2ZW50OnR9KX0sIm9uVG91Y2hFbmQiKTtvbldoZWVsPW8odD0+e2xldHtkZWx0YVg6ZSxkZWx0YVk6cixkZWx0YU1vZGU6bn09dCxpPW49PT0xP2hPOm49PT0yP3RoaXMud2luZG93LndpZHRoOjEscz1uPT09MT9oTzpuPT09Mj90aGlzLndpbmRvdy5oZWlnaHQ6MTtlKj1pLHIqPXMsZSo9dGhpcy5vcHRpb25zLndoZWVsTXVsdGlwbGllcixyKj10aGlzLm9wdGlvbnMud2hlZWxNdWx0aXBsaWVyLHRoaXMuZW1pdHRlci5lbWl0KCJzY3JvbGwiLHtkZWx0YVg6ZSxkZWx0YVk6cixldmVudDp0fSl9LCJvbldoZWVsIik7b25XaW5kb3dSZXNpemU9bygoKT0+e3RoaXMud2luZG93PXt3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0fX0sIm9uV2luZG93UmVzaXplIil9LGRPPW8odD0+TWF0aC5taW4oMSwxLjAwMS1NYXRoLnBvdygyLC0xMCp0KSksImRlZmF1bHRFYXNpbmciKSxRYz1jbGFzc3tzdGF0aWN7byh0aGlzLCJMZW5pcyIpfV9pc1Njcm9sbGluZz0hMTtfaXNTdG9wcGVkPSExO19pc0xvY2tlZD0hMTtfcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudD0hMTtfcmVzZXRWZWxvY2l0eVRpbWVvdXQ9bnVsbDtfcmFmSWQ9bnVsbDtpc1RvdWNoaW5nO3RpbWU9MDt1c2VyRGF0YT17fTtsYXN0VmVsb2NpdHk9MDt2ZWxvY2l0eT0wO2RpcmVjdGlvbj0wO29wdGlvbnM7dGFyZ2V0U2Nyb2xsO2FuaW1hdGVkU2Nyb2xsO2FuaW1hdGU9bmV3IHpqO2VtaXR0ZXI9bmV3IHBPO2RpbWVuc2lvbnM7dmlydHVhbFNjcm9sbDtjb25zdHJ1Y3Rvcih7d3JhcHBlcjp0PXdpbmRvdyxjb250ZW50OmU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGV2ZW50c1RhcmdldDpyPXQsc21vb3RoV2hlZWw6bj0hMCxzeW5jVG91Y2g6aT0hMSxzeW5jVG91Y2hMZXJwOnM9LjA3NSx0b3VjaEluZXJ0aWFFeHBvbmVudDphPTEuNyxkdXJhdGlvbjpsLGVhc2luZzpjLGxlcnA6dT0uMSxpbmZpbml0ZTpmPSExLG9yaWVudGF0aW9uOnA9InZlcnRpY2FsIixnZXN0dXJlT3JpZW50YXRpb246aD1wPT09Imhvcml6b250YWwiPyJib3RoIjoidmVydGljYWwiLHRvdWNoTXVsdGlwbGllcjpkPTEsd2hlZWxNdWx0aXBsaWVyOm09MSxhdXRvUmVzaXplOmc9ITAscHJldmVudDp5LHZpcnR1YWxTY3JvbGw6eCxvdmVyc2Nyb2xsOms9ITAsYXV0b1JhZjpUPSExLGFuY2hvcnM6Uj0hMSxhdXRvVG9nZ2xlOl89ITEsYWxsb3dOZXN0ZWRTY3JvbGw6RT0hMSxfX2V4cGVyaW1lbnRhbF9fbmFpdmVEaW1lbnNpb25zOkE9ITEsbmFpdmVEaW1lbnNpb25zOkY9QSxzdG9wSW5lcnRpYU9uTmF2aWdhdGU6VT0hMX09e30pe3dpbmRvdy5sZW5pc1ZlcnNpb249RmosKCF0fHx0PT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSYmKHQ9d2luZG93KSx0eXBlb2YgbD09Im51bWJlciImJnR5cGVvZiBjIT0iZnVuY3Rpb24iP2M9ZE86dHlwZW9mIGM9PSJmdW5jdGlvbiImJnR5cGVvZiBsIT0ibnVtYmVyIiYmKGw9MSksdGhpcy5vcHRpb25zPXt3cmFwcGVyOnQsY29udGVudDplLGV2ZW50c1RhcmdldDpyLHNtb290aFdoZWVsOm4sc3luY1RvdWNoOmksc3luY1RvdWNoTGVycDpzLHRvdWNoSW5lcnRpYUV4cG9uZW50OmEsZHVyYXRpb246bCxlYXNpbmc6YyxsZXJwOnUsaW5maW5pdGU6ZixnZXN0dXJlT3JpZW50YXRpb246aCxvcmllbnRhdGlvbjpwLHRvdWNoTXVsdGlwbGllcjpkLHdoZWVsTXVsdGlwbGllcjptLGF1dG9SZXNpemU6ZyxwcmV2ZW50OnksdmlydHVhbFNjcm9sbDp4LG92ZXJzY3JvbGw6ayxhdXRvUmFmOlQsYW5jaG9yczpSLGF1dG9Ub2dnbGU6XyxhbGxvd05lc3RlZFNjcm9sbDpFLG5haXZlRGltZW5zaW9uczpGLHN0b3BJbmVydGlhT25OYXZpZ2F0ZTpVfSx0aGlzLmRpbWVuc2lvbnM9bmV3IGpqKHQsZSx7YXV0b1Jlc2l6ZTpnfSksdGhpcy51cGRhdGVDbGFzc05hbWUoKSx0aGlzLnRhcmdldFNjcm9sbD10aGlzLmFuaW1hdGVkU2Nyb2xsPXRoaXMuYWN0dWFsU2Nyb2xsLHRoaXMub3B0aW9ucy53cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5vbk5hdGl2ZVNjcm9sbCwhMSksdGhpcy5vcHRpb25zLndyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsZW5kIix0aGlzLm9uU2Nyb2xsRW5kLHtjYXB0dXJlOiEwfSksKHRoaXMub3B0aW9ucy5hbmNob3JzfHx0aGlzLm9wdGlvbnMuc3RvcEluZXJ0aWFPbk5hdmlnYXRlKSYmdGhpcy5vcHRpb25zLndyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMub25DbGljaywhMSksdGhpcy5vcHRpb25zLndyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMub25Qb2ludGVyRG93biwhMSksdGhpcy52aXJ0dWFsU2Nyb2xsPW5ldyBXaihyLHt0b3VjaE11bHRpcGxpZXI6ZCx3aGVlbE11bHRpcGxpZXI6bX0pLHRoaXMudmlydHVhbFNjcm9sbC5vbigic2Nyb2xsIix0aGlzLm9uVmlydHVhbFNjcm9sbCksdGhpcy5vcHRpb25zLmF1dG9Ub2dnbGUmJih0aGlzLmNoZWNrT3ZlcmZsb3coKSx0aGlzLnJvb3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHRoaXMub25UcmFuc2l0aW9uRW5kLHtwYXNzaXZlOiEwfSkpLHRoaXMub3B0aW9ucy5hdXRvUmFmJiYodGhpcy5fcmFmSWQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmFmKSl9ZGVzdHJveSgpe3RoaXMuZW1pdHRlci5kZXN0cm95KCksdGhpcy5vcHRpb25zLndyYXBwZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLm9uTmF0aXZlU2Nyb2xsLCExKSx0aGlzLm9wdGlvbnMud3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGxlbmQiLHRoaXMub25TY3JvbGxFbmQse2NhcHR1cmU6ITB9KSx0aGlzLm9wdGlvbnMud3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsdGhpcy5vblBvaW50ZXJEb3duLCExKSwodGhpcy5vcHRpb25zLmFuY2hvcnN8fHRoaXMub3B0aW9ucy5zdG9wSW5lcnRpYU9uTmF2aWdhdGUpJiZ0aGlzLm9wdGlvbnMud3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5vbkNsaWNrLCExKSx0aGlzLnZpcnR1YWxTY3JvbGwuZGVzdHJveSgpLHRoaXMuZGltZW5zaW9ucy5kZXN0cm95KCksdGhpcy5jbGVhblVwQ2xhc3NOYW1lKCksdGhpcy5fcmFmSWQmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JhZklkKX1vbih0LGUpe3JldHVybiB0aGlzLmVtaXR0ZXIub24odCxlKX1vZmYodCxlKXtyZXR1cm4gdGhpcy5lbWl0dGVyLm9mZih0LGUpfW9uU2Nyb2xsRW5kPW8odD0+e3QgaW5zdGFuY2VvZiBDdXN0b21FdmVudHx8KHRoaXMuaXNTY3JvbGxpbmc9PT0ic21vb3RoInx8dGhpcy5pc1Njcm9sbGluZz09PSExKSYmdC5zdG9wUHJvcGFnYXRpb24oKX0sIm9uU2Nyb2xsRW5kIik7ZGlzcGF0Y2hTY3JvbGxlbmRFdmVudD1vKCgpPT57dGhpcy5vcHRpb25zLndyYXBwZXIuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNjcm9sbGVuZCIse2J1YmJsZXM6dGhpcy5vcHRpb25zLndyYXBwZXI9PT13aW5kb3csZGV0YWlsOntsZW5pc1Njcm9sbEVuZDohMH19KSl9LCJkaXNwYXRjaFNjcm9sbGVuZEV2ZW50Iik7Z2V0IG92ZXJmbG93KCl7bGV0IHQ9dGhpcy5pc0hvcml6b250YWw/Im92ZXJmbG93LXgiOiJvdmVyZmxvdy15IjtyZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJvb3RFbGVtZW50KVt0XX1jaGVja092ZXJmbG93KCl7WyJoaWRkZW4iLCJjbGlwIl0uaW5jbHVkZXModGhpcy5vdmVyZmxvdyk/dGhpcy5pbnRlcm5hbFN0b3AoKTp0aGlzLmludGVybmFsU3RhcnQoKX1vblRyYW5zaXRpb25FbmQ9byh0PT57dC5wcm9wZXJ0eU5hbWUuaW5jbHVkZXMoIm92ZXJmbG93IikmJnRoaXMuY2hlY2tPdmVyZmxvdygpfSwib25UcmFuc2l0aW9uRW5kIik7c2V0U2Nyb2xsKHQpe3RoaXMuaXNIb3Jpem9udGFsP3RoaXMub3B0aW9ucy53cmFwcGVyLnNjcm9sbFRvKHtsZWZ0OnQsYmVoYXZpb3I6Imluc3RhbnQifSk6dGhpcy5vcHRpb25zLndyYXBwZXIuc2Nyb2xsVG8oe3RvcDp0LGJlaGF2aW9yOiJpbnN0YW50In0pfW9uQ2xpY2s9byh0PT57bGV0IHI9dC5jb21wb3NlZFBhdGgoKS5maWx0ZXIobj0+biBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50JiZuLmdldEF0dHJpYnV0ZSgiaHJlZiIpKTtpZih0aGlzLm9wdGlvbnMuYW5jaG9ycyl7bGV0IG49ci5maW5kKGk9PmkuZ2V0QXR0cmlidXRlKCJocmVmIik/LmluY2x1ZGVzKCIjIikpO2lmKG4pe2xldCBpPW4uZ2V0QXR0cmlidXRlKCJocmVmIik7aWYoaSl7bGV0IHM9dHlwZW9mIHRoaXMub3B0aW9ucy5hbmNob3JzPT0ib2JqZWN0IiYmdGhpcy5vcHRpb25zLmFuY2hvcnM/dGhpcy5vcHRpb25zLmFuY2hvcnM6dm9pZCAwLGE9YCMke2kuc3BsaXQoIiMiKVsxXX1gO3RoaXMuc2Nyb2xsVG8oYSxzKX19fXRoaXMub3B0aW9ucy5zdG9wSW5lcnRpYU9uTmF2aWdhdGUmJnIuZmluZChpPT5pLmhvc3Q9PT13aW5kb3cubG9jYXRpb24uaG9zdCkmJnRoaXMucmVzZXQoKX0sIm9uQ2xpY2siKTtvblBvaW50ZXJEb3duPW8odD0+e3QuYnV0dG9uPT09MSYmdGhpcy5yZXNldCgpfSwib25Qb2ludGVyRG93biIpO29uVmlydHVhbFNjcm9sbD1vKHQ9PntpZih0eXBlb2YgdGhpcy5vcHRpb25zLnZpcnR1YWxTY3JvbGw9PSJmdW5jdGlvbiImJnRoaXMub3B0aW9ucy52aXJ0dWFsU2Nyb2xsKHQpPT09ITEpcmV0dXJuO2xldHtkZWx0YVg6ZSxkZWx0YVk6cixldmVudDpufT10O2lmKHRoaXMuZW1pdHRlci5lbWl0KCJ2aXJ0dWFsLXNjcm9sbCIse2RlbHRhWDplLGRlbHRhWTpyLGV2ZW50Om59KSxuLmN0cmxLZXl8fG4ubGVuaXNTdG9wUHJvcGFnYXRpb24pcmV0dXJuO2xldCBpPW4udHlwZS5pbmNsdWRlcygidG91Y2giKSxzPW4udHlwZS5pbmNsdWRlcygid2hlZWwiKTt0aGlzLmlzVG91Y2hpbmc9bi50eXBlPT09InRvdWNoc3RhcnQifHxuLnR5cGU9PT0idG91Y2htb3ZlIjtsZXQgYT1lPT09MCYmcj09PTA7aWYodGhpcy5vcHRpb25zLnN5bmNUb3VjaCYmaSYmbi50eXBlPT09InRvdWNoc3RhcnQiJiZhJiYhdGhpcy5pc1N0b3BwZWQmJiF0aGlzLmlzTG9ja2VkKXt0aGlzLnJlc2V0KCk7cmV0dXJufWxldCBjPXRoaXMub3B0aW9ucy5nZXN0dXJlT3JpZW50YXRpb249PT0idmVydGljYWwiJiZyPT09MHx8dGhpcy5vcHRpb25zLmdlc3R1cmVPcmllbnRhdGlvbj09PSJob3Jpem9udGFsIiYmZT09PTA7aWYoYXx8YylyZXR1cm47bGV0IHU9bi5jb21wb3NlZFBhdGgoKTt1PXUuc2xpY2UoMCx1LmluZGV4T2YodGhpcy5yb290RWxlbWVudCkpO2xldCBmPXRoaXMub3B0aW9ucy5wcmV2ZW50O2lmKHUuZmluZCh5PT55IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJih0eXBlb2YgZj09ImZ1bmN0aW9uIiYmZj8uKHkpfHx5Lmhhc0F0dHJpYnV0ZT8uKCJkYXRhLWxlbmlzLXByZXZlbnQiKXx8aSYmeS5oYXNBdHRyaWJ1dGU/LigiZGF0YS1sZW5pcy1wcmV2ZW50LXRvdWNoIil8fHMmJnkuaGFzQXR0cmlidXRlPy4oImRhdGEtbGVuaXMtcHJldmVudC13aGVlbCIpfHx0aGlzLm9wdGlvbnMuYWxsb3dOZXN0ZWRTY3JvbGwmJnRoaXMuY2hlY2tOZXN0ZWRTY3JvbGwoeSx7ZGVsdGFYOmUsZGVsdGFZOnJ9KSkpKXJldHVybjtpZih0aGlzLmlzU3RvcHBlZHx8dGhpcy5pc0xvY2tlZCl7bi5jYW5jZWxhYmxlJiZuLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufWlmKCEodGhpcy5vcHRpb25zLnN5bmNUb3VjaCYmaXx8dGhpcy5vcHRpb25zLnNtb290aFdoZWVsJiZzKSl7dGhpcy5pc1Njcm9sbGluZz0ibmF0aXZlIix0aGlzLmFuaW1hdGUuc3RvcCgpLG4ubGVuaXNTdG9wUHJvcGFnYXRpb249ITA7cmV0dXJufWxldCBoPXI7dGhpcy5vcHRpb25zLmdlc3R1cmVPcmllbnRhdGlvbj09PSJib3RoIj9oPU1hdGguYWJzKHIpPk1hdGguYWJzKGUpP3I6ZTp0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uPT09Imhvcml6b250YWwiJiYoaD1lKSwoIXRoaXMub3B0aW9ucy5vdmVyc2Nyb2xsfHx0aGlzLm9wdGlvbnMuaW5maW5pdGV8fHRoaXMub3B0aW9ucy53cmFwcGVyIT09d2luZG93JiZ0aGlzLmxpbWl0PjAmJih0aGlzLmFuaW1hdGVkU2Nyb2xsPjAmJnRoaXMuYW5pbWF0ZWRTY3JvbGw8dGhpcy5saW1pdHx8dGhpcy5hbmltYXRlZFNjcm9sbD09PTAmJnI+MHx8dGhpcy5hbmltYXRlZFNjcm9sbD09PXRoaXMubGltaXQmJnI8MCkpJiYobi5sZW5pc1N0b3BQcm9wYWdhdGlvbj0hMCksbi5jYW5jZWxhYmxlJiZuLnByZXZlbnREZWZhdWx0KCk7bGV0IGQ9aSYmdGhpcy5vcHRpb25zLnN5bmNUb3VjaCxnPWkmJm4udHlwZT09PSJ0b3VjaGVuZCI7ZyYmKGg9TWF0aC5zaWduKHRoaXMudmVsb2NpdHkpKk1hdGgucG93KE1hdGguYWJzKHRoaXMudmVsb2NpdHkpLHRoaXMub3B0aW9ucy50b3VjaEluZXJ0aWFFeHBvbmVudCkpLHRoaXMuc2Nyb2xsVG8odGhpcy50YXJnZXRTY3JvbGwraCx7cHJvZ3JhbW1hdGljOiExLC4uLmQ/e2xlcnA6Zz90aGlzLm9wdGlvbnMuc3luY1RvdWNoTGVycDoxfTp7bGVycDp0aGlzLm9wdGlvbnMubGVycCxkdXJhdGlvbjp0aGlzLm9wdGlvbnMuZHVyYXRpb24sZWFzaW5nOnRoaXMub3B0aW9ucy5lYXNpbmd9fSl9LCJvblZpcnR1YWxTY3JvbGwiKTtyZXNpemUoKXt0aGlzLmRpbWVuc2lvbnMucmVzaXplKCksdGhpcy5hbmltYXRlZFNjcm9sbD10aGlzLnRhcmdldFNjcm9sbD10aGlzLmFjdHVhbFNjcm9sbCx0aGlzLmVtaXQoKX1lbWl0KCl7dGhpcy5lbWl0dGVyLmVtaXQoInNjcm9sbCIsdGhpcyl9b25OYXRpdmVTY3JvbGw9bygoKT0+e2lmKHRoaXMuX3Jlc2V0VmVsb2NpdHlUaW1lb3V0IT09bnVsbCYmKGNsZWFyVGltZW91dCh0aGlzLl9yZXNldFZlbG9jaXR5VGltZW91dCksdGhpcy5fcmVzZXRWZWxvY2l0eVRpbWVvdXQ9bnVsbCksdGhpcy5fcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudCl7dGhpcy5fcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudD0hMTtyZXR1cm59aWYodGhpcy5pc1Njcm9sbGluZz09PSExfHx0aGlzLmlzU2Nyb2xsaW5nPT09Im5hdGl2ZSIpe2xldCB0PXRoaXMuYW5pbWF0ZWRTY3JvbGw7dGhpcy5hbmltYXRlZFNjcm9sbD10aGlzLnRhcmdldFNjcm9sbD10aGlzLmFjdHVhbFNjcm9sbCx0aGlzLmxhc3RWZWxvY2l0eT10aGlzLnZlbG9jaXR5LHRoaXMudmVsb2NpdHk9dGhpcy5hbmltYXRlZFNjcm9sbC10LHRoaXMuZGlyZWN0aW9uPU1hdGguc2lnbih0aGlzLmFuaW1hdGVkU2Nyb2xsLXQpLHRoaXMuaXNTdG9wcGVkfHwodGhpcy5pc1Njcm9sbGluZz0ibmF0aXZlIiksdGhpcy5lbWl0KCksdGhpcy52ZWxvY2l0eSE9PTAmJih0aGlzLl9yZXNldFZlbG9jaXR5VGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5sYXN0VmVsb2NpdHk9dGhpcy52ZWxvY2l0eSx0aGlzLnZlbG9jaXR5PTAsdGhpcy5pc1Njcm9sbGluZz0hMSx0aGlzLmVtaXQoKX0sNDAwKSl9fSwib25OYXRpdmVTY3JvbGwiKTtyZXNldCgpe3RoaXMuaXNMb2NrZWQ9ITEsdGhpcy5pc1Njcm9sbGluZz0hMSx0aGlzLmFuaW1hdGVkU2Nyb2xsPXRoaXMudGFyZ2V0U2Nyb2xsPXRoaXMuYWN0dWFsU2Nyb2xsLHRoaXMubGFzdFZlbG9jaXR5PXRoaXMudmVsb2NpdHk9MCx0aGlzLmFuaW1hdGUuc3RvcCgpfXN0YXJ0KCl7aWYodGhpcy5pc1N0b3BwZWQpe2lmKHRoaXMub3B0aW9ucy5hdXRvVG9nZ2xlKXt0aGlzLnJvb3RFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJvdmVyZmxvdyIpO3JldHVybn10aGlzLmludGVybmFsU3RhcnQoKX19aW50ZXJuYWxTdGFydCgpe3RoaXMuaXNTdG9wcGVkJiYodGhpcy5yZXNldCgpLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuZW1pdCgpKX1zdG9wKCl7aWYoIXRoaXMuaXNTdG9wcGVkKXtpZih0aGlzLm9wdGlvbnMuYXV0b1RvZ2dsZSl7dGhpcy5yb290RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgib3ZlcmZsb3ciLCJjbGlwIik7cmV0dXJufXRoaXMuaW50ZXJuYWxTdG9wKCl9fWludGVybmFsU3RvcCgpe3RoaXMuaXNTdG9wcGVkfHwodGhpcy5yZXNldCgpLHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuZW1pdCgpKX1yYWY9byh0PT57bGV0IGU9dC0odGhpcy50aW1lfHx0KTt0aGlzLnRpbWU9dCx0aGlzLmFuaW1hdGUuYWR2YW5jZShlKi4wMDEpLHRoaXMub3B0aW9ucy5hdXRvUmFmJiYodGhpcy5fcmFmSWQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmFmKSl9LCJyYWYiKTtzY3JvbGxUbyh0LHtvZmZzZXQ6ZT0wLGltbWVkaWF0ZTpyPSExLGxvY2s6bj0hMSxwcm9ncmFtbWF0aWM6aT0hMCxsZXJwOnM9aT90aGlzLm9wdGlvbnMubGVycDp2b2lkIDAsZHVyYXRpb246YT1pP3RoaXMub3B0aW9ucy5kdXJhdGlvbjp2b2lkIDAsZWFzaW5nOmw9aT90aGlzLm9wdGlvbnMuZWFzaW5nOnZvaWQgMCxvblN0YXJ0OmMsb25Db21wbGV0ZTp1LGZvcmNlOmY9ITEsdXNlckRhdGE6cH09e30pe2lmKCEoKHRoaXMuaXNTdG9wcGVkfHx0aGlzLmlzTG9ja2VkKSYmIWYpKXtpZih0eXBlb2YgdD09InN0cmluZyImJlsidG9wIiwibGVmdCIsInN0YXJ0IiwiIyJdLmluY2x1ZGVzKHQpKXQ9MDtlbHNlIGlmKHR5cGVvZiB0PT0ic3RyaW5nIiYmWyJib3R0b20iLCJyaWdodCIsImVuZCJdLmluY2x1ZGVzKHQpKXQ9dGhpcy5saW1pdDtlbHNle2xldCBoO2lmKHR5cGVvZiB0PT0ic3RyaW5nIj8oaD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpLGh8fCh0PT09IiN0b3AiP3Q9MDpjb25zb2xlLndhcm4oIkxlbmlzOiBUYXJnZXQgbm90IGZvdW5kIix0KSkpOnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmdD8ubm9kZVR5cGUmJihoPXQpLGgpe2lmKHRoaXMub3B0aW9ucy53cmFwcGVyIT09d2luZG93KXtsZXQgbT10aGlzLnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UtPXRoaXMuaXNIb3Jpem9udGFsP20ubGVmdDptLnRvcH1sZXQgZD1oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3Q9KHRoaXMuaXNIb3Jpem9udGFsP2QubGVmdDpkLnRvcCkrdGhpcy5hbmltYXRlZFNjcm9sbH19aWYodHlwZW9mIHQ9PSJudW1iZXIiKXtpZih0Kz1lLHQ9TWF0aC5yb3VuZCh0KSx0aGlzLm9wdGlvbnMuaW5maW5pdGUpe2lmKGkpe3RoaXMudGFyZ2V0U2Nyb2xsPXRoaXMuYW5pbWF0ZWRTY3JvbGw9dGhpcy5zY3JvbGw7bGV0IGg9dC10aGlzLmFuaW1hdGVkU2Nyb2xsO2g+dGhpcy5saW1pdC8yP3Q9dC10aGlzLmxpbWl0Omg8LXRoaXMubGltaXQvMiYmKHQ9dCt0aGlzLmxpbWl0KX19ZWxzZSB0PWZPKDAsdCx0aGlzLmxpbWl0KTtpZih0PT09dGhpcy50YXJnZXRTY3JvbGwpe2M/Lih0aGlzKSx1Py4odGhpcyk7cmV0dXJufWlmKHRoaXMudXNlckRhdGE9cD8/e30scil7dGhpcy5hbmltYXRlZFNjcm9sbD10aGlzLnRhcmdldFNjcm9sbD10LHRoaXMuc2V0U2Nyb2xsKHRoaXMuc2Nyb2xsKSx0aGlzLnJlc2V0KCksdGhpcy5wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50KCksdGhpcy5lbWl0KCksdT8uKHRoaXMpLHRoaXMudXNlckRhdGE9e30scmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5kaXNwYXRjaFNjcm9sbGVuZEV2ZW50KCl9KTtyZXR1cm59aXx8KHRoaXMudGFyZ2V0U2Nyb2xsPXQpLHR5cGVvZiBhPT0ibnVtYmVyIiYmdHlwZW9mIGwhPSJmdW5jdGlvbiI/bD1kTzp0eXBlb2YgbD09ImZ1bmN0aW9uIiYmdHlwZW9mIGEhPSJudW1iZXIiJiYoYT0xKSx0aGlzLmFuaW1hdGUuZnJvbVRvKHRoaXMuYW5pbWF0ZWRTY3JvbGwsdCx7ZHVyYXRpb246YSxlYXNpbmc6bCxsZXJwOnMsb25TdGFydDpvKCgpPT57biYmKHRoaXMuaXNMb2NrZWQ9ITApLHRoaXMuaXNTY3JvbGxpbmc9InNtb290aCIsYz8uKHRoaXMpfSwib25TdGFydCIpLG9uVXBkYXRlOm8oKGgsZCk9Pnt0aGlzLmlzU2Nyb2xsaW5nPSJzbW9vdGgiLHRoaXMubGFzdFZlbG9jaXR5PXRoaXMudmVsb2NpdHksdGhpcy52ZWxvY2l0eT1oLXRoaXMuYW5pbWF0ZWRTY3JvbGwsdGhpcy5kaXJlY3Rpb249TWF0aC5zaWduKHRoaXMudmVsb2NpdHkpLHRoaXMuYW5pbWF0ZWRTY3JvbGw9aCx0aGlzLnNldFNjcm9sbCh0aGlzLnNjcm9sbCksaSYmKHRoaXMudGFyZ2V0U2Nyb2xsPWgpLGR8fHRoaXMuZW1pdCgpLGQmJih0aGlzLnJlc2V0KCksdGhpcy5lbWl0KCksdT8uKHRoaXMpLHRoaXMudXNlckRhdGE9e30scmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5kaXNwYXRjaFNjcm9sbGVuZEV2ZW50KCl9KSx0aGlzLnByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQoKSl9LCJvblVwZGF0ZSIpfSl9fX1wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50KCl7dGhpcy5fcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50PSExfSl9Y2hlY2tOZXN0ZWRTY3JvbGwodCx7ZGVsdGFYOmUsZGVsdGFZOnJ9KXtsZXQgbj1EYXRlLm5vdygpLGk9dC5fbGVuaXM/Pz17fSxzLGEsbCxjLHUsZixwLGgsZD10aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uO2lmKG4tKGkudGltZT8/MCk+MmUzKXtpLnRpbWU9RGF0ZS5ub3coKTtsZXQgXz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTtpLmNvbXB1dGVkU3R5bGU9XztsZXQgRT1fLm92ZXJmbG93WCxBPV8ub3ZlcmZsb3dZO2lmKHM9WyJhdXRvIiwib3ZlcmxheSIsInNjcm9sbCJdLmluY2x1ZGVzKEUpLGE9WyJhdXRvIiwib3ZlcmxheSIsInNjcm9sbCJdLmluY2x1ZGVzKEEpLGkuaGFzT3ZlcmZsb3dYPXMsaS5oYXNPdmVyZmxvd1k9YSwhcyYmIWF8fGQ9PT0idmVydGljYWwiJiYhYXx8ZD09PSJob3Jpem9udGFsIiYmIXMpcmV0dXJuITE7dT10LnNjcm9sbFdpZHRoLGY9dC5zY3JvbGxIZWlnaHQscD10LmNsaWVudFdpZHRoLGg9dC5jbGllbnRIZWlnaHQsbD11PnAsYz1mPmgsaS5pc1Njcm9sbGFibGVYPWwsaS5pc1Njcm9sbGFibGVZPWMsaS5zY3JvbGxXaWR0aD11LGkuc2Nyb2xsSGVpZ2h0PWYsaS5jbGllbnRXaWR0aD1wLGkuY2xpZW50SGVpZ2h0PWh9ZWxzZSBsPWkuaXNTY3JvbGxhYmxlWCxjPWkuaXNTY3JvbGxhYmxlWSxzPWkuaGFzT3ZlcmZsb3dYLGE9aS5oYXNPdmVyZmxvd1ksdT1pLnNjcm9sbFdpZHRoLGY9aS5zY3JvbGxIZWlnaHQscD1pLmNsaWVudFdpZHRoLGg9aS5jbGllbnRIZWlnaHQ7aWYoIXMmJiFhfHwhbCYmIWN8fGQ9PT0idmVydGljYWwiJiYoIWF8fCFjKXx8ZD09PSJob3Jpem9udGFsIiYmKCFzfHwhbCkpcmV0dXJuITE7bGV0IG07aWYoZD09PSJob3Jpem9udGFsIiltPSJ4IjtlbHNlIGlmKGQ9PT0idmVydGljYWwiKW09InkiO2Vsc2V7bGV0IF89ZSE9PTAsRT1yIT09MDtfJiZzJiZsJiYobT0ieCIpLEUmJmEmJmMmJihtPSJ5Iil9aWYoIW0pcmV0dXJuITE7bGV0IGcseSx4LGssVDtpZihtPT09IngiKWc9dC5zY3JvbGxMZWZ0LHk9dS1wLHg9ZSxrPXMsVD1sO2Vsc2UgaWYobT09PSJ5IilnPXQuc2Nyb2xsVG9wLHk9Zi1oLHg9cixrPWEsVD1jO2Vsc2UgcmV0dXJuITE7cmV0dXJuKHg+MD9nPHk6Zz4wKSYmayYmVH1nZXQgcm9vdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5vcHRpb25zLndyYXBwZXI9PT13aW5kb3c/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OnRoaXMub3B0aW9ucy53cmFwcGVyfWdldCBsaW1pdCgpe3JldHVybiB0aGlzLm9wdGlvbnMubmFpdmVEaW1lbnNpb25zP3RoaXMuaXNIb3Jpem9udGFsP3RoaXMucm9vdEVsZW1lbnQuc2Nyb2xsV2lkdGgtdGhpcy5yb290RWxlbWVudC5jbGllbnRXaWR0aDp0aGlzLnJvb3RFbGVtZW50LnNjcm9sbEhlaWdodC10aGlzLnJvb3RFbGVtZW50LmNsaWVudEhlaWdodDp0aGlzLmRpbWVuc2lvbnMubGltaXRbdGhpcy5pc0hvcml6b250YWw/IngiOiJ5Il19Z2V0IGlzSG9yaXpvbnRhbCgpe3JldHVybiB0aGlzLm9wdGlvbnMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCJ9Z2V0IGFjdHVhbFNjcm9sbCgpe2xldCB0PXRoaXMub3B0aW9ucy53cmFwcGVyO3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbD90LnNjcm9sbFg/P3Quc2Nyb2xsTGVmdDp0LnNjcm9sbFk/P3Quc2Nyb2xsVG9wfWdldCBzY3JvbGwoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmluZmluaXRlP0JqKHRoaXMuYW5pbWF0ZWRTY3JvbGwsdGhpcy5saW1pdCk6dGhpcy5hbmltYXRlZFNjcm9sbH1nZXQgcHJvZ3Jlc3MoKXtyZXR1cm4gdGhpcy5saW1pdD09PTA/MTp0aGlzLnNjcm9sbC90aGlzLmxpbWl0fWdldCBpc1Njcm9sbGluZygpe3JldHVybiB0aGlzLl9pc1Njcm9sbGluZ31zZXQgaXNTY3JvbGxpbmcodCl7dGhpcy5faXNTY3JvbGxpbmchPT10JiYodGhpcy5faXNTY3JvbGxpbmc9dCx0aGlzLnVwZGF0ZUNsYXNzTmFtZSgpKX1nZXQgaXNTdG9wcGVkKCl7cmV0dXJuIHRoaXMuX2lzU3RvcHBlZH1zZXQgaXNTdG9wcGVkKHQpe3RoaXMuX2lzU3RvcHBlZCE9PXQmJih0aGlzLl9pc1N0b3BwZWQ9dCx0aGlzLnVwZGF0ZUNsYXNzTmFtZSgpKX1nZXQgaXNMb2NrZWQoKXtyZXR1cm4gdGhpcy5faXNMb2NrZWR9c2V0IGlzTG9ja2VkKHQpe3RoaXMuX2lzTG9ja2VkIT09dCYmKHRoaXMuX2lzTG9ja2VkPXQsdGhpcy51cGRhdGVDbGFzc05hbWUoKSl9Z2V0IGlzU21vb3RoKCl7cmV0dXJuIHRoaXMuaXNTY3JvbGxpbmc9PT0ic21vb3RoIn1nZXQgY2xhc3NOYW1lKCl7bGV0IHQ9ImxlbmlzIjtyZXR1cm4gdGhpcy5vcHRpb25zLmF1dG9Ub2dnbGUmJih0Kz0iIGxlbmlzLWF1dG9Ub2dnbGUiKSx0aGlzLmlzU3RvcHBlZCYmKHQrPSIgbGVuaXMtc3RvcHBlZCIpLHRoaXMuaXNMb2NrZWQmJih0Kz0iIGxlbmlzLWxvY2tlZCIpLHRoaXMuaXNTY3JvbGxpbmcmJih0Kz0iIGxlbmlzLXNjcm9sbGluZyIpLHRoaXMuaXNTY3JvbGxpbmc9PT0ic21vb3RoIiYmKHQrPSIgbGVuaXMtc21vb3RoIiksdH11cGRhdGVDbGFzc05hbWUoKXt0aGlzLmNsZWFuVXBDbGFzc05hbWUoKSx0aGlzLnJvb3RFbGVtZW50LmNsYXNzTmFtZT1gJHt0aGlzLnJvb3RFbGVtZW50LmNsYXNzTmFtZX0gJHt0aGlzLmNsYXNzTmFtZX1gLnRyaW0oKX1jbGVhblVwQ2xhc3NOYW1lKCl7dGhpcy5yb290RWxlbWVudC5jbGFzc05hbWU9dGhpcy5yb290RWxlbWVudC5jbGFzc05hbWUucmVwbGFjZSgvbGVuaXMoLVx3Kyk/L2csIiIpLnRyaW0oKX19O3ZhciBXYT1kcihtTygpLDEpLHFqPXtPYmplY3RNYXA6TG4sU3RyaW5nbWFwOk1sLEZhc3RNYXA6aG99O3ZhciBWZT17fTtzZShWZSx7Y29udGFpbmVyQ29udGV4dFN0eWxlczooKT0+WWosY3NzRm9yQ29uc3RyYWludDooKT0+VWosY3NzRm9yQ29uc3RyYWludENvbnRhaW5lcjooKT0+VmosY3NzRm9yQ29udGFpbmVyOigpPT5rTyxjc3NGb3JEZXNrdG9wOigpPT5Haixjc3NGb3JOb3RlYm9vazooKT0+UWosY3NzRm9yUGhhYmxldDooKT0+S2osY3NzRm9yUGhvbmU6KCk9PlhqLGNzc0ZvclRhYmxldDooKT0+SmosY3NzRm9yVmlld3BvcnQ6KCk9PktvLGRlc2t0b3A6KCk9PnlPLG5vdGVib29rOigpPT54TyxwaGFibGV0OigpPT53TyxwaG9uZTooKT0+dk8sdGFibGV0OigpPT5iT30pO3ZhciB5Tz0xNjAwLHhPPTEyNDAsYk89MTAyNCx3Tz02MDAsdk89NDAwLGdPPW8odD0+e2xldCBlPVtdO3JldHVybiB0Lm1pbldpZHRoJiZlLnB1c2goYChtaW4td2lkdGg6ICR7dC5taW5XaWR0aH1weClgKSx0Lm1heFdpZHRoJiZlLnB1c2goYChtYXgtd2lkdGg6ICR7dC5tYXhXaWR0aH1weClgKSxlLmpvaW4oIiBhbmQgIil9LCJidWlsZENvbmRpdGlvbiIpLEtvPW8oKHQsZSk9PlJlKGAKICAgIEBjb250YWluZXIgd2NjVG9vbHNWaWV3cG9ydCAke2V9IHsKICAgICAgJHt0LmNzc1RleHR9CiAgICB9CiAgICBAbWVkaWEgJHtlfSB7CiAgICAgICR7dC5jc3NUZXh0fQogICAgfQogIGApLCJjc3NGb3JWaWV3cG9ydCIpLGtPPW8oKHQsZSxyKT0+UmUoYAogICAgQGNvbnRhaW5lciAke3J9ICR7ZX0gewogICAgICAke3QuY3NzVGV4dH0KICAgIH0KICBgKSwiY3NzRm9yQ29udGFpbmVyIiksVWo9byh0PT5lPT5LbyhlLGdPKHQpKSwiY3NzRm9yQ29uc3RyYWludCIpLFZqPW8oKHQsZSk9PnI9PmtPKHIsZ08odCksZSksImNzc0ZvckNvbnN0cmFpbnRDb250YWluZXIiKSxZaj1vKHQ9PnB0YAogIDpob3N0IHsKICAgIGNvbnRhaW5lci10eXBlOiBpbmxpbmUtc2l6ZTsKICAgIGNvbnRhaW5lci1uYW1lOiAke1JlKHQpfTsKICB9CmAsImNvbnRhaW5lckNvbnRleHRTdHlsZXMiKSxHaj1vKHQ9PktvKHQsYChtaW4td2lkdGg6ICR7eU99cHgpYCksImNzc0ZvckRlc2t0b3AiKSxRaj1vKHQ9PktvKHQsYChtYXgtd2lkdGg6ICR7eE99cHgpYCksImNzc0Zvck5vdGVib29rIiksSmo9byh0PT5Lbyh0LGAobWF4LXdpZHRoOiAke2JPfXB4KWApLCJjc3NGb3JUYWJsZXQiKSxLaj1vKHQ9PktvKHQsYChtYXgtd2lkdGg6ICR7d099cHgpYCksImNzc0ZvclBoYWJsZXQiKSxYaj1vKHQ9PktvKHQsYChtYXgtd2lkdGg6ICR7dk99cHgpYCksImNzc0ZvclBob25lIik7dmFyIEtkPWNsYXNze3N0YXRpY3tvKHRoaXMsIlNjcm9sbGVyIil9ZG9tdG9vbHNJbnN0YW5jZTtkaXNwb3NlZD0hMTtzY3JvbGxDYWxsYmFja3M9W107bGVuaXNJbnN0YW5jZT1udWxsO2xlbmlzU2Nyb2xsVW5zdWJzY3JpYmU9bnVsbDtuYXRpdmVTY3JvbGxMaXN0ZW5lckF0dGFjaGVkPSExO2hhbmRsZU5hdGl2ZVNjcm9sbD1vKGU9Pnt0aGlzLmV4ZWN1dGVTY3JvbGxDYWxsYmFja3MoKX0sImhhbmRsZU5hdGl2ZVNjcm9sbCIpO2hhbmRsZUxlbmlzU2Nyb2xsPW8oZT0+e3RoaXMuZXhlY3V0ZVNjcm9sbENhbGxiYWNrcygpfSwiaGFuZGxlTGVuaXNTY3JvbGwiKTtjb25zdHJ1Y3RvcihlKXt0aGlzLmRvbXRvb2xzSW5zdGFuY2U9ZSx0aGlzLmF0dGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCl9c3dlZXRTY3JvbGxlcj1uZXcgV2EuZGVmYXVsdCh7fSk7YXN5bmMgdG9FbGVtZW50KGUscil7dGhpcy5zd2VldFNjcm9sbGVyLnRvRWxlbWVudChlLHIpLHI/LmR1cmF0aW9uJiZhd2FpdCBsZS5kZWxheUZvcihyLmR1cmF0aW9uKX1hc3luYyBkZXRlY3ROYXRpdmVTbW9vdGhTY3JvbGwoKXtsZXQgZT1nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuc2Nyb2xsQmVoYXZpb3Iscj1kb2N1bWVudC5ib2R5P2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuc2Nyb2xsQmVoYXZpb3I6ImF1dG8iO2lmKGU9PT0ic21vb3RoInx8cj09PSJzbW9vdGgiKXJldHVybiEwO2xldCBuPVouZGVmZXIoKSxpPTEyLHM9MyxhPS43NSxsPTEyMDAsYz1bXSx1PW8oZD0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsZiksd2luZG93LmNsZWFyVGltZW91dChoKSxuLnJlc29sdmUoZCl9LCJmaW5hbGl6ZSIpO2Z1bmN0aW9uIGYoZCl7Yy5wdXNoKGQuZGVsdGFZKSxjLmxlbmd0aD49aSYmcCgpfW8oZiwib25XaGVlbCIpO2Z1bmN0aW9uIHAoKXtpZihjLmxlbmd0aDwyKXt1KCExKTtyZXR1cm59bGV0IGQ9Yy5sZW5ndGgtMSxtPTA7Zm9yKGxldCB5PTA7eTxkO3krKylNYXRoLmFicyhjW3krMV0tY1t5XSk8PXMmJm0rKztsZXQgZz1tL2Q7dShnPj1hKX1vKHAsImFuYWx5emVFdmVudHMiKTtsZXQgaD13aW5kb3cuc2V0VGltZW91dCgoKT0+e3AoKX0sbCk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsZix7cGFzc2l2ZTohMH0pLG4ucHJvbWlzZX1hc3luYyBlbmFibGVMZW5pc1Njcm9sbChlKXtpZih0aGlzLmRpc3Bvc2VkKXJldHVybjt0aGlzLmxlbmlzSW5zdGFuY2UmJnRoaXMuZGlzYWJsZUxlbmlzU2Nyb2xsKCk7bGV0IHI9bmV3IFFjKHthdXRvUmFmOiEwfSk7aWYoZT8uZGlzYWJsZU9uTmF0aXZlU21vb3RoU2Nyb2xsJiZhd2FpdCB0aGlzLmRldGVjdE5hdGl2ZVNtb290aFNjcm9sbCgpKXtyLmRlc3Ryb3koKTtyZXR1cm59dGhpcy5sZW5pc0luc3RhbmNlPXIsdGhpcy5kZXRhY2hOYXRpdmVTY3JvbGxMaXN0ZW5lcigpLHRoaXMuYXR0YWNoTGVuaXNTY3JvbGxMaXN0ZW5lcigpfWRpc2FibGVMZW5pc1Njcm9sbCgpe3RoaXMubGVuaXNJbnN0YW5jZSYmKHRoaXMuZGV0YWNoTGVuaXNTY3JvbGxMaXN0ZW5lcigpLHRoaXMubGVuaXNJbnN0YW5jZS5kZXN0cm95KCksdGhpcy5sZW5pc0luc3RhbmNlPW51bGwsdGhpcy5hdHRhY2hOYXRpdmVTY3JvbGxMaXN0ZW5lcigpKX1vblNjcm9sbChlKXtyZXR1cm4gdGhpcy5zY3JvbGxDYWxsYmFja3MucHVzaChlKSwoKT0+e3RoaXMuc2Nyb2xsQ2FsbGJhY2tzPXRoaXMuc2Nyb2xsQ2FsbGJhY2tzLmZpbHRlcihyPT5yIT09ZSl9fWV4ZWN1dGVTY3JvbGxDYWxsYmFja3MoKXt0aGlzLnNjcm9sbENhbGxiYWNrcy5mb3JFYWNoKGU9Pnt0cnl7ZSgpfWNhdGNoKHIpe2NvbnNvbGUuZXJyb3IoIkVycm9yIGluIHNjcm9sbCBjYWxsYmFjazoiLHIpfX0pfWF0dGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCl7dGhpcy5uYXRpdmVTY3JvbGxMaXN0ZW5lckF0dGFjaGVkfHx0aGlzLmRpc3Bvc2VkfHwod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5oYW5kbGVOYXRpdmVTY3JvbGwpLHRoaXMubmF0aXZlU2Nyb2xsTGlzdGVuZXJBdHRhY2hlZD0hMCl9ZGV0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKXt0aGlzLm5hdGl2ZVNjcm9sbExpc3RlbmVyQXR0YWNoZWQmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmhhbmRsZU5hdGl2ZVNjcm9sbCksdGhpcy5uYXRpdmVTY3JvbGxMaXN0ZW5lckF0dGFjaGVkPSExKX1hdHRhY2hMZW5pc1Njcm9sbExpc3RlbmVyKCl7dGhpcy5sZW5pc0luc3RhbmNlJiYhdGhpcy5sZW5pc1Njcm9sbFVuc3Vic2NyaWJlJiYodGhpcy5sZW5pc1Njcm9sbFVuc3Vic2NyaWJlPXRoaXMubGVuaXNJbnN0YW5jZS5vbigic2Nyb2xsIix0aGlzLmhhbmRsZUxlbmlzU2Nyb2xsKSl9ZGV0YWNoTGVuaXNTY3JvbGxMaXN0ZW5lcigpe3RoaXMubGVuaXNTY3JvbGxVbnN1YnNjcmliZSYmKHRoaXMubGVuaXNTY3JvbGxVbnN1YnNjcmliZSgpLHRoaXMubGVuaXNTY3JvbGxVbnN1YnNjcmliZT1udWxsKX1kaXNwb3NlKCl7dGhpcy5kaXNwb3NlZHx8KHRoaXMuZGlzcG9zZWQ9ITAsdGhpcy5kZXRhY2hMZW5pc1Njcm9sbExpc3RlbmVyKCksdGhpcy5sZW5pc0luc3RhbmNlPy5kZXN0cm95KCksdGhpcy5sZW5pc0luc3RhbmNlPW51bGwsdGhpcy5kZXRhY2hOYXRpdmVTY3JvbGxMaXN0ZW5lcigpLHRoaXMuc2Nyb2xsQ2FsbGJhY2tzPVtdLHRoaXMuc3dlZXRTY3JvbGxlci5kZXN0cm95KCkpfX07dmFyIFhkPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRoZW1lTWFuYWdlciIpfWRvbXRvb2xzUmVmO2dvQnJpZ2h0Qm9vbGVhbj0hMTtwcmVmZXJyZWRDb2xvclNjaGVtZU1lZGlhTWF0Y2g9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIik7dGhlbWVPYnNlcnZhYmxlPW5ldyBJZS5yeGpzLlJlcGxheVN1YmplY3QoMSk7YXV0b21hdGljR2xvYmFsVGhlbWVDaGFuZ2VTdWJzY3JpcHRpb249bnVsbDtwcmVmZXJyZWRDb2xvclNjaGVtZUNoYW5nZUhhbmRsZXI9byhlPT57dGhpcy5nb0JyaWdodEJvb2xlYW49ZS5tYXRjaGVzLHRoaXMudXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKX0sInByZWZlcnJlZENvbG9yU2NoZW1lQ2hhbmdlSGFuZGxlciIpO2NvbnN0cnVjdG9yKGUpe3RoaXMuZG9tdG9vbHNSZWY9ZSx0aGlzLmdvQnJpZ2h0Qm9vbGVhbj10aGlzLnByZWZlcnJlZENvbG9yU2NoZW1lTWVkaWFNYXRjaC5tYXRjaGVzLHRoaXMucHJlZmVycmVkQ29sb3JTY2hlbWVNZWRpYU1hdGNoLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy5wcmVmZXJyZWRDb2xvclNjaGVtZUNoYW5nZUhhbmRsZXIpLHRoaXMudXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKX1hc3luYyBlbmFibGVBdXRvbWF0aWNHbG9iYWxUaGVtZUNoYW5nZSgpe2F3YWl0IHRoaXMuZG9tdG9vbHNSZWYuZG9tUmVhZHkucHJvbWlzZSx0aGlzLmF1dG9tYXRpY0dsb2JhbFRoZW1lQ2hhbmdlU3Vic2NyaXB0aW9ufHwodGhpcy5hdXRvbWF0aWNHbG9iYWxUaGVtZUNoYW5nZVN1YnNjcmlwdGlvbj10aGlzLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoe25leHQ6byhlPT57ZG9jdW1lbnQuYm9keS5zdHlsZS5iYWNrZ3JvdW5kPWU/IiNmZmYiOiIjMDAwIn0sIm5leHQiKX0pKX11cGRhdGVBbGxDb25uZWN0ZWRFbGVtZW50cygpe3RoaXMuZG9tdG9vbHNSZWYuZGlzcG9zZWR8fHRoaXMudGhlbWVPYnNlcnZhYmxlLm5leHQodGhpcy5nb0JyaWdodEJvb2xlYW4pfWdvQnJpZ2h0KCl7dGhpcy5nb0JyaWdodEJvb2xlYW49ITAsdGhpcy51cGRhdGVBbGxDb25uZWN0ZWRFbGVtZW50cygpfWdvRGFyaygpe3RoaXMuZ29CcmlnaHRCb29sZWFuPSExLHRoaXMudXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKX10b2dnbGVEYXJrQnJpZ2h0KCl7dGhpcy5nb0JyaWdodEJvb2xlYW49IXRoaXMuZ29CcmlnaHRCb29sZWFuLHRoaXMudXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKX1kaXNwb3NlKCl7dGhpcy5wcmVmZXJyZWRDb2xvclNjaGVtZU1lZGlhTWF0Y2gucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLnByZWZlcnJlZENvbG9yU2NoZW1lQ2hhbmdlSGFuZGxlciksdGhpcy5hdXRvbWF0aWNHbG9iYWxUaGVtZUNoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLmF1dG9tYXRpY0dsb2JhbFRoZW1lQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwsdGhpcy50aGVtZU9ic2VydmFibGUuY29tcGxldGUoKX19O3ZhciBQOyhmdW5jdGlvbih0KXt0W3QuQmFja3NwYWNlPThdPSJCYWNrc3BhY2UiLHRbdC5UYWI9OV09IlRhYiIsdFt0LkVudGVyPTEzXT0iRW50ZXIiLHRbdC5TaGlmdD0xNl09IlNoaWZ0Iix0W3QuQ3RybD0xN109IkN0cmwiLHRbdC5BbHQ9MThdPSJBbHQiLHRbdC5QYXVzZUJyZWFrPTE5XT0iUGF1c2VCcmVhayIsdFt0LkNhcHNMb2NrPTIwXT0iQ2Fwc0xvY2siLHRbdC5Fc2NhcGU9MjddPSJFc2NhcGUiLHRbdC5TcGFjZT0zMl09IlNwYWNlIix0W3QuUGFnZVVwPTMzXT0iUGFnZVVwIix0W3QuUGFnZURvd249MzRdPSJQYWdlRG93biIsdFt0LkVuZD0zNV09IkVuZCIsdFt0LkhvbWU9MzZdPSJIb21lIix0W3QuTGVmdEFycm93PTM3XT0iTGVmdEFycm93Iix0W3QuVXBBcnJvdz0zOF09IlVwQXJyb3ciLHRbdC5SaWdodEFycm93PTM5XT0iUmlnaHRBcnJvdyIsdFt0LkRvd25BcnJvdz00MF09IkRvd25BcnJvdyIsdFt0Lkluc2VydD00NV09Ikluc2VydCIsdFt0LkRlbGV0ZT00Nl09IkRlbGV0ZSIsdFt0Llplcm89NDhdPSJaZXJvIix0W3QuQ2xvc2VkUGFyZW49NDhdPSJDbG9zZWRQYXJlbiIsdFt0Lk9uZT00OV09Ik9uZSIsdFt0LkV4Y2xhbWF0aW9uTWFyaz00OV09IkV4Y2xhbWF0aW9uTWFyayIsdFt0LlR3bz01MF09IlR3byIsdFt0LkF0U2lnbj01MF09IkF0U2lnbiIsdFt0LlRocmVlPTUxXT0iVGhyZWUiLHRbdC5Qb3VuZFNpZ249NTFdPSJQb3VuZFNpZ24iLHRbdC5IYXNoPTUxXT0iSGFzaCIsdFt0LkZvdXI9NTJdPSJGb3VyIix0W3QuRG9sbGFyU2lnbj01Ml09IkRvbGxhclNpZ24iLHRbdC5GaXZlPTUzXT0iRml2ZSIsdFt0LlBlcmNlbnRTaWduPTUzXT0iUGVyY2VudFNpZ24iLHRbdC5TaXg9NTRdPSJTaXgiLHRbdC5DYXJldD01NF09IkNhcmV0Iix0W3QuSGF0PTU0XT0iSGF0Iix0W3QuU2V2ZW49NTVdPSJTZXZlbiIsdFt0LkFtcGVyc2FuZD01NV09IkFtcGVyc2FuZCIsdFt0LkVpZ2h0PTU2XT0iRWlnaHQiLHRbdC5TdGFyPTU2XT0iU3RhciIsdFt0LkFzdGVyaWs9NTZdPSJBc3RlcmlrIix0W3QuTmluZT01N109Ik5pbmUiLHRbdC5PcGVuUGFyZW49NTddPSJPcGVuUGFyZW4iLHRbdC5BPTY1XT0iQSIsdFt0LkI9NjZdPSJCIix0W3QuQz02N109IkMiLHRbdC5EPTY4XT0iRCIsdFt0LkU9NjldPSJFIix0W3QuRj03MF09IkYiLHRbdC5HPTcxXT0iRyIsdFt0Lkg9NzJdPSJIIix0W3QuST03M109IkkiLHRbdC5KPTc0XT0iSiIsdFt0Lks9NzVdPSJLIix0W3QuTD03Nl09IkwiLHRbdC5NPTc3XT0iTSIsdFt0Lk49NzhdPSJOIix0W3QuTz03OV09Ik8iLHRbdC5QPTgwXT0iUCIsdFt0LlE9ODFdPSJRIix0W3QuUj04Ml09IlIiLHRbdC5TPTgzXT0iUyIsdFt0LlQ9ODRdPSJUIix0W3QuVT04NV09IlUiLHRbdC5WPTg2XT0iViIsdFt0Llc9ODddPSJXIix0W3QuWD04OF09IlgiLHRbdC5ZPTg5XT0iWSIsdFt0Llo9OTBdPSJaIix0W3QuTGVmdFdpbmRvd0tleT05MV09IkxlZnRXaW5kb3dLZXkiLHRbdC5SaWdodFdpbmRvd0tleT05Ml09IlJpZ2h0V2luZG93S2V5Iix0W3QuU2VsZWN0S2V5PTkzXT0iU2VsZWN0S2V5Iix0W3QuTnVtcGFkMD05Nl09Ik51bXBhZDAiLHRbdC5OdW1wYWQxPTk3XT0iTnVtcGFkMSIsdFt0Lk51bXBhZDI9OThdPSJOdW1wYWQyIix0W3QuTnVtcGFkMz05OV09Ik51bXBhZDMiLHRbdC5OdW1wYWQ0PTEwMF09Ik51bXBhZDQiLHRbdC5OdW1wYWQ1PTEwMV09Ik51bXBhZDUiLHRbdC5OdW1wYWQ2PTEwMl09Ik51bXBhZDYiLHRbdC5OdW1wYWQ3PTEwM109Ik51bXBhZDciLHRbdC5OdW1wYWQ4PTEwNF09Ik51bXBhZDgiLHRbdC5OdW1wYWQ5PTEwNV09Ik51bXBhZDkiLHRbdC5NdWx0aXBseT0xMDZdPSJNdWx0aXBseSIsdFt0LkFkZD0xMDddPSJBZGQiLHRbdC5TdWJ0cmFjdD0xMDldPSJTdWJ0cmFjdCIsdFt0LkRlY2ltYWxQb2ludD0xMTBdPSJEZWNpbWFsUG9pbnQiLHRbdC5EaXZpZGU9MTExXT0iRGl2aWRlIix0W3QuRjE9MTEyXT0iRjEiLHRbdC5GMj0xMTNdPSJGMiIsdFt0LkYzPTExNF09IkYzIix0W3QuRjQ9MTE1XT0iRjQiLHRbdC5GNT0xMTZdPSJGNSIsdFt0LkY2PTExN109IkY2Iix0W3QuRjc9MTE4XT0iRjciLHRbdC5GOD0xMTldPSJGOCIsdFt0LkY5PTEyMF09IkY5Iix0W3QuRjEwPTEyMV09IkYxMCIsdFt0LkYxMT0xMjJdPSJGMTEiLHRbdC5GMTI9MTIzXT0iRjEyIix0W3QuTnVtTG9jaz0xNDRdPSJOdW1Mb2NrIix0W3QuU2Nyb2xsTG9jaz0xNDVdPSJTY3JvbGxMb2NrIix0W3QuU2VtaUNvbG9uPTE4Nl09IlNlbWlDb2xvbiIsdFt0LkVxdWFscz0xODddPSJFcXVhbHMiLHRbdC5Db21tYT0xODhdPSJDb21tYSIsdFt0LkRhc2g9MTg5XT0iRGFzaCIsdFt0LlBlcmlvZD0xOTBdPSJQZXJpb2QiLHRbdC5VbmRlclNjb3JlPTE4OV09IlVuZGVyU2NvcmUiLHRbdC5QbHVzU2lnbj0xODddPSJQbHVzU2lnbiIsdFt0LkZvcndhcmRTbGFzaD0xOTFdPSJGb3J3YXJkU2xhc2giLHRbdC5UaWxkZT0xOTJdPSJUaWxkZSIsdFt0LkdyYXZlQWNjZW50PTE5Ml09IkdyYXZlQWNjZW50Iix0W3QuT3BlbkJyYWNrZXQ9MjE5XT0iT3BlbkJyYWNrZXQiLHRbdC5DbG9zZWRCcmFja2V0PTIyMV09IkNsb3NlZEJyYWNrZXQiLHRbdC5RdW90ZT0yMjJdPSJRdW90ZSJ9KShQfHwoUD17fSkpO3ZhciBaZD1jbGFzc3tzdGF0aWN7byh0aGlzLCJLZXlib2FyZCIpfWRvbU5vZGU7bWFwQ29tYm9zVG9IYW5kbGVycz1uZXcgTWFwO3ByZXNzZWRLZXlzPW5ldyBTZXQ7bGlzdGVuaW5nPSExO2NvbnN0cnVjdG9yKGUpe3RoaXMuZG9tTm9kZT1lLHRoaXMuc3RhcnRMaXN0ZW5pbmcoKX1rZXlFbnVtPVA7b24oZSl7bGV0IHI9bmV3IEllLnJ4anMuU3ViamVjdDtyZXR1cm4gdGhpcy5yZWdpc3RlcktleXMoZSxyKSxyfXRyaWdnZXJLZXlQcmVzcyhlKXtsZXQgcj10aGlzLm5vcm1hbGl6ZUtleXMoZSk7Zm9yKGxldCBuIG9mIHIpdGhpcy5wcmVzc2VkS2V5cy5hZGQobik7dGhpcy5jaGVja01hdGNoaW5nS2V5Ym9hcmRTdWJqZWN0cyh0aGlzLmNyZWF0ZUtleWJvYXJkRXZlbnQocikpO2ZvcihsZXQgbiBvZiByKXRoaXMucHJlc3NlZEtleXMuZGVsZXRlKG4pfXN0YXJ0TGlzdGVuaW5nKCl7dGhpcy5saXN0ZW5pbmd8fCh0aGlzLmRvbU5vZGUuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5oYW5kbGVLZXlEb3duKSx0aGlzLmRvbU5vZGUuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuaGFuZGxlS2V5VXApLHRoaXMubGlzdGVuaW5nPSEwKX1zdG9wTGlzdGVuaW5nKCl7dGhpcy5saXN0ZW5pbmcmJih0aGlzLmRvbU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5oYW5kbGVLZXlEb3duKSx0aGlzLmRvbU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuaGFuZGxlS2V5VXApLHRoaXMubGlzdGVuaW5nPSExKX1jbGVhcigpe3RoaXMuc3RvcExpc3RlbmluZygpO2ZvcihsZXQgZSBvZiB0aGlzLm1hcENvbWJvc1RvSGFuZGxlcnMudmFsdWVzKCkpZm9yKGxldCByIG9mIGUuc3ViamVjdHMpci5jb21wbGV0ZSgpO3RoaXMubWFwQ29tYm9zVG9IYW5kbGVycy5jbGVhcigpLHRoaXMucHJlc3NlZEtleXMuY2xlYXIoKX1kaXNwb3NlKCl7dGhpcy5jbGVhcigpfWhhbmRsZUtleURvd249byhlPT57bGV0IHI9dGhpcy5yZXNvbHZlS2V5KGUpO3IhPT1udWxsJiYodGhpcy5wcmVzc2VkS2V5cy5hZGQociksdGhpcy5jaGVja01hdGNoaW5nS2V5Ym9hcmRTdWJqZWN0cyhlKSl9LCJoYW5kbGVLZXlEb3duIik7Y2hlY2tNYXRjaGluZ0tleWJvYXJkU3ViamVjdHMoZSl7dGhpcy5tYXBDb21ib3NUb0hhbmRsZXJzLmZvckVhY2gocj0+e2lmKHRoaXMuYXJlQWxsS2V5c1ByZXNzZWQoci5rZXlzKSlmb3IobGV0IG4gb2Ygci5zdWJqZWN0cyluLm5leHQoZSl9KX1oYW5kbGVLZXlVcD1vKGU9PntsZXQgcj10aGlzLnJlc29sdmVLZXkoZSk7ciE9PW51bGwmJnRoaXMucHJlc3NlZEtleXMuZGVsZXRlKHIpfSwiaGFuZGxlS2V5VXAiKTthcmVBbGxLZXlzUHJlc3NlZChlKXtsZXQgcj0hMDtyZXR1cm4gZS5mb3JFYWNoKG49Pnt0aGlzLnByZXNzZWRLZXlzLmhhcyhuKXx8KHI9ITEpfSkscn1yZWdpc3RlcktleXMoZSxyKXtsZXQgbj10aGlzLm5vcm1hbGl6ZUtleXMoZSksaT1uLmpvaW4oIisiKSxzPXRoaXMubWFwQ29tYm9zVG9IYW5kbGVycy5nZXQoaSk7aWYoIXMpe3RoaXMubWFwQ29tYm9zVG9IYW5kbGVycy5zZXQoaSx7a2V5czpuLHN1YmplY3RzOltyXX0pO3JldHVybn1zLnN1YmplY3RzLnB1c2gocil9bm9ybWFsaXplS2V5cyhlKXtyZXR1cm5bLi4ubmV3IFNldChlKV0uc29ydCgocixuKT0+ci1uKX1yZXNvbHZlS2V5KGUpe3JldHVybiB0aGlzLnJlc29sdmVLZXlGcm9tQ29kZShlLmNvZGUpPz90aGlzLnJlc29sdmVLZXlGcm9tS2V5KGUua2V5KT8/dGhpcy5yZXNvbHZlS2V5RnJvbUtleUNvZGUoZS5rZXlDb2RlKX1yZXNvbHZlS2V5RnJvbUNvZGUoZSl7aWYoIWUpcmV0dXJuIG51bGw7aWYoZS5zdGFydHNXaXRoKCJLZXkiKSYmZS5sZW5ndGg9PT00KXJldHVybiBQW2Uuc2xpY2UoMyldPz9udWxsO2lmKGUuc3RhcnRzV2l0aCgiRGlnaXQiKSYmZS5sZW5ndGg9PT02KXJldHVybiB0aGlzLnJlc29sdmVLZXlGcm9tS2V5KGUuc2xpY2UoNSkpO3N3aXRjaChlKXtjYXNlIkJhY2tzcGFjZSI6cmV0dXJuIFAuQmFja3NwYWNlO2Nhc2UiVGFiIjpyZXR1cm4gUC5UYWI7Y2FzZSJFbnRlciI6Y2FzZSJOdW1wYWRFbnRlciI6cmV0dXJuIFAuRW50ZXI7Y2FzZSJTaGlmdExlZnQiOmNhc2UiU2hpZnRSaWdodCI6cmV0dXJuIFAuU2hpZnQ7Y2FzZSJDb250cm9sTGVmdCI6Y2FzZSJDb250cm9sUmlnaHQiOnJldHVybiBQLkN0cmw7Y2FzZSJBbHRMZWZ0IjpjYXNlIkFsdFJpZ2h0IjpyZXR1cm4gUC5BbHQ7Y2FzZSJQYXVzZSI6cmV0dXJuIFAuUGF1c2VCcmVhaztjYXNlIkNhcHNMb2NrIjpyZXR1cm4gUC5DYXBzTG9jaztjYXNlIkVzY2FwZSI6cmV0dXJuIFAuRXNjYXBlO2Nhc2UiU3BhY2UiOnJldHVybiBQLlNwYWNlO2Nhc2UiUGFnZVVwIjpyZXR1cm4gUC5QYWdlVXA7Y2FzZSJQYWdlRG93biI6cmV0dXJuIFAuUGFnZURvd247Y2FzZSJFbmQiOnJldHVybiBQLkVuZDtjYXNlIkhvbWUiOnJldHVybiBQLkhvbWU7Y2FzZSJBcnJvd0xlZnQiOnJldHVybiBQLkxlZnRBcnJvdztjYXNlIkFycm93VXAiOnJldHVybiBQLlVwQXJyb3c7Y2FzZSJBcnJvd1JpZ2h0IjpyZXR1cm4gUC5SaWdodEFycm93O2Nhc2UiQXJyb3dEb3duIjpyZXR1cm4gUC5Eb3duQXJyb3c7Y2FzZSJJbnNlcnQiOnJldHVybiBQLkluc2VydDtjYXNlIkRlbGV0ZSI6cmV0dXJuIFAuRGVsZXRlO2Nhc2UiTWV0YUxlZnQiOnJldHVybiBQLkxlZnRXaW5kb3dLZXk7Y2FzZSJNZXRhUmlnaHQiOnJldHVybiBQLlJpZ2h0V2luZG93S2V5O2Nhc2UiQ29udGV4dE1lbnUiOnJldHVybiBQLlNlbGVjdEtleTtjYXNlIk51bXBhZDAiOnJldHVybiBQLk51bXBhZDA7Y2FzZSJOdW1wYWQxIjpyZXR1cm4gUC5OdW1wYWQxO2Nhc2UiTnVtcGFkMiI6cmV0dXJuIFAuTnVtcGFkMjtjYXNlIk51bXBhZDMiOnJldHVybiBQLk51bXBhZDM7Y2FzZSJOdW1wYWQ0IjpyZXR1cm4gUC5OdW1wYWQ0O2Nhc2UiTnVtcGFkNSI6cmV0dXJuIFAuTnVtcGFkNTtjYXNlIk51bXBhZDYiOnJldHVybiBQLk51bXBhZDY7Y2FzZSJOdW1wYWQ3IjpyZXR1cm4gUC5OdW1wYWQ3O2Nhc2UiTnVtcGFkOCI6cmV0dXJuIFAuTnVtcGFkODtjYXNlIk51bXBhZDkiOnJldHVybiBQLk51bXBhZDk7Y2FzZSJOdW1wYWRNdWx0aXBseSI6cmV0dXJuIFAuTXVsdGlwbHk7Y2FzZSJOdW1wYWRBZGQiOnJldHVybiBQLkFkZDtjYXNlIk51bXBhZFN1YnRyYWN0IjpyZXR1cm4gUC5TdWJ0cmFjdDtjYXNlIk51bXBhZERlY2ltYWwiOnJldHVybiBQLkRlY2ltYWxQb2ludDtjYXNlIk51bXBhZERpdmlkZSI6cmV0dXJuIFAuRGl2aWRlO2Nhc2UiRjEiOnJldHVybiBQLkYxO2Nhc2UiRjIiOnJldHVybiBQLkYyO2Nhc2UiRjMiOnJldHVybiBQLkYzO2Nhc2UiRjQiOnJldHVybiBQLkY0O2Nhc2UiRjUiOnJldHVybiBQLkY1O2Nhc2UiRjYiOnJldHVybiBQLkY2O2Nhc2UiRjciOnJldHVybiBQLkY3O2Nhc2UiRjgiOnJldHVybiBQLkY4O2Nhc2UiRjkiOnJldHVybiBQLkY5O2Nhc2UiRjEwIjpyZXR1cm4gUC5GMTA7Y2FzZSJGMTEiOnJldHVybiBQLkYxMTtjYXNlIkYxMiI6cmV0dXJuIFAuRjEyO2Nhc2UiTnVtTG9jayI6cmV0dXJuIFAuTnVtTG9jaztjYXNlIlNjcm9sbExvY2siOnJldHVybiBQLlNjcm9sbExvY2s7Y2FzZSJTZW1pY29sb24iOnJldHVybiBQLlNlbWlDb2xvbjtjYXNlIkVxdWFsIjpyZXR1cm4gUC5FcXVhbHM7Y2FzZSJDb21tYSI6cmV0dXJuIFAuQ29tbWE7Y2FzZSJNaW51cyI6cmV0dXJuIFAuRGFzaDtjYXNlIlBlcmlvZCI6cmV0dXJuIFAuUGVyaW9kO2Nhc2UiU2xhc2giOnJldHVybiBQLkZvcndhcmRTbGFzaDtjYXNlIkJhY2txdW90ZSI6cmV0dXJuIFAuVGlsZGU7Y2FzZSJCcmFja2V0TGVmdCI6cmV0dXJuIFAuT3BlbkJyYWNrZXQ7Y2FzZSJCcmFja2V0UmlnaHQiOnJldHVybiBQLkNsb3NlZEJyYWNrZXQ7Y2FzZSJRdW90ZSI6cmV0dXJuIFAuUXVvdGU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19cmVzb2x2ZUtleUZyb21LZXkoZSl7aWYoIWUpcmV0dXJuIG51bGw7aWYoZS5sZW5ndGg9PT0xKXtsZXQgcj1lLnRvVXBwZXJDYXNlKCk7aWYocj49IkEiJiZyPD0iWiIpcmV0dXJuIFBbcl0/P251bGw7c3dpdGNoKGUpe2Nhc2UiMCI6cmV0dXJuIFAuWmVybztjYXNlIjEiOnJldHVybiBQLk9uZTtjYXNlIjIiOnJldHVybiBQLlR3bztjYXNlIjMiOnJldHVybiBQLlRocmVlO2Nhc2UiNCI6cmV0dXJuIFAuRm91cjtjYXNlIjUiOnJldHVybiBQLkZpdmU7Y2FzZSI2IjpyZXR1cm4gUC5TaXg7Y2FzZSI3IjpyZXR1cm4gUC5TZXZlbjtjYXNlIjgiOnJldHVybiBQLkVpZ2h0O2Nhc2UiOSI6cmV0dXJuIFAuTmluZTtjYXNlIiAiOnJldHVybiBQLlNwYWNlO2Nhc2UiOyI6cmV0dXJuIFAuU2VtaUNvbG9uO2Nhc2UiPSI6cmV0dXJuIFAuRXF1YWxzO2Nhc2UiLCI6cmV0dXJuIFAuQ29tbWE7Y2FzZSItIjpyZXR1cm4gUC5EYXNoO2Nhc2UiLiI6cmV0dXJuIFAuUGVyaW9kO2Nhc2UiLyI6cmV0dXJuIFAuRm9yd2FyZFNsYXNoO2Nhc2UiYCI6cmV0dXJuIFAuVGlsZGU7Y2FzZSJbIjpyZXR1cm4gUC5PcGVuQnJhY2tldDtjYXNlIl0iOnJldHVybiBQLkNsb3NlZEJyYWNrZXQ7Y2FzZSInIjpyZXR1cm4gUC5RdW90ZTtkZWZhdWx0OnJldHVybiBudWxsfX1zd2l0Y2goZSl7Y2FzZSJCYWNrc3BhY2UiOnJldHVybiBQLkJhY2tzcGFjZTtjYXNlIlRhYiI6cmV0dXJuIFAuVGFiO2Nhc2UiRW50ZXIiOnJldHVybiBQLkVudGVyO2Nhc2UiU2hpZnQiOnJldHVybiBQLlNoaWZ0O2Nhc2UiQ29udHJvbCI6cmV0dXJuIFAuQ3RybDtjYXNlIkFsdCI6cmV0dXJuIFAuQWx0O2Nhc2UiUGF1c2UiOnJldHVybiBQLlBhdXNlQnJlYWs7Y2FzZSJDYXBzTG9jayI6cmV0dXJuIFAuQ2Fwc0xvY2s7Y2FzZSJFc2NhcGUiOnJldHVybiBQLkVzY2FwZTtjYXNlIlBhZ2VVcCI6cmV0dXJuIFAuUGFnZVVwO2Nhc2UiUGFnZURvd24iOnJldHVybiBQLlBhZ2VEb3duO2Nhc2UiRW5kIjpyZXR1cm4gUC5FbmQ7Y2FzZSJIb21lIjpyZXR1cm4gUC5Ib21lO2Nhc2UiQXJyb3dMZWZ0IjpyZXR1cm4gUC5MZWZ0QXJyb3c7Y2FzZSJBcnJvd1VwIjpyZXR1cm4gUC5VcEFycm93O2Nhc2UiQXJyb3dSaWdodCI6cmV0dXJuIFAuUmlnaHRBcnJvdztjYXNlIkFycm93RG93biI6cmV0dXJuIFAuRG93bkFycm93O2Nhc2UiSW5zZXJ0IjpyZXR1cm4gUC5JbnNlcnQ7Y2FzZSJEZWxldGUiOnJldHVybiBQLkRlbGV0ZTtjYXNlIk1ldGEiOnJldHVybiBQLkxlZnRXaW5kb3dLZXk7Y2FzZSJDb250ZXh0TWVudSI6cmV0dXJuIFAuU2VsZWN0S2V5O2Nhc2UiTnVtTG9jayI6cmV0dXJuIFAuTnVtTG9jaztjYXNlIlNjcm9sbExvY2siOnJldHVybiBQLlNjcm9sbExvY2s7ZGVmYXVsdDpyZXR1cm4gbnVsbH19cmVzb2x2ZUtleUZyb21LZXlDb2RlKGUpe3JldHVybiB0eXBlb2YgZSE9Im51bWJlciI/bnVsbDp0eXBlb2YgUFtlXTwidSI/ZTpudWxsfWNyZWF0ZUtleWJvYXJkRXZlbnQoZSl7bGV0IHI9ZVtlLmxlbmd0aC0xXT8/UC5FbnRlcixuPXRoaXMuZ2V0S2V5RGVzY3JpcHRvcihyKTtyZXR1cm4gbmV3IEtleWJvYXJkRXZlbnQoImtleWRvd24iLHtrZXk6bi5rZXksY29kZTpuLmNvZGUsY3RybEtleTplLmluY2x1ZGVzKFAuQ3RybCksc2hpZnRLZXk6ZS5pbmNsdWRlcyhQLlNoaWZ0KSxhbHRLZXk6ZS5pbmNsdWRlcyhQLkFsdCksbWV0YUtleTplLmluY2x1ZGVzKFAuTGVmdFdpbmRvd0tleSl8fGUuaW5jbHVkZXMoUC5SaWdodFdpbmRvd0tleSl9KX1nZXRLZXlEZXNjcmlwdG9yKGUpe3N3aXRjaChlKXtjYXNlIFAuQ3RybDpyZXR1cm57a2V5OiJDb250cm9sIixjb2RlOiJDb250cm9sTGVmdCJ9O2Nhc2UgUC5TaGlmdDpyZXR1cm57a2V5OiJTaGlmdCIsY29kZToiU2hpZnRMZWZ0In07Y2FzZSBQLkFsdDpyZXR1cm57a2V5OiJBbHQiLGNvZGU6IkFsdExlZnQifTtjYXNlIFAuRW50ZXI6cmV0dXJue2tleToiRW50ZXIiLGNvZGU6IkVudGVyIn07Y2FzZSBQLlNwYWNlOnJldHVybntrZXk6IiAiLGNvZGU6IlNwYWNlIn07ZGVmYXVsdDp7bGV0IHI9UFtlXTtpZihyJiZyLmxlbmd0aD09PTEmJnI+PSJBIiYmcjw9IloiKXJldHVybntrZXk6ci50b0xvd2VyQ2FzZSgpLGNvZGU6YEtleSR7cn1gfTtpZihlPj1QLlplcm8mJmU8PVAuTmluZSl7bGV0IG49U3RyaW5nKGUtUC5aZXJvKTtyZXR1cm57a2V5Om4sY29kZTpgRGlnaXQke259YH19cmV0dXJue2tleTpyPz8iVW5pZGVudGlmaWVkIixjb2RlOiJVbmlkZW50aWZpZWQifX19fX07dmFyIE9uPWNsYXNzIHR7c3RhdGlje28odGhpcywiRG9tVG9vbHMiKX1zdGF0aWMgaW5pdGlhbGl6YXRpb25Qcm9taXNlPW51bGw7c3RhdGljIGFzeW5jIHNldHVwRG9tVG9vbHMoZT17fSl7aWYoZS5pZ25vcmVHbG9iYWwpe2xldCByPW5ldyB0KGUpO3JldHVybiBhd2FpdCByLmluaXRpYWxpemF0aW9uUHJvbWlzZSxyfWlmKGdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzJiYhZ2xvYmFsVGhpcy5kZWVzRG9tVG9vbHMuZGlzcG9zZWQpcmV0dXJuIGF3YWl0IGdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzLmluaXRpYWxpemF0aW9uUHJvbWlzZSxnbG9iYWxUaGlzLmRlZXNEb21Ub29scztpZighdC5pbml0aWFsaXphdGlvblByb21pc2Upe2xldCByPW5ldyB0KGUpO2dsb2JhbFRoaXMuZGVlc0RvbVRvb2xzPXIsdC5pbml0aWFsaXphdGlvblByb21pc2U9ci5pbml0aWFsaXphdGlvblByb21pc2UudGhlbigoKT0+cikuY2F0Y2gobj0+e3Rocm93IGdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzPT09ciYmKGdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzPXZvaWQgMCksdC5pbml0aWFsaXphdGlvblByb21pc2U9bnVsbCxufSl9cmV0dXJuIGF3YWl0IHQuaW5pdGlhbGl6YXRpb25Qcm9taXNlfXN0YXRpYyBnZXRHbG9iYWxEb21Ub29sc1N5bmMoKXtsZXQgZT1nbG9iYWxUaGlzLmRlZXNEb21Ub29scztpZighZXx8ZS5kaXNwb3NlZCl0aHJvdyBuZXcgRXJyb3IoIllvdSB0cmllZCB0byBhY2Nlc3MgZG9tdG9vbHMgc3luY2hyb25vdXNseSB0b28gZWFybHkiKTtyZXR1cm4gZX1lbGVtZW50cz17aGVhZEVsZW1lbnQ6bnVsbCxib2R5RWxlbWVudDpudWxsfTt3ZWJzZXR1cD1uZXcgR2Moe21ldGFPYmplY3Q6e3RpdGxlOiIifX0pO3NtYXJ0c3RhdGU9bmV3IEdvLlNtYXJ0c3RhdGU7ZG9tVG9vbHNTdGF0ZVBhcnQ9dGhpcy5zbWFydHN0YXRlLmdldFN0YXRlUGFydCgiZG9tdG9vbHMiLHt2aXJ0dWFsVmlld3BvcnQ6Im5hdGl2ZSIsand0OiIifSk7cm91dGVyPW5ldyBZby5TbWFydFJvdXRlcih7ZGVidWc6ITF9KTtjb252ZW5pZW5jZT17dHlwZWRyZXF1ZXN0OnZvLHNtYXJ0ZGVsYXk6bGUsc21hcnRqc29uOmx0LHNtYXJ0dXJsOlFvfTtkZWVzQ29tbXM9bmV3IGpsLkRlZXNDb21tcztzY3JvbGxlcj1uZXcgS2QodGhpcyk7dGhlbWVNYW5hZ2VyPW5ldyBYZCh0aGlzKTtrZXlib2FyZD1udWxsO2Rpc3Bvc2VkPSExO2RvbVRvb2xzUmVhZHk9Wi5kZWZlcigpO2RvbVJlYWR5PVouZGVmZXIoKTtnbG9iYWxTdHlsZXNSZWFkeT1aLmRlZmVyKCk7aW5pdGlhbGl6YXRpb25Qcm9taXNlO21hbmFnZWREb21Ob2Rlcz1bXTtyZWFkeVN0YXRlQ2hhbmdlZEZ1bmM9bygoKT0+e3RoaXMudHJ5TWFya0RvbVJlYWR5KCl9LCJyZWFkeVN0YXRlQ2hhbmdlZEZ1bmMiKTtjb25zdHJ1Y3RvcihlKXt0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZT10aGlzLmluaXRpYWxpemUoKX1ydW5PbmNlUHJvbWlzZU1hcD1uZXcgTWFwO2FzeW5jIGluaXRpYWxpemUoKXt0aGlzLnRyeU1hcmtEb21SZWFkeSgpLHRoaXMuZG9tUmVhZHkuc3RhdHVzPT09InBlbmRpbmciJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIix0aGlzLnJlYWR5U3RhdGVDaGFuZ2VkRnVuYyksdGhpcy5kb21Ub29sc1JlYWR5LnN0YXR1cz09PSJwZW5kaW5nIiYmdGhpcy5kb21Ub29sc1JlYWR5LnJlc29sdmUoKX10cnlNYXJrRG9tUmVhZHkoKXt0aGlzLmRpc3Bvc2VkfHx0aGlzLmRvbVJlYWR5LnN0YXR1cyE9PSJwZW5kaW5nInx8ZG9jdW1lbnQucmVhZHlTdGF0ZSE9PSJpbnRlcmFjdGl2ZSImJmRvY3VtZW50LnJlYWR5U3RhdGUhPT0iY29tcGxldGUifHwhZG9jdW1lbnQuaGVhZHx8IWRvY3VtZW50LmJvZHl8fCh0aGlzLmVsZW1lbnRzLmhlYWRFbGVtZW50PWRvY3VtZW50LmhlYWQsdGhpcy5lbGVtZW50cy5ib2R5RWxlbWVudD1kb2N1bWVudC5ib2R5LHRoaXMua2V5Ym9hcmR8fCh0aGlzLmtleWJvYXJkPW5ldyBaZChkb2N1bWVudC5ib2R5KSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsdGhpcy5yZWFkeVN0YXRlQ2hhbmdlZEZ1bmMpLHRoaXMuZG9tUmVhZHkucmVzb2x2ZSgpKX10cmFja01hbmFnZWREb21Ob2RlKGUpe3JldHVybiB0aGlzLm1hbmFnZWREb21Ob2Rlcy5wdXNoKGUpLGV9Z2V0SGVhZE9yQm9keUVsZW1lbnQoKXtsZXQgZT10aGlzLmVsZW1lbnRzLmhlYWRFbGVtZW50fHxkb2N1bWVudC5oZWFkfHx0aGlzLmVsZW1lbnRzLmJvZHlFbGVtZW50fHxkb2N1bWVudC5ib2R5O2lmKCFlKXRocm93IG5ldyBFcnJvcigiRG9tVG9vbHMgY291bGQgbm90IGZpbmQgYSBET00gdGFyZ2V0IGVsZW1lbnQgdG8gYXR0YWNoIHJlc291cmNlcyB0byIpO3JldHVybiBlfWFzeW5jIHJ1bk9uY2UoZSxyKXtsZXQgbj10aGlzLnJ1bk9uY2VQcm9taXNlTWFwLmdldChlKTtyZXR1cm4gbnx8KG49UHJvbWlzZS5yZXNvbHZlKCkudGhlbihhc3luYygpPT5hd2FpdCByKCkpLHRoaXMucnVuT25jZVByb21pc2VNYXAuc2V0KGUsbikpLGF3YWl0IG59YXN5bmMgc2V0R2xvYmFsU3R5bGVzKGUpe2F3YWl0IHRoaXMuZG9tUmVhZHkucHJvbWlzZTtsZXQgcj10aGlzLnRyYWNrTWFuYWdlZERvbU5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSk7ci50eXBlPSJ0ZXh0L2NzcyIsci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSksdGhpcy5nZXRIZWFkT3JCb2R5RWxlbWVudCgpLmFwcGVuZENoaWxkKHIpfWFzeW5jIHNldEV4dGVybmFsU2NyaXB0KGUpe2F3YWl0IHRoaXMuZG9tUmVhZHkucHJvbWlzZTtsZXQgcj1aLmRlZmVyKCksbj10aGlzLnRyYWNrTWFuYWdlZERvbU5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0IikpO24uc3JjPWUsbi5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoKT0+e3IucmVzb2x2ZSgpfSksbi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PntyLnJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIGV4dGVybmFsIHNjcmlwdDogJHtlfWApKX0pLHRoaXMuZ2V0SGVhZE9yQm9keUVsZW1lbnQoKS5hcHBlbmQobiksYXdhaXQgci5wcm9taXNlfWFzeW5jIHNldEV4dGVybmFsQ3NzKGUpe2F3YWl0IHRoaXMuZG9tUmVhZHkucHJvbWlzZTtsZXQgcj1aLmRlZmVyKCksbj10aGlzLnRyYWNrTWFuYWdlZERvbU5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpKTtuLnJlbD0ic3R5bGVzaGVldCIsbi5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixuLmhyZWY9ZSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCgpPT57ci5yZXNvbHZlKCl9KSxuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwoKT0+e3IucmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgc3R5bGVzaGVldDogJHtlfWApKX0pLHRoaXMuZ2V0SGVhZE9yQm9keUVsZW1lbnQoKS5hcHBlbmQobiksYXdhaXQgci5wcm9taXNlfWFzeW5jIHNldFdlYnNpdGVJbmZvKGUpe2F3YWl0IHRoaXMud2Vic2V0dXAuc2V0dXAoZSksYXdhaXQgdGhpcy53ZWJzZXR1cC5yZWFkeVByb21pc2V9ZGlzcG9zZSgpe2lmKCF0aGlzLmRpc3Bvc2VkKXt0aGlzLmRpc3Bvc2VkPSEwLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLHRoaXMucmVhZHlTdGF0ZUNoYW5nZWRGdW5jKSx0aGlzLmtleWJvYXJkPy5kaXNwb3NlKCksdGhpcy5rZXlib2FyZD1udWxsLHRoaXMuc2Nyb2xsZXIuZGlzcG9zZSgpLHRoaXMudGhlbWVNYW5hZ2VyLmRpc3Bvc2UoKTtmb3IobGV0IGUgb2YgdGhpcy5tYW5hZ2VkRG9tTm9kZXMpZS5yZW1vdmUoKTt0aGlzLm1hbmFnZWREb21Ob2Rlcy5sZW5ndGg9MCxnbG9iYWxUaGlzLmRlZXNEb21Ub29scz09PXRoaXMmJihnbG9iYWxUaGlzLmRlZXNEb21Ub29scz12b2lkIDAsdC5pbml0aWFsaXphdGlvblByb21pc2U9bnVsbCl9fX07dmFyIGVtPSgoKT0+e2xldCB0PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTWFjIE9TIFgiKT09PS0xP3B0YGAuY3NzVGV4dDoiIjtyZXR1cm4gcHRgCiAgICAvKiB3aWR0aCAqLwogICAgOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgIHdpZHRoOiAwcHg7CiAgICB9CiAgICBib2R5IHsKICAgICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOwogICAgfQogIGAuY3NzVGV4dH0pKCksU089cHRgCiAgLyoKICBAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiAnTWF0ZXJpYWwgSWNvbnMnOwogICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9tYXRlcmlhbGljb25zL3Y0Mi9mbFVoUnE2dHpaY2xRRUotVmRnLUl1aWFEc05jSWhROHRRLndvZmYyKQogICAgICBmb3JtYXQoJ3dvZmYyJyk7CiAgfSAqLwoKICAvKiBnbG9iYWwgYm9keSBzdHlsZXMgKi8KICBib2R5IHsKICAgIG1hcmdpbjogMHB4OwogICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgc2Fucy1zZXJpZjsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgfQoKICAvKiBzY3JvbGwgYmFyIHN0eWxlcyAqLwogICR7UmUoZW0pfQpgLmNzc1RleHQ7dmFyIFpqPXB0YAogICogewogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzLCBjb2xvciAwLjFzOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB9CgogIDpob3N0IHsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCBzYW5zLXNlcmlmOwogIH0KCiAgJHtSZShlbSl9CmAsZTQ9bWVgCiAgPHN0eWxlPgogICAgKiB7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xcywgY29sb3IgMC4xczsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIHNhbnMtc2VyaWY7CiAgICB9CgogICAgJHtlbX0KICA8L3N0eWxlPgpgLHQ0PW8oYXN5bmModCxlPXt9KT0+e2xldCByPWF3YWl0IE9uLnNldHVwRG9tVG9vbHMoZSk7cmV0dXJuIGF3YWl0IHIucnVuT25jZSgiZWxlbWVudEJhc2ljU2V0dXAiLGFzeW5jKCk9Pnthd2FpdCByLnNldEdsb2JhbFN0eWxlcyhTTyl9KSxyLmdsb2JhbFN0eWxlc1JlYWR5LnN0YXR1cz09PSJwZW5kaW5nIiYmci5nbG9iYWxTdHlsZXNSZWFkeS5yZXNvbHZlKCksYXdhaXQgci5nbG9iYWxTdHlsZXNSZWFkeS5wcm9taXNlLHJ9LCJzZXR1cCIpO3ZhciB0bT17fTtzZSh0bSx7Y3NzR3JpZENvbHVtbnM6KCk9PnI0fSk7dmFyIHI0PW8oKHQsZSk9PntsZXQgcj0iIjtmb3IobGV0IG49MDtuPHQ7bisrKXIrPWAgY2FsYygoMTAwJS8ke3R9KSAtICgke2UqKHQtMSl9cHgvJHt0fSkpYDtyZXR1cm4gcn0sImNzc0dyaWRDb2x1bW5zIik7dmFyIHJtPXt9O3NlKHJtLHtTd2VldFNjcm9sbDooKT0+V2EuZGVmYXVsdCxzbWFydGRlbGF5OigpPT5sZSxzbWFydG1hcmtkb3duOigpPT5xYyxzbWFydHByb21pc2U6KCk9Plosc21hcnRyb3V0ZXI6KCk9PllvLHNtYXJ0cng6KCk9PkllLHNtYXJ0c3RhdGU6KCk9PkdvLHNtYXJ0c3RyaW5nOigpPT5tbixzbWFydHVybDooKT0+UW8sdHlwZWRyZXF1ZXN0OigpPT52b30pO3ZhciB6dz1kcih0bCgpLDEpLHFpPXtjc3M6cHQsdW5zYWZlQ1NTOlJlLExpdEVsZW1lbnQ6Tm4scHJvcGVydHk6aHN9O3ZhciBubT1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIkNzc01hbmFnZXIiKX1zdGF0aWMgaW5zdGFuY2U9bnVsbDtzdGF0aWMgZ2V0U2luZ2xldG9uKCl7cmV0dXJuIHQuaW5zdGFuY2V8fCh0Lmluc3RhbmNlPW5ldyB0KSx0Lmluc3RhbmNlfWRvbXRvb2xzUHJvbWlzZT1Pbi5zZXR1cERvbVRvb2xzKCk7Z29CcmlnaHQ9ITE7YmRWYXJUcmlwbGV0U3RvcmU9W107Y29uc3RydWN0b3IoKXt0aGlzLmRvbXRvb2xzUHJvbWlzZS50aGVuKGFzeW5jIGU9PntlLnRoZW1lTWFuYWdlci50aGVtZU9ic2VydmFibGUuc3Vic2NyaWJlKGFzeW5jIHI9Pnt0aGlzLmdvQnJpZ2h0PXIsYXdhaXQgZS5kb21SZWFkeS5wcm9taXNlO2ZvcihsZXQgbiBvZiB0aGlzLmJkVmFyVHJpcGxldFN0b3JlKWRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkobi5jc3NWYXJOYW1lLHRoaXMuZ29CcmlnaHQ/bi5icmlnaHRWYWx1ZTpuLmRhcmtWYWx1ZSl9KX0pfWdldCBkZWZhdWx0U3R5bGVzKCl7cmV0dXJuIHFhLnN0YXRpY1N0eWxlc31nZXRDb250YWluZXJOYW1lRnJvbUNsYXNzKGUpe3JldHVybiBlLmlzfHxlLm5hbWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpfWNzc0ZvckRlc2t0b3AoZSxyKXtyZXR1cm4gcj9SZShWZS5jc3NGb3JDb250YWluZXIoZSxgKG1pbi13aWR0aDogJHtWZS5kZXNrdG9wfXB4KWAsdGhpcy5nZXRDb250YWluZXJOYW1lRnJvbUNsYXNzKHIpKSk6UmUoVmUuY3NzRm9yRGVza3RvcChlKSl9Y3NzRm9yTm90ZWJvb2soZSxyKXtyZXR1cm4gcj9SZShWZS5jc3NGb3JDb250YWluZXIoZSxgKG1heC13aWR0aDogJHtWZS5ub3RlYm9va31weClgLHRoaXMuZ2V0Q29udGFpbmVyTmFtZUZyb21DbGFzcyhyKSkpOlJlKFZlLmNzc0Zvck5vdGVib29rKGUpKX1jc3NGb3JUYWJsZXQoZSxyKXtyZXR1cm4gcj9SZShWZS5jc3NGb3JDb250YWluZXIoZSxgKG1heC13aWR0aDogJHtWZS50YWJsZXR9cHgpYCx0aGlzLmdldENvbnRhaW5lck5hbWVGcm9tQ2xhc3MocikpKTpSZShWZS5jc3NGb3JUYWJsZXQoZSkpfWNzc0ZvclBoYWJsZXQoZSxyKXtyZXR1cm4gcj9SZShWZS5jc3NGb3JDb250YWluZXIoZSxgKG1heC13aWR0aDogJHtWZS5waGFibGV0fXB4KWAsdGhpcy5nZXRDb250YWluZXJOYW1lRnJvbUNsYXNzKHIpKSk6UmUoVmUuY3NzRm9yUGhhYmxldChlKSl9Y3NzRm9yUGhvbmUoZSxyKXtyZXR1cm4gcj9SZShWZS5jc3NGb3JDb250YWluZXIoZSxgKG1heC13aWR0aDogJHtWZS5waG9uZX1weClgLHRoaXMuZ2V0Q29udGFpbmVyTmFtZUZyb21DbGFzcyhyKSkpOlJlKFZlLmNzc0ZvclBob25lKGUpKX1jc3NGb3JDb25zdHJhaW50KGUpe3JldHVybiByPT5SZShWZS5jc3NGb3JDb25zdHJhaW50KGUpKHIpKX1iZFRoZW1lKGUscil7bGV0IG4saTtPbi5nZXRHbG9iYWxEb21Ub29sc1N5bmMoKT9pPU9uLmdldEdsb2JhbERvbVRvb2xzU3luYygpLnRoZW1lTWFuYWdlci5nb0JyaWdodEJvb2xlYW4/ZTpyOmk9cjtsZXQgcz10aGlzLmJkVmFyVHJpcGxldFN0b3JlLmZpbmQoYT0+YS5kYXJrVmFsdWU9PT1yJiZhLmJyaWdodFZhbHVlPT09ZSk7aWYocyluPXMuY3NzVmFyTmFtZTtlbHNle2xldCBhPXtjc3NWYXJOYW1lOmAtLSR7encudW5pKCl9YCxicmlnaHRWYWx1ZTplLGRhcmtWYWx1ZTpyfTt0aGlzLmJkVmFyVHJpcGxldFN0b3JlLnB1c2goYSksdGhpcy5kb210b29sc1Byb21pc2UudGhlbihhc3luYyBsPT57YXdhaXQgbC5kb21SZWFkeS5wcm9taXNlLGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoYS5jc3NWYXJOYW1lLGkpfSksbj1hLmNzc1Zhck5hbWV9cmV0dXJuIHFpLnVuc2FmZUNTUyhgdmFyKCR7bn0sICR7aX0pYCl9Y3NzR3JpZENvbHVtbnM9bygoZSxyKT0+e2xldCBuPSIiO2ZvcihsZXQgaT0wO2k8ZTtpKyspbis9YCBjYWxjKCgxMDAlLyR7ZX0pIC0gKCR7ciooZS0xKX1weC8ke2V9KSlgO3JldHVybiBxaS51bnNhZmVDU1Mobil9LCJjc3NHcmlkQ29sdW1ucyIpfTt2YXIgSHc9U3ltYm9sLmZvcigiIiksbjQ9byh0PT57aWYodD8ucj09PUh3KXJldHVybiB0Py5fJGxpdFN0YXRpYyR9LCJvIiksRE89byh0PT4oe18kbGl0U3RhdGljJDp0LHI6SHd9KSwicyIpLGk0PW8oKHQsLi4uZSk9Pih7XyRsaXRTdGF0aWMkOmUucmVkdWNlKChyLG4saSk9PnIrKHM9PntpZihzLl8kbGl0U3RhdGljJCE9PXZvaWQgMClyZXR1cm4gcy5fJGxpdFN0YXRpYyQ7dGhyb3cgRXJyb3IoYFZhbHVlIHBhc3NlZCB0byAnbGl0ZXJhbCcgZnVuY3Rpb24gbXVzdCBiZSBhICdsaXRlcmFsJyByZXN1bHQ6ICR7c30uIFVzZSAndW5zYWZlU3RhdGljJyB0byBwYXNzIG5vbi1saXRlcmFsIHZhbHVlcywgYnV0CiAgICAgICAgICAgIHRha2UgY2FyZSB0byBlbnN1cmUgcGFnZSBzZWN1cml0eS5gKX0pKG4pK3RbaSsxXSx0WzBdKSxyOkh3fSksImkiKSxFTz1uZXcgTWFwLGltPW8odD0+KGUsLi4ucik9PntsZXQgbj1yLmxlbmd0aCxpLHMsYT1bXSxsPVtdLGMsdT0wLGY9ITE7Zm9yKDt1PG47KXtmb3IoYz1lW3VdO3U8biYmKHM9clt1XSwoaT1uNChzKSkhPT12b2lkIDApOyljKz1pK2VbKyt1XSxmPSEwO3UhPT1uJiZsLnB1c2gocyksYS5wdXNoKGMpLHUrK31pZih1PT09biYmYS5wdXNoKGVbbl0pLGYpe2xldCBwPWEuam9pbigiJCRsaXQkJCIpOyhlPUVPLmdldChwKSk9PT12b2lkIDAmJihhLnJhdz1hLEVPLnNldChwLGU9YSkpLHI9bH1yZXR1cm4gdChlLC4uLnIpfSwibiIpLENPPWltKG1lKSxvND1pbShGbSksczQ9aW0oQW0pO3ZhciBJbj17QVRUUklCVVRFOjEsQ0hJTEQ6MixQUk9QRVJUWTozLEJPT0xFQU5fQVRUUklCVVRFOjQsRVZFTlQ6NSxFTEVNRU5UOjZ9LGl0PW8odD0+KC4uLmUpPT4oe18kbGl0RGlyZWN0aXZlJDp0LHZhbHVlczplfSksImUiKSxPcj1jbGFzc3tzdGF0aWN7byh0aGlzLCJpIil9Y29uc3RydWN0b3IoZSl7fWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQVQoZSxyLG4pe3RoaXMuXyRDdD1lLHRoaXMuXyRBTT1yLHRoaXMuXyRDaT1ufV8kQVMoZSxyKXtyZXR1cm4gdGhpcy51cGRhdGUoZSxyKX11cGRhdGUoZSxyKXtyZXR1cm4gdGhpcy5yZW5kZXIoLi4ucil9fTt2YXIgVWE9Y2xhc3MgZXh0ZW5kcyBPcntzdGF0aWN7byh0aGlzLCJlIil9Y29uc3RydWN0b3IoZSl7aWYoc3VwZXIoZSksdGhpcy5pdD1XZSxlLnR5cGUhPT1Jbi5DSElMRCl0aHJvdyBFcnJvcih0aGlzLmNvbnN0cnVjdG9yLmRpcmVjdGl2ZU5hbWUrIigpIGNhbiBvbmx5IGJlIHVzZWQgaW4gY2hpbGQgYmluZGluZ3MiKX1yZW5kZXIoZSl7aWYoZT09PVdlfHxlPT1udWxsKXJldHVybiB0aGlzLl90PXZvaWQgMCx0aGlzLml0PWU7aWYoZT09PXplKXJldHVybiBlO2lmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBFcnJvcih0aGlzLmNvbnN0cnVjdG9yLmRpcmVjdGl2ZU5hbWUrIigpIGNhbGxlZCB3aXRoIGEgbm9uLXN0cmluZyB2YWx1ZSIpO2lmKGU9PT10aGlzLml0KXJldHVybiB0aGlzLl90O3RoaXMuaXQ9ZTtsZXQgcj1bZV07cmV0dXJuIHIucmF3PXIsdGhpcy5fdD17XyRsaXRUeXBlJDp0aGlzLmNvbnN0cnVjdG9yLnJlc3VsdFR5cGUsc3RyaW5nczpyLHZhbHVlczpbXX19fTtVYS5kaXJlY3RpdmVOYW1lPSJ1bnNhZmVIVE1MIixVYS5yZXN1bHRUeXBlPTE7dmFyIEpjPWl0KFVhKTt2YXIganc9byh0PT4oZSxyKT0+e3IhPT12b2lkIDA/ci5hZGRJbml0aWFsaXplcigoKT0+e2N1c3RvbUVsZW1lbnRzLmRlZmluZSh0LGUpfSk6Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHQsZSl9LCJ0Iik7dmFyIGE0PW8odD0+dC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCksImNhbWVsVG9LZWJhYiIpO2Z1bmN0aW9uIGw0KHQpe3JldHVybihlLHIpPT57aWYoZS5pcz10LGUubmFtZSl7bGV0IG49YTQoZS5uYW1lKTtuIT09dCYmY29uc29sZS53YXJuKGBbZGVlcy1lbGVtZW50XSBDbGFzcyAiJHtlLm5hbWV9IiBrZWJhYi1jYXNlcyB0byAiJHtufSIgYnV0IHRhZyBpcyAiJHt0fSIuIENvbnRhaW5lciBxdWVyaWVzIHVzZSAuaXMgKCIke3R9IikuYCl9cmV0dXJuIGp3KHQpKGUscil9fW8obDQsImN1c3RvbUVsZW1lbnQiKTtmdW5jdGlvbiBNTyh0KXtyZXR1cm4gaHMoey4uLnQsc3RhdGU6ITAsYXR0cmlidXRlOiExfSl9byhNTywiciIpO2Z1bmN0aW9uIGM0KHQpe3JldHVybihlLHIpPT57bGV0IG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTplW3JdO09iamVjdC5hc3NpZ24obix0KX19byhjNCwidCIpO3ZhciBJcj1vKCh0LGUscik9PihyLmNvbmZpZ3VyYWJsZT0hMCxyLmVudW1lcmFibGU9ITAsUmVmbGVjdC5kZWNvcmF0ZSYmdHlwZW9mIGUhPSJvYmplY3QiJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHIpLHIpLCJlIik7ZnVuY3Rpb24gT08odCxlKXtyZXR1cm4ocixuLGkpPT57bGV0IHM9byhhPT5hLnJlbmRlclJvb3Q/LnF1ZXJ5U2VsZWN0b3IodCk/P251bGwsIm8iKTtpZihlKXtsZXR7Z2V0OmEsc2V0Omx9PXR5cGVvZiBuPT0ib2JqZWN0Ij9yOmk/PygoKT0+e2xldCBjPVN5bWJvbCgpO3JldHVybntnZXQoKXtyZXR1cm4gdGhpc1tjXX0sc2V0KHUpe3RoaXNbY109dX19fSkoKTtyZXR1cm4gSXIocixuLHtnZXQoKXtsZXQgYz1hLmNhbGwodGhpcyk7cmV0dXJuIGM9PT12b2lkIDAmJihjPXModGhpcyksKGMhPT1udWxsfHx0aGlzLmhhc1VwZGF0ZWQpJiZsLmNhbGwodGhpcyxjKSksY319KX1yZXR1cm4gSXIocixuLHtnZXQoKXtyZXR1cm4gcyh0aGlzKX19KX19byhPTywiZSIpO3ZhciB1NDtmdW5jdGlvbiBJTyh0KXtyZXR1cm4oZSxyKT0+SXIoZSxyLHtnZXQoKXtyZXR1cm4odGhpcy5yZW5kZXJSb290Pz8odTQ/Pz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpKS5xdWVyeVNlbGVjdG9yQWxsKHQpfX0pfW8oSU8sInIiKTtmdW5jdGlvbiBfTyh0KXtyZXR1cm4oZSxyKT0+SXIoZSxyLHthc3luYyBnZXQoKXtyZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSx0aGlzLnJlbmRlclJvb3Q/LnF1ZXJ5U2VsZWN0b3IodCk/P251bGx9fSl9byhfTywiciIpO2Z1bmN0aW9uIGY0KHQpe3JldHVybihlLHIpPT57bGV0e3Nsb3Q6bixzZWxlY3RvcjppfT10Pz97fSxzPSJzbG90Iisobj9gW25hbWU9JHtufV1gOiI6bm90KFtuYW1lXSkiKTtyZXR1cm4gSXIoZSxyLHtnZXQoKXtsZXQgYT10aGlzLnJlbmRlclJvb3Q/LnF1ZXJ5U2VsZWN0b3IocyksbD1hPy5hc3NpZ25lZEVsZW1lbnRzKHQpPz9bXTtyZXR1cm4gaT09PXZvaWQgMD9sOmwuZmlsdGVyKGM9PmMubWF0Y2hlcyhpKSl9fSl9fW8oZjQsIm8iKTtmdW5jdGlvbiBwNCh0KXtyZXR1cm4oZSxyKT0+e2xldHtzbG90Om59PXQ/P3t9LGk9InNsb3QiKyhuP2BbbmFtZT0ke259XWA6Ijpub3QoW25hbWVdKSIpO3JldHVybiBJcihlLHIse2dldCgpe3JldHVybiB0aGlzLnJlbmRlclJvb3Q/LnF1ZXJ5U2VsZWN0b3IoaSk/LmFzc2lnbmVkTm9kZXModCk/P1tdfX0pfX1vKHA0LCJuIik7dmFyIFBPPWZ1bmN0aW9uKHQsZSxyLG4saSxzKXtmdW5jdGlvbiBhKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9byhhLCJhY2NlcHQiKTtmb3IodmFyIGw9bi5raW5kLGM9bD09PSJnZXR0ZXIiPyJnZXQiOmw9PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLHU9IWUmJnQ/bi5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLGY9ZXx8KHU/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih1LG4ubmFtZSk6e30pLHAsaD0hMSxkPXIubGVuZ3RoLTE7ZD49MDtkLS0pe3ZhciBtPXt9O2Zvcih2YXIgZyBpbiBuKW1bZ109Zz09PSJhY2Nlc3MiP3t9Om5bZ107Zm9yKHZhciBnIGluIG4uYWNjZXNzKW0uYWNjZXNzW2ddPW4uYWNjZXNzW2ddO20uYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2goYSh4fHxudWxsKSl9O3ZhciB5PSgwLHJbZF0pKGw9PT0iYWNjZXNzb3IiP3tnZXQ6Zi5nZXQsc2V0OmYuc2V0fTpmW2NdLG0pO2lmKGw9PT0iYWNjZXNzb3IiKXtpZih5PT09dm9pZCAwKWNvbnRpbnVlO2lmKHk9PT1udWxsfHx0eXBlb2YgeSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KHA9YSh5LmdldCkpJiYoZi5nZXQ9cCksKHA9YSh5LnNldCkpJiYoZi5zZXQ9cCksKHA9YSh5LmluaXQpKSYmaS51bnNoaWZ0KHApfWVsc2UocD1hKHkpKSYmKGw9PT0iZmllbGQiP2kudW5zaGlmdChwKTpmW2NdPXApfXUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LG4ubmFtZSxmKSxoPSEwfSxvbT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MixpPTA7aTxlLmxlbmd0aDtpKyspcj1uP2VbaV0uY2FsbCh0LHIpOmVbaV0uY2FsbCh0KTtyZXR1cm4gbj9yOnZvaWQgMH0sc209KCgpPT57bGV0IHQ9cWkuTGl0RWxlbWVudCxlLHI9W10sbj1bXSxpLHM9W10sYT1bXTtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0e3N0YXRpY3tvKHRoaXMsIkRlZXNFbGVtZW50Iil9c3RhdGlje2xldCBjPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHRbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO2U9W3FpLnByb3BlcnR5KHt0eXBlOkJvb2xlYW4scmVmbGVjdDohMH0pXSxpPVtxaS5wcm9wZXJ0eSgpXSxQTyh0aGlzLG51bGwsZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImdvQnJpZ2h0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpvKHU9PiJnb0JyaWdodCJpbiB1LCJoYXMiKSxnZXQ6byh1PT51LmdvQnJpZ2h0LCJnZXQiKSxzZXQ6bygodSxmKT0+e3UuZ29CcmlnaHQ9Zn0sInNldCIpfSxtZXRhZGF0YTpjfSxyLG4pLFBPKHRoaXMsbnVsbCxpLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZG9tdG9vbHMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm8odT0+ImRvbXRvb2xzImluIHUsImhhcyIpLGdldDpvKHU9PnUuZG9tdG9vbHMsImdldCIpLHNldDpvKCh1LGYpPT57dS5kb210b29scz1mfSwic2V0Iil9LG1ldGFkYXRhOmN9LHMsYSksYyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpjfSl9c3RhdGljIGdldENvbnRhaW5lck5hbWUoKXtyZXR1cm4gdGhpcy5pc3x8dGhpcy5uYW1lLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIiQxLSQyIikudG9Mb3dlckNhc2UoKX1zdGF0aWMgY3NzRm9yQ29uc3RyYWludChjKXtyZXR1cm4gdT0+WXIuYnJlYWtwb2ludHMuY3NzRm9yQ29uc3RyYWludENvbnRhaW5lcihjLHRoaXMuZ2V0Q29udGFpbmVyTmFtZSgpKSh1KX0jZT1vbSh0aGlzLHIsITEpO2dldCBnb0JyaWdodCgpe3JldHVybiB0aGlzLiNlfXNldCBnb0JyaWdodChjKXt0aGlzLiNlPWN9ZG9tdG9vbHNQcm9taXNlPW9tKHRoaXMsbik7I3Q9b20odGhpcyxzLHZvaWQgMCk7Z2V0IGRvbXRvb2xzKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGRvbXRvb2xzKGMpe3RoaXMuI3Q9Y31yeFN1YnNjcmlwdGlvbnM9KG9tKHRoaXMsYSksW10pO3RoZW1lU3Vic2NyaXB0aW9uO2VsZW1lbnREb21SZWFkeURlZmVycmVkPVlyLnBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyKCk7ZWxlbWVudERvbVJlYWR5PXRoaXMuZWxlbWVudERvbVJlYWR5RGVmZXJyZWQucHJvbWlzZTtjb25zdHJ1Y3RvcihjPXt9KXtzdXBlcigpLHRoaXMuZG9tdG9vbHNQcm9taXNlPVlyLmVsZW1lbnRCYXNpYy5zZXR1cCh0aGlzLGMpLHRoaXMuZG9tdG9vbHNQcm9taXNlLnRoZW4odT0+e3RoaXMuZG9tdG9vbHM9dX0pfWFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtsZXQgYz1hd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTt0aGlzLnRoZW1lU3Vic2NyaXB0aW9uPWMudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUodT0+e3RoaXMuZ29CcmlnaHQ9dSx0aGlzLnRoZW1lQ2hhbmdlZCYmdGhpcy50aGVtZUNoYW5nZWQodSl9KSx0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudGhlbWVTdWJzY3JpcHRpb24pO2ZvcihsZXQgdSBvZiB0aGlzLnN0YXJ0dXBGdW5jdGlvbnMpYXdhaXQgdSgpO3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRlZXNFbGVtZW50Q29ubmVjdGVkIikpfWZpcnN0VXBkYXRlZChjKXtzdXBlci5maXJzdFVwZGF0ZWQoYyksdGhpcy5lbGVtZW50RG9tUmVhZHlEZWZlcnJlZC5yZXNvbHZlKCl9c3RhcnR1cEZ1bmN0aW9ucz1bXTtyZWdpc3RlclN0YXJ0dXBGdW5jdGlvbihjKXt0aGlzLnN0YXJ0dXBGdW5jdGlvbnMucHVzaChjKX1nYXJiYWdlRnVuY3Rpb25zPVtdO3JlZ2lzdGVyR2FyYmFnZUZ1bmN0aW9uKGMpe3RoaXMuZ2FyYmFnZUZ1bmN0aW9ucy5wdXNoKGMpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2Usc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtmb3IobGV0IGMgb2YgdGhpcy5yeFN1YnNjcmlwdGlvbnMpYy51bnN1YnNjcmliZSgpO2ZvcihsZXQgYyBvZiB0aGlzLmdhcmJhZ2VGdW5jdGlvbnMpYXdhaXQgYygpO3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRlZXNFbGVtZW50RGlzY29ubmVjdGVkIikpfX19KSgpO3ZhciBoND1vKHQ9PnQucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpLCJjYW1lbFRvS2ViYWIiKTtmdW5jdGlvbiBkNCgpe3JldHVybiBmdW5jdGlvbih0KXtsZXQgZT10LmlzfHx0Lm5hbWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpLHI9dC5uYW1lP2g0KHQubmFtZSk6bnVsbDtpZihyJiZyIT09ZSl7bGV0IHM9byhsPT5sJiZsLmNzc1RleHQmJmwuY3NzVGV4dC5pbmNsdWRlcyhgQGNvbnRhaW5lciAke3J9YCk/UmUobC5jc3NUZXh0LnJlcGxhY2VBbGwoYEBjb250YWluZXIgJHtyfWAsYEBjb250YWluZXIgJHtlfWApKTpsLCJmaXhTdHlsZSIpLGE9dC5zdHlsZXM7QXJyYXkuaXNBcnJheShhKT90LnN0eWxlcz1hLm1hcChzKTphJiYodC5zdHlsZXM9cyhhKSl9bGV0IG49VmUuY29udGFpbmVyQ29udGV4dFN0eWxlcyhlKSxpPXQuc3R5bGVzO3JldHVybiBBcnJheS5pc0FycmF5KGkpP3Quc3R5bGVzPVsuLi5pLG5dOmk/dC5zdHlsZXM9W2ksbl06dC5zdHlsZXM9W25dLHR9fW8oZDQsImNvbnRhaW5lclJlc3BvbnNpdmUiKTt2YXIgdDA9e307c2UodDAse2FzeW5jQXBwZW5kOigpPT5YdyxrZXllZDooKT0+WncscmVwZWF0OigpPT5lMCxyZXNvbHZlOigpPT5GTyxyZXNvbHZlRXhlYzooKT0+RTQsc3Vic2NyaWJlOigpPT5ENCxzdWJzY3JpYmVXaXRoVGVtcGxhdGU6KCk9PkFPLHVudGlsOigpPT5Ld30pO3ZhcntJOm00fT0kbSxOTz1vKHQ9PnQsImkiKSxXdz1vKHQ9PnQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCImJnR5cGVvZiB0IT0iZnVuY3Rpb24iLCJuIiksZzQ9e0hUTUw6MSxTVkc6MixNQVRITUw6M30seTQ9bygodCxlKT0+ZT09PXZvaWQgMD90Py5fJGxpdFR5cGUkIT09dm9pZCAwOnQ/Ll8kbGl0VHlwZSQ9PT1lLCJsIikseDQ9byh0PT50Py5fJGxpdFR5cGUkPy5oIT1udWxsLCJkIiksYjQ9byh0PT50Py5fJGxpdERpcmVjdGl2ZSQhPT12b2lkIDAsImMiKSx3ND1vKHQ9PnQ/Ll8kbGl0RGlyZWN0aXZlJCwiZiIpLHF3PW8odD0+dC5zdHJpbmdzPT09dm9pZCAwLCJyIiksUk89bygoKT0+ZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIiksInMiKSx0aT1vKCh0LGUscik9PntsZXQgbj10Ll8kQUEucGFyZW50Tm9kZSxpPWU9PT12b2lkIDA/dC5fJEFCOmUuXyRBQTtpZihyPT09dm9pZCAwKXtsZXQgcz1uLmluc2VydEJlZm9yZShSTygpLGkpLGE9bi5pbnNlcnRCZWZvcmUoUk8oKSxpKTtyPW5ldyBtNChzLGEsdCx0Lm9wdGlvbnMpfWVsc2V7bGV0IHM9ci5fJEFCLm5leHRTaWJsaW5nLGE9ci5fJEFNLGw9YSE9PXQ7aWYobCl7bGV0IGM7ci5fJEFRPy4odCksci5fJEFNPXQsci5fJEFQIT09dm9pZCAwJiYoYz10Ll8kQVUpIT09YS5fJEFVJiZyLl8kQVAoYyl9aWYocyE9PWl8fGwpe2xldCBjPXIuXyRBQTtmb3IoO2MhPT1zOyl7bGV0IHU9Tk8oYykubmV4dFNpYmxpbmc7Tk8obikuaW5zZXJ0QmVmb3JlKGMsaSksYz11fX19cmV0dXJuIHJ9LCJ2IiksR3I9bygodCxlLHI9dCk9Pih0Ll8kQUkoZSxyKSx0KSwidSIpLHY0PXt9LEtjPW8oKHQsZT12NCk9PnQuXyRBSD1lLCJwIiksVXc9byh0PT50Ll8kQUgsIk0iKSxYYz1vKHQ9Pnt0Ll8kQVIoKSx0Ll8kQUEucmVtb3ZlKCl9LCJoIiksVnc9byh0PT57dC5fJEFSKCl9LCJqIik7dmFyIFpjPW8oKHQsZSk9PntsZXQgcj10Ll8kQU47aWYocj09PXZvaWQgMClyZXR1cm4hMTtmb3IobGV0IG4gb2YgciluLl8kQU8/LihlLCExKSxaYyhuLGUpO3JldHVybiEwfSwicyIpLGFtPW8odD0+e2xldCBlLHI7ZG97aWYoKGU9dC5fJEFNKT09PXZvaWQgMClicmVhaztyPWUuXyRBTixyLmRlbGV0ZSh0KSx0PWV9d2hpbGUocj8uc2l6ZT09PTApfSwibyIpLExPPW8odD0+e2ZvcihsZXQgZTtlPXQuXyRBTTt0PWUpe2xldCByPWUuXyRBTjtpZihyPT09dm9pZCAwKWUuXyRBTj1yPW5ldyBTZXQ7ZWxzZSBpZihyLmhhcyh0KSlicmVhaztyLmFkZCh0KSxUNChlKX19LCJyIik7ZnVuY3Rpb24gazQodCl7dGhpcy5fJEFOIT09dm9pZCAwPyhhbSh0aGlzKSx0aGlzLl8kQU09dCxMTyh0aGlzKSk6dGhpcy5fJEFNPXR9byhrNCwiaCIpO2Z1bmN0aW9uIFM0KHQsZT0hMSxyPTApe2xldCBuPXRoaXMuXyRBSCxpPXRoaXMuXyRBTjtpZihpIT09dm9pZCAwJiZpLnNpemUhPT0wKWlmKGUpaWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IHM9cjtzPG4ubGVuZ3RoO3MrKylaYyhuW3NdLCExKSxhbShuW3NdKTtlbHNlIG4hPW51bGwmJihaYyhuLCExKSxhbShuKSk7ZWxzZSBaYyh0aGlzLHQpfW8oUzQsIm4iKTt2YXIgVDQ9byh0PT57dC50eXBlPT1Jbi5DSElMRCYmKHQuXyRBUD8/PVM0LHQuXyRBUT8/PWs0KX0sImMiKSx1cj1jbGFzcyBleHRlbmRzIE9ye3N0YXRpY3tvKHRoaXMsImYiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fJEFOPXZvaWQgMH1fJEFUKGUscixuKXtzdXBlci5fJEFUKGUscixuKSxMTyh0aGlzKSx0aGlzLmlzQ29ubmVjdGVkPWUuXyRBVX1fJEFPKGUscj0hMCl7ZSE9PXRoaXMuaXNDb25uZWN0ZWQmJih0aGlzLmlzQ29ubmVjdGVkPWUsZT90aGlzLnJlY29ubmVjdGVkPy4oKTp0aGlzLmRpc2Nvbm5lY3RlZD8uKCkpLHImJihaYyh0aGlzLGUpLGFtKHRoaXMpKX1zZXRWYWx1ZShlKXtpZihxdyh0aGlzLl8kQ3QpKXRoaXMuXyRDdC5fJEFJKGUsdGhpcyk7ZWxzZXtsZXQgcj1bLi4udGhpcy5fJEN0Ll8kQUhdO3JbdGhpcy5fJENpXT1lLHRoaXMuXyRDdC5fJEFJKHIsdGhpcywwKX19ZGlzY29ubmVjdGVkKCl7fXJlY29ubmVjdGVkKCl7fX07dmFyIFl3PWNsYXNzIGV4dGVuZHMgdXJ7c3RhdGlje28odGhpcywiUmVzb2x2ZURpcmVjdGl2ZSIpfXByb21pc2U7aGFzUHJvbWlzZVNldHRsZWQ9ITE7cmVuZGVyKGUpe3JldHVybiB0aGlzLnByb21pc2UhPT1lJiYodGhpcy5wcm9taXNlPWUsdGhpcy5pc0Nvbm5lY3RlZCYmdGhpcy5oYW5kbGVQcm9taXNlKGUpKSx6ZX1oYW5kbGVQcm9taXNlKGUpe3RoaXMuaGFzUHJvbWlzZVNldHRsZWQ9ITEsZS50aGVuKHI9Pnt0aGlzLnByb21pc2U9PT1lJiYhdGhpcy5oYXNQcm9taXNlU2V0dGxlZCYmKHRoaXMuc2V0VmFsdWUociksdGhpcy5oYXNQcm9taXNlU2V0dGxlZD0hMCl9KS5jYXRjaChyPT57dGhpcy5wcm9taXNlPT09ZSYmIXRoaXMuaGFzUHJvbWlzZVNldHRsZWQmJih0aGlzLnNldFZhbHVlKHIpLHRoaXMuaGFzUHJvbWlzZVNldHRsZWQ9ITApfSl9ZGlzY29ubmVjdGVkKCl7dGhpcy5oYXNQcm9taXNlU2V0dGxlZD0hMH1yZWNvbm5lY3RlZCgpe3RoaXMuaGFzUHJvbWlzZVNldHRsZWR8fHRoaXMuaGFuZGxlUHJvbWlzZSh0aGlzLnByb21pc2UpfX0sRk89aXQoWXcpLEU0PW8odD0+Rk8odCgpKSwicmVzb2x2ZUV4ZWMiKTt2YXIgR3c9Y2xhc3MgZXh0ZW5kcyB1cntzdGF0aWN7byh0aGlzLCJTdWJzY3JpYmVEaXJlY3RpdmUiKX1vYnNlcnZhYmxlO3N1Yj1udWxsO3JlbmRlcihlKXtyZXR1cm4gdGhpcy5vYnNlcnZhYmxlIT09ZSYmKHRoaXMuc3ViPy51bnN1YnNjcmliZSgpLHRoaXMub2JzZXJ2YWJsZT1lLHRoaXMuaXNDb25uZWN0ZWQmJnRoaXMuc3Vic2NyaWJlKGUpKSx6ZX1zdWJzY3JpYmUoZSl7dGhpcy5zdWI9ZS5zdWJzY3JpYmUocj0+e3RoaXMuc2V0VmFsdWUocil9KX1kaXNjb25uZWN0ZWQoKXt0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKX1yZWNvbm5lY3RlZCgpe3RoaXMuc3Vic2NyaWJlKHRoaXMub2JzZXJ2YWJsZSl9fSxEND1pdChHdyk7dmFyIFF3PWNsYXNzIGV4dGVuZHMgdXJ7c3RhdGlje28odGhpcywiU3Vic2NyaWJlV2l0aFRlbXBsYXRlRGlyZWN0aXZlIil9b2JzZXJ2YWJsZTt0ZW1wbGF0ZUZuO3N1Yj1udWxsO3JlbmRlcihlLHIpe3JldHVybih0aGlzLm9ic2VydmFibGUhPT1lfHx0aGlzLnRlbXBsYXRlRm4hPT1yKSYmKHRoaXMuc3ViPy51bnN1YnNjcmliZSgpLHRoaXMub2JzZXJ2YWJsZT1lLHRoaXMudGVtcGxhdGVGbj1yLHRoaXMuaXNDb25uZWN0ZWQmJnRoaXMuc3RhcnRTdWJzY3JpcHRpb24oKSksemV9c3RhcnRTdWJzY3JpcHRpb24oKXt0aGlzLnN1Yj10aGlzLm9ic2VydmFibGUuc3Vic2NyaWJlKGU9PntsZXQgcj10aGlzLnRlbXBsYXRlRm4oZSk7dGhpcy5zZXRWYWx1ZShyKX0pfWRpc2Nvbm5lY3RlZCgpe3RoaXMuc3ViPy51bnN1YnNjcmliZSgpfXJlY29ubmVjdGVkKCl7dGhpcy5zdGFydFN1YnNjcmlwdGlvbigpfX0sQU89aXQoUXcpO3ZhciBKdz1vKGFzeW5jKHQsZSk9Pntmb3IgYXdhaXQobGV0IHIgb2YgdClpZihhd2FpdCBlKHIpPT09ITEpcmV0dXJufSwidCIpLFhvPWNsYXNze3N0YXRpY3tvKHRoaXMsInMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLkc9ZX1kaXNjb25uZWN0KCl7dGhpcy5HPXZvaWQgMH1yZWNvbm5lY3QoZSl7dGhpcy5HPWV9ZGVyZWYoKXtyZXR1cm4gdGhpcy5HfX0sWm89Y2xhc3N7c3RhdGlje28odGhpcywiaSIpfWNvbnN0cnVjdG9yKCl7dGhpcy5ZPXZvaWQgMCx0aGlzLlo9dm9pZCAwfWdldCgpe3JldHVybiB0aGlzLll9cGF1c2UoKXt0aGlzLlk/Pz1uZXcgUHJvbWlzZShlPT50aGlzLlo9ZSl9cmVzdW1lKCl7dGhpcy5aPy4oKSx0aGlzLlk9dGhpcy5aPXZvaWQgMH19O3ZhciAkTz1vKHQ9PiFXdyh0KSYmdHlwZW9mIHQudGhlbj09ImZ1bmN0aW9uIiwibiIpLEJPPTEwNzM3NDE4MjMsbG09Y2xhc3MgZXh0ZW5kcyB1cntzdGF0aWN7byh0aGlzLCJjIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuXyRDd3Q9Qk8sdGhpcy5fJENidD1bXSx0aGlzLl8kQ0s9bmV3IFhvKHRoaXMpLHRoaXMuXyRDWD1uZXcgWm99cmVuZGVyKC4uLmUpe3JldHVybiBlLmZpbmQocj0+ISRPKHIpKT8/emV9dXBkYXRlKGUscil7bGV0IG49dGhpcy5fJENidCxpPW4ubGVuZ3RoO3RoaXMuXyRDYnQ9cjtsZXQgcz10aGlzLl8kQ0ssYT10aGlzLl8kQ1g7dGhpcy5pc0Nvbm5lY3RlZHx8dGhpcy5kaXNjb25uZWN0ZWQoKTtmb3IobGV0IGw9MDtsPHIubGVuZ3RoJiYhKGw+dGhpcy5fJEN3dCk7bCsrKXtsZXQgYz1yW2xdO2lmKCEkTyhjKSlyZXR1cm4gdGhpcy5fJEN3dD1sLGM7bDxpJiZjPT09bltsXXx8KHRoaXMuXyRDd3Q9Qk8saT0wLFByb21pc2UucmVzb2x2ZShjKS50aGVuKGFzeW5jIHU9Pntmb3IoO2EuZ2V0KCk7KWF3YWl0IGEuZ2V0KCk7bGV0IGY9cy5kZXJlZigpO2lmKGYhPT12b2lkIDApe2xldCBwPWYuXyRDYnQuaW5kZXhPZihjKTtwPi0xJiZwPGYuXyRDd3QmJihmLl8kQ3d0PXAsZi5zZXRWYWx1ZSh1KSl9fSkpfXJldHVybiB6ZX1kaXNjb25uZWN0ZWQoKXt0aGlzLl8kQ0suZGlzY29ubmVjdCgpLHRoaXMuXyRDWC5wYXVzZSgpfXJlY29ubmVjdGVkKCl7dGhpcy5fJENLLnJlY29ubmVjdCh0aGlzKSx0aGlzLl8kQ1gucmVzdW1lKCl9fSxLdz1pdChsbSk7dmFyIFZhPWNsYXNzIGV4dGVuZHMgdXJ7c3RhdGlje28odGhpcywibyIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl8kQ0s9bmV3IFhvKHRoaXMpLHRoaXMuXyRDWD1uZXcgWm99cmVuZGVyKGUscil7cmV0dXJuIHplfXVwZGF0ZShlLFtyLG5dKXtpZih0aGlzLmlzQ29ubmVjdGVkfHx0aGlzLmRpc2Nvbm5lY3RlZCgpLHI9PT10aGlzLl8kQ0opcmV0dXJuIHplO3RoaXMuXyRDSj1yO2xldCBpPTAse18kQ0s6cyxfJENYOmF9PXRoaXM7cmV0dXJuIEp3KHIsYXN5bmMgbD0+e2Zvcig7YS5nZXQoKTspYXdhaXQgYS5nZXQoKTtsZXQgYz1zLmRlcmVmKCk7aWYoYyE9PXZvaWQgMCl7aWYoYy5fJENKIT09cilyZXR1cm4hMTtuIT09dm9pZCAwJiYobD1uKGwsaSkpLGMuY29tbWl0VmFsdWUobCxpKSxpKyt9cmV0dXJuITB9KSx6ZX1jb21taXRWYWx1ZShlLHIpe3RoaXMuc2V0VmFsdWUoZSl9ZGlzY29ubmVjdGVkKCl7dGhpcy5fJENLLmRpc2Nvbm5lY3QoKSx0aGlzLl8kQ1gucGF1c2UoKX1yZWNvbm5lY3RlZCgpe3RoaXMuXyRDSy5yZWNvbm5lY3QodGhpcyksdGhpcy5fJENYLnJlc3VtZSgpfX0sQzQ9aXQoVmEpO3ZhciBYdz1pdChjbGFzcyBleHRlbmRzIFZhe2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKHQpLHQudHlwZSE9PUluLkNISUxEKXRocm93IEVycm9yKCJhc3luY0FwcGVuZCBjYW4gb25seSBiZSB1c2VkIGluIGNoaWxkIGV4cHJlc3Npb25zIil9dXBkYXRlKHQsZSl7cmV0dXJuIHRoaXMuXyRDdHQ9dCxzdXBlci51cGRhdGUodCxlKX1jb21taXRWYWx1ZSh0LGUpe2U9PT0wJiZWdyh0aGlzLl8kQ3R0KTtsZXQgcj10aSh0aGlzLl8kQ3R0KTtHcihyLHQpfX0pO3ZhciBadz1pdChjbGFzcyBleHRlbmRzIE9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmtleT1XZX1yZW5kZXIodCxlKXtyZXR1cm4gdGhpcy5rZXk9dCxlfXVwZGF0ZSh0LFtlLHJdKXtyZXR1cm4gZSE9PXRoaXMua2V5JiYoS2ModCksdGhpcy5rZXk9ZSkscn19KTt2YXIgek89bygodCxlLHIpPT57bGV0IG49bmV3IE1hcDtmb3IobGV0IGk9ZTtpPD1yO2krKyluLnNldCh0W2ldLGkpO3JldHVybiBufSwidSIpLGUwPWl0KGNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCl7aWYoc3VwZXIodCksdC50eXBlIT09SW4uQ0hJTEQpdGhyb3cgRXJyb3IoInJlcGVhdCgpIGNhbiBvbmx5IGJlIHVzZWQgaW4gdGV4dCBleHByZXNzaW9ucyIpfWR0KHQsZSxyKXtsZXQgbjtyPT09dm9pZCAwP3I9ZTplIT09dm9pZCAwJiYobj1lKTtsZXQgaT1bXSxzPVtdLGE9MDtmb3IobGV0IGwgb2YgdClpW2FdPW4/bihsLGEpOmEsc1thXT1yKGwsYSksYSsrO3JldHVybnt2YWx1ZXM6cyxrZXlzOml9fXJlbmRlcih0LGUscil7cmV0dXJuIHRoaXMuZHQodCxlLHIpLnZhbHVlc311cGRhdGUodCxbZSxyLG5dKXtsZXQgaT1Vdyh0KSx7dmFsdWVzOnMsa2V5czphfT10aGlzLmR0KGUscixuKTtpZighQXJyYXkuaXNBcnJheShpKSlyZXR1cm4gdGhpcy51dD1hLHM7bGV0IGw9dGhpcy51dD8/PVtdLGM9W10sdSxmLHA9MCxoPWkubGVuZ3RoLTEsZD0wLG09cy5sZW5ndGgtMTtmb3IoO3A8PWgmJmQ8PW07KWlmKGlbcF09PT1udWxsKXArKztlbHNlIGlmKGlbaF09PT1udWxsKWgtLTtlbHNlIGlmKGxbcF09PT1hW2RdKWNbZF09R3IoaVtwXSxzW2RdKSxwKyssZCsrO2Vsc2UgaWYobFtoXT09PWFbbV0pY1ttXT1HcihpW2hdLHNbbV0pLGgtLSxtLS07ZWxzZSBpZihsW3BdPT09YVttXSljW21dPUdyKGlbcF0sc1ttXSksdGkodCxjW20rMV0saVtwXSkscCsrLG0tLTtlbHNlIGlmKGxbaF09PT1hW2RdKWNbZF09R3IoaVtoXSxzW2RdKSx0aSh0LGlbcF0saVtoXSksaC0tLGQrKztlbHNlIGlmKHU9PT12b2lkIDAmJih1PXpPKGEsZCxtKSxmPXpPKGwscCxoKSksdS5oYXMobFtwXSkpaWYodS5oYXMobFtoXSkpe2xldCBnPWYuZ2V0KGFbZF0pLHk9ZyE9PXZvaWQgMD9pW2ddOm51bGw7aWYoeT09PW51bGwpe2xldCB4PXRpKHQsaVtwXSk7R3IoeCxzW2RdKSxjW2RdPXh9ZWxzZSBjW2RdPUdyKHksc1tkXSksdGkodCxpW3BdLHkpLGlbZ109bnVsbDtkKyt9ZWxzZSBYYyhpW2hdKSxoLS07ZWxzZSBYYyhpW3BdKSxwKys7Zm9yKDtkPD1tOyl7bGV0IGc9dGkodCxjW20rMV0pO0dyKGcsc1tkXSksY1tkKytdPWd9Zm9yKDtwPD1oOyl7bGV0IGc9aVtwKytdO2chPT1udWxsJiZYYyhnKX1yZXR1cm4gdGhpcy51dD1hLEtjKHQsYyksemV9fSk7dmFyIHIwPW5tLmdldFNpbmdsZXRvbigpO3ZhciBjbT1bWyJwYXRoIix7ZDoiTTEyIDV2MTYifV0sWyJwYXRoIix7ZDoiTTIwLjAwMSAxOUEyIDIgMCAwMDIyIDE3VjVhMiAyIDAgMDAtMS45OTktMkwxNiAzLjAwMkE1IDUgMCAwMDEyIDVhNSA1IDAgMDAtNC0ySDRhMiAyIDAgMDAtMiAydjEyYTIgMiAwIDAwMS45OTkgMkg4YTUgNSAwIDAxNCAyIDUgNSAwIDAxNC0yeiJ9XV07dmFyIHVtPVtbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUifV1dO3ZhciBmbT1bWyJwYXRoIix7ZDoibTYgOSA2IDYgNi02In1dXTt2YXIgcG09W1sicGF0aCIse2Q6Im0xOCAxNiA0LTQtNC00In1dLFsicGF0aCIse2Q6Im02IDgtNCA0IDQgNCJ9XSxbInBhdGgiLHtkOiJtMTQuNSA0LTUgMTYifV1dO3ZhciBobT1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoibTE2LjI0IDcuNzYtMS44MDQgNS40MTFhMiAyIDAgMCAxLTEuMjY1IDEuMjY1TDcuNzYgMTYuMjRsMS44MDQtNS40MTFhMiAyIDAgMCAxIDEuMjY1LTEuMjY1eiJ9XV07dmFyIGRtPVtbInBhdGgiLHtkOiJNMjAgNHY3YTQgNCAwIDAgMS00IDRINCJ9XSxbInBhdGgiLHtkOiJtOSAxMC01IDUgNSA1In1dXTt2YXIgbW09W1sicGF0aCIse2Q6Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik0xMCA5SDgifV0sWyJwYXRoIix7ZDoiTTE2IDEzSDgifV0sWyJwYXRoIix7ZDoiTTE2IDE3SDgifV1dO3ZhciBnbT1bWyJwYXRoIix7ZDoiTTE1IDZhOSA5IDAgMCAwLTkgOVYzIn1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiNiIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiI2IixjeToiMTgiLHI6IjMifV1dO3ZhciB5bT1bWyJwYXRoIix7ZDoiTTYgMTJoMTIifV0sWyJwYXRoIix7ZDoiTTYgMjBWNCJ9XSxbInBhdGgiLHtkOiJNMTggMjBWNCJ9XV07dmFyIHhtPVtbInBhdGgiLHtkOiJNMTIuODMgMi4xOGEyIDIgMCAwIDAtMS42NiAwTDIuNiA2LjA4YTEgMSAwIDAgMCAwIDEuODNsOC41OCAzLjkxYTIgMiAwIDAgMCAxLjY2IDBsOC41OC0zLjlhMSAxIDAgMCAwIDAtMS44M3oifV0sWyJwYXRoIix7ZDoiTTIgMTJhMSAxIDAgMCAwIC41OC45MWw4LjYgMy45MWEyIDIgMCAwIDAgMS42NSAwbDguNTgtMy45QTEgMSAwIDAgMCAyMiAxMiJ9XSxbInBhdGgiLHtkOiJNMiAxN2ExIDEgMCAwIDAgLjU4LjkxbDguNiAzLjkxYTIgMiAwIDAgMCAxLjY1IDBsOC41OC0zLjlBMSAxIDAgMCAwIDIyIDE3In1dXTt2YXIgYm09W1sicGF0aCIse2Q6Ik00IDVoMTYifV0sWyJwYXRoIix7ZDoiTTQgMTJoMTYifV0sWyJwYXRoIix7ZDoiTTQgMTloMTYifV1dO3ZhciB3bT1bWyJwYXRoIix7ZDoiTTIwLjk4NSAxMi40ODZhOSA5IDAgMSAxLTkuNDczLTkuNDcyYy40MDUtLjAyMi42MTcuNDYuNDAyLjgwM2E2IDYgMCAwIDAgOC4yNjggOC4yNjhjLjM0NC0uMjE1LjgyNS0uMDA0LjgwMy40MDEifV1dO3ZhciB2bT1bWyJwYXRoIix7ZDoiTTEyIDIydi01In1dLFsicGF0aCIse2Q6Ik0xNSA4VjIifV0sWyJwYXRoIix7ZDoiTTE3IDhhMSAxIDAgMCAxIDEgMXY0YTQgNCAwIDAgMS00IDRoLTRhNCA0IDAgMCAxLTQtNFY5YTEgMSAwIDAgMSAxLTF6In1dLFsicGF0aCIse2Q6Ik05IDhWMiJ9XV07dmFyIGttPVtbInBhdGgiLHtkOiJNMTIgMTV2NXMzLjAzLS41NSA0LTJjMS4wOC0xLjYyIDAtNSAwLTUifV0sWyJwYXRoIix7ZDoiTTQuNSAxNi41Yy0xLjUgMS4yNi0yIDUtMiA1czMuNzQtLjUgNS0yYy43MS0uODQuNy0yLjEzLS4wOS0yLjkxYTIuMTggMi4xOCAwIDAgMC0yLjkxLS4wOSJ9XSxbInBhdGgiLHtkOiJNOSAxMmEyMiAyMiAwIDAgMSAyLTMuOTVBMTIuODggMTIuODggMCAwIDEgMjIgMmMwIDIuNzItLjc4IDcuNS02IDExYTIyLjQgMjIuNCAwIDAgMS00IDJ6In1dLFsicGF0aCIse2Q6Ik05IDEySDRzLjU1LTMuMDMgMi00YzEuNjItMS4wOCA1IC4wNSA1IC4wNSJ9XV07dmFyIFNtPVtbInBhdGgiLHtkOiJtMjEgMjEtNC4zNC00LjM0In1dLFsiY2lyY2xlIix7Y3g6IjExIixjeToiMTEiLHI6IjgifV1dO3ZhciBUbT1bWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjgiLHg6IjIiLHk6IjIiLHJ4OiIyIixyeToiMiJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiOCIseDoiMiIseToiMTQiLHJ4OiIyIixyeToiMiJ9XSxbImxpbmUiLHt4MToiNiIseDI6IjYuMDEiLHkxOiI2Iix5MjoiNiJ9XSxbImxpbmUiLHt4MToiNiIseDI6IjYuMDEiLHkxOiIxOCIseTI6IjE4In1dXTt2YXIgRW09W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjQifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2MiJ9XSxbInBhdGgiLHtkOiJtNC45MyA0LjkzIDEuNDEgMS40MSJ9XSxbInBhdGgiLHtkOiJtMTcuNjYgMTcuNjYgMS40MSAxLjQxIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIifV0sWyJwYXRoIix7ZDoiTTIwIDEyaDIifV0sWyJwYXRoIix7ZDoibTYuMzQgMTcuNjYtMS40MSAxLjQxIn1dLFsicGF0aCIse2Q6Im0xOS4wNyA0LjkzLTEuNDEgMS40MSJ9XV07dmFyIERtPVtbInBhdGgiLHtkOiJtMjEuNzMgMTgtOC0xNGEyIDIgMCAwIDAtMy40OCAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTMifV0sWyJwYXRoIix7ZDoiTTEyIDl2NCJ9XSxbInBhdGgiLHtkOiJNMTIgMTdoLjAxIn1dXTt2YXIgQ209W1sicGF0aCIse2Q6Ik0xOCA2IDYgMTgifV0sWyJwYXRoIix7ZDoibTYgNiAxMiAxMiJ9XV07dmFyIG4wPXt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOjI0LGhlaWdodDoyNCx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIiwic3Ryb2tlLXdpZHRoIjoyLCJzdHJva2UtbGluZWNhcCI6InJvdW5kIiwic3Ryb2tlLWxpbmVqb2luIjoicm91bmQifTt2YXIgSE89bygoW3QsZSxyXSk9PntsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix0KTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChpPT57bi5zZXRBdHRyaWJ1dGUoaSxTdHJpbmcoZVtpXSkpfSkscj8ubGVuZ3RoJiZyLmZvckVhY2goaT0+e2xldCBzPUhPKGkpO24uYXBwZW5kQ2hpbGQocyl9KSxufSwiY3JlYXRlU1ZHRWxlbWVudCIpLE1tPW8oKHQsZT17fSk9PntsZXQgbj17Li4ubjAsLi4uZX07cmV0dXJuIEhPKFsic3ZnIixuLHRdKX0sImNyZWF0ZUVsZW1lbnQiKTt2YXIgV089e21lbnU6Ym0sc2VhcmNoOlNtLHN1bjpFbSxtb29uOndtLHJlcG9zaXRvcnk6Z20sY2xvc2U6Q20sY2hldnJvbjpmbSxjaGVjazp1bSxvdmVydmlldzpobSxzdGFydDprbSxjb25jZXB0czp4bSxpbnRlZ3JhdGlvbnM6dm0sYXBpOnBtLG9wZXJhdGlvbnM6VG0sYm9vazpjbSxmaWxlOm1tLGhlYWRpbmc6eW0sZW50ZXI6ZG0sd2FybmluZzpEbX0saTA9Y2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudHtzdGF0aWN7byh0aGlzLCJUc2RvY0ljb24iKX1nZXQgaWNvbigpe3JldHVybiB0aGlzLmljb25Ob2RlfXNldCBpY29uKGUpe3RoaXMuaWNvbk5vZGU9ZSx0aGlzLnJlcGxhY2VDaGlsZHJlbigpLGUmJnRoaXMuYXBwZW5kKE1tKGUseyJhcmlhLWhpZGRlbiI6InRydWUiLGZvY3VzYWJsZToiZmFsc2UifSkpfX07Y3VzdG9tRWxlbWVudHMuZ2V0KCJ0c2RvYy1pY29uIil8fGN1c3RvbUVsZW1lbnRzLmRlZmluZSgidHNkb2MtaWNvbiIsaTApO3ZhciBxTz0idHNkb2MtdGhlbWUiLG8wPWNsYXNzIGV4dGVuZHMgc217Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpO3RoaXMuYWN0aXZlUGFnZUlkPSIiO3RoaXMubG9hZGluZz0hMDt0aGlzLmVycm9yTWVzc2FnZT0iIjt0aGlzLnNlYXJjaE9wZW49ITE7dGhpcy5zZWFyY2hRdWVyeT0iIjt0aGlzLnNpZGViYXJPcGVuPSExO3RoaXMudmVyc2lvbk9wZW49ITE7dGhpcy5hY3RpdmVTZWFyY2hJbmRleD0wO3RoaXMuYWN0aXZlSGVhZGluZ0lkPSIiO3RoaXMuY29sbGFwc2VkU2VjdGlvbklkcz1uZXcgU2V0O3RoaXMuaGFuZGxlSGFzaENoYW5nZT1vKCgpPT57dGhpcy5zeW5jUm91dGUoKX0sImhhbmRsZUhhc2hDaGFuZ2UiKTt0aGlzLmhhbmRsZUdsb2JhbEtleWRvd249byhyPT57aWYoKHIubWV0YUtleXx8ci5jdHJsS2V5KSYmci5rZXkudG9Mb3dlckNhc2UoKT09PSJrIil7ci5wcmV2ZW50RGVmYXVsdCgpLHRoaXMub3BlblNlYXJjaCgpO3JldHVybn1pZih0aGlzLnNlYXJjaE9wZW4mJihyLmtleT09PSJBcnJvd0Rvd24ifHxyLmtleT09PSJBcnJvd1VwIikpe3IucHJldmVudERlZmF1bHQoKTtsZXQgbj10aGlzLnNlYXJjaFJlc3VsdHM7aWYoIW4ubGVuZ3RoKXJldHVybjtsZXQgaT1yLmtleT09PSJBcnJvd0Rvd24iPzE6LTE7dGhpcy5hY3RpdmVTZWFyY2hJbmRleD1NYXRoLm1heCgwLE1hdGgubWluKG4ubGVuZ3RoLTEsdGhpcy5hY3RpdmVTZWFyY2hJbmRleCtpKSksdGhpcy5yZXF1ZXN0VXBkYXRlKCk7cmV0dXJufWlmKHRoaXMuc2VhcmNoT3BlbiYmci5rZXk9PT0iRW50ZXIiKXtyLnByZXZlbnREZWZhdWx0KCk7bGV0IG49dGhpcy5zZWFyY2hSZXN1bHRzW3RoaXMuYWN0aXZlU2VhcmNoSW5kZXhdO24mJnRoaXMuc2VsZWN0U2VhcmNoUmVzdWx0KG4pO3JldHVybn1yLmtleT09PSJFc2NhcGUiJiYodGhpcy5zZWFyY2hPcGVuPSExLHRoaXMuc2lkZWJhck9wZW49ITEsdGhpcy52ZXJzaW9uT3Blbj0hMSx0aGlzLmFjdGl2ZVNlYXJjaEluZGV4PTAsdGhpcy5yZXF1ZXN0VXBkYXRlKCkpfSwiaGFuZGxlR2xvYmFsS2V5ZG93biIpO3RoaXMuaGFuZGxlU2Nyb2xsPW8oKCk9PntsZXQgcj10aGlzLmFjdGl2ZVBhZ2U7aWYoIXI/LmhlYWRpbmdzLmxlbmd0aClyZXR1cm47bGV0IG49ci5oZWFkaW5nc1swXS5pZDtmb3IobGV0IGkgb2Ygci5oZWFkaW5ncyl7bGV0IHM9dGhpcy5yZW5kZXJSb290LnF1ZXJ5U2VsZWN0b3IoIiMiK0NTUy5lc2NhcGUoaS5pZCkpO3MmJnMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wPD0xMDQmJihuPWkuaWQpfW4hPT10aGlzLmFjdGl2ZUhlYWRpbmdJZCYmKHRoaXMuYWN0aXZlSGVhZGluZ0lkPW4sdGhpcy5yZXF1ZXN0VXBkYXRlKCkpfSwiaGFuZGxlU2Nyb2xsIik7dGhpcy5oYW5kbGVBcnRpY2xlQ2xpY2s9byhhc3luYyByPT57bGV0IGk9ci50YXJnZXQ/LmNsb3Nlc3QoIltkYXRhLWNvcHktY29kZV0iKTtpZighaSlyZXR1cm47bGV0IHM9aS5jbG9zZXN0KCIuZG9jcy1jb2RlIik/LnF1ZXJ5U2VsZWN0b3IoImNvZGUiKT8udGV4dENvbnRlbnQ/PyIiO2F3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHMpLGkudGV4dENvbnRlbnQ9IkNvcGllZCIsd2luZG93LnNldFRpbWVvdXQoKCk9PntpLnRleHRDb250ZW50PSJDb3B5In0sMTMwMCl9LCJoYW5kbGVBcnRpY2xlQ2xpY2siKX1zdGF0aWN7byh0aGlzLCJUc2RvY0FwcCIpfXN0YXRpY3t0aGlzLnN0eWxlcz1bcjAuZGVmYXVsdFN0eWxlcyxwdGAKICAgICAgOmhvc3QgewogICAgICAgIC0tYWNjZW50OiAjMDA3MWUzOwogICAgICAgIC0tY2FudmFzOiAjMGIwZDEwOwogICAgICAgIC0tc3VyZmFjZTogIzEyMTUxYTsKICAgICAgICAtLXN1cmZhY2UtcmFpc2VkOiAjMTgxYzIyOwogICAgICAgIC0tc3VyZmFjZS1zb2Z0OiAjMjAyNTJkOwogICAgICAgIC0tdGV4dDogI2Y1ZjdmYTsKICAgICAgICAtLXRleHQtc2Vjb25kYXJ5OiAjYTliMGJiOwogICAgICAgIC0tdGV4dC10ZXJ0aWFyeTogIzc0N2Q4YjsKICAgICAgICAtLWxpbmU6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICAtLWhlYWRlci1iZzogcmdiYSgxMSwgMTMsIDE2LCAwLjgyKTsKICAgICAgICAtLWNvZGUtYmc6ICMwOTBiMGU7CiAgICAgICAgLS1zaWRlYmFyLXdpZHRoOiAyNjhweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgICBjb2xvcjogdmFyKC0tdGV4dCk7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY2FudmFzKTsKICAgICAgICBmb250LWZhbWlseTogSW50ZXIsIHVpLXNhbnMtc2VyaWYsIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgc2Fucy1zZXJpZjsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTU7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtnb2JyaWdodF0pIHsKICAgICAgICAtLWNhbnZhczogI2ZmZmZmZjsKICAgICAgICAtLXN1cmZhY2U6ICNmZmZmZmY7CiAgICAgICAgLS1zdXJmYWNlLXJhaXNlZDogI2ZmZmZmZjsKICAgICAgICAtLXN1cmZhY2Utc29mdDogI2Y1ZjVmNzsKICAgICAgICAtLXRleHQ6ICMxZDFkMWY7CiAgICAgICAgLS10ZXh0LXNlY29uZGFyeTogIzUxNTE1NDsKICAgICAgICAtLXRleHQtdGVydGlhcnk6ICM4Njg2OGI7CiAgICAgICAgLS1saW5lOiByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgICAgLS1oZWFkZXItYmc6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NCk7CiAgICAgICAgLS1jb2RlLWJnOiAjZjVmNWY3OwogICAgICB9CgogICAgICAqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQogICAgICBidXR0b24sIGlucHV0IHsgZm9udDogaW5oZXJpdDsgfQogICAgICBidXR0b24sIGEgeyAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OyB9CiAgICAgIGEgeyBjb2xvcjogaW5oZXJpdDsgfQoKICAgICAgLmFwcCB7CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY2FudmFzKTsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHotaW5kZXg6IDQwOwogICAgICAgIGluc2V0OiAwIDAgYXV0byAwOwogICAgICAgIGhlaWdodDogNjFweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbGluZSk7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taGVhZGVyLWJnKTsKICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IHNhdHVyYXRlKDE4MCUpIGJsdXIoMjJweCk7CiAgICAgIH0KCiAgICAgIC5oZWFkZXJfX2lubmVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxNTAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgcGFkZGluZzogMCAyOHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5icmFuZCB7CiAgICAgICAgbWluLXdpZHRoOiAyNDBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICBmb250LXdlaWdodDogNjUwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMThlbTsKICAgICAgfQoKICAgICAgLmJyYW5kX19tYXJrIHsKICAgICAgICB3aWR0aDogMjhweDsKICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNzUwOwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDE2cHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudCkgMzIlLCB0cmFuc3BhcmVudCk7CiAgICAgIH0KCiAgICAgIC5icmFuZF9fYmFkZ2UsIC5zb3VyY2UtYmFkZ2UgewogICAgICAgIHBhZGRpbmc6IDJweCA3cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjY2VudCk7CiAgICAgICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudCkgMTAlLCB0cmFuc3BhcmVudCk7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICB9CgogICAgICAuaGVhZGVyX19zcGFjZXIgeyBmbGV4OiAxOyB9CgogICAgICAuc2VhcmNoLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IG1pbigzNjBweCwgMzJ2dyk7CiAgICAgICAgaGVpZ2h0OiAzNHB4OwogICAgICAgIHBhZGRpbmc6IDAgOHB4IDAgMTJweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA5cHg7CiAgICAgICAgY29sb3I6IHZhcigtLXRleHQtdGVydGlhcnkpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDlweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlLXNvZnQpOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAxNjBtcyBlYXNlLCBiYWNrZ3JvdW5kIDE2MG1zIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtYnV0dG9uOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50KSA0MCUsIHZhcigtLWxpbmUpKTsgfQogICAgICAuc2VhcmNoLWJ1dHRvbiBzcGFuIHsgZmxleDogMTsgfQoKICAgICAga2JkIHsKICAgICAgICBtaW4td2lkdGg6IDI0cHg7CiAgICAgICAgaGVpZ2h0OiAyMXB4OwogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ncmlkOwogICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXRlcnRpYXJ5KTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlLXJhaXNlZCk7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgICB9CgogICAgICAuaWNvbi1idXR0b24sIC5tZW51LWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDM0cHg7CiAgICAgICAgaGVpZ2h0OiAzNHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyOwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLmljb24tYnV0dG9uOmhvdmVyLCAubWVudS1idXR0b246aG92ZXIgeyBjb2xvcjogdmFyKC0tdGV4dCk7IGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2Utc29mdCk7IH0KICAgICAgLm1lbnUtYnV0dG9uIHsgZGlzcGxheTogbm9uZTsgfQogICAgICB0c2RvYy1pY29uIHsgZGlzcGxheTogY29udGVudHM7IH0KICAgICAgc3ZnIHsgd2lkdGg6IDE4cHg7IGhlaWdodDogMThweDsgZmlsbDogbm9uZTsgc3Ryb2tlOiBjdXJyZW50Q29sb3I7IHN0cm9rZS13aWR0aDogMS44OyBzdHJva2UtbGluZWNhcDogcm91bmQ7IHN0cm9rZS1saW5lam9pbjogcm91bmQ7IH0KCiAgICAgIC5sYXlvdXQgewogICAgICAgIG1heC13aWR0aDogMTUwMHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIHBhZGRpbmctdG9wOiA2MXB4OwogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS1zaWRlYmFyLXdpZHRoKSBtaW5tYXgoMCwgMWZyKTsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB6LWluZGV4OiAzMDsKICAgICAgICB0b3A6IDYxcHg7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiB2YXIoLS1zaWRlYmFyLXdpZHRoKTsKICAgICAgICBwYWRkaW5nOiAzMnB4IDIycHggMzZweCAyOHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tbGluZSk7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY2FudmFzKTsKICAgICAgfQoKICAgICAgLnZlcnNpb24gewogICAgICAgIGhlaWdodDogMzRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2UpOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQoKICAgICAgLnZlcnNpb24gc3Ryb25nIHsgY29sb3I6IHZhcigtLXRleHQpOyBmb250LXdlaWdodDogNjAwOyB9CiAgICAgIC5uYXYtc2VjdGlvbiB7IG1hcmdpbjogMCAwIDI0cHg7IH0KICAgICAgLm5hdi1zZWN0aW9uX190aXRsZSB7CiAgICAgICAgbWFyZ2luOiAwIDEwcHggN3B4OwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXRlcnRpYXJ5KTsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNjVlbTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICB9CgogICAgICAubmF2LWxpbmsgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1pbi1oZWlnaHQ6IDM0cHg7CiAgICAgICAgcGFkZGluZzogN3B4IDEwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDdweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjU7CiAgICAgIH0KCiAgICAgIC5uYXYtbGluazpob3ZlciB7IGNvbG9yOiB2YXIoLS10ZXh0KTsgYmFja2dyb3VuZDogdmFyKC0tc3VyZmFjZS1zb2Z0KTsgfQogICAgICAubmF2LWxpbmstLWFjdGl2ZSB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjY2VudCk7CiAgICAgICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudCkgMTAlLCB0cmFuc3BhcmVudCk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQoKICAgICAgLm1haW4gewogICAgICAgIGdyaWQtY29sdW1uOiAyOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDc5MHB4KSAyMjBweDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBnYXA6IDcycHg7CiAgICAgICAgcGFkZGluZzogNjJweCA1MnB4IDkwcHg7CiAgICAgIH0KCiAgICAgIC5hcnRpY2xlIHsgbWluLXdpZHRoOiAwOyB9CiAgICAgIC5hcnRpY2xlX19leWVicm93IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2NTA7CiAgICAgIH0KCiAgICAgIC5hcnRpY2xlIGgxIHsKICAgICAgICBtYXJnaW46IDExcHggMCAxM3B4OwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0KTsKICAgICAgICBmb250LXNpemU6IGNsYW1wKDM0cHgsIDV2dywgNDhweCk7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMDg7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjA0NWVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgIH0KCiAgICAgIC5hcnRpY2xlX19kZXNjcmlwdGlvbiB7CiAgICAgICAgbWF4LXdpZHRoOiA2ODBweDsKICAgICAgICBtYXJnaW46IDAgMCA0MnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7CiAgICAgICAgZm9udC1zaXplOiAxOXB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxMmVtOwogICAgICB9CgogICAgICAuZG9jcy1jb250ZW50IHsgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsgfQogICAgICAuZG9jcy1jb250ZW50IGgyIHsKICAgICAgICBtYXJnaW46IDU0cHggMCAxN3B4OwogICAgICAgIHBhZGRpbmctdG9wOiA0cHg7CiAgICAgICAgY29sb3I6IHZhcigtLXRleHQpOwogICAgICAgIGZvbnQtc2l6ZTogMjZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yMjsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KCiAgICAgIC5kb2NzLWNvbnRlbnQgaDMgewogICAgICAgIG1hcmdpbjogMzRweCAwIDEycHg7CiAgICAgICAgY29sb3I6IHZhcigtLXRleHQpOwogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMTJlbTsKICAgICAgfQoKICAgICAgLmRvY3MtY29udGVudCBwIHsgbWFyZ2luOiAwIDAgMThweDsgfQogICAgICAuZG9jcy1jb250ZW50IGEgeyBjb2xvcjogdmFyKC0tYWNjZW50KTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9CiAgICAgIC5kb2NzLWNvbnRlbnQgYTpob3ZlciB7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9CiAgICAgIC5kb2NzLWNvbnRlbnQgc3Ryb25nIHsgY29sb3I6IHZhcigtLXRleHQpOyBmb250LXdlaWdodDogNjUwOyB9CiAgICAgIC5kb2NzLWNvbnRlbnQgdWwsIC5kb2NzLWNvbnRlbnQgb2wgeyBtYXJnaW46IDAgMCAyMnB4OyBwYWRkaW5nLWxlZnQ6IDI0cHg7IH0KICAgICAgLmRvY3MtY29udGVudCBsaSB7IG1hcmdpbjogOHB4IDA7IHBhZGRpbmctbGVmdDogM3B4OyB9CiAgICAgIC5kb2NzLWNvbnRlbnQgaW1nIHsgbWF4LXdpZHRoOiAxMDAlOyBoZWlnaHQ6IGF1dG87IG1hcmdpbjogMjJweCAwOyBib3JkZXItcmFkaXVzOiAxMnB4OyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saW5lKTsgfQogICAgICAuZG9jcy1jb250ZW50IGJsb2NrcXVvdGUgewogICAgICAgIG1hcmdpbjogMjRweCAwOwogICAgICAgIHBhZGRpbmc6IDE1cHggMThweDsKICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOwogICAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0tYWNjZW50KTsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDhweCA4cHggMDsKICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50KSA3JSwgdHJhbnNwYXJlbnQpOwogICAgICB9CgogICAgICAuZG9jcy1jb250ZW50IDpub3QocHJlKSA+IGNvZGUsIC5kb2NzLXR5cGUsIC5kb2NzLXBpbGwgewogICAgICAgIGZvbnQtZmFtaWx5OiAiU0ZNb25vLVJlZ3VsYXIiLCBDb25zb2xhcywgIkxpYmVyYXRpb24gTW9ubyIsIG1vbm9zcGFjZTsKICAgICAgfQoKICAgICAgLmRvY3MtY29udGVudCA6bm90KHByZSkgPiBjb2RlIHsKICAgICAgICBwYWRkaW5nOiAycHggNXB4OwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0KTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saW5lKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc3VyZmFjZS1zb2Z0KTsKICAgICAgICBmb250LXNpemU6IDAuODhlbTsKICAgICAgfQoKICAgICAgLmRvY3MtY29kZSB7CiAgICAgICAgbWFyZ2luOiAyNHB4IDAgMjhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDExcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29kZS1iZyk7CiAgICAgIH0KCiAgICAgIC5kb2NzLWNvZGVfX2hlYWRlciB7CiAgICAgICAgaGVpZ2h0OiAzOHB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweCAwIDE1cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC10ZXJ0aWFyeSk7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWxpbmUpOwogICAgICAgIGZvbnQ6IDExcHgvMSAiU0ZNb25vLVJlZ3VsYXIiLCBDb25zb2xhcywgbW9ub3NwYWNlOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH0KCiAgICAgIC5kb2NzLWNvZGVfX2hlYWRlciBidXR0b24gewogICAgICAgIHBhZGRpbmc6IDRweCA3cHg7CiAgICAgICAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC5kb2NzLWNvZGVfX2hlYWRlciBidXR0b246aG92ZXIgeyBjb2xvcjogdmFyKC0tdGV4dCk7IGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2Utc29mdCk7IH0KICAgICAgLmRvY3MtY29kZSBwcmUgeyBtYXJnaW46IDA7IHBhZGRpbmc6IDE4cHggMjBweCAyMHB4OyBvdmVyZmxvdy14OiBhdXRvOyB9CiAgICAgIC5kb2NzLWNvZGUgY29kZSB7IGNvbG9yOiB2YXIoLS10ZXh0KTsgZm9udDogMTNweC8xLjY1ICJTRk1vbm8tUmVndWxhciIsIENvbnNvbGFzLCAiTGliZXJhdGlvbiBNb25vIiwgbW9ub3NwYWNlOyB9CgogICAgICAuZG9jcy1hcGkta2luZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgbWFyZ2luOiAwIDAgMThweDsKICAgICAgICBwYWRkaW5nOiA0cHggOXB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQpIDEwJSwgdHJhbnNwYXJlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgfQoKICAgICAgLmRvY3Mtc2lnbmF0dXJlIHsKICAgICAgICBtYXJnaW46IDE2cHggMCAyNHB4OwogICAgICAgIHBhZGRpbmc6IDE1cHggMTdweDsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0KTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saW5lKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29kZS1iZyk7CiAgICAgIH0KCiAgICAgIC5kb2NzLXNpZ25hdHVyZSBjb2RlIHsgZm9udDogMTNweC8xLjY1ICJTRk1vbm8tUmVndWxhciIsIENvbnNvbGFzLCBtb25vc3BhY2U7IH0KICAgICAgLmRvY3MtYXBpLW1lbWJlciwgLmRvY3MtZW5kcG9pbnQgeyBzY3JvbGwtbWFyZ2luLXRvcDogODRweDsgfQogICAgICAuZG9jcy1wYXJhbWV0ZXJzIHsgbWFyZ2luOiAxNnB4IDAgMjZweDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWxpbmUpOyB9CiAgICAgIC5kb2NzLXBhcmFtZXRlciB7IHBhZGRpbmc6IDE1cHggMDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWxpbmUpOyB9CiAgICAgIC5kb2NzLXBhcmFtZXRlciA+IGRpdjpmaXJzdC1jaGlsZCB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOXB4OyBmbGV4LXdyYXA6IHdyYXA7IGNvbG9yOiB2YXIoLS10ZXh0KTsgfQogICAgICAuZG9jcy1wYXJhbWV0ZXIgcCB7IG1hcmdpbjogN3B4IDAgMDsgZm9udC1zaXplOiAxM3B4OyB9CiAgICAgIC5kb2NzLXR5cGUgeyBjb2xvcjogdmFyKC0tdGV4dC10ZXJ0aWFyeSk7IGZvbnQtc2l6ZTogMTJweDsgfQogICAgICAuZG9jcy1waWxsIHsgcGFkZGluZzogMnB4IDZweDsgY29sb3I6IHZhcigtLXRleHQtdGVydGlhcnkpOyBib3JkZXItcmFkaXVzOiA5OTlweDsgYmFja2dyb3VuZDogdmFyKC0tc3VyZmFjZS1zb2Z0KTsgZm9udC1zaXplOiA5cHg7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KICAgICAgLmRvY3MtcGlsbC0tcmVxdWlyZWQgeyBjb2xvcjogdmFyKC0tYWNjZW50KTsgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudCkgMTAlLCB0cmFuc3BhcmVudCk7IH0KICAgICAgLmRvY3MtbWV0aG9kIHsgZGlzcGxheTogaW5saW5lLWZsZXg7IHdpZHRoOiA1OHB4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgcGFkZGluZzogNXB4IDdweDsgYm9yZGVyLXJhZGl1czogNnB4OyBjb2xvcjogI2ZmZjsgYmFja2dyb3VuZDogIzZlNzc4MTsgZm9udC1zaXplOiAxMHB4OyBsZXR0ZXItc3BhY2luZzogMC4wNGVtOyB2ZXJ0aWNhbC1hbGlnbjogM3B4OyB9CiAgICAgIC5kb2NzLW1ldGhvZC0tZ2V0IHsgYmFja2dyb3VuZDogIzE2ODE1YTsgfQogICAgICAuZG9jcy1tZXRob2QtLXBvc3QgeyBiYWNrZ3JvdW5kOiAjMDA3MWUzOyB9CiAgICAgIC5kb2NzLW1ldGhvZC0tcHV0LCAuZG9jcy1tZXRob2QtLXBhdGNoIHsgYmFja2dyb3VuZDogI2FhNjUwMDsgfQogICAgICAuZG9jcy1tZXRob2QtLWRlbGV0ZSB7IGJhY2tncm91bmQ6ICNjNDM3Mzc7IH0KCiAgICAgIC5kb2NzLXRhYmxlLXdyYXAgeyBtYXJnaW46IDIwcHggMCAzMHB4OyBvdmVyZmxvdy14OiBhdXRvOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czogOXB4OyB9CiAgICAgIC5kb2NzLWNvbnRlbnQgdGFibGUgeyB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgZm9udC1zaXplOiAxM3B4OyB9CiAgICAgIC5kb2NzLWNvbnRlbnQgdGgsIC5kb2NzLWNvbnRlbnQgdGQgeyBwYWRkaW5nOiAxMXB4IDEzcHg7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1saW5lKTsgdGV4dC1hbGlnbjogbGVmdDsgdmVydGljYWwtYWxpZ246IHRvcDsgfQogICAgICAuZG9jcy1jb250ZW50IHRoIHsgY29sb3I6IHZhcigtLXRleHQpOyBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlLXNvZnQpOyBmb250LXdlaWdodDogNjAwOyB9CiAgICAgIC5kb2NzLWNvbnRlbnQgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZCB7IGJvcmRlci1ib3R0b206IDA7IH0KCiAgICAgIC5wYWdlciB7CiAgICAgICAgbWFyZ2luLXRvcDogNzBweDsKICAgICAgICBwYWRkaW5nLXRvcDogMjJweDsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgICAgICBnYXA6IDE0cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWxpbmUpOwogICAgICB9CgogICAgICAucGFnZXJfX2xpbmsgewogICAgICAgIG1pbi1oZWlnaHQ6IDcwcHg7CiAgICAgICAgcGFkZGluZzogMTNweCAxNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDlweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlKTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC5wYWdlcl9fbGluazpob3ZlciB7IGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudCkgNDUlLCB2YXIoLS1saW5lKSk7IH0KICAgICAgLnBhZ2VyX19saW5rLS1uZXh0IHsgdGV4dC1hbGlnbjogcmlnaHQ7IH0KICAgICAgLnBhZ2VyX19sYWJlbCB7IGNvbG9yOiB2YXIoLS10ZXh0LXRlcnRpYXJ5KTsgZm9udC1zaXplOiAxMXB4OyB9CiAgICAgIC5wYWdlcl9fdGl0bGUgeyBjb2xvcjogdmFyKC0tYWNjZW50KTsgZm9udC1zaXplOiAxM3B4OyBmb250LXdlaWdodDogNjAwOyB9CgogICAgICAub3V0bGluZSB7CiAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICB0b3A6IDk2cHg7CiAgICAgICAgYWxpZ24tc2VsZjogc3RhcnQ7CiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDEyMHB4KTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAub3V0bGluZV9fdGl0bGUgeyBtYXJnaW4tYm90dG9tOiAxMHB4OyBjb2xvcjogdmFyKC0tdGV4dCk7IGZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IDY1MDsgfQogICAgICAub3V0bGluZV9fbGluayB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZzogNXB4IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgY29sb3I6IHZhcigtLXRleHQtdGVydGlhcnkpOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgICAgfQoKICAgICAgLm91dGxpbmVfX2xpbmstLW5lc3RlZCB7IHBhZGRpbmctbGVmdDogMTJweDsgfQogICAgICAub3V0bGluZV9fbGluazpob3ZlciB7IGNvbG9yOiB2YXIoLS1hY2NlbnQpOyB9CgogICAgICAuZW1wdHksIC5sb2FkaW5nLCAuZXJyb3IgewogICAgICAgIG1heC13aWR0aDogNTYwcHg7CiAgICAgICAgbWFyZ2luOiAxMjBweCBhdXRvOwogICAgICAgIHBhZGRpbmc6IDMycHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7CiAgICAgIH0KCiAgICAgIC5lbXB0eSBoMSwgLmVycm9yIGgxIHsgY29sb3I6IHZhcigtLXRleHQpOyBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTsgfQogICAgICAuZXJyb3IgY29kZSB7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW4tdG9wOiAxMnB4OyBjb2xvcjogI2QzMzsgfQoKICAgICAgLnNjcmltIHsgZGlzcGxheTogbm9uZTsgfQogICAgICAuc2VhcmNoLW1vZGFsIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgei1pbmRleDogODA7CiAgICAgICAgaW5zZXQ6IDA7CiAgICAgICAgcGFkZGluZzogMTJ2aCAyMHB4IDIwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNDIpOwogICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig3cHgpOwogICAgICB9CgogICAgICAuc2VhcmNoLXBhbmVsIHsKICAgICAgICB3aWR0aDogbWluKDY1MHB4LCAxMDAlKTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc3VyZmFjZS1yYWlzZWQpOwogICAgICAgIGJveC1zaGFkb3c6IDAgMjhweCA4MHB4IHJnYmEoMCwgMCwgMCwgMC4yOCk7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtaW5wdXQtd3JhcCB7CiAgICAgICAgaGVpZ2h0OiA1OHB4OwogICAgICAgIHBhZGRpbmc6IDAgMTdweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1saW5lKTsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pbnB1dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgICAgY29sb3I6IHZhcigtLXRleHQpOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBvdXRsaW5lOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGZvbnQtc2l6ZTogMTdweDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1yZXN1bHRzIHsgbWF4LWhlaWdodDogbWluKDQ4MHB4LCA2MnZoKTsgcGFkZGluZzogOHB4OyBvdmVyZmxvdy15OiBhdXRvOyB9CiAgICAgIC5zZWFyY2gtcmVzdWx0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAxMXB4IDEycHg7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciBhdXRvOwogICAgICAgIGdhcDogNXB4IDE0cHg7CiAgICAgICAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAuc2VhcmNoLXJlc3VsdDpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2Utc29mdCk7IH0KICAgICAgLnNlYXJjaC1yZXN1bHRfX3RpdGxlIHsgY29sb3I6IHZhcigtLXRleHQpOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IH0KICAgICAgLnNlYXJjaC1yZXN1bHRfX3NlY3Rpb24geyBjb2xvcjogdmFyKC0tdGV4dC10ZXJ0aWFyeSk7IGZvbnQtc2l6ZTogMTFweDsgfQogICAgICAuc2VhcmNoLXJlc3VsdF9fZXhjZXJwdCB7IGdyaWQtY29sdW1uOiAxIC8gLTE7IG92ZXJmbG93OiBoaWRkZW47IGNvbG9yOiB2YXIoLS10ZXh0LXRlcnRpYXJ5KTsgZm9udC1zaXplOiAxMnB4OyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfQogICAgICAuc2VhcmNoLWVtcHR5IHsgcGFkZGluZzogMzJweCAxNnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiB2YXIoLS10ZXh0LXRlcnRpYXJ5KTsgfQoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDExOTlweCkgewogICAgICAgIC5tYWluIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgNzkwcHgpOyB9CiAgICAgICAgLm91dGxpbmUgeyBkaXNwbGF5OiBub25lOyB9CiAgICAgIH0KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5NTlweCkgewogICAgICAgIC5oZWFkZXJfX2lubmVyIHsgcGFkZGluZzogMCAxNnB4OyBnYXA6IDEwcHg7IH0KICAgICAgICAuYnJhbmQgeyBtaW4td2lkdGg6IDA7IGZsZXg6IDE7IH0KICAgICAgICAuYnJhbmRfX2JhZGdlIHsgZGlzcGxheTogbm9uZTsgfQogICAgICAgIC5oZWFkZXJfX3NwYWNlciB7IGRpc3BsYXk6IG5vbmU7IH0KICAgICAgICAubWVudS1idXR0b24geyBkaXNwbGF5OiBncmlkOyB9CiAgICAgICAgLnNlYXJjaC1idXR0b24geyB3aWR0aDogMzRweDsgcGFkZGluZzogMDsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyB9CiAgICAgICAgLnNlYXJjaC1idXR0b24gc3BhbiwgLnNlYXJjaC1idXR0b24ga2JkIHsgZGlzcGxheTogbm9uZTsgfQogICAgICAgIC5sYXlvdXQgeyBkaXNwbGF5OiBibG9jazsgfQogICAgICAgIC5zaWRlYmFyIHsKICAgICAgICAgIHdpZHRoOiBtaW4oMzEwcHgsIDg2dncpOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDUlKTsKICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyMjBtcyBjdWJpYy1iZXppZXIoLjIsIC44LCAuMiwgMSksIHZpc2liaWxpdHkgMHMgbGluZWFyIDIyMG1zOwogICAgICAgICAgYm94LXNoYWRvdzogMThweCAwIDQ1cHggcmdiYSgwLCAwLCAwLCAwLjE4KTsKICAgICAgICB9CiAgICAgICAgLnNpZGViYXItLW9wZW4gewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwogICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyMjBtcyBjdWJpYy1iZXppZXIoLjIsIC44LCAuMiwgMSk7CiAgICAgICAgfQogICAgICAgIC5zY3JpbSB7CiAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICB6LWluZGV4OiAyNTsKICAgICAgICAgIGluc2V0OiA2MXB4IDAgMDsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjI4KTsKICAgICAgICB9CiAgICAgICAgLm1haW4geyBwYWRkaW5nOiA0NnB4IDI0cHggNzJweDsgfQogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogNTYwcHgpIHsKICAgICAgICAuYnJhbmRfX25hbWUgeyBtYXgtd2lkdGg6IDQ1dnc7IG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9CiAgICAgICAgLmhlYWRlcl9faW5uZXIgeyBwYWRkaW5nOiAwIDEycHg7IH0KICAgICAgICAubWFpbiB7IHBhZGRpbmc6IDM0cHggMTlweCA2MHB4OyB9CiAgICAgICAgLmFydGljbGUgaDEgeyBmb250LXNpemU6IDM1cHg7IH0KICAgICAgICAuYXJ0aWNsZV9fZGVzY3JpcHRpb24geyBtYXJnaW4tYm90dG9tOiAzMnB4OyBmb250LXNpemU6IDE3cHg7IH0KICAgICAgICAuZG9jcy1jb250ZW50IGgyIHsgbWFyZ2luLXRvcDogNDRweDsgZm9udC1zaXplOiAyM3B4OyB9CiAgICAgICAgLnBhZ2VyIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IH0KICAgICAgICAucGFnZXJfX2xpbmstLW5leHQgeyB0ZXh0LWFsaWduOiBsZWZ0OyB9CiAgICAgICAgLnNlYXJjaC1tb2RhbCB7IHBhZGRpbmc6IDhweDsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IH0KICAgICAgICAuc2VhcmNoLXBhbmVsIHsgbWFyZ2luLXRvcDogNTBweDsgfQogICAgICB9CgogICAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogICAgICAgICosICo6OmJlZm9yZSwgKjo6YWZ0ZXIgeyBzY3JvbGwtYmVoYXZpb3I6IGF1dG8gIWltcG9ydGFudDsgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4wMW1zICFpbXBvcnRhbnQ7IH0KICAgICAgfQogICAgYCxwdGAKICAgICAgOmhvc3QgewogICAgICAgIC0tYWNjZW50OiAjNWI1M2U2OwogICAgICAgIC0tY2FudmFzOiAjMDAwOwogICAgICAgIC0tc3VyZmFjZTogIzAwMDsKICAgICAgICAtLXN1cmZhY2UtcmFpc2VkOiAjMWQxZDFmOwogICAgICAgIC0tc3VyZmFjZS1zb2Z0OiAjMmMyYzJlOwogICAgICAgIC0tdGV4dDogI2Y1ZjVmNzsKICAgICAgICAtLXRleHQtc2Vjb25kYXJ5OiAjZDZkNmRiOwogICAgICAgIC0tdGV4dC10ZXJ0aWFyeTogIzg2ODY4YjsKICAgICAgICAtLWxpbmU6ICMzODM4M2E7CiAgICAgICAgLS1saW5lLXN0cm9uZzogIzQ4NDg0YTsKICAgICAgICAtLWhlYWRlci1iZzogcmdiYSgyMiwgMjIsIDIzLCAwLjcyKTsKICAgICAgICAtLWNvZGUtYmc6ICMxZDFkMWY7CiAgICAgICAgLS1jb2RlLWhlYWRlci1iZzogIzE2MTYxNzsKICAgICAgICAtLW5vdGU6ICM2Y2I0ZmY7CiAgICAgICAgLS1ub3RlLWJnOiByZ2JhKDQxLCAxNTEsIDI1NSwgMC4xNSk7CiAgICAgICAgLS13YXJuOiAjZmZiNzY1OwogICAgICAgIC0td2Fybi1iZzogcmdiYSgyNTUsIDE1OSwgMTAsIDAuMTUpOwogICAgICAgIC0tc2lkZWJhci13aWR0aDogMjY4cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NGIFBybyBEaXNwbGF5JywgJ1NGIFBybyBUZXh0JywgJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNzI7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAgICAgfQoKICAgICAgOmhvc3QoW2dvYnJpZ2h0XSkgewogICAgICAgIC0tY2FudmFzOiAjZmZmOwogICAgICAgIC0tc3VyZmFjZTogI2ZmZjsKICAgICAgICAtLXN1cmZhY2UtcmFpc2VkOiAjZmJmYmZkOwogICAgICAgIC0tc3VyZmFjZS1zb2Z0OiAjZjVmNWY3OwogICAgICAgIC0tdGV4dDogIzFkMWQxZjsKICAgICAgICAtLXRleHQtc2Vjb25kYXJ5OiAjMzMzMzM2OwogICAgICAgIC0tdGV4dC10ZXJ0aWFyeTogIzg2ODY4YjsKICAgICAgICAtLWxpbmU6ICNkMmQyZDc7CiAgICAgICAgLS1saW5lLXN0cm9uZzogI2MwYzBjNjsKICAgICAgICAtLWhlYWRlci1iZzogcmdiYSgyNTEsIDI1MSwgMjUzLCAwLjcyKTsKICAgICAgICAtLWNvZGUtYmc6ICNmNWY1Zjc7CiAgICAgICAgLS1jb2RlLWhlYWRlci1iZzogI2VjZWNlZjsKICAgICAgICAtLW5vdGU6ICMwMDY4Yzk7CiAgICAgICAgLS1ub3RlLWJnOiAjZWFmM2ZkOwogICAgICAgIC0td2FybjogI2JmNTAwMDsKICAgICAgICAtLXdhcm4tYmc6ICNmZGYxZTc7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgdHNkb2MtZmFkZSB7CiAgICAgICAgZnJvbSB7IG9wYWNpdHk6IDA7IH0KICAgICAgICB0byB7IG9wYWNpdHk6IDE7IH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyB0c2RvYy1wb3AgewogICAgICAgIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoOHB4KSBzY2FsZSgwLjk4NSk7IH0KICAgICAgICB0byB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogbm9uZTsgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHRzZG9jLXJpc2UgewogICAgICAgIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoN3B4KTsgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBub25lOyB9CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgewogICAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgICAgaW5zZXQ6IGF1dG87CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDUwOwogICAgICAgIGhlaWdodDogNjFweDsKICAgICAgICBwYWRkaW5nOiAwIDIycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTRweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbGluZSk7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taGVhZGVyLWJnKTsKICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IHNhdHVyYXRlKDE4MCUpIGJsdXIoMjBweCk7CiAgICAgIH0KCiAgICAgIC5oZWFkZXJfX2lubmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IG5vbmU7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTRweDsKICAgICAgfQoKICAgICAgLmJyYW5kIHsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0KTsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsKICAgICAgfQoKICAgICAgLmJyYW5kX19tYXJrIHsKICAgICAgICB3aWR0aDogMjVweDsKICAgICAgICBoZWlnaHQ6IDI1cHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgY29sb3I6IHZhcigtLWFjY2VudCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5icmFuZF9fYmFkZ2UgewogICAgICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICAgICAgY29sb3I6IHZhcigtLXRleHQtdGVydGlhcnkpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlLXNvZnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICB9CgogICAgICAubWVudS1idXR0b24sCiAgICAgIC5pY29uLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXRlcnRpYXJ5KTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1saW5lKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY2FudmFzKTsKICAgICAgfQoKICAgICAgLm1lbnUtYnV0dG9uOmhvdmVyLAogICAgICAuaWNvbi1idXR0b246aG92ZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0KTsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWxpbmUtc3Ryb25nKTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jYW52YXMpOwogICAgICB9CgogICAgICAudmVyc2lvbi1waWNrZXIgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH0KCiAgICAgIC52ZXJzaW9uLWJ1dHRvbiB7CiAgICAgICAgaGVpZ2h0OiAzMHB4OwogICAgICAgIHBhZGRpbmc6IDAgOHB4IDAgMTFweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgY29sb3I6IHZhcigtLXRleHQtdGVydGlhcnkpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jYW52YXMpOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnZlcnNpb24tYnV0dG9uOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS1saW5lLXN0cm9uZyk7IH0KICAgICAgLnZlcnNpb24tYnV0dG9uIHNwYW4sCiAgICAgIC52ZXJzaW9uLW9wdGlvbiBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGV4dCk7CiAgICAgICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTIuNXB4OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwOwogICAgICB9CgogICAgICAudmVyc2lvbi1idXR0b24gc3ZnIHsgd2lkdGg6IDEzcHg7IGhlaWdodDogMTNweDsgc3Ryb2tlLXdpZHRoOiAyLjM7IH0KCiAgICAgIC52ZXJzaW9uLXNjcmltIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgei1pbmRleDogNTU7CiAgICAgICAgaW5zZXQ6IDA7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAudmVyc2lvbi1tZW51IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgei1pbmRleDogNjA7CiAgICAgICAgdG9wOiBjYWxjKDEwMCUgKyA3cHgpOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgbWluLXdpZHRoOiAxODZweDsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jYW52YXMpOwogICAgICAgIGJveC1zaGFkb3c6IDAgMTRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xNik7CiAgICAgICAgYW5pbWF0aW9uOiB0c2RvYy1wb3AgMTQwbXMgZWFzZTsKICAgICAgfQoKICAgICAgLnZlcnNpb24tb3B0aW9uIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiA3cHggMTBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBjb2xvcjogdmFyKC0tdGV4dCk7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDdweDsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAudmVyc2lvbi1vcHRpb246aG92ZXIgeyBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50KSAxMCUsIHRyYW5zcGFyZW50KTsgfQogICAgICAudmVyc2lvbi1vcHRpb24gc3ZnIHsgd2lkdGg6IDE0cHg7IGhlaWdodDogMTRweDsgY29sb3I6IHZhcigtLWFjY2VudCk7IHN0cm9rZS13aWR0aDogMi42OyB9CgogICAgICAuc2VhcmNoLWJ1dHRvbiB7CiAgICAgICAgbWluLXdpZHRoOiAyNDBweDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgICAgcGFkZGluZzogMCA5cHggMCAxM3B4OwogICAgICAgIGdhcDogOXB4OwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXRlcnRpYXJ5KTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2Utc29mdCk7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtYnV0dG9uOmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWxpbmUtc3Ryb25nKTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jYW52YXMpOwogICAgICB9CgogICAgICAuc2VhcmNoLWJ1dHRvbiBzcGFuIHsgZm9udC1zaXplOiAxMy41cHg7IH0KICAgICAgLnNlYXJjaC1idXR0b24gc3ZnIHsgd2lkdGg6IDE1cHg7IGhlaWdodDogMTVweDsgfQogICAgICBrYmQgewogICAgICAgIG1pbi13aWR0aDogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgcGFkZGluZzogMXB4IDVweDsKICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC10ZXJ0aWFyeSk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZSk7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ1OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwOwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQgewogICAgICAgIG1heC13aWR0aDogMTQ0MHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSA2MXB4KTsKICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICBwYWRkaW5nLXRvcDogMDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDI2OHB4IG1pbm1heCgwLCAxZnIpIDI0MHB4OwogICAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgICAgei1pbmRleDogMzA7CiAgICAgICAgdG9wOiA2MXB4OwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSA2MXB4KTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWxpbmUpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNhbnZhcyk7CiAgICAgIH0KCiAgICAgIC5uYXYgeyBwYWRkaW5nOiAyMnB4IDEycHggNDhweCAxOHB4OyB9CiAgICAgIC5uYXYtc2VjdGlvbiB7IG1hcmdpbjogMCAwIDRweDsgfQoKICAgICAgLm5hdi1zZWN0aW9uX19idXR0b24gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDdweCA4cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOXB4OwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0KTsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAubmF2LXNlY3Rpb25fX2J1dHRvbjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2Utc29mdCk7IH0KICAgICAgLm5hdi1zZWN0aW9uX19pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgZmxleDogbm9uZTsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQpOwogICAgICB9CiAgICAgIC5uYXYtc2VjdGlvbl9faWNvbiBzdmcgeyB3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4OyBkaXNwbGF5OiBibG9jazsgfQogICAgICAubmF2LXNlY3Rpb25fX3RpdGxlIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZmxleDogMTsKICAgICAgICBjb2xvcjogdmFyKC0tdGV4dCk7CiAgICAgICAgZm9udC1zaXplOiAxMi41cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgICAgLm5hdi1zZWN0aW9uX19jaGV2cm9uIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgZmxleDogbm9uZTsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXRlcnRpYXJ5KTsKICAgICAgICBzdHJva2Utd2lkdGg6IDIuMjsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTUwbXMgZWFzZTsKICAgICAgfQogICAgICAubmF2LXNlY3Rpb25fX2NoZXZyb24gc3ZnIHsgd2lkdGg6IDE0cHg7IGhlaWdodDogMTRweDsgZGlzcGxheTogYmxvY2s7IH0KICAgICAgLm5hdi1zZWN0aW9uX19jaGV2cm9uLS1jb2xsYXBzZWQgeyB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpOyB9CgogICAgICAubmF2LXNlY3Rpb25fX3BhZ2VzIHsKICAgICAgICBtYXJnaW46IDJweCAwIDEwcHggMTdweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDExcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMXB4OwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tbGluZSk7CiAgICAgIH0KCiAgICAgIC5uYXYtbGluayB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiA2cHggMTFweDsKICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC10ZXJ0aWFyeSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNDUwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ1OwogICAgICB9CgogICAgICAubmF2LWxpbms6aG92ZXIgeyBjb2xvcjogdmFyKC0tdGV4dCk7IGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQpIDEwJSwgdHJhbnNwYXJlbnQpOyB9CiAgICAgIC5uYXYtbGluay0tYWN0aXZlIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWNjZW50KTsKICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50KSAxMCUsIHRyYW5zcGFyZW50KTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CgogICAgICAubWFpbiB7CiAgICAgICAgZ3JpZC1jb2x1bW46IGF1dG87CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDM4cHggNTRweCA5NnB4OwogICAgICB9CgogICAgICAuYXJ0aWNsZSB7CiAgICAgICAgbWF4LXdpZHRoOiA3NzJweDsKICAgICAgICBhbmltYXRpb246IHRzZG9jLXJpc2UgMjgwbXMgZWFzZTsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWJzIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC10ZXJ0aWFyeSk7CiAgICAgICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40NTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMDsKICAgICAgfQogICAgICAuYnJlYWRjcnVtYnNfX3NlcGFyYXRvciB7IG9wYWNpdHk6IDAuNTsgfQogICAgICAuYnJlYWRjcnVtYnNfX3BhZ2UgeyBjb2xvcjogdmFyKC0tdGV4dC10ZXJ0aWFyeSk7IH0KCiAgICAgIC52ZXJzaW9uLWJhbm5lciB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTFweDsKICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOwogICAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0td2Fybik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS13YXJuLWJnKTsKICAgICAgICBmb250LXNpemU6IDEzLjVweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CiAgICAgIC52ZXJzaW9uLWJhbm5lciBzdmcgeyB3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4OyBmbGV4OiBub25lOyBjb2xvcjogdmFyKC0td2Fybik7IH0KICAgICAgLnZlcnNpb24tYmFubmVyIHNwYW4geyBmbGV4OiAxOyB9CiAgICAgIC52ZXJzaW9uLWJhbm5lciBzdHJvbmcgeyBjb2xvcjogdmFyKC0tdGV4dCk7IGZvbnQtd2VpZ2h0OiA2MDA7IH0KICAgICAgLnZlcnNpb24tYmFubmVyIGJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjb2xvcjogdmFyKC0tYWNjZW50KTsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMi41cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYXJ0aWNsZSBoMSB7CiAgICAgICAgbWFyZ2luOiAwIDAgMzBweDsKICAgICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4wODsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTsKICAgICAgfQoKICAgICAgLmFydGljbGVfX2Rlc2NyaXB0aW9uIHsKICAgICAgICBtYXgtd2lkdGg6IG5vbmU7CiAgICAgICAgbWFyZ2luOiAwIDAgMThweDsKICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogMS43MjsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLmRvY3MtY29udGVudCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNzI7CiAgICAgIH0KCiAgICAgIC5kb2NzLWNvbnRlbnQgaDIgewogICAgICAgIG1hcmdpbjogNDZweCAwIDE1cHg7CiAgICAgICAgcGFkZGluZy10b3A6IDA7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsKICAgICAgICBzY3JvbGwtbWFyZ2luLXRvcDogODJweDsKICAgICAgfQoKICAgICAgLmRvY3MtY29udGVudCBoMyB7CiAgICAgICAgbWFyZ2luOiAzMHB4IDAgMTFweDsKICAgICAgICBmb250LXNpemU6IDE2LjVweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgICAgIHNjcm9sbC1tYXJnaW4tdG9wOiA4MnB4OwogICAgICB9CgogICAgICAuZG9jcy1jb250ZW50IHAgeyBtYXJnaW4tYm90dG9tOiAxOHB4OyB9CiAgICAgIC5kb2NzLWNvbnRlbnQgdWwsCiAgICAgIC5kb2NzLWNvbnRlbnQgb2wgeyBtYXJnaW4tYm90dG9tOiAyMHB4OyBwYWRkaW5nLWxlZnQ6IDIycHg7IH0KICAgICAgLmRvY3MtY29udGVudCBsaSB7IG1hcmdpbjogN3B4IDA7IH0KICAgICAgLmRvY3MtY29udGVudCBsaTo6bWFya2VyIHsgY29sb3I6IHZhcigtLWFjY2VudCk7IH0KICAgICAgLmRvY3MtY29udGVudCBibG9ja3F1b3RlIHsKICAgICAgICBtYXJnaW46IDAgMCAyMHB4OwogICAgICAgIHBhZGRpbmc6IDEzcHggMTdweDsKICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOwogICAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0tbm90ZSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ub3RlLWJnKTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjI7CiAgICAgIH0KCiAgICAgIC5kb2NzLWNvbnRlbnQgOm5vdChwcmUpID4gY29kZSB7CiAgICAgICAgcGFkZGluZzogMC4xMmVtIDAuNGVtOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlLXNvZnQpOwogICAgICAgIGZvbnQtc2l6ZTogMC44NmVtOwogICAgICB9CgogICAgICAuZG9jcy1jb2RlIHsKICAgICAgICBtYXJnaW46IDAgMCAyMXB4OwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbGluZSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTRweDsKICAgICAgfQogICAgICAuZG9jcy1jb2RlX19oZWFkZXIgewogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBwYWRkaW5nOiA4cHggOXB4IDhweCAxNXB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvZGUtaGVhZGVyLWJnKTsKICAgICAgfQogICAgICAuZG9jcy1jb2RlX19oZWFkZXIgYnV0dG9uIHsKICAgICAgICBoZWlnaHQ6IDI3cHg7CiAgICAgICAgcGFkZGluZzogMCAxMHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDdweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jYW52YXMpOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQogICAgICAuZG9jcy1jb2RlIHByZSB7IHBhZGRpbmc6IDE2cHg7IH0KICAgICAgLmRvY3MtY29kZSBjb2RlIHsgZm9udC1zaXplOiAxM3B4OyBsaW5lLWhlaWdodDogMS42NjsgfQoKICAgICAgLmRvY3MtdGFibGUtd3JhcCB7CiAgICAgICAgbWFyZ2luOiAwIDAgMjJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICB9CiAgICAgIC5kb2NzLWNvbnRlbnQgdGFibGUgeyBmb250LXNpemU6IDEzLjVweDsgbGluZS1oZWlnaHQ6IDEuNTU7IH0KICAgICAgLmRvY3MtY29udGVudCB0aCwKICAgICAgLmRvY3MtY29udGVudCB0ZCB7IHBhZGRpbmc6IDExcHggMTZweDsgfQogICAgICAuZG9jcy1jb250ZW50IHRoIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICB9CgogICAgICAuZG9jcy1wYXJhbWV0ZXJzIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgfQoKICAgICAgLnBhZ2VyIHsKICAgICAgICBtYXJnaW4tdG9wOiA2MHB4OwogICAgICAgIHBhZGRpbmctdG9wOiAzMHB4OwogICAgICAgIGdhcDogMTNweDsKICAgICAgfQogICAgICAucGFnZXJfX2xpbmsgewogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogMTVweCAxN3B4OwogICAgICAgIGdhcDogNXB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KICAgICAgLnBhZ2VyX19saW5rOmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudCk7CiAgICAgICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudCkgMTAlLCB0cmFuc3BhcmVudCk7CiAgICAgIH0KICAgICAgLnBhZ2VyX19sYWJlbCB7IGZvbnQtc2l6ZTogMTJweDsgfQogICAgICAucGFnZXJfX3RpdGxlIHsgY29sb3I6IHZhcigtLXRleHQpOyBmb250LXNpemU6IDE1cHg7IH0KCiAgICAgIC5vdXRsaW5lIHsKICAgICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICAgIHRvcDogNjFweDsKICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSA2MXB4KTsKICAgICAgICBtYXgtaGVpZ2h0OiBub25lOwogICAgICAgIHBhZGRpbmc6IDMwcHggMjJweCA0MHB4IDZweDsKICAgICAgfQogICAgICAub3V0bGluZV9fdGl0bGUgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEzcHg7CiAgICAgICAgY29sb3I6IHZhcigtLXRleHQtdGVydGlhcnkpOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA5ZW07CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgfQogICAgICAub3V0bGluZV9fbGlua3MgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLWxpbmUpOwogICAgICB9CiAgICAgIC5vdXRsaW5lX19saW5rIHsKICAgICAgICB3aWR0aDogY2FsYygxMDAlICsgMXB4KTsKICAgICAgICBtYXJnaW4tbGVmdDogLTFweDsKICAgICAgICBwYWRkaW5nOiA0cHggMCA0cHggMTVweDsKICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC10ZXJ0aWFyeSk7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBmb250LXNpemU6IDEyLjVweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40NTsKICAgICAgfQogICAgICAub3V0bGluZV9fbGluay0tbmVzdGVkIHsgcGFkZGluZy1sZWZ0OiAyOHB4OyB9CiAgICAgIC5vdXRsaW5lX19saW5rOmhvdmVyLAogICAgICAub3V0bGluZV9fbGluay0tYWN0aXZlIHsgY29sb3I6IHZhcigtLWFjY2VudCk7IH0KICAgICAgLm91dGxpbmVfX2xpbmstLWFjdGl2ZSB7CiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLWFjY2VudCk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1tb2RhbCB7CiAgICAgICAgei1pbmRleDogMTAwOwogICAgICAgIHBhZGRpbmc6IDEzdmggMTZweCAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDExLCAxNSwgMC41KTsKICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoM3B4KTsKICAgICAgICBhbmltYXRpb246IHRzZG9jLWZhZGUgMTIwbXMgZWFzZTsKICAgICAgfQogICAgICAuc2VhcmNoLXBhbmVsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgICAgIG1heC1oZWlnaHQ6IDY4dmg7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1saW5lLXN0cm9uZyk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTVweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jYW52YXMpOwogICAgICAgIGJveC1zaGFkb3c6IDAgMzBweCA4MHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgICBhbmltYXRpb246IHRzZG9jLXBvcCAxNzBtcyBjdWJpYy1iZXppZXIoMC4yLCAwLjgsIDAuMiwgMSk7CiAgICAgIH0KICAgICAgLnNlYXJjaC1pbnB1dC13cmFwIHsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTVweCAxOHB4OwogICAgICAgIGdhcDogMTFweDsKICAgICAgfQogICAgICAuc2VhcmNoLWlucHV0LXdyYXAgc3ZnIHsgd2lkdGg6IDE5cHg7IGhlaWdodDogMTlweDsgY29sb3I6IHZhcigtLXRleHQtdGVydGlhcnkpOyB9CiAgICAgIC5zZWFyY2gtaW5wdXQgeyBmb250LXNpemU6IDE2cHg7IH0KICAgICAgLnNlYXJjaC1yZXN1bHRzIHsgcGFkZGluZzogN3B4OyB9CiAgICAgIC5zZWFyY2gtcmVzdWx0c19fbGFiZWwgewogICAgICAgIHBhZGRpbmc6IDhweCAxMXB4IDVweDsKICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC10ZXJ0aWFyeSk7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDdlbTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICB9CiAgICAgIC5zZWFyY2gtcmVzdWx0IHsKICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBnYXA6IDExcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOXB4OwogICAgICB9CiAgICAgIC5zZWFyY2gtcmVzdWx0OmhvdmVyLAogICAgICAuc2VhcmNoLXJlc3VsdC0tYWN0aXZlIHsgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudCkgMTAlLCB0cmFuc3BhcmVudCk7IH0KICAgICAgLnNlYXJjaC1yZXN1bHRfX2ljb24gewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZmxleDogbm9uZTsKICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyOwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXRlcnRpYXJ5KTsKICAgICAgfQogICAgICAuc2VhcmNoLXJlc3VsdF9faWNvbiBzdmcgeyB3aWR0aDogMTVweDsgaGVpZ2h0OiAxNXB4OyB9CiAgICAgIC5zZWFyY2gtcmVzdWx0X19jb250ZW50IHsgZmxleDogMTsgbWluLXdpZHRoOiAwOyB9CiAgICAgIC5zZWFyY2gtcmVzdWx0X190aXRsZSB7IGRpc3BsYXk6IGJsb2NrOyBjb2xvcjogdmFyKC0tdGV4dCk7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgfQogICAgICAuc2VhcmNoLXJlc3VsdF9fY3J1bWIgeyBkaXNwbGF5OiBibG9jazsgbWFyZ2luLXRvcDogMXB4OyBjb2xvcjogdmFyKC0tdGV4dC10ZXJ0aWFyeSk7IGZvbnQtc2l6ZTogMTJweDsgfQogICAgICAuc2VhcmNoLXJlc3VsdF9fZXhjZXJwdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLXRvcDogM3B4OwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7CiAgICAgICAgZm9udC1zaXplOiAxMi41cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQogICAgICAuc2VhcmNoLXJlc3VsdF9fZW50ZXIgeyBjb2xvcjogdmFyKC0tdGV4dC10ZXJ0aWFyeSk7IH0KICAgICAgLnNlYXJjaC1yZXN1bHRfX2VudGVyIHN2ZyB7IHdpZHRoOiAxNXB4OyBoZWlnaHQ6IDE1cHg7IH0KICAgICAgLnNlYXJjaC1mb290ZXIgewogICAgICAgIHBhZGRpbmc6IDlweCAxNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxOHB4OwogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXRlcnRpYXJ5KTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tbGluZSk7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc3VyZmFjZS1yYWlzZWQpOwogICAgICAgIGZvbnQtc2l6ZTogMTEuNXB4OwogICAgICB9CiAgICAgIC5zZWFyY2gtZm9vdGVyIHNwYW4geyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDVweDsgfQogICAgICAuc2VhcmNoLWZvb3RlciBiIHsKICAgICAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgfQoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDExOTlweCkgewogICAgICAgIC5sYXlvdXQgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDI2OHB4IG1pbm1heCgwLCAxZnIpOyB9CiAgICAgIH0KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5NTlweCkgewogICAgICAgIC5oZWFkZXJfX2lubmVyIHsgcGFkZGluZzogMDsgZ2FwOiAxMHB4OyB9CiAgICAgICAgLnZlcnNpb24tcGlja2VyIHsgZGlzcGxheTogbm9uZTsgfQogICAgICAgIC5yZXBvc2l0b3J5LWJ1dHRvbiB7IGRpc3BsYXk6IG5vbmU7IH0KICAgICAgICAuc2VhcmNoLWJ1dHRvbiB7CiAgICAgICAgICBtaW4td2lkdGg6IDM2cHg7CiAgICAgICAgICB3aWR0aDogMzZweDsKICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbGluZSk7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jYW52YXMpOwogICAgICAgIH0KICAgICAgICAuc2lkZWJhciB7CiAgICAgICAgICB3aWR0aDogMjg2cHg7CiAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIH0KICAgICAgICAuc2lkZWJhci1zY3JpbSB7CiAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICB6LWluZGV4OiA0MDsKICAgICAgICAgIGluc2V0OiA2MXB4IDAgMDsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgYm9yZGVyOiAwOwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxMCwgMTEsIDE1LCAwLjQyKTsKICAgICAgICAgIGFuaW1hdGlvbjogdHNkb2MtZmFkZSAxNDBtcyBlYXNlOwogICAgICAgIH0KICAgICAgICAubWFpbiB7IHBhZGRpbmc6IDI2cHggMjBweCA3NnB4OyB9CiAgICAgIH0KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA1NjBweCkgewogICAgICAgIC5icmFuZF9fYmFkZ2UgeyBkaXNwbGF5OiBub25lOyB9CiAgICAgICAgLmFydGljbGUgaDEgeyBmb250LXNpemU6IDM0cHg7IH0KICAgICAgICAuYXJ0aWNsZV9fZGVzY3JpcHRpb24geyBmb250LXNpemU6IDE1cHg7IH0KICAgICAgICAuZG9jcy1jb250ZW50IGgyIHsgZm9udC1zaXplOiAyMnB4OyB9CiAgICAgICAgLnZlcnNpb24tYmFubmVyIHsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IGZsZXgtd3JhcDogd3JhcDsgfQogICAgICAgIC5zZWFyY2gtZm9vdGVyIHsgZ2FwOiAxMnB4OyB9CiAgICAgIH0KICAgIGAscHRgCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMTk5cHgpIHsKICAgICAgICAub3V0bGluZSB7IGRpc3BsYXk6IG5vbmU7IH0KICAgICAgfQoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDk1OXB4KSB7CiAgICAgICAgLmxheW91dCB7IGRpc3BsYXk6IGJsb2NrOyB9CiAgICAgICAgLnNpZGViYXIgewogICAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgei1pbmRleDogNDU7CiAgICAgICAgICB0b3A6IDYxcHg7CiAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgd2lkdGg6IDI4NnB4OwogICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNjFweCk7CiAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOwogICAgICAgICAgYm94LXNoYWRvdzogOHB4IDAgMzBweCByZ2JhKDAsIDAsIDAsIDAuMTQpOwogICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI0MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIHZpc2liaWxpdHkgMHMgbGluZWFyIDI0MG1zOwogICAgICAgIH0KICAgICAgICAuc2lkZWJhci0tb3BlbiB7CiAgICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwogICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI0MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAgICAgICAubWVudS1idXR0b24geyBkaXNwbGF5OiBub25lOyB9CiAgICAgIH0KICAgIGBdfWFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdGhpcy5oYW5kbGVIYXNoQ2hhbmdlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5oYW5kbGVHbG9iYWxLZXlkb3duKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmhhbmRsZVNjcm9sbCx7cGFzc2l2ZTohMH0pLGF3YWl0IHRoaXMuYXBwbHlTdG9yZWRUaGVtZSgpLGF3YWl0IHRoaXMubG9hZE1hbmlmZXN0KCl9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdGhpcy5oYW5kbGVIYXNoQ2hhbmdlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5oYW5kbGVHbG9iYWxLZXlkb3duKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmhhbmRsZVNjcm9sbCksYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKX10aGVtZUNoYW5nZWQoKXt0aGlzLnJlcXVlc3RVcGRhdGUoKX1hc3luYyBhcHBseVN0b3JlZFRoZW1lKCl7bGV0IHI9YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2Usbj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShxTyk7bj09PSJicmlnaHQiJiZyLnRoZW1lTWFuYWdlci5nb0JyaWdodCgpLG49PT0iZGFyayImJnIudGhlbWVNYW5hZ2VyLmdvRGFyaygpfWFzeW5jIGxvYWRNYW5pZmVzdCgpe3RyeXtsZXQgcj1hd2FpdCBmZXRjaCgiL2RvY3MtbWFuaWZlc3QuanNvbiIse2NhY2hlOiJuby1zdG9yZSJ9KTtpZighci5vayl0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyLnN0YXR1c31gKTtsZXQgbj1hd2FpdCByLmpzb24oKTtpZihuLnNjaGVtYVZlcnNpb24hPT0iMS4wInx8IUFycmF5LmlzQXJyYXkobi5wYWdlcyl8fCFBcnJheS5pc0FycmF5KG4uc2VjdGlvbnMpKXRocm93IG5ldyBFcnJvcigiVGhlIGRvY3MgbWFuaWZlc3QgaGFzIGFuIHVuc3VwcG9ydGVkIGZvcm1hdC4iKTtuLnZlcnNpb25zPy5sZW5ndGh8fChuLnZlcnNpb25zPVt7bGFiZWw6bi52ZXJzaW9uLGN1cnJlbnQ6ITAsbGF0ZXN0OiEwLGxlZ2FjeTohMX1dKSx0aGlzLm1hbmlmZXN0PW4sZG9jdW1lbnQudGl0bGU9YCR7bi50aXRsZX0gRG9jdW1lbnRhdGlvbmAsdGhpcy5sb2FkaW5nPSExLHRoaXMuc3luY1JvdXRlKCl9Y2F0Y2gocil7dGhpcy5sb2FkaW5nPSExLHRoaXMuZXJyb3JNZXNzYWdlPXIgaW5zdGFuY2VvZiBFcnJvcj9yLm1lc3NhZ2U6U3RyaW5nKHIpLHRoaXMucmVxdWVzdFVwZGF0ZSgpfX1zeW5jUm91dGUoKXtpZighdGhpcy5tYW5pZmVzdClyZXR1cm47bGV0IHI9d2luZG93LmxvY2F0aW9uLmhhc2gucmVwbGFjZSgvXiNcLz8vLCIiKS5zcGxpdCgiLyIpLmZpbHRlcihCb29sZWFuKSxuPXJbMV0saT10aGlzLm1hbmlmZXN0LnBhZ2VzLmZpbmQocz0+cy5pZD09PW4pPz90aGlzLm9yZGVyZWRQYWdlc1swXTtpZighaSl7dGhpcy5hY3RpdmVQYWdlSWQ9IiIsdGhpcy5yZXF1ZXN0VXBkYXRlKCk7cmV0dXJufXRoaXMuYWN0aXZlUGFnZUlkPWkuaWQsdGhpcy5hY3RpdmVIZWFkaW5nSWQ9clsyXT8/aS5oZWFkaW5nc1swXT8uaWQ/PyIiLHRoaXMudmVyc2lvbk9wZW49ITEsdGhpcy5zaWRlYmFyT3Blbj0hMSx0aGlzLnJlcXVlc3RVcGRhdGUoKSx0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCk9PntsZXQgcz1yWzJdO3M/dGhpcy5yZW5kZXJSb290LnF1ZXJ5U2VsZWN0b3IoYCMke0NTUy5lc2NhcGUocyl9YCk/LnNjcm9sbEludG9WaWV3KHtibG9jazoic3RhcnQifSk6d2luZG93LnNjcm9sbFRvKHt0b3A6MCxiZWhhdmlvcjoiaW5zdGFudCJ9KX0pLG58fHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCIiLGkucm91dGUpfWdldCBvcmRlcmVkUGFnZXMoKXtpZighdGhpcy5tYW5pZmVzdClyZXR1cm5bXTtsZXQgcj1uZXcgTWFwKHRoaXMubWFuaWZlc3QucGFnZXMubWFwKG49PltuLmlkLG5dKSk7cmV0dXJuIHRoaXMubWFuaWZlc3Quc2VjdGlvbnMuZmxhdE1hcChuPT5uLnBhZ2VJZHMubWFwKGk9PnIuZ2V0KGkpKS5maWx0ZXIoaT0+ISFpKSl9Z2V0IGFjdGl2ZVBhZ2UoKXtyZXR1cm4gdGhpcy5tYW5pZmVzdD8ucGFnZXMuZmluZChyPT5yLmlkPT09dGhpcy5hY3RpdmVQYWdlSWQpPz90aGlzLm9yZGVyZWRQYWdlc1swXX1uYXZpZ2F0ZShyKXt3aW5kb3cubG9jYXRpb24uaGFzaD09PXI/dGhpcy5zeW5jUm91dGUoKTp3aW5kb3cubG9jYXRpb24uaGFzaD1yLHRoaXMuc2VhcmNoT3Blbj0hMSx0aGlzLnNlYXJjaFF1ZXJ5PSIiLHRoaXMuc2lkZWJhck9wZW49ITEsdGhpcy52ZXJzaW9uT3Blbj0hMSx0aGlzLmFjdGl2ZVNlYXJjaEluZGV4PTAsdGhpcy5yZXF1ZXN0VXBkYXRlKCl9b3BlblNlYXJjaCgpe3RoaXMuc2VhcmNoT3Blbj0hMCx0aGlzLnNlYXJjaFF1ZXJ5PSIiLHRoaXMuYWN0aXZlU2VhcmNoSW5kZXg9MCx0aGlzLnJlcXVlc3RVcGRhdGUoKSx0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCk9PnRoaXMucmVuZGVyUm9vdC5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoLWlucHV0Iik/LmZvY3VzKCkpfWFzeW5jIHRvZ2dsZVRoZW1lKCl7bGV0IHI9YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7ci50aGVtZU1hbmFnZXIudG9nZ2xlRGFya0JyaWdodCgpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKHFPLHIudGhlbWVNYW5hZ2VyLmdvQnJpZ2h0Qm9vbGVhbj8iYnJpZ2h0IjoiZGFyayIpfWljb24ocil7cmV0dXJuIG1lYDx0c2RvYy1pY29uIC5pY29uPSR7V09bcl19PjwvdHNkb2MtaWNvbj5gfXNlY3Rpb25JY29uKHIpe2xldCBuPXIudGl0bGUudG9Mb3dlckNhc2UoKTtyZXR1cm4gbi5pbmNsdWRlcygib3ZlcnZpZXciKT90aGlzLmljb24oIm92ZXJ2aWV3Iik6bi5pbmNsdWRlcygiZ2V0dGluZyIpfHxuLmluY2x1ZGVzKCJzdGFydCIpP3RoaXMuaWNvbigic3RhcnQiKTpuLmluY2x1ZGVzKCJjb25jZXB0Iik/dGhpcy5pY29uKCJjb25jZXB0cyIpOm4uaW5jbHVkZXMoImludGVncmF0aW9uIik/dGhpcy5pY29uKCJpbnRlZ3JhdGlvbnMiKTpuLmluY2x1ZGVzKCJhcGkiKXx8bi5pbmNsdWRlcygicmVmZXJlbmNlIik/dGhpcy5pY29uKCJhcGkiKTpuLmluY2x1ZGVzKCJvcGVyYXRpb24iKXx8bi5pbmNsdWRlcygiZGVwbG95Iik/dGhpcy5pY29uKCJvcGVyYXRpb25zIik6dGhpcy5pY29uKCJib29rIil9cmVuZGVyU2lkZWJhclNlY3Rpb24ocil7bGV0IG49ci5wYWdlSWRzLm1hcChzPT50aGlzLm1hbmlmZXN0Py5wYWdlcy5maW5kKGE9PmEuaWQ9PT1zKSkuZmlsdGVyKHM9PiEhcyksaT10aGlzLmNvbGxhcHNlZFNlY3Rpb25JZHMuaGFzKHIuaWQpO3JldHVybiBtZWAKICAgICAgPHNlY3Rpb24gY2xhc3M9Im5hdi1zZWN0aW9uIj4KICAgICAgICA8YnV0dG9uCiAgICAgICAgICBjbGFzcz0ibmF2LXNlY3Rpb25fX2J1dHRvbiIKICAgICAgICAgIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9JHtTdHJpbmcoIWkpfQogICAgICAgICAgQGNsaWNrPSR7KCk9PntpP3RoaXMuY29sbGFwc2VkU2VjdGlvbklkcy5kZWxldGUoci5pZCk6dGhpcy5jb2xsYXBzZWRTZWN0aW9uSWRzLmFkZChyLmlkKSx0aGlzLnJlcXVlc3RVcGRhdGUoKX19CiAgICAgICAgPgogICAgICAgICAgPHNwYW4gY2xhc3M9Im5hdi1zZWN0aW9uX19pY29uIj4ke3RoaXMuc2VjdGlvbkljb24ocil9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9Im5hdi1zZWN0aW9uX190aXRsZSI+JHtyLnRpdGxlfTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYXYtc2VjdGlvbl9fY2hldnJvbiAke2k/Im5hdi1zZWN0aW9uX19jaGV2cm9uLS1jb2xsYXBzZWQiOiIifSI+JHt0aGlzLmljb24oImNoZXZyb24iKX08L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICAgICAgJHtpPyIiOm1lYAogICAgICAgICAgPGRpdiBjbGFzcz0ibmF2LXNlY3Rpb25fX3BhZ2VzIj4KICAgICAgICAgICAgJHtuLm1hcChzPT5tZWAKICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0ibmF2LWxpbmsgJHtzLmlkPT09dGhpcy5hY3RpdmVQYWdlSWQ/Im5hdi1saW5rLS1hY3RpdmUiOiIifSIKICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpPT50aGlzLm5hdmlnYXRlKHMucm91dGUpfQogICAgICAgICAgICAgID4ke3MudGl0bGV9PC9idXR0b24+CiAgICAgICAgICAgIGApfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgYH0KICAgICAgPC9zZWN0aW9uPgogICAgYH1yZW5kZXJQYWdlcihyKXtsZXQgbj10aGlzLm9yZGVyZWRQYWdlcyxpPW4uZmluZEluZGV4KGw9PmwuaWQ9PT1yLmlkKSxzPWk+MD9uW2ktMV06dm9pZCAwLGE9aT49MD9uW2krMV06dm9pZCAwO3JldHVybiBtZWAKICAgICAgPG5hdiBjbGFzcz0icGFnZXIiIGFyaWEtbGFiZWw9IkRvY3VtZW50YXRpb24gcGFnZXMiPgogICAgICAgICR7cz9tZWAKICAgICAgICAgIDxidXR0b24gY2xhc3M9InBhZ2VyX19saW5rIiB0eXBlPSJidXR0b24iIEBjbGljaz0keygpPT50aGlzLm5hdmlnYXRlKHMucm91dGUpfT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBhZ2VyX19sYWJlbCI+UHJldmlvdXM8L3NwYW4+PHNwYW4gY2xhc3M9InBhZ2VyX190aXRsZSI+4oaQICR7cy50aXRsZX08L3NwYW4+CiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICBgOm1lYDxzcGFuPjwvc3Bhbj5gfQogICAgICAgICR7YT9tZWAKICAgICAgICAgIDxidXR0b24gY2xhc3M9InBhZ2VyX19saW5rIHBhZ2VyX19saW5rLS1uZXh0IiB0eXBlPSJidXR0b24iIEBjbGljaz0keygpPT50aGlzLm5hdmlnYXRlKGEucm91dGUpfT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBhZ2VyX19sYWJlbCI+TmV4dDwvc3Bhbj48c3BhbiBjbGFzcz0icGFnZXJfX3RpdGxlIj4ke2EudGl0bGV9IOKGkjwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIGA6bWVgPHNwYW4+PC9zcGFuPmB9CiAgICAgIDwvbmF2PgogICAgYH1nZXQgdmVyc2lvbnMoKXtyZXR1cm4gdGhpcy5tYW5pZmVzdD8udmVyc2lvbnM/Lmxlbmd0aD90aGlzLm1hbmlmZXN0LnZlcnNpb25zOlt7bGFiZWw6dGhpcy5tYW5pZmVzdD8udmVyc2lvbj8/ImN1cnJlbnQiLGN1cnJlbnQ6ITAsbGF0ZXN0OiEwLGxlZ2FjeTohMX1dfWdldCBjdXJyZW50VmVyc2lvbigpe3JldHVybiB0aGlzLnZlcnNpb25zLmZpbmQocj0+ci5jdXJyZW50KT8/dGhpcy52ZXJzaW9uc1swXX1nZXQgbGF0ZXN0VmVyc2lvbigpe3JldHVybiB0aGlzLnZlcnNpb25zLmZpbmQocj0+ci5sYXRlc3QpPz90aGlzLmN1cnJlbnRWZXJzaW9ufXNlbGVjdFZlcnNpb24ocil7dGhpcy52ZXJzaW9uT3Blbj0hMSx0aGlzLnJlcXVlc3RVcGRhdGUoKSwhci5jdXJyZW50JiZyLmhyZWYmJndpbmRvdy5sb2NhdGlvbi5hc3NpZ24oci5ocmVmKX1nZXQgc2VhcmNoUmVzdWx0cygpe2xldCByPXRoaXMuc2VhcmNoUXVlcnkudHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoIXIpcmV0dXJuIHRoaXMub3JkZXJlZFBhZ2VzLnNsaWNlKDAsNikubWFwKGk9Pih7cGFnZTppLHRpdGxlOmkudGl0bGUsY3J1bWI6aS5zZWN0aW9uVGl0bGV9KSk7bGV0IG49W107Zm9yKGxldCBpIG9mIHRoaXMub3JkZXJlZFBhZ2VzKXtsZXQgcz1pLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocik7cyYmbi5wdXNoKHtwYWdlOmksdGl0bGU6aS50aXRsZSxjcnVtYjppLnNlY3Rpb25UaXRsZSxleGNlcnB0OmkucGxhaW5UZXh0LnNsaWNlKDAsMTIwKSxzY29yZTowfSk7Zm9yKGxldCBsIG9mIGkuaGVhZGluZ3MpbC50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocikmJm4ucHVzaCh7cGFnZTppLGhlYWRpbmdJZDpsLmlkLHRpdGxlOmwudGV4dCxjcnVtYjppLnNlY3Rpb25UaXRsZSsiICBcdTIwM0EgICIraS50aXRsZSxzY29yZToxfSk7bGV0IGE9aS5wbGFpblRleHQudG9Mb3dlckNhc2UoKS5pbmRleE9mKHIpO2lmKGE+PTAmJiFzKXtsZXQgbD1NYXRoLm1heCgwLGEtMzIpLGM9TWF0aC5taW4oaS5wbGFpblRleHQubGVuZ3RoLGwrMTI4KTtuLnB1c2goe3BhZ2U6aSx0aXRsZTppLnRpdGxlLGNydW1iOmkuc2VjdGlvblRpdGxlLGV4Y2VycHQ6KGw+MD8iXHUyMDI2IjoiIikraS5wbGFpblRleHQuc2xpY2UobCxjKSsoYzxpLnBsYWluVGV4dC5sZW5ndGg/Ilx1MjAyNiI6IiIpLHNjb3JlOjJ9KX19cmV0dXJuIG4uc29ydCgoaSxzKT0+aS5zY29yZS1zLnNjb3JlKS5zbGljZSgwLDgpfXNlbGVjdFNlYXJjaFJlc3VsdChyKXtsZXQgbj1yLmhlYWRpbmdJZD9yLnBhZ2Uucm91dGUrIi8iK3IuaGVhZGluZ0lkOnIucGFnZS5yb3V0ZTt0aGlzLm5hdmlnYXRlKG4pfWhpZ2hsaWdodFNlYXJjaFRleHQocil7bGV0IG49dGhpcy5zZWFyY2hRdWVyeS50cmltKCk7aWYoIW4pcmV0dXJuIG1lYCR7cn1gO2xldCBpPXIudG9Mb3dlckNhc2UoKS5pbmRleE9mKG4udG9Mb3dlckNhc2UoKSk7cmV0dXJuIGk8MD9tZWAke3J9YDptZWAke3Iuc2xpY2UoMCxpKX08bWFyaz4ke3Iuc2xpY2UoaSxpK24ubGVuZ3RoKX08L21hcms+JHtyLnNsaWNlKGkrbi5sZW5ndGgpfWB9cmVuZGVyU2VhcmNoKCl7bGV0IHI9dGhpcy5zZWFyY2hSZXN1bHRzLG49ci5sZW5ndGg/TWF0aC5tYXgoMCxNYXRoLm1pbihyLmxlbmd0aC0xLHRoaXMuYWN0aXZlU2VhcmNoSW5kZXgpKTowO3JldHVybiBtZWAKICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoLW1vZGFsIiByb2xlPSJwcmVzZW50YXRpb24iIEBjbGljaz0ke2k9PntpLnRhcmdldD09PWkuY3VycmVudFRhcmdldCYmKHRoaXMuc2VhcmNoT3Blbj0hMSx0aGlzLmFjdGl2ZVNlYXJjaEluZGV4PTAsdGhpcy5yZXF1ZXN0VXBkYXRlKCkpfX0+CiAgICAgICAgPHNlY3Rpb24gY2xhc3M9InNlYXJjaC1wYW5lbCIgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsPSJTZWFyY2ggZG9jdW1lbnRhdGlvbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtaW5wdXQtd3JhcCI+CiAgICAgICAgICAgICR7dGhpcy5pY29uKCJzZWFyY2giKX0KICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgY2xhc3M9InNlYXJjaC1pbnB1dCIKICAgICAgICAgICAgICB0eXBlPSJzZWFyY2giCiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IlNlYXJjaCBkb2N1bWVudGF0aW9uLi4uIgogICAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuc2VhcmNoUXVlcnl9CiAgICAgICAgICAgICAgQGlucHV0PSR7aT0+e3RoaXMuc2VhcmNoUXVlcnk9aS50YXJnZXQudmFsdWUsdGhpcy5hY3RpdmVTZWFyY2hJbmRleD0wLHRoaXMucmVxdWVzdFVwZGF0ZSgpfX0KICAgICAgICAgICAgLz4KICAgICAgICAgICAgPGtiZD5FU0M8L2tiZD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoLXJlc3VsdHMiPgogICAgICAgICAgICAke3RoaXMuc2VhcmNoUXVlcnkudHJpbSgpPyIiOm1lYDxkaXYgY2xhc3M9InNlYXJjaC1yZXN1bHRzX19sYWJlbCI+U3VnZ2VzdGVkPC9kaXY+YH0KICAgICAgICAgICAgJHtyLmxlbmd0aD9yLm1hcCgoaSxzKT0+bWVgCiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InNlYXJjaC1yZXN1bHQgJHtzPT09bj8ic2VhcmNoLXJlc3VsdC0tYWN0aXZlIjoiIn0iCiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iCiAgICAgICAgICAgICAgICBAbW91c2VlbnRlcj0keygpPT57dGhpcy5hY3RpdmVTZWFyY2hJbmRleD1zLHRoaXMucmVxdWVzdFVwZGF0ZSgpfX0KICAgICAgICAgICAgICAgIEBjbGljaz0keygpPT50aGlzLnNlbGVjdFNlYXJjaFJlc3VsdChpKX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VhcmNoLXJlc3VsdF9faWNvbiI+JHt0aGlzLmljb24oaS5oZWFkaW5nSWQ/ImhlYWRpbmciOiJmaWxlIil9PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlYXJjaC1yZXN1bHRfX2NvbnRlbnQiPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VhcmNoLXJlc3VsdF9fdGl0bGUiPiR7dGhpcy5oaWdobGlnaHRTZWFyY2hUZXh0KGkudGl0bGUpfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlYXJjaC1yZXN1bHRfX2NydW1iIj4ke2kuY3J1bWJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAke2kuZXhjZXJwdD9tZWA8c3BhbiBjbGFzcz0ic2VhcmNoLXJlc3VsdF9fZXhjZXJwdCI+JHt0aGlzLmhpZ2hsaWdodFNlYXJjaFRleHQoaS5leGNlcnB0KX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICR7cz09PW4/bWVgPHNwYW4gY2xhc3M9InNlYXJjaC1yZXN1bHRfX2VudGVyIj4ke3RoaXMuaWNvbigiZW50ZXIiKX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgYCk6bWVgPGRpdiBjbGFzcz0ic2VhcmNoLWVtcHR5Ij5ObyByZXN1bHRzIGZvciDigJwke3RoaXMuc2VhcmNoUXVlcnl94oCdPC9kaXY+YH0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoLWZvb3RlciI+CiAgICAgICAgICAgIDxzcGFuPjxiPuKGkeKGkzwvYj4gbmF2aWdhdGU8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPjxiPuKGtTwvYj4gc2VsZWN0PC9zcGFuPgogICAgICAgICAgICA8c3Bhbj48Yj5lc2M8L2I+IGNsb3NlPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9zZWN0aW9uPgogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyKCl7bGV0IHI9dGhpcy5hY3RpdmVQYWdlLG49dGhpcy5tYW5pZmVzdD8uYWNjZW50Q29sb3I/PyIjNWI1M2U2IjtpZih0aGlzLmxvYWRpbmcpcmV0dXJuIG1lYDxkaXYgY2xhc3M9ImFwcCI+PGRpdiBjbGFzcz0ibG9hZGluZyI+TG9hZGluZyBkb2N1bWVudGF0aW9u4oCmPC9kaXY+PC9kaXY+YDtpZih0aGlzLmVycm9yTWVzc2FnZSlyZXR1cm4gbWVgPGRpdiBjbGFzcz0iYXBwIj48ZGl2IGNsYXNzPSJlcnJvciI+PGgxPkRvY3VtZW50YXRpb24gdW5hdmFpbGFibGU8L2gxPjxwPlRoZSBpbi1tZW1vcnkgbWFuaWZlc3QgY291bGQgbm90IGJlIGxvYWRlZC48L3A+PGNvZGU+JHt0aGlzLmVycm9yTWVzc2FnZX08L2NvZGU+PC9kaXY+PC9kaXY+YDtpZighdGhpcy5tYW5pZmVzdHx8IXIpcmV0dXJuIG1lYDxkaXYgY2xhc3M9ImFwcCI+PGRpdiBjbGFzcz0iZW1wdHkiPjxoMT5ObyBkb2N1bWVudGF0aW9uIHlldDwvaDE+PHA+QWRkIE1hcmtkb3duLCBUeXBlRG9jIEpTT04sIG9yIGFuIE9wZW5BUEkgZmlsZSB0byB0aGlzIGRvY3MgcmVwb3NpdG9yeS48L3A+PC9kaXY+PC9kaXY+YDtsZXQgaT10aGlzLmN1cnJlbnRWZXJzaW9uLHM9dGhpcy5sYXRlc3RWZXJzaW9uLGE9aS5sYWJlbCE9PXMubGFiZWw7cmV0dXJuIG1lYAogICAgICA8ZGl2IGNsYXNzPSJhcHAiIHN0eWxlPSR7YC0tYWNjZW50OiAke259YH0+CiAgICAgICAgPGhlYWRlciBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlcl9faW5uZXIiPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9Im1lbnUtYnV0dG9uIgogICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgICBhcmlhLWxhYmVsPSIke3RoaXMuc2lkZWJhck9wZW4/IkNsb3NlIG5hdmlnYXRpb24iOiJPcGVuIG5hdmlnYXRpb24ifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+e3RoaXMuc2lkZWJhck9wZW49IXRoaXMuc2lkZWJhck9wZW4sdGhpcy5yZXF1ZXN0VXBkYXRlKCl9fQogICAgICAgICAgICA+JHt0aGlzLmljb24odGhpcy5zaWRlYmFyT3Blbj8iY2xvc2UiOiJtZW51Iil9PC9idXR0b24+CgogICAgICAgICAgICA8YSBjbGFzcz0iYnJhbmQiIGhyZWY9JHt0aGlzLm9yZGVyZWRQYWdlc1swXT8ucm91dGU/PyIjIn0+CiAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iYnJhbmRfX21hcmsiIHZpZXdCb3g9IjAgMCAyNCAyNCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICAgICAgPGVsbGlwc2UgY3g9IjEyIiBjeT0iMTIiIHJ4PSIxMCIgcnk9IjQuMyIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS43IiB0cmFuc2Zvcm09InJvdGF0ZSgtMjcgMTIgMTIpIj48L2VsbGlwc2U+CiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzLjEiIGZpbGw9ImN1cnJlbnRDb2xvciIgc3Ryb2tlPSJub25lIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIwLjQiIGN5PSI4IiByPSIxLjgiIGZpbGw9ImN1cnJlbnRDb2xvciIgc3Ryb2tlPSJub25lIj48L2NpcmNsZT4KICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYnJhbmRfX25hbWUiPiR7dGhpcy5tYW5pZmVzdC50aXRsZX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJyYW5kX19iYWRnZSI+JHt0aGlzLm1hbmlmZXN0LmJhZGdlfTwvc3Bhbj4KICAgICAgICAgICAgPC9hPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVyc2lvbi1waWNrZXIiPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ2ZXJzaW9uLWJ1dHRvbiIKICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9IlNlbGVjdCBkb2N1bWVudGF0aW9uIHZlcnNpb24iCiAgICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPSR7U3RyaW5nKHRoaXMudmVyc2lvbk9wZW4pfQogICAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9Pnt0aGlzLnZlcnNpb25PcGVuPSF0aGlzLnZlcnNpb25PcGVuLHRoaXMucmVxdWVzdFVwZGF0ZSgpfX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3Bhbj4ke2kubGFiZWx9PC9zcGFuPgogICAgICAgICAgICAgICAgJHt0aGlzLmljb24oImNoZXZyb24iKX0KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAke3RoaXMudmVyc2lvbk9wZW4/bWVgCiAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ2ZXJzaW9uLXNjcmltIgogICAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iCiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9IkNsb3NlIHZlcnNpb24gbWVudSIKICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9Pnt0aGlzLnZlcnNpb25PcGVuPSExLHRoaXMucmVxdWVzdFVwZGF0ZSgpfX0KICAgICAgICAgICAgICAgID48L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZlcnNpb24tbWVudSIgcm9sZT0ibWVudSI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy52ZXJzaW9ucy5tYXAobD0+bWVgCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InZlcnNpb24tb3B0aW9uIgogICAgICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIgogICAgICAgICAgICAgICAgICAgICAgcm9sZT0ibWVudWl0ZW0iCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5zZWxlY3RWZXJzaW9uKGwpfQogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiR7bC5sYWJlbH0ke2wubGVnYWN5JiYhbC5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJsZWdhY3kiKT8iIChsZWdhY3kpIjoiIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAke2wuY3VycmVudD90aGlzLmljb24oImNoZWNrIik6IiJ9CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVhZGVyX19zcGFjZXIiPjwvc3Bhbj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ic2VhcmNoLWJ1dHRvbiIgdHlwZT0iYnV0dG9uIiBhcmlhLWxhYmVsPSJTZWFyY2ggZG9jdW1lbnRhdGlvbiIgQGNsaWNrPSR7KCk9PnRoaXMub3BlblNlYXJjaCgpfT4KICAgICAgICAgICAgICAke3RoaXMuaWNvbigic2VhcmNoIil9PHNwYW4+U2VhcmNoIGRvY3VtZW50YXRpb248L3NwYW4+PGtiZD7ijJhLPC9rYmQ+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJpY29uLWJ1dHRvbiIgdHlwZT0iYnV0dG9uIiBhcmlhLWxhYmVsPSJUb2dnbGUgY29sb3IgdGhlbWUiIEBjbGljaz0keygpPT57dGhpcy50b2dnbGVUaGVtZSgpfX0+CiAgICAgICAgICAgICAgJHt0aGlzLmdvQnJpZ2h0P3RoaXMuaWNvbigibW9vbiIpOnRoaXMuaWNvbigic3VuIil9CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAke3RoaXMubWFuaWZlc3QucmVwb3NpdG9yeVVybD9tZWAKICAgICAgICAgICAgICA8YSBjbGFzcz0iaWNvbi1idXR0b24gcmVwb3NpdG9yeS1idXR0b24iIGhyZWY9JHt0aGlzLm1hbmlmZXN0LnJlcG9zaXRvcnlVcmx9IHRhcmdldD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIiIGFyaWEtbGFiZWw9Ik9wZW4gcmVwb3NpdG9yeSI+JHt0aGlzLmljb24oInJlcG9zaXRvcnkiKX08L2E+CiAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2hlYWRlcj4KCiAgICAgICAgPGRpdiBjbGFzcz0ibGF5b3V0Ij4KICAgICAgICAgICR7dGhpcy5zaWRlYmFyT3Blbj9tZWAKICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJzaWRlYmFyLXNjcmltIgogICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgICBhcmlhLWxhYmVsPSJDbG9zZSBuYXZpZ2F0aW9uIgogICAgICAgICAgICAgIEBjbGljaz0keygpPT57dGhpcy5zaWRlYmFyT3Blbj0hMSx0aGlzLnJlcXVlc3RVcGRhdGUoKX19CiAgICAgICAgICAgID48L2J1dHRvbj4KICAgICAgICAgIGA6IiJ9CiAgICAgICAgICA8YXNpZGUgY2xhc3M9InNpZGViYXIgJHt0aGlzLnNpZGViYXJPcGVuPyJzaWRlYmFyLS1vcGVuIjoiIn0iPgogICAgICAgICAgICA8bmF2IGNsYXNzPSJuYXYiIGFyaWEtbGFiZWw9IkRvY3VtZW50YXRpb24gbmF2aWdhdGlvbiI+CiAgICAgICAgICAgICAgJHt0aGlzLm1hbmlmZXN0LnNlY3Rpb25zLm1hcChsPT50aGlzLnJlbmRlclNpZGViYXJTZWN0aW9uKGwpKX0KICAgICAgICAgICAgPC9uYXY+CiAgICAgICAgICA8L2FzaWRlPgoKICAgICAgICAgIDxtYWluIGNsYXNzPSJtYWluIj4KICAgICAgICAgICAgPGFydGljbGUgY2xhc3M9ImFydGljbGUiPgogICAgICAgICAgICAgICR7YT9tZWAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZlcnNpb24tYmFubmVyIj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLmljb24oIndhcm5pbmciKX0KICAgICAgICAgICAgICAgICAgPHNwYW4+WW91J3JlIHZpZXdpbmcgZG9jcyBmb3IgPHN0cm9uZz4ke2kubGFiZWx9PC9zdHJvbmc+LiBUaGUgbGF0ZXN0IHJlbGVhc2UgaXMgJHtzLmxhYmVsfS48L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBAY2xpY2s9JHsoKT0+dGhpcy5zZWxlY3RWZXJzaW9uKHMpfT5WaWV3IGxhdGVzdCDihpI8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnJlYWRjcnVtYnMiPgogICAgICAgICAgICAgICAgPHNwYW4+JHtyLnNlY3Rpb25UaXRsZX08L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYnJlYWRjcnVtYnNfX3NlcGFyYXRvciI+Lzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJicmVhZGNydW1ic19fcGFnZSI+JHtyLnRpdGxlfTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8aDE+JHtyLnRpdGxlfTwvaDE+CiAgICAgICAgICAgICAgJHtyLmRlc2NyaXB0aW9uP21lYDxwIGNsYXNzPSJhcnRpY2xlX19kZXNjcmlwdGlvbiI+JHtyLmRlc2NyaXB0aW9ufTwvcD5gOiIifQogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvY3MtY29udGVudCIgQGNsaWNrPSR7dGhpcy5oYW5kbGVBcnRpY2xlQ2xpY2t9PiR7SmMoci5odG1sKX08L2Rpdj4KICAgICAgICAgICAgICAke3RoaXMucmVuZGVyUGFnZXIocil9CiAgICAgICAgICAgIDwvYXJ0aWNsZT4KICAgICAgICAgIDwvbWFpbj4KCiAgICAgICAgICA8YXNpZGUgY2xhc3M9Im91dGxpbmUiIGFyaWEtbGFiZWw9Ik9uIHRoaXMgcGFnZSI+CiAgICAgICAgICAgICR7ci5oZWFkaW5ncy5sZW5ndGg/bWVgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3V0bGluZV9fdGl0bGUiPk9uIHRoaXMgcGFnZTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im91dGxpbmVfX2xpbmtzIj4KICAgICAgICAgICAgICAgICR7ci5oZWFkaW5ncy5tYXAobD0+bWVgCiAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgICBjbGFzcz0ib3V0bGluZV9fbGluayAke2wubGV2ZWw9PT0zPyJvdXRsaW5lX19saW5rLS1uZXN0ZWQiOiIifSAke2wuaWQ9PT10aGlzLmFjdGl2ZUhlYWRpbmdJZD8ib3V0bGluZV9fbGluay0tYWN0aXZlIjoiIn0iCiAgICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIgogICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpPT50aGlzLm5hdmlnYXRlKGAke3Iucm91dGV9LyR7bC5pZH1gKX0KICAgICAgICAgICAgICAgICAgPiR7bC50ZXh0fTwvYnV0dG9uPgogICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICA8L2FzaWRlPgogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy5zZWFyY2hPcGVuP3RoaXMucmVuZGVyU2VhcmNoKCk6IiJ9CiAgICAgIDwvZGl2PgogICAgYH19O2N1c3RvbUVsZW1lbnRzLmdldCgidHNkb2MtYXBwIil8fGN1c3RvbUVsZW1lbnRzLmRlZmluZSgidHNkb2MtYXBwIixvMCk7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidHNkb2MtYXBwIil8fGRvY3VtZW50LmJvZHkuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRzZG9jLWFwcCIpKTsKLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCnN3ZWV0LXNjcm9sbC9zd2VldC1zY3JvbGwuanM6CiAgKCohIEBwcmVzZXJ2ZSBzd2VldC1zY3JvbGwgdjQuMC4wIC0gdHN1eW9zaGl3YWRhIHwgTUlUIExpY2Vuc2UgKikKICAoKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UKICAgICAgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUKICAgICAgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAKICAgICAgVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQogICAgICBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVECiAgICAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsCiAgICAgIE1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuCiAgCiAgICAgIFNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwogICAgICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICopCgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvY3NzLXRhZy5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgICopCgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvcmVhY3RpdmUtZWxlbWVudC5qczoKbGl0LWh0bWwvbGl0LWh0bWwuanM6CmxpdC1lbGVtZW50L2xpdC1lbGVtZW50LmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9wcm9wZXJ0eS5qczoKbGl0LWh0bWwvZGlyZWN0aXZlLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9jdXN0b20tZWxlbWVudC5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvc3RhdGUuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2V2ZW50LW9wdGlvbnMuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2Jhc2UuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hbGwuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFzeW5jLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3NpZ25lZC1ub2Rlcy5qczoKbGl0LWh0bWwvYXN5bmMtZGlyZWN0aXZlLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL3VudGlsLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL2FzeW5jLXJlcGxhY2UuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMvYXN5bmMtYXBwZW5kLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL3JlcGVhdC5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgICopCgpsaXQtaHRtbC9pcy1zZXJ2ZXIuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICAqKQoKbGl0LWh0bWwvc3RhdGljLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmUtaGVscGVycy5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgICopCgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3NpZ25lZC1lbGVtZW50cy5qczoKbGl0LWh0bWwvZGlyZWN0aXZlcy9wcml2YXRlLWFzeW5jLWhlbHBlcnMuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMva2V5ZWQuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICAqKQoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stb3Blbi5tanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVjay5tanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9uLWRvd24ubWpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29kZS14bWwubWpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29tcGFzcy5tanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItZG93bi1sZWZ0Lm1qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdGV4dC5tanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtYnJhbmNoLm1qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRpbmcubWpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5ZXJzLm1qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lbnUubWpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9vbi5tanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVnLm1qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvY2tldC5tanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2gubWpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VydmVyLm1qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bi5tanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmlhbmdsZS1hbGVydC5tanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy94Lm1qczoKbHVjaWRlL2Rpc3QvZXNtL2RlZmF1bHRBdHRyaWJ1dGVzLm1qczoKbHVjaWRlL2Rpc3QvZXNtL2NyZWF0ZUVsZW1lbnQubWpzOgogICgqKgogICAqIEBsaWNlbnNlIGx1Y2lkZSB2MS4zNy4wIC0gSVNDCiAgICoKICAgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS4KICAgKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICAgKikKKi8K" }, { "path": "bundle.js.third-party-notices.json", "contentBase64": "ewogICJnZW5lcmF0b3IiOiAiQGdpdC56b25lL3RzYnVuZGxlIiwKICAicGFja2FnZXMiOiBbCiAgICB7CiAgICAgICJuYW1lIjogIkBhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdCIsCiAgICAgICJ2ZXJzaW9uIjogIjMuOC4wIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UubWQiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZDRkZjIxNzkyYTAxOGMyNTBlZTk2ZTRmY2Y4YzM5MTRkYzY5ZGMyNGE3MTBjMzRhNTkwMmI5NDEwMmZlYmJiOSIsCiAgICAgICAgICAidGV4dCI6ICJDb3B5cmlnaHQgKGMpIDIwMTkgTG9zc2xlc3MgR21iSCAoaGVsbG9AbG9zc2xlc3MuY29tKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0IiwKICAgICAgInZlcnNpb24iOiAiOC4wLjMiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZS5tZCIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJkNGRmMjE3OTJhMDE4YzI1MGVlOTZlNGZjZjhjMzkxNGRjNjlkYzI0YTcxMGMzNGE1OTAyYjk0MTAyZmViYmI5IiwKICAgICAgICAgICJ0ZXh0IjogIkNvcHlyaWdodCAoYykgMjAxOSBMb3NzbGVzcyBHbWJIIChoZWxsb0Bsb3NzbGVzcy5jb20pXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJAYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QtaW50ZXJmYWNlcyIsCiAgICAgICJ2ZXJzaW9uIjogIjMuMC4xOSIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImQ0ZGYyMTc5MmEwMThjMjUwZWU5NmU0ZmNmOGMzOTE0ZGM2OWRjMjRhNzEwYzM0YTU5MDJiOTQxMDJmZWJiYjkiLAogICAgICAgICAgInRleHQiOiAiQ29weXJpZ2h0IChjKSAyMDE5IExvc3NsZXNzIEdtYkggKGhlbGxvQGxvc3NsZXNzLmNvbSlcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIkBhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC1pbnRlcmZhY2VzIiwKICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZS5tZCIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJkNGRmMjE3OTJhMDE4YzI1MGVlOTZlNGZjZjhjMzkxNGRjNjlkYzI0YTcxMGMzNGE1OTAyYjk0MTAyZmViYmI5IiwKICAgICAgICAgICJ0ZXh0IjogIkNvcHlyaWdodCAoYykgMjAxOSBMb3NzbGVzcyBHbWJIIChoZWxsb0Bsb3NzbGVzcy5jb20pXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJAYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QtaW50ZXJmYWNlcyIsCiAgICAgICJ2ZXJzaW9uIjogIjcuMS4wIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UubWQiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZDRkZjIxNzkyYTAxOGMyNTBlZTk2ZTRmY2Y4YzM5MTRkYzY5ZGMyNGE3MTBjMzRhNTkwMmI5NDEwMmZlYmJiOSIsCiAgICAgICAgICAidGV4dCI6ICJDb3B5cmlnaHQgKGMpIDIwMTkgTG9zc2xlc3MgR21iSCAoaGVsbG9AbG9zc2xlc3MuY29tKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiQGRlc2lnbi5lc3RhdGUvZGVlcy1jb21tcyIsCiAgICAgICJ2ZXJzaW9uIjogIjEuMC4zMiIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImUxZTdiZDZjOTVkOGU1YmNlYjFlOTg5MjJhNDdlYmU3MmYyODEzMTNhMTBhZDgwZDYxODk3NThlMDA3ZTA3YjEiLAogICAgICAgICAgInRleHQiOiAiQ29weXJpZ2h0IChjKSAyMDIwIExvc3NsZXNzIEdtYkggKGhlbGxvQGxvc3NsZXNzLmNvbSlcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIkBkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMiLAogICAgICAidmVyc2lvbiI6ICIyLjUuNiIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjJjOGJlMjRhOTk4ZmNjMTcwNGJlNjkyNmQ0YzVkMzNlZWRlNjVkN2IwNTUxNjZiODliYTIzMzAyNGQ4ZTVhMDQiLAogICAgICAgICAgInRleHQiOiAiQ29weXJpZ2h0IChjKSAyMDIwIFRhc2sgVmVudHVyZSBDYXBpdGFsIEdtYkggKGhlbGxvQHRhc2sudmMpXG5Db3B5cmlnaHQgKGMpIDIwMTcgTmF0aGFuIEZyaWVuZCAodHMta2V5Y29kZS1lbnVtKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJAZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQiLAogICAgICAidmVyc2lvbiI6ICIyLjQuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjc4ZWFlZjllOTE5NWY4YTIwNTVlYjYzNTkwODhkYjEyOGI4MmI0OWFjMWUzY2Q4MGZjNzZiNDI4MTlmMzFkOTciLAogICAgICAgICAgInRleHQiOiAiQ29weXJpZ2h0IChjKSAyMDIwIFRhc2sgVmVudHVyZSBDYXBpdGFsIEdtYkggKGhlbGxvQHRhc2sudmMpXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJAbGl0L3JlYWN0aXZlLWVsZW1lbnQiLAogICAgICAidmVyc2lvbiI6ICIyLjEuMiIsCiAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJMSUNFTlNFIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjQ1ZDMxNzk5ZDBkYjk1NmNjM2ViNTQ2OTM0NmFiYmQ5YjcwMjViYWJjNWZmMjlmYWIxMGQ3MDk1ZGE5OTJlZjEiLAogICAgICAgICAgInRleHQiOiAiQlNEIDMtQ2xhdXNlIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSAyMDE3IEdvb2dsZSBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4zLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbkFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRVxuRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUxcbkRBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SXG5TRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUlxuQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSxcbk9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIkBwdXNoLnJvY2tzL2lzb3VuaXF1ZSIsCiAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZTFlN2JkNmM5NWQ4ZTViY2ViMWU5ODkyMmE0N2ViZTcyZjI4MTMxM2ExMGFkODBkNjE4OTc1OGUwMDdlMDdiMSIsCiAgICAgICAgICAidGV4dCI6ICJDb3B5cmlnaHQgKGMpIDIwMjAgTG9zc2xlc3MgR21iSCAoaGVsbG9AbG9zc2xlc3MuY29tKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiQHB1c2gucm9ja3MvbGlrIiwKICAgICAgInZlcnNpb24iOiAiNi40LjIiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJiZDFjYmVlM2JmNGExZWM3ZjRiYjg0MmUzMTVjYjBjMjk2NzQ0ZTkzMDUwNDkzNjA3Y2IzMmYxNTcwZjFlODc4IiwKICAgICAgICAgICJ0ZXh0IjogIk1JVCBMaWNlbnNlXG5cbkNvcHlyaWdodCAoYykgVGFzayBWZW50dXJlIENhcGl0YWwgR21iSFxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJAcHVzaC5yb2Nrcy9zbWFydGJ1ZmZlciIsCiAgICAgICJ2ZXJzaW9uIjogIjMuMC42IiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZTI0YWQ4ZTdhMzU2MzllNjJlMzA0N2IzNDlmYWJkNWE4YWI5MzhlOWM0NjI2MTVmYjQzZjllNzk2NmZkY2U5OCIsCiAgICAgICAgICAidGV4dCI6ICJDb3B5cmlnaHQgKGMpIDIwMjIgVGFzayBWZW50dXJlIENhcGl0YWwgR21iSCA8aGVsbG9AdGFzay52Yz5cbkNvcHlyaWdodCAyMDExIEpvbiBMZWlnaHRvblxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJAcHVzaC5yb2Nrcy9zbWFydGRlbGF5IiwKICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICIwOGEyOWMyYjVmZDgwOTYzYjE0Zjg3NjA0OTQzN2M0ZjhlN2MxM2UzNTIwNjdiYTMzMDQ1N2JiZTgwNzRkN2QxIiwKICAgICAgICAgICJ0ZXh0IjogIlRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG5Db3B5cmlnaHQgKGMpIDIwMTcgVGFzayBWZW50dXJlIENhcGl0YWwgR21iSCA8aGVsbG9AdGFzay52Yz5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiQHB1c2gucm9ja3Mvc21hcnRlbnYiLAogICAgICAidmVyc2lvbiI6ICI2LjEuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImFkZTZlMDVhYzI4YzE4YjBmODhlYmE2ZWI1ZTc2OTkwYjYxZWRmMzk2NGRkMzc3YmNmYjVmYWU3OGFkZjY3MzgiLAogICAgICAgICAgInRleHQiOiAiVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbkNvcHlyaWdodCAoYykgMjAyNiBUYXNrIFZlbnR1cmUgQ2FwaXRhbCBHbWJIXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIkBwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQiLAogICAgICAidmVyc2lvbiI6ICIzLjEuMiIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImQ0ZGYyMTc5MmEwMThjMjUwZWU5NmU0ZmNmOGMzOTE0ZGM2OWRjMjRhNzEwYzM0YTU5MDJiOTQxMDJmZWJiYjkiLAogICAgICAgICAgInRleHQiOiAiQ29weXJpZ2h0IChjKSAyMDE5IExvc3NsZXNzIEdtYkggKGhlbGxvQGxvc3NsZXNzLmNvbSlcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIkBwdXNoLnJvY2tzL3NtYXJ0aGFzaCIsCiAgICAgICJ2ZXJzaW9uIjogIjMuMy4wIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiYzQwNzM0M2VkY2U5MDUzNDc1N2I5MGVhZTgwMzdhZmE4YTcyNzIxY2MyYTEyZDIzNzkwMGQ5ODQyNjYzM2NjNiIsCiAgICAgICAgICAidGV4dCI6ICJUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuQ29weXJpZ2h0IChjKSAyMDE2IExvc3NsZXNzIEdtYkhcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiQHB1c2gucm9ja3Mvc21hcnRqc29uIiwKICAgICAgInZlcnNpb24iOiAiNi4wLjIiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJhZGU2ZTA1YWMyOGMxOGIwZjg4ZWJhNmViNWU3Njk5MGI2MWVkZjM5NjRkZDM3N2JjZmI1ZmFlNzhhZGY2NzM4IiwKICAgICAgICAgICJ0ZXh0IjogIlRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG5Db3B5cmlnaHQgKGMpIDIwMjYgVGFzayBWZW50dXJlIENhcGl0YWwgR21iSFxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJAcHVzaC5yb2Nrcy9zbWFydG1hcmtkb3duIiwKICAgICAgInZlcnNpb24iOiAiMy4zLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZS5tZCIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICI4YzZiOTUwNzBiMDQyMzU0ODE1Mjc2Y2I3ODQ0M2MxOGEyYjBmM2I3NWUwNmY3ZGMwNDE3NGU1MWE0ZjA5OTRkIiwKICAgICAgICAgICJ0ZXh0IjogIkNvcHlyaWdodCAoYykgMjAyNiBUYXNrIFZlbnR1cmUgQ2FwaXRhbCBHbWJIIDxoZWxsb0B0YXNrLnZjPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJAcHVzaC5yb2Nrcy9zbWFydG1hdGNoIiwKICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJlMWU3YmQ2Yzk1ZDhlNWJjZWIxZTk4OTIyYTQ3ZWJlNzJmMjgxMzEzYTEwYWQ4MGQ2MTg5NzU4ZTAwN2UwN2IxIiwKICAgICAgICAgICJ0ZXh0IjogIkNvcHlyaWdodCAoYykgMjAyMCBMb3NzbGVzcyBHbWJIIChoZWxsb0Bsb3NzbGVzcy5jb20pXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJAcHVzaC5yb2Nrcy9zbWFydHByb21pc2UiLAogICAgICAidmVyc2lvbiI6ICI0LjIuNSIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjhjNmI5NTA3MGIwNDIzNTQ4MTUyNzZjYjc4NDQzYzE4YTJiMGYzYjc1ZTA2ZjdkYzA0MTc0ZTUxYTRmMDk5NGQiLAogICAgICAgICAgInRleHQiOiAiQ29weXJpZ2h0IChjKSAyMDI2IFRhc2sgVmVudHVyZSBDYXBpdGFsIEdtYkggPGhlbGxvQHRhc2sudmM+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIkBwdXNoLnJvY2tzL3NtYXJ0cm91dGVyIiwKICAgICAgInZlcnNpb24iOiAiMS4zLjMiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJlMWU3YmQ2Yzk1ZDhlNWJjZWIxZTk4OTIyYTQ3ZWJlNzJmMjgxMzEzYTEwYWQ4MGQ2MTg5NzU4ZTAwN2UwN2IxIiwKICAgICAgICAgICJ0ZXh0IjogIkNvcHlyaWdodCAoYykgMjAyMCBMb3NzbGVzcyBHbWJIIChoZWxsb0Bsb3NzbGVzcy5jb20pXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJAcHVzaC5yb2Nrcy9zbWFydHJ4IiwKICAgICAgInZlcnNpb24iOiAiMy4wLjEyIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiNjI0ZjI0MGYxOTM4NDhmMjk4MGI3OWQ1Mzg5YTUzMTE3MWU4ZGE1ZTNkNGYwYTM2NWVlNTIxNjJkZmNjN2VmYiIsCiAgICAgICAgICAidGV4dCI6ICJNSVQgTGljZW5zZVxuXG5Db3B5cmlnaHQgKGMpIExvc3NsZXNzIEdtYkhcbkNvcHlyaWdodCAoYykgVGFzayBWZW50dXJlIENhcGl0YWwgR21iSFxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJAcHVzaC5yb2Nrcy9zbWFydHN0YXRlIiwKICAgICAgInZlcnNpb24iOiAiMi4zLjMiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJjNWIxNTU2NGVkZTlkNDZjYjIyNjViZmIxZTQzNjdmMjE0YmQ2YmNkYzM3NjY3NjYzNTI5MzM5ODk5NzkxNjJkIiwKICAgICAgICAgICJ0ZXh0IjogIkNvcHlyaWdodCAoYykgMjAxOSBUYXNrIFZlbnR1cmUgQ2FwaXRhbCBHbWJIIChoZWxsb0B0YXNrLnZjKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiQHB1c2gucm9ja3Mvc21hcnRzdHJpbmciLAogICAgICAidmVyc2lvbiI6ICI0LjEuMSIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImFkZTZlMDVhYzI4YzE4YjBmODhlYmE2ZWI1ZTc2OTkwYjYxZWRmMzk2NGRkMzc3YmNmYjVmYWU3OGFkZjY3MzgiLAogICAgICAgICAgInRleHQiOiAiVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbkNvcHlyaWdodCAoYykgMjAyNiBUYXNrIFZlbnR1cmUgQ2FwaXRhbCBHbWJIXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIkBwdXNoLnJvY2tzL3NtYXJ0dGltZSIsCiAgICAgICJ2ZXJzaW9uIjogIjQuMi4zIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZmVhMjg1ZjMxNDZiYWUwM2RmODk4OGUzN2VkOWUwYjY2NmM0NTFiMjlkYWI5MDdlMzI2ZDNlYjExMGFkN2Q0ZCIsCiAgICAgICAgICAidGV4dCI6ICJUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuQ29weXJpZ2h0IChjKSAyMDE0IExvc3NsZXNzIEdtYkggKGhlbGxvQGxvc3NsZXNzLmNvbSlcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIkBwdXNoLnJvY2tzL3NtYXJ0dXJsIiwKICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJlMWU3YmQ2Yzk1ZDhlNWJjZWIxZTk4OTIyYTQ3ZWJlNzJmMjgxMzEzYTEwYWQ4MGQ2MTg5NzU4ZTAwN2UwN2IxIiwKICAgICAgICAgICJ0ZXh0IjogIkNvcHlyaWdodCAoYykgMjAyMCBMb3NzbGVzcyBHbWJIIChoZWxsb0Bsb3NzbGVzcy5jb20pXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJAcHVzaC5yb2Nrcy9zbWFydHlhbWwiLAogICAgICAidmVyc2lvbiI6ICIzLjAuNSIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjhjNmI5NTA3MGIwNDIzNTQ4MTUyNzZjYjc4NDQzYzE4YTJiMGYzYjc1ZTA2ZjdkYzA0MTc0ZTUxYTRmMDk5NGQiLAogICAgICAgICAgInRleHQiOiAiQ29weXJpZ2h0IChjKSAyMDI2IFRhc2sgVmVudHVyZSBDYXBpdGFsIEdtYkggPGhlbGxvQHRhc2sudmM+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIkBwdXNoLnJvY2tzL3dlYnJlcXVlc3QiLAogICAgICAidmVyc2lvbiI6ICI0LjMuMSIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlLm1kIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjUyNjJiYWExMDRkYmJjZjE4MDg0Yzc0YTM2OTM1NDE5MzYwNjdlZWI5NDYwZmNmZTNjY2JlMjUxNjRmNWNiODQiLAogICAgICAgICAgInRleHQiOiAiQ29weXJpZ2h0IChjKSAyMDE4IExvc3NsZXNzIEdtYkggKGhlbGxvQGxvc3NsZXNzLmNvbSlcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIkBwdXNoLnJvY2tzL3dlYnNldHVwIiwKICAgICAgInZlcnNpb24iOiAiMy4wLjIwIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiOGM2Yjk1MDcwYjA0MjM1NDgxNTI3NmNiNzg0NDNjMThhMmIwZjNiNzVlMDZmN2RjMDQxNzRlNTFhNGYwOTk0ZCIsCiAgICAgICAgICAidGV4dCI6ICJDb3B5cmlnaHQgKGMpIDIwMjYgVGFzayBWZW50dXJlIENhcGl0YWwgR21iSCA8aGVsbG9AdGFzay52Yz5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiQHB1c2gucm9ja3Mvd2Vic3RvcmUiLAogICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjc4ZWFlZjllOTE5NWY4YTIwNTVlYjYzNTkwODhkYjEyOGI4MmI0OWFjMWUzY2Q4MGZjNzZiNDI4MTlmMzFkOTciLAogICAgICAgICAgInRleHQiOiAiQ29weXJpZ2h0IChjKSAyMDIwIFRhc2sgVmVudHVyZSBDYXBpdGFsIEdtYkggKGhlbGxvQHRhc2sudmMpXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJAdGVtcGZpeC9sZW5pcyIsCiAgICAgICJ2ZXJzaW9uIjogIjEuMy4yMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJMSUNFTlNFIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjdkMTg5NmIzMWYyZWVkOWYyODZiMDVmYWNhMDY3YzRlMzViMmYxMDlhZTdjNGVkNTEwNTIyMGUyZDI4MjAyMjgiLAogICAgICAgICAgInRleHQiOiAiVGhlIE1JVCBMaWNlbnNlXG5cbkNvcHlyaWdodCAoYykgMjAyNCBkYXJrcm9vbS5lbmdpbmVlcmluZ1xuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIOKAnFNvZnR3YXJl4oCdKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQg4oCcQVMgSVPigJ0sIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIkB0c2NsYXNzL3RzY2xhc3MiLAogICAgICAidmVyc2lvbiI6ICI5LjUuMSIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjZjNTQ3MGFkZDA3YzE4YjBlMmM5NWIyNzk1YmQ5YzU2ZGZiOGM5ZWI0YWY0NmIxNzUyYTU4MTVjYmRlNTE4YmEiLAogICAgICAgICAgInRleHQiOiAiVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbkNvcHlyaWdodCAoYykgMjAxNiBUYXNrIFZlbnR1cmUgQ2FwaXRhbCBHbWJIXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIkB1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lIiwKICAgICAgInZlcnNpb24iOiAiMS40LjAiLAogICAgICAibGljZW5zZSI6ICJJU0MiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiTElDRU5TRSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJkYzZkNDk2MWQ4YjZlZTc0NzIzMTU4MmFlOWM1M2NlMWQ2NmJmNzZiYzlmNWEyOGY1NTRjMGU5NzIxMDk1M2JmIiwKICAgICAgICAgICJ0ZXh0IjogIklTQyBMaWNlbnNlXG5cbkNvcHlyaWdodCAoYykgMjAyMSwgQW5kcmVhIEdpYW1tYXJjaGksIEBXZWJSZWZsZWN0aW9uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZVxuY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFXG5PUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiYmFpbCIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiNjNjYjk4YjNmNmFiZmIzYzM1OTJjMTZmODgyNTNjMWJkYzgzNDA4N2JmNTI2NzFlOGNlNTYwOWU0ZWI2OTNjZiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIDIwMTUgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4nU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG53aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogImJyb2FkY2FzdC1jaGFubmVsIiwKICAgICAgInZlcnNpb24iOiAiNy40LjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiTElDRU5TRSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICI5OWE0OTBkMzQwY2M4OTFkZTUwODJjZWZmZWYyOGQyM2IxMjY3NTFhMWYxMWY4ZjRjMTdmODJjZDgwM2VkZDZmIiwKICAgICAgICAgICJ0ZXh0IjogIk1JVCBMaWNlbnNlXG5cbkNvcHlyaWdodCAoYykgMjAxOCBEYW5pZWwgTWV5ZXJcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiY2NvdW50IiwKICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICI2M2NiOThiM2Y2YWJmYjNjMzU5MmMxNmY4ODI1M2MxYmRjODM0MDg3YmY1MjY3MWU4Y2U1NjA5ZTRlYjY5M2NmIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgMjAxNSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiY2hhcmFjdGVyLWVudGl0aWVzLWh0bWw0IiwKICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICI2M2NiOThiM2Y2YWJmYjNjMzU5MmMxNmY4ODI1M2MxYmRjODM0MDg3YmY1MjY3MWU4Y2U1NjA5ZTRlYjY5M2NmIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgMjAxNSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiY2hhcmFjdGVyLWVudGl0aWVzLWxlZ2FjeSIsCiAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiNjNjYjk4YjNmNmFiZmIzYzM1OTJjMTZmODgyNTNjMWJkYzgzNDA4N2JmNTI2NzFlOGNlNTYwOWU0ZWI2OTNjZiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIDIwMTUgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4nU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG53aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogImNvbW1hLXNlcGFyYXRlZC10b2tlbnMiLAogICAgICAidmVyc2lvbiI6ICIyLjAuMyIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImNhNDY2MmNiNWQxYjczOGZiZTUzNTBjMGQ1NDg1YmExMTc3M2I0YjcyMDg5NzQwODJhZTZlMTI5YTUyZDYzMWQiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDE2IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJjcm9uZXIiLAogICAgICAidmVyc2lvbiI6ICIxMC4wLjEiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiTElDRU5TRSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJkMWM4OWQyZGU5YWI1Nzg1ZjY4YzY5NDczZDVlMTBmMWZmMGU1ZGJhY2VmODhlMmFlY2JkNmVhZjg5YjYzMDAzIiwKICAgICAgICAgICJ0ZXh0IjogIlRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG5Db3B5cmlnaHQgKGMpIDIwMTUtMjAyMSBIZXhhZ29uIDxnaXRodWIuY29tL0hleGFnb24+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS5cblxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiZGF0ZS1mbnMiLAogICAgICAidmVyc2lvbiI6ICI0LjQuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJMSUNFTlNFLm1kIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjhkMzk1MWMzODk2N2I5NjRiMWZlMjU5YmZkMjAwYzI2NDdjYzA0Yzg1OGI1NWE0NDE0ZTMxMjJhNjBmMWVmNGIiLAogICAgICAgICAgInRleHQiOiAiTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSAyMDIxIFNhc2hhIEtvc3MgYW5kIExlc2hhIEtvc3MgaHR0cHM6Ly9rb3Nzbm9jb3JwLm1pdC1saWNlbnNlLm9yZ1xuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJkYXlqcyIsCiAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMjMiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiTElDRU5TRSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICI1ZmFhYjc1MjZkMDU1NjUxYmUzYWFiNzY5ZDU4ODk3YmU2YmQ5MWYzZDM5ZDEzN2YyNWYxMmRiYTFiMzFkNWRjIiwKICAgICAgICAgICJ0ZXh0IjogIk1JVCBMaWNlbnNlXG5cbkNvcHlyaWdodCAoYykgMjAxOC1wcmVzZW50LCBpYW1rdW5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiZGVjb2RlLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2UiLAogICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImRkMTA4MTg4NGE5Mjk1MjgwMmY0ODAzMTEwYTZiYjU0M2FjZWE5YTgxNGM3ODZkNTg2MDViNGMxMjE5YjVlYmIiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiZXNjYXBlLXN0cmluZy1yZWdleHAiLAogICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjVjOTMyZDg4MjU2YjRhYjk1OGY2NGE4NTZmYTQ4ZThiZDFmNTViYzFkOTZiODE0OWM2NTY4OWUwYzYxNzg5ZDMiLAogICAgICAgICAgInRleHQiOiAiTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSBTaW5kcmUgU29yaHVzIDxzaW5kcmVzb3JodXNAZ21haWwuY29tPiAoaHR0cHM6Ly9zaW5kcmVzb3JodXMuY29tKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJleHRlbmQiLAogICAgICAidmVyc2lvbiI6ICIzLjAuMiIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJMSUNFTlNFIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjk3YWY3NDI4ZjkzYWZiYWI5YmY3OWNkMDkyNTRkYTEzNTcxNjE3OTRmNDI1NWViMWI0NTk5ZjA0ZGQyZDJlN2MiLAogICAgICAgICAgInRleHQiOiAiVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbkNvcHlyaWdodCAoYykgMjAxNCBTdGVmYW4gVGhvbWFzXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG5cIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbk5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkVcbkxJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT05cbk9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogImZhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5IiwKICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiTElDRU5TRSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJhODMzZDM2NjI0MmMyOThjZjFiMTAyNjM1MTY1NzJmYjhkY2JlNjhlYjUwNzJjZGNhYzJiNDU0NmUyYjRlYjM2IiwKICAgICAgICAgICJ0ZXh0IjogIlRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuXG5Db3B5cmlnaHQgKGMpIDIwMTcgRXZnZW55IFBvYmVyZXpraW5cbkNvcHlyaWdodCAoYykgMjAxMyBKYW1lcyBIYWxsaWRheVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mXG50aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluXG50aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvXG51c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZlxudGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1NcbkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUlxuQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSXG5JTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogImZhdWx0IiwKICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICI2M2NiOThiM2Y2YWJmYjNjMzU5MmMxNmY4ODI1M2MxYmRjODM0MDg3YmY1MjY3MWU4Y2U1NjA5ZTRlYjY5M2NmIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgMjAxNSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiZm9ybWF0IiwKICAgICAgInZlcnNpb24iOiAiMC4yLjIiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZXMvZm9ybWF0LnR4dCIsCiAgICAgICAgICAib3JpZ2luIjogInN1cHBsZW1lbnQiLAogICAgICAgICAgInN1cHBsaWVkQnkiOiAiQHB1c2gucm9ja3Mvc21hcnRtYXJrZG93bkAzLjMuMCIsCiAgICAgICAgICAic2hhMjU2IjogImJkNzI5MTliZTE1ZDQ1YjI3ZWM3ODM4NzNiNzQxNzgyODFjNzBiZmEwNDk4ZjgzNTMzZTY2MzA2ZjcwY2IwYjciLAogICAgICAgICAgInRleHQiOiAiTGljZW5zZVxuPT09PT09PVxuXG5Db3B5cmlnaHQgMjAxMCAtIDIwMTQgU2FtaSBTYW1odXJpIHNhbWlAc2FtaHVyaS5uZXRcblxuW01JVCBsaWNlbnNlXShodHRwOi8vc2pzLm1pdC1saWNlbnNlLm9yZylcblxuLy9cbi8vIGZvcm1hdCAtIHByaW50Zi1saWtlIHN0cmluZyBmb3JtYXR0aW5nIGZvciBKYXZhU2NyaXB0XG4vLyBnaXRodWIuY29tL3NhbXNvbmpzL2Zvcm1hdFxuLy8gQF9zanNcbi8vXG4vLyBDb3B5cmlnaHQgMjAxMCAtIDIwMTMgU2FtaSBTYW1odXJpIDxzYW1pQHNhbWh1cmkubmV0PlxuLy9cbi8vIE1JVCBMaWNlbnNlXG4vLyBodHRwOi8vc2pzLm1pdC1saWNlbnNlLm9yZ1xuLy9cblxuVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIOKAnFNvZnR3YXJl4oCdKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCDigJxBUyBJU+KAnSwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG5USEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJoYXN0LXV0aWwtc2FuaXRpemUiLAogICAgICAidmVyc2lvbiI6ICI1LjAuMiIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImRkMTA4MTg4NGE5Mjk1MjgwMmY0ODAzMTEwYTZiYjU0M2FjZWE5YTgxNGM3ODZkNTg2MDViNGMxMjE5YjVlYmIiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiaGFzdC11dGlsLXRvLWh0bWwiLAogICAgICAidmVyc2lvbiI6ICI5LjAuNSIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImRkMTA4MTg4NGE5Mjk1MjgwMmY0ODAzMTEwYTZiYjU0M2FjZWE5YTgxNGM3ODZkNTg2MDViNGMxMjE5YjVlYmIiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiaGFzdC11dGlsLXdoaXRlc3BhY2UiLAogICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImNhNDY2MmNiNWQxYjczOGZiZTUzNTBjMGQ1NDg1YmExMTc3M2I0YjcyMDg5NzQwODJhZTZlMTI5YTUyZDYzMWQiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDE2IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJodG1sLXZvaWQtZWxlbWVudHMiLAogICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImNhNDY2MmNiNWQxYjczOGZiZTUzNTBjMGQ1NDg1YmExMTc3M2I0YjcyMDg5NzQwODJhZTZlMTI5YTUyZDYzMWQiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDE2IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJpcy1wbGFpbi1vYmoiLAogICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjVjOTMyZDg4MjU2YjRhYjk1OGY2NGE4NTZmYTQ4ZThiZDFmNTViYzFkOTZiODE0OWM2NTY4OWUwYzYxNzg5ZDMiLAogICAgICAgICAgInRleHQiOiAiTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSBTaW5kcmUgU29yaHVzIDxzaW5kcmVzb3JodXNAZ21haWwuY29tPiAoaHR0cHM6Ly9zaW5kcmVzb3JodXMuY29tKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJsaXQiLAogICAgICAidmVyc2lvbiI6ICIzLjMuMyIsCiAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJMSUNFTlNFIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjQ1ZDMxNzk5ZDBkYjk1NmNjM2ViNTQ2OTM0NmFiYmQ5YjcwMjViYWJjNWZmMjlmYWIxMGQ3MDk1ZGE5OTJlZjEiLAogICAgICAgICAgInRleHQiOiAiQlNEIDMtQ2xhdXNlIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSAyMDE3IEdvb2dsZSBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4zLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbkFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRVxuRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUxcbkRBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SXG5TRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUlxuQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSxcbk9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogImxpdC1lbGVtZW50IiwKICAgICAgInZlcnNpb24iOiAiNC4yLjIiLAogICAgICAibGljZW5zZSI6ICJCU0QtMy1DbGF1c2UiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiTElDRU5TRSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICI0NWQzMTc5OWQwZGI5NTZjYzNlYjU0NjkzNDZhYmJkOWI3MDI1YmFiYzVmZjI5ZmFiMTBkNzA5NWRhOTkyZWYxIiwKICAgICAgICAgICJ0ZXh0IjogIkJTRCAzLUNsYXVzZSBMaWNlbnNlXG5cbkNvcHlyaWdodCAoYykgMjAxNyBHb29nbGUgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4xLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG5BTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG5JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEVcbkZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMXG5EQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUlxuU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVJcbkNBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksXG5PUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJsaXQtaHRtbCIsCiAgICAgICJ2ZXJzaW9uIjogIjMuMy4zIiwKICAgICAgImxpY2Vuc2UiOiAiQlNELTMtQ2xhdXNlIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogIkxJQ0VOU0UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiMmI2NmY5MzkwYWZkZTI5ZWRmZTQzMTRkYWZmOTNmMDFmYjE4MmUxMTc4MDUzZTIyODEyMDE3ODk4N2U1ZGI3NSIsCiAgICAgICAgICAidGV4dCI6ICJCU0QgMy1DbGF1c2UgTGljZW5zZVxuXG5Db3B5cmlnaHQgKGMpIDIwMTcgR29vZ2xlIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG5tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbjMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFXG5GT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTFxuREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1JcblNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSXG5DQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLFxuT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Vcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJsb25nZXN0LXN0cmVhayIsCiAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiOWYwODRmYWM2OWQ4Y2YxZTZjZTk4M2JhNWEzNDk5Yzc2OTVlZDc0YTI2ZWM2MjVjMzhmMGZkMTlmZGRkNWUxMCIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIDIwMTUgVGl0dXMgV29ybWVyIDxtYWlsdG86dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJsdWNpZGUiLAogICAgICAidmVyc2lvbiI6ICIxLjM3LjAiLAogICAgICAibGljZW5zZSI6ICJJU0MiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiTElDRU5TRSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJiNDk1MDQ3YmQ5M2E5YjA2OTEzNTExMDc2ZjUwNGRhYmExN2Q1YmJlYjNlMDY1MGYzYmI1M2E0MjIwMzI5YzU3IiwKICAgICAgICAgICJ0ZXh0IjogIklTQyBMaWNlbnNlXG5cbkNvcHlyaWdodCAoYykgMjAyNiBMdWNpZGUgSWNvbnMgYW5kIENvbnRyaWJ1dG9yc1xuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmVcbmNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTXG5XSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUlxuQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFU1xuV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOXG5BQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRlxuT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cblxuLS0tXG5cblRoZSBmb2xsb3dpbmcgTHVjaWRlIGljb25zIGFyZSBkZXJpdmVkIGZyb20gdGhlIEZlYXRoZXIgcHJvamVjdDpcblxuYWlycGxheSwgYWxlcnQtY2lyY2xlLCBhbGVydC1vY3RhZ29uLCBhbGVydC10cmlhbmdsZSwgYXBlcnR1cmUsIGFycm93LWRvd24tY2lyY2xlLCBhcnJvdy1kb3duLWxlZnQsIGFycm93LWRvd24tcmlnaHQsIGFycm93LWRvd24sIGFycm93LWxlZnQtY2lyY2xlLCBhcnJvdy1sZWZ0LCBhcnJvdy1yaWdodC1jaXJjbGUsIGFycm93LXJpZ2h0LCBhcnJvdy11cC1jaXJjbGUsIGFycm93LXVwLWxlZnQsIGFycm93LXVwLXJpZ2h0LCBhcnJvdy11cCwgYXQtc2lnbiwgY2FsZW5kYXIsIGNhc3QsIGNoZWNrLCBjaGV2cm9uLWRvd24sIGNoZXZyb24tbGVmdCwgY2hldnJvbi1yaWdodCwgY2hldnJvbi11cCwgY2hldnJvbnMtZG93biwgY2hldnJvbnMtbGVmdCwgY2hldnJvbnMtcmlnaHQsIGNoZXZyb25zLXVwLCBjaXJjbGUsIGNsaXBib2FyZCwgY2xvY2ssIGNvZGUsIGNvbHVtbnMsIGNvbW1hbmQsIGNvbXBhc3MsIGNvcm5lci1kb3duLWxlZnQsIGNvcm5lci1kb3duLXJpZ2h0LCBjb3JuZXItbGVmdC1kb3duLCBjb3JuZXItbGVmdC11cCwgY29ybmVyLXJpZ2h0LWRvd24sIGNvcm5lci1yaWdodC11cCwgY29ybmVyLXVwLWxlZnQsIGNvcm5lci11cC1yaWdodCwgY3Jvc3NoYWlyLCBkYXRhYmFzZSwgZGl2aWRlLWNpcmNsZSwgZGl2aWRlLXNxdWFyZSwgZG9sbGFyLXNpZ24sIGRvd25sb2FkLCBleHRlcm5hbC1saW5rLCBmZWF0aGVyLCBmcm93biwgaGFzaCwgaGVhZHBob25lcywgaGVscC1jaXJjbGUsIGluZm8sIGl0YWxpYywga2V5LCBsYXlvdXQsIGxpZmUtYnVveSwgbGluay0yLCBsaW5rLCBsb2FkZXIsIGxvY2ssIGxvZy1pbiwgbG9nLW91dCwgbWF4aW1pemUsIG1laCwgbWluaW1pemUsIG1pbmltaXplLTIsIG1pbnVzLWNpcmNsZSwgbWludXMtc3F1YXJlLCBtaW51cywgbW9uaXRvciwgbW9vbiwgbW9yZS1ob3Jpem9udGFsLCBtb3JlLXZlcnRpY2FsLCBtb3ZlLCBtdXNpYywgbmF2aWdhdGlvbi0yLCBuYXZpZ2F0aW9uLCBvY3RhZ29uLCBwYXVzZS1jaXJjbGUsIHBlcmNlbnQsIHBsdXMtY2lyY2xlLCBwbHVzLXNxdWFyZSwgcGx1cywgcG93ZXIsIHJhZGlvLCByc3MsIHNlYXJjaCwgc2VydmVyLCBzaGFyZSwgc2hvcHBpbmctYmFnLCBzaWRlYmFyLCBzbWFydHBob25lLCBzbWlsZSwgc3F1YXJlLCB0YWJsZS0yLCB0YWJsZXQsIHRhcmdldCwgdGVybWluYWwsIHRyYXNoLTIsIHRyYXNoLCB0cmlhbmdsZSwgdHYsIHR5cGUsIHVwbG9hZCwgeC1jaXJjbGUsIHgtb2N0YWdvbiwgeC1zcXVhcmUsIHgsIHpvb20taW4sIHpvb20tb3V0XG5cblRoZSBNSVQgTGljZW5zZSAoTUlUKSAoZm9yIHRoZSBpY29ucyBsaXN0ZWQgYWJvdmUpXG5cbkNvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50IENvbGUgQmVtaXNcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAibWFya2Rvd24tdGFibGUiLAogICAgICAidmVyc2lvbiI6ICIzLjAuNCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImRkMTA4MTg4NGE5Mjk1MjgwMmY0ODAzMTEwYTZiYjU0M2FjZWE5YTgxNGM3ODZkNTg2MDViNGMxMjE5YjVlYmIiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAibWF0Y2hlciIsCiAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiNWM5MzJkODgyNTZiNGFiOTU4ZjY0YTg1NmZhNDhlOGJkMWY1NWJjMWQ5NmI4MTQ5YzY1Njg5ZTBjNjE3ODlkMyIsCiAgICAgICAgICAidGV4dCI6ICJNSVQgTGljZW5zZVxuXG5Db3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChodHRwczovL3NpbmRyZXNvcmh1cy5jb20pXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIm1kYXN0LXV0aWwtZmluZC1hbmQtcmVwbGFjZSIsCiAgICAgICJ2ZXJzaW9uIjogIjMuMC4yIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZGQxMDgxODg0YTkyOTUyODAyZjQ4MDMxMTBhNmJiNTQzYWNlYTlhODE0Yzc4NmQ1ODYwNWI0YzEyMTliNWViYiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtZGFzdC11dGlsLWZyb20tbWFya2Rvd24iLAogICAgICAidmVyc2lvbiI6ICIyLjAuMyIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImRkMTA4MTg4NGE5Mjk1MjgwMmY0ODAzMTEwYTZiYjU0M2FjZWE5YTgxNGM3ODZkNTg2MDViNGMxMjE5YjVlYmIiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAibWRhc3QtdXRpbC1mcm9udG1hdHRlciIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiNTM2ODA0YjNhZGJmZjE3ZGJiYjllZDBkMmJmOTY1NWI3OGYwNzY0MDI3ODU4MWUzN2UzZDc0NzUyODJkNWU2MSIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIDIwMjAgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4nU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG53aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIm1kYXN0LXV0aWwtZ2ZtIiwKICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJkZDEwODE4ODRhOTI5NTI4MDJmNDgwMzExMGE2YmI1NDNhY2VhOWE4MTRjNzg2ZDU4NjA1YjRjMTIxOWI1ZWJiIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4nU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG53aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIm1kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWwiLAogICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjUzNjgwNGIzYWRiZmYxN2RiYmI5ZWQwZDJiZjk2NTViNzhmMDc2NDAyNzg1ODFlMzdlM2Q3NDc1MjgyZDVlNjEiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDIwIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtZGFzdC11dGlsLWdmbS1mb290bm90ZSIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZGQxMDgxODg0YTkyOTUyODAyZjQ4MDMxMTBhNmJiNTQzYWNlYTlhODE0Yzc4NmQ1ODYwNWI0YzEyMTliNWViYiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtZGFzdC11dGlsLWdmbS1zdHJpa2V0aHJvdWdoIiwKICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICI1MzY4MDRiM2FkYmZmMTdkYmJiOWVkMGQyYmY5NjU1Yjc4ZjA3NjQwMjc4NTgxZTM3ZTNkNzQ3NTI4MmQ1ZTYxIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgMjAyMCBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAibWRhc3QtdXRpbC1nZm0tdGFibGUiLAogICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjUzNjgwNGIzYWRiZmYxN2RiYmI5ZWQwZDJiZjk2NTViNzhmMDc2NDAyNzg1ODFlMzdlM2Q3NDc1MjgyZDVlNjEiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDIwIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbSIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiNTM2ODA0YjNhZGJmZjE3ZGJiYjllZDBkMmJmOTY1NWI3OGYwNzY0MDI3ODU4MWUzN2UzZDc0NzUyODJkNWU2MSIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIDIwMjAgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4nU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG53aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIm1kYXN0LXV0aWwtcGhyYXNpbmciLAogICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImI2ZDFhNGUxODMxYjE3N2FjYzk2ZjIyYTgxN2Q0ZjBmNGMxODQxOTM1NWJhZGMzMTI1NzU0NDQ1ZmM2OWUzYTciLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDE3IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuQ29weXJpZ2h0IChjKSAyMDE3IFZpY3RvciBGZWxkZXIgPHZpY3RvckBkcmFmdC5saT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAibWRhc3QtdXRpbC10by1oYXN0IiwKICAgICAgInZlcnNpb24iOiAiMTMuMi4xIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiY2E0NjYyY2I1ZDFiNzM4ZmJlNTM1MGMwZDU0ODViYTExNzczYjRiNzIwODk3NDA4MmFlNmUxMjlhNTJkNjMxZCIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIDIwMTYgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4nU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG53aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIm1kYXN0LXV0aWwtdG8tbWFya2Rvd24iLAogICAgICAidmVyc2lvbiI6ICIyLjEuMiIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImRkMTA4MTg4NGE5Mjk1MjgwMmY0ODAzMTEwYTZiYjU0M2FjZWE5YTgxNGM3ODZkNTg2MDViNGMxMjE5YjVlYmIiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAibWRhc3QtdXRpbC10by1zdHJpbmciLAogICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjYzY2I5OGIzZjZhYmZiM2MzNTkyYzE2Zjg4MjUzYzFiZGM4MzQwODdiZjUyNjcxZThjZTU2MDllNGViNjkzY2YiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDE1IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtaWNyb21hcmsiLAogICAgICAidmVyc2lvbiI6ICI0LjAuMiIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImRkMTA4MTg4NGE5Mjk1MjgwMmY0ODAzMTEwYTZiYjU0M2FjZWE5YTgxNGM3ODZkNTg2MDViNGMxMjE5YjVlYmIiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAibWljcm9tYXJrLWNvcmUtY29tbW9ubWFyayIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMC4zIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZGQxMDgxODg0YTkyOTUyODAyZjQ4MDMxMTBhNmJiNTQzYWNlYTlhODE0Yzc4NmQ1ODYwNWI0YzEyMTliNWViYiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtaWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyIiwKICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICI1MzY4MDRiM2FkYmZmMTdkYmJiOWVkMGQyYmY5NjU1Yjc4ZjA3NjQwMjc4NTgxZTM3ZTNkNzQ3NTI4MmQ1ZTYxIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgMjAyMCBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAibWljcm9tYXJrLWV4dGVuc2lvbi1nZm0iLAogICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjUzNjgwNGIzYWRiZmYxN2RiYmI5ZWQwZDJiZjk2NTViNzhmMDc2NDAyNzg1ODFlMzdlM2Q3NDc1MjgyZDVlNjEiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDIwIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtaWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsIiwKICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICI1MzY4MDRiM2FkYmZmMTdkYmJiOWVkMGQyYmY5NjU1Yjc4ZjA3NjQwMjc4NTgxZTM3ZTNkNzQ3NTI4MmQ1ZTYxIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgMjAyMCBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAibWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUiLAogICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjgwN2E4ODUyMmE4NTAwOTJhZWNlNDk0ODYyMDdjMTdjMzEzYzRkNTcwOGFjMjc2NTI0ODQwZmUxY2FhMGIwZmEiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDIxIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtaWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoIiwKICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICI1MzY4MDRiM2FkYmZmMTdkYmJiOWVkMGQyYmY5NjU1Yjc4ZjA3NjQwMjc4NTgxZTM3ZTNkNzQ3NTI4MmQ1ZTYxIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgMjAyMCBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAibWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUiLAogICAgICAidmVyc2lvbiI6ICIyLjEuMSIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImRkMTA4MTg4NGE5Mjk1MjgwMmY0ODAzMTEwYTZiYjU0M2FjZWE5YTgxNGM3ODZkNTg2MDViNGMxMjE5YjVlYmIiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAibWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyIiwKICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICI1MzY4MDRiM2FkYmZmMTdkYmJiOWVkMGQyYmY5NjU1Yjc4ZjA3NjQwMjc4NTgxZTM3ZTNkNzQ3NTI4MmQ1ZTYxIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgMjAyMCBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAibWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW0iLAogICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjUzNjgwNGIzYWRiZmYxN2RiYmI5ZWQwZDJiZjk2NTViNzhmMDc2NDAyNzg1ODFlMzdlM2Q3NDc1MjgyZDVlNjEiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDIwIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtaWNyb21hcmstZmFjdG9yeS1kZXN0aW5hdGlvbiIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZGQxMDgxODg0YTkyOTUyODAyZjQ4MDMxMTBhNmJiNTQzYWNlYTlhODE0Yzc4NmQ1ODYwNWI0YzEyMTliNWViYiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtaWNyb21hcmstZmFjdG9yeS1sYWJlbCIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZGQxMDgxODg0YTkyOTUyODAyZjQ4MDMxMTBhNmJiNTQzYWNlYTlhODE0Yzc4NmQ1ODYwNWI0YzEyMTliNWViYiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtaWNyb21hcmstZmFjdG9yeS1zcGFjZSIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZGQxMDgxODg0YTkyOTUyODAyZjQ4MDMxMTBhNmJiNTQzYWNlYTlhODE0Yzc4NmQ1ODYwNWI0YzEyMTliNWViYiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtaWNyb21hcmstZmFjdG9yeS10aXRsZSIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZGQxMDgxODg0YTkyOTUyODAyZjQ4MDMxMTBhNmJiNTQzYWNlYTlhODE0Yzc4NmQ1ODYwNWI0YzEyMTliNWViYiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtaWNyb21hcmstZmFjdG9yeS13aGl0ZXNwYWNlIiwKICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJkZDEwODE4ODRhOTI5NTI4MDJmNDgwMzExMGE2YmI1NDNhY2VhOWE4MTRjNzg2ZDU4NjA1YjRjMTIxOWI1ZWJiIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4nU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG53aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIm1pY3JvbWFyay11dGlsLWNoYXJhY3RlciIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZGQxMDgxODg0YTkyOTUyODAyZjQ4MDMxMTBhNmJiNTQzYWNlYTlhODE0Yzc4NmQ1ODYwNWI0YzEyMTliNWViYiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtaWNyb21hcmstdXRpbC1jaHVua2VkIiwKICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJkZDEwODE4ODRhOTI5NTI4MDJmNDgwMzExMGE2YmI1NDNhY2VhOWE4MTRjNzg2ZDU4NjA1YjRjMTIxOWI1ZWJiIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4nU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG53aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIm1pY3JvbWFyay11dGlsLWNsYXNzaWZ5LWNoYXJhY3RlciIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZGQxMDgxODg0YTkyOTUyODAyZjQ4MDMxMTBhNmJiNTQzYWNlYTlhODE0Yzc4NmQ1ODYwNWI0YzEyMTliNWViYiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtaWNyb21hcmstdXRpbC1jb21iaW5lLWV4dGVuc2lvbnMiLAogICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImRkMTA4MTg4NGE5Mjk1MjgwMmY0ODAzMTEwYTZiYjU0M2FjZWE5YTgxNGM3ODZkNTg2MDViNGMxMjE5YjVlYmIiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAibWljcm9tYXJrLXV0aWwtZGVjb2RlLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZSIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZGQxMDgxODg0YTkyOTUyODAyZjQ4MDMxMTBhNmJiNTQzYWNlYTlhODE0Yzc4NmQ1ODYwNWI0YzEyMTliNWViYiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtaWNyb21hcmstdXRpbC1kZWNvZGUtc3RyaW5nIiwKICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJkZDEwODE4ODRhOTI5NTI4MDJmNDgwMzExMGE2YmI1NDNhY2VhOWE4MTRjNzg2ZDU4NjA1YjRjMTIxOWI1ZWJiIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4nU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG53aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIm1pY3JvbWFyay11dGlsLWVuY29kZSIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZGQxMDgxODg0YTkyOTUyODAyZjQ4MDMxMTBhNmJiNTQzYWNlYTlhODE0Yzc4NmQ1ODYwNWI0YzEyMTliNWViYiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtaWNyb21hcmstdXRpbC1odG1sLXRhZy1uYW1lIiwKICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJkZDEwODE4ODRhOTI5NTI4MDJmNDgwMzExMGE2YmI1NDNhY2VhOWE4MTRjNzg2ZDU4NjA1YjRjMTIxOWI1ZWJiIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4nU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG53aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIm1pY3JvbWFyay11dGlsLW5vcm1hbGl6ZS1pZGVudGlmaWVyIiwKICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJkZDEwODE4ODRhOTI5NTI4MDJmNDgwMzExMGE2YmI1NDNhY2VhOWE4MTRjNzg2ZDU4NjA1YjRjMTIxOWI1ZWJiIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4nU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG53aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIm1pY3JvbWFyay11dGlsLXJlc29sdmUtYWxsIiwKICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJkZDEwODE4ODRhOTI5NTI4MDJmNDgwMzExMGE2YmI1NDNhY2VhOWE4MTRjNzg2ZDU4NjA1YjRjMTIxOWI1ZWJiIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4nU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG53aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIm1pY3JvbWFyay11dGlsLXNhbml0aXplLXVyaSIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZGQxMDgxODg0YTkyOTUyODAyZjQ4MDMxMTBhNmJiNTQzYWNlYTlhODE0Yzc4NmQ1ODYwNWI0YzEyMTliNWViYiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJtaWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZSIsCiAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZGQxMDgxODg0YTkyOTUyODAyZjQ4MDMxMTBhNmJiNTQzYWNlYTlhODE0Yzc4NmQ1ODYwNWI0YzEyMTliNWViYiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJvYmxpdmlvdXMtc2V0IiwKICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiTElDRU5TRSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJmYWU0ZTNkMTgzMGQwYThmNzk1YTA2YjA3ZjRhOGJiYzM0M2ZmNjE5ZmI2MzM5ZGU3MWY0Yjg5ODZmYTQyNDJkIiwKICAgICAgICAgICJ0ZXh0IjogIk1JVCBMaWNlbnNlXG5cbkNvcHlyaWdodCAoYykgMjAyMCBEYW5pZWwgTWV5ZXJcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAicGFyc2UtbXMiLAogICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjVjOTMyZDg4MjU2YjRhYjk1OGY2NGE4NTZmYTQ4ZThiZDFmNTViYzFkOTZiODE0OWM2NTY4OWUwYzYxNzg5ZDMiLAogICAgICAgICAgInRleHQiOiAiTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSBTaW5kcmUgU29yaHVzIDxzaW5kcmVzb3JodXNAZ21haWwuY29tPiAoaHR0cHM6Ly9zaW5kcmVzb3JodXMuY29tKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJwYXRoLXRvLXJlZ2V4cCIsCiAgICAgICJ2ZXJzaW9uIjogIjguNC4yIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogIkxJQ0VOU0UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiNGVlYjMyNzE0NTNhODkxZGY2MDllNWE5ZjRlZTc5YTY4MzA3ZjczMGMxMzQxN2EzYmZlZmZhNjA0YWM4Y2YyNSIsCiAgICAgICAgICAidGV4dCI6ICJUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuQ29weXJpZ2h0IChjKSAyMDE0IEJsYWtlIEVtYnJleSAoaGVsbG9AYmxha2VlbWJyZXkuY29tKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG5hbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG5USEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJwcmV0dHktbXMiLAogICAgICAidmVyc2lvbiI6ICI5LjMuMSIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjVjOTMyZDg4MjU2YjRhYjk1OGY2NGE4NTZmYTQ4ZThiZDFmNTViYzFkOTZiODE0OWM2NTY4OWUwYzYxNzg5ZDMiLAogICAgICAgICAgInRleHQiOiAiTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSBTaW5kcmUgU29yaHVzIDxzaW5kcmVzb3JodXNAZ21haWwuY29tPiAoaHR0cHM6Ly9zaW5kcmVzb3JodXMuY29tKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJwcm9wZXJ0eS1pbmZvcm1hdGlvbiIsCiAgICAgICJ2ZXJzaW9uIjogIjcuMi4wIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiNWQwNjk4MjY2MDg2ZjIxN2JiMTFlYTA0OTlkMzM0NTNlNDAxZmU0NzlmYjkxMjZhZDA0ZTYyNWU2M2QzNTU3YiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8bWFpbHRvOnRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAicmVtYXJrLWZyb250bWF0dGVyIiwKICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJkOGZjMzM3YWFmOThmYzdhMGY1NDk4ZWRjMThiNDdhOWRmOGNkZmNjMWEwZjAxMzUxOTEwNTkwNTcyMmM3YTRjIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgMjAxNyBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAicmVtYXJrLWdmbSIsCiAgICAgICJ2ZXJzaW9uIjogIjQuMC4xIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiZGQxMDgxODg0YTkyOTUyODAyZjQ4MDMxMTBhNmJiNTQzYWNlYTlhODE0Yzc4NmQ1ODYwNWI0YzEyMTliNWViYiIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJyZW1hcmstaHRtbCIsCiAgICAgICJ2ZXJzaW9uIjogIjE2LjAuMSIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImVkNTJmODdjMzkwNGEwNDU5MzFmZjQ3ZmVmNTBjMzE4NDBiMmY4MGYzNjE4Y2U3YTlkMTg4OTE4YTlmODMzNTciLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDE1IFRpdHVzIFdvcm1lclxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG5hbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG5USEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJyZW1hcmstcGFyc2UiLAogICAgICAidmVyc2lvbiI6ICIxMS4wLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICI0MTM2NTRiMGE3OGI5ODY2MWRjZTk2ZDJhZmYyZTRkMDc1NjAzZDIyMGI4NDgzZTI4YjFhYTAxMGNjYzEzOGI0IiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgMjAxNCBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAicmVtYXJrLXN0cmluZ2lmeSIsCiAgICAgICJ2ZXJzaW9uIjogIjExLjAuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjQxMzY1NGIwYTc4Yjk4NjYxZGNlOTZkMmFmZjJlNGQwNzU2MDNkMjIwYjg0ODNlMjhiMWFhMDEwY2NjMTM4YjQiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDE0IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG5hbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG5USEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJyeGpzIiwKICAgICAgInZlcnNpb24iOiAiNy44LjIiLAogICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogIkxJQ0VOU0UudHh0IiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjgxYzQwN2FjNzE3ODEzYjBlMzc5NTQwMjk2MGUwNDAwM2M3YmJhOGJhNTliNjIxNjI0NzA3MDI4NTMxYzlhZGUiLAogICAgICAgICAgInRleHQiOiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNFxuICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9cblxuIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTlxuXG4gMS4gRGVmaW5pdGlvbnMuXG5cbiAgICBcIkxpY2Vuc2VcIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sXG4gICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuXG5cbiAgICBcIkxpY2Vuc29yXCIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5XG4gICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLlxuXG4gICAgXCJMZWdhbCBFbnRpdHlcIiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsXG4gICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vblxuICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sXG4gICAgXCJjb250cm9sXCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGVcbiAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvclxuICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZVxuICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgICBcIllvdVwiIChvciBcIllvdXJcIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eVxuICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICBcIlNvdXJjZVwiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLFxuICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb25cbiAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLlxuXG4gICAgXCJPYmplY3RcIiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbFxuICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXRcbiAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sXG4gICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLlxuXG4gICAgXCJXb3JrXCIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvclxuICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGFcbiAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmtcbiAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLlxuXG4gICAgXCJEZXJpdmF0aXZlIFdvcmtzXCIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0XG4gICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZVxuICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnNcbiAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3Nlc1xuICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpblxuICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZixcbiAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLlxuXG4gICAgXCJDb250cmlidXRpb25cIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZ1xuICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnNcbiAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHlcbiAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyXG4gICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mXG4gICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwic3VibWl0dGVkXCJcbiAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50XG4gICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG9cbiAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLFxuICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlXG4gICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0XG4gICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2VcbiAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyBcIk5vdCBhIENvbnRyaWJ1dGlvbi5cIlxuXG4gICAgXCJDb250cmlidXRvclwiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eVxuICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZFxuICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLlxuXG4gMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mXG4gICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLFxuICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlXG4gICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsXG4gICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlXG4gICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS5cblxuIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCxcbiAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZVxuICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLFxuICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLFxuICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlXG4gICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXJcbiAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpXG4gICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3VcbiAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYVxuICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmtcbiAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdFxuICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXNcbiAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGVcbiAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuXG5cbiA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZVxuICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dFxuICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91XG4gICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvclxuICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZFxuXG4gICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlc1xuICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmRcblxuICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3Jrc1xuICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kXG4gICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssXG4gICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2ZcbiAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZFxuXG4gICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgXCJOT1RJQ0VcIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHNcbiAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdFxuICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWRcbiAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90XG4gICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZVxuICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZFxuICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yXG4gICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLFxuICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kXG4gICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50c1xuICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kXG4gICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uXG4gICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlXG4gICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZFxuICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWRcbiAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLlxuXG4gICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kXG4gICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3JcbiAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSxcbiAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGhcbiAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLlxuXG4gNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLFxuICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29ya1xuICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mXG4gICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuXG4gICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeVxuICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkXG4gICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLlxuXG4gNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZVxuICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvcixcbiAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGVcbiAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS5cblxuIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvclxuICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2hcbiAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvclxuICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zXG4gICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQVxuICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZVxuICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueVxuICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LFxuICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLFxuICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5XG4gICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmVcbiAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsXG4gICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhXG4gICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZVxuICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCxcbiAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbFxuICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3JcbiAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuXG5cbiA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nXG4gICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlcixcbiAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LFxuICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzXG4gICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHlcbiAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZlxuICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSxcbiAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHlcbiAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uXG4gICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuXG5cbiBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlNcblxuIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay5cblxuICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nXG4gICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgXCJbXVwiXG4gICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGVcbiAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZVxuICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYVxuICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGVcbiAgICBzYW1lIFwicHJpbnRlZCBwYWdlXCIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llclxuICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy5cblxuIENvcHlyaWdodCAoYykgMjAxNS0yMDE4IEdvb2dsZSwgSW5jLiwgTmV0ZmxpeCwgSW5jLiwgTWljcm9zb2Z0IENvcnAuIGFuZCBjb250cmlidXRvcnNcblxuIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJzcGFjZS1zZXBhcmF0ZWQtdG9rZW5zIiwKICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICJjYTQ2NjJjYjVkMWI3MzhmYmU1MzUwYzBkNTQ4NWJhMTE3NzNiNGI3MjA4OTc0MDgyYWU2ZTEyOWE1MmQ2MzFkIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgMjAxNiBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAic3RyaW5naWZ5LWVudGl0aWVzIiwKICAgICAgInZlcnNpb24iOiAiNC4wLjQiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICI5ZjA4NGZhYzY5ZDhjZjFlNmNlOTgzYmE1YTM0OTljNzY5NWVkNzRhMjZlYzYyNWMzOGYwZmQxOWZkZGQ1ZTEwIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgMjAxNSBUaXR1cyBXb3JtZXIgPG1haWx0bzp0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4nU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG53aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogInN3ZWV0LXNjcm9sbCIsCiAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogIkxJQ0VOU0UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiNGVlMTMyNTI2YjA2Y2RlNjUxNzUxMjhjNGQ1NTI5YTk4MTQ4MWMyYjc3YjRlNDcwMzAwNGZhNDAzY2UwZGVkMSIsCiAgICAgICAgICAidGV4dCI6ICJUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuQ29weXJpZ2h0IChjKSAyMDE5IHRzdXlvc2hpd2FkYVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG5hbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG5USEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJzeW1ib2wtdHJlZSIsCiAgICAgICJ2ZXJzaW9uIjogIjMuMi40IiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogIkxJQ0VOU0UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiOWVhMWVjY2RhYmU0Njk3NjdhOWVkYjkyNDlhODQwYjI0NjFjZjkxYjI0MzRiZjhhM2UyZmMxZjQxNDMxMWNiMSIsCiAgICAgICAgICAidGV4dCI6ICJUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuQ29weXJpZ2h0IChjKSAyMDE1IEpvcmlzIHZhbiBkZXIgV2VsXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cblRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogInRyaW0tbGluZXMiLAogICAgICAidmVyc2lvbiI6ICIzLjAuMSIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjlmMDg0ZmFjNjlkOGNmMWU2Y2U5ODNiYTVhMzQ5OWM3Njk1ZWQ3NGEyNmVjNjI1YzM4ZjBmZDE5ZmRkZDVlMTAiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDE1IFRpdHVzIFdvcm1lciA8bWFpbHRvOnRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAidHJvdWdoIiwKICAgICAgInZlcnNpb24iOiAiMi4yLjAiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICI2YzAzZmQ0MWNmZDdjOTJkOGFhOGEyZmE1MjFiOTRiMjY4M2YwNTkxMjMyODFkY2Y5MjFkZGVhOTIxNmI2MjU0IiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgMjAxNiBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAidHNsaWIiLAogICAgICAidmVyc2lvbiI6ICIyLjguMSIsCiAgICAgICJsaWNlbnNlIjogIjBCU0QiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiTElDRU5TRS50eHQiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiMjEwYjE5ZTU0MzEzMDM4OGM2ODY1NGI3NDk3ZTk2NzExOWNlMTcxNDVmNjZhYjdkODU2ODhmYmQ3MGYwODc1MSIsCiAgICAgICAgICAidGV4dCI6ICJDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJ0dXJuZG93biIsCiAgICAgICJ2ZXJzaW9uIjogIjcuMi40IiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogIkxJQ0VOU0UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiYTA1NWUzYTE1ZGI0YjRjYmI1YWYzODEyMzBlYmEwODU2MDMxMjZkN2Q1ZDhjNGRhZTQ1ZWU4NWI4NzdhOTcyOSIsCiAgICAgICAgICAidGV4dCI6ICJNSVQgTGljZW5zZVxuXG5Db3B5cmlnaHQgKGMpIDIwMTcgRG9tIENocmlzdGllXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogInR1cm5kb3duLXBsdWdpbi1nZm0iLAogICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJMSUNFTlNFIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImEwNTVlM2ExNWRiNGI0Y2JiNWFmMzgxMjMwZWJhMDg1NjAzMTI2ZDdkNWQ4YzRkYWU0NWVlODViODc3YTk3MjkiLAogICAgICAgICAgInRleHQiOiAiTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSAyMDE3IERvbSBDaHJpc3RpZVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJ1aW50OGFycmF5LWV4dHJhcyIsCiAgICAgICJ2ZXJzaW9uIjogIjEuNS4wIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiNWM5MzJkODgyNTZiNGFiOTU4ZjY0YTg1NmZhNDhlOGJkMWY1NWJjMWQ5NmI4MTQ5YzY1Njg5ZTBjNjE3ODlkMyIsCiAgICAgICAgICAidGV4dCI6ICJNSVQgTGljZW5zZVxuXG5Db3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChodHRwczovL3NpbmRyZXNvcmh1cy5jb20pXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogInVuaWZpZWQiLAogICAgICAidmVyc2lvbiI6ICIxMS4wLjUiLAogICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAiZmlsZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAibGljZW5zZSIsCiAgICAgICAgICAib3JpZ2luIjogInBhY2thZ2UiLAogICAgICAgICAgInNoYTI1NiI6ICIwNTgxMTQwMDExNmVkNjFmMWE3NjkzYjc4ZmU4Y2E2NTk4YzE1NWExMmYzOTc4ZTYwOWRiNGRmNjQ4YTRjYjNkIiwKICAgICAgICAgICJ0ZXh0IjogIihUaGUgTUlUIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgMjAxNSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAidW5pc3QtdXRpbC1pcyIsCiAgICAgICJ2ZXJzaW9uIjogIjYuMC4xIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiODI5NzRkYmYyNjM5ZDEzZWRhYjk1YzMyZWQ5Y2I2YzA4NjdlZGUyNzJjZDJlMDdjZTQ3Y2U4NTQ4ZmU1NWMwNSIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBsaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIDIwMTUgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4nU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG53aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogInVuaXN0LXV0aWwtcG9zaXRpb24iLAogICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjYzY2I5OGIzZjZhYmZiM2MzNTkyYzE2Zjg4MjUzYzFiZGM4MzQwODdiZjUyNjcxZThjZTU2MDllNGViNjkzY2YiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDE1IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJ1bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbiIsCiAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiY2E0NjYyY2I1ZDFiNzM4ZmJlNTM1MGMwZDU0ODViYTExNzczYjRiNzIwODk3NDA4MmFlNmUxMjlhNTJkNjMxZCIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIDIwMTYgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4nU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG53aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG5kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xudGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogInVuaXN0LXV0aWwtdmlzaXQiLAogICAgICAidmVyc2lvbiI6ICI1LjEuMCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogIjYzY2I5OGIzZjZhYmZiM2MzNTkyYzE2Zjg4MjUzYzFiZGM4MzQwODdiZjUyNjcxZThjZTU2MDllNGViNjkzY2YiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDE1IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJ1bmlzdC11dGlsLXZpc2l0LXBhcmVudHMiLAogICAgICAidmVyc2lvbiI6ICI2LjAuMiIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImNhNDY2MmNiNWQxYjczOGZiZTUzNTBjMGQ1NDg1YmExMTc3M2I0YjcyMDg5NzQwODJhZTZlMTI5YTUyZDYzMWQiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDE2IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJ2ZmlsZSIsCiAgICAgICJ2ZXJzaW9uIjogIjYuMC4zIiwKICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogImxpY2Vuc2UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiMDU4MTE0MDAxMTZlZDYxZjFhNzY5M2I3OGZlOGNhNjU5OGMxNTVhMTJmMzk3OGU2MDlkYjRkZjY0OGE0Y2IzZCIsCiAgICAgICAgICAidGV4dCI6ICIoVGhlIE1JVCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIDIwMTUgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cblRIRSBTT0ZUV0FSRS5cbiIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogInZmaWxlLW1lc3NhZ2UiLAogICAgICAidmVyc2lvbiI6ICI0LjAuMyIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImRkMTA4MTg4NGE5Mjk1MjgwMmY0ODAzMTEwYTZiYjU0M2FjZWE5YTgxNGM3ODZkNTg2MDViNGMxMjE5YjVlYmIiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZXG5DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEVcblNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuIgogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAieWFtbCIsCiAgICAgICJ2ZXJzaW9uIjogIjIuOS4wIiwKICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKICAgICAgImZpbGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJuYW1lIjogIkxJQ0VOU0UiLAogICAgICAgICAgIm9yaWdpbiI6ICJwYWNrYWdlIiwKICAgICAgICAgICJzaGEyNTYiOiAiNWJiYTI3Mzc1ZDkzZTkxMTlmNzZjMTAxNWY3NjcyY2Y5YWQ1ZjcwOTUyMjk2ZTA4NDJmYjIyNDNkNjM3Njg2OSIsCiAgICAgICAgICAidGV4dCI6ICJDb3B5cmlnaHQgRWVtZWxpIEFybyA8ZWVtZWxpQGdtYWlsLmNvbT5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2VcbndpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2VcbmFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EXG5GSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTXG5PRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVJcblRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0ZcblRISVMgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICAibmFtZSI6ICJ6d2l0Y2giLAogICAgICAidmVyc2lvbiI6ICIyLjAuNCIsCiAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICJmaWxlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJsaWNlbnNlIiwKICAgICAgICAgICJvcmlnaW4iOiAicGFja2FnZSIsCiAgICAgICAgICAic2hhMjU2IjogImNhNDY2MmNiNWQxYjczOGZiZTUzNTBjMGQ1NDg1YmExMTc3M2I0YjcyMDg5NzQwODJhZTZlMTI5YTUyZDYzMWQiLAogICAgICAgICAgInRleHQiOiAiKFRoZSBNSVQgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDE2IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG5UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4iCiAgICAgICAgfQogICAgICBdCiAgICB9CiAgXQp9Cg==" }, { "path": "bundle.js.third-party-notices.txt", "contentBase64": "VGhpcmQtcGFydHkgbm90aWNlcwoKVGhlIEphdmFTY3JpcHQgYnVuZGxlIHRoaXMgZmlsZSBhY2NvbXBhbmllcywgaW5jbHVkaW5nIGl0cyBjaHVua3MgYW5kIG1vZHVsZSB3b3JrZXJzLApjb250YWlucyBjb2RlIGZyb20gdGhlIGZvbGxvd2luZyAxMzEgbnBtIHBhY2thZ2UocykuIEVhY2ggZW50cnkgcmVwcm9kdWNlcwp0aGUgbGljZW5zZSBhbmQgbm90aWNlIGZpbGVzIHRoZSBwYWNrYWdlIHNoaXBzLCBvciB0aGUgbGljZW5zZSB0ZXh0IHRoZSBwcm9qZWN0Cm9yIGEgYnVuZGxlZCBwYWNrYWdlIHN1cHBsaWVkIGZvciBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdEAzLjguMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlLm1kIC0tLQoKQ29weXJpZ2h0IChjKSAyMDE5IExvc3NsZXNzIEdtYkggKGhlbGxvQGxvc3NsZXNzLmNvbSkKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAYXBpLmdsb2JhbC90eXBlZHJlcXVlc3RAOC4wLjMKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZS5tZCAtLS0KCkNvcHlyaWdodCAoYykgMjAxOSBMb3NzbGVzcyBHbWJIIChoZWxsb0Bsb3NzbGVzcy5jb20pCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0LWludGVyZmFjZXNAMy4wLjE5CkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgpDb3B5cmlnaHQgKGMpIDIwMTkgTG9zc2xlc3MgR21iSCAoaGVsbG9AbG9zc2xlc3MuY29tKQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC1pbnRlcmZhY2VzQDQuMC4wCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UubWQgLS0tCgpDb3B5cmlnaHQgKGMpIDIwMTkgTG9zc2xlc3MgR21iSCAoaGVsbG9AbG9zc2xlc3MuY29tKQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC1pbnRlcmZhY2VzQDcuMS4wCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UubWQgLS0tCgpDb3B5cmlnaHQgKGMpIDIwMTkgTG9zc2xlc3MgR21iSCAoaGVsbG9AbG9zc2xlc3MuY29tKQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBkZXNpZ24uZXN0YXRlL2RlZXMtY29tbXNAMS4wLjMyCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgpDb3B5cmlnaHQgKGMpIDIwMjAgTG9zc2xlc3MgR21iSCAoaGVsbG9AbG9zc2xlc3MuY29tKQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHNAMi41LjYKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCkNvcHlyaWdodCAoYykgMjAyMCBUYXNrIFZlbnR1cmUgQ2FwaXRhbCBHbWJIIChoZWxsb0B0YXNrLnZjKQpDb3B5cmlnaHQgKGMpIDIwMTcgTmF0aGFuIEZyaWVuZCAodHMta2V5Y29kZS1lbnVtKQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudEAyLjQuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKQ29weXJpZ2h0IChjKSAyMDIwIFRhc2sgVmVudHVyZSBDYXBpdGFsIEdtYkggKGhlbGxvQHRhc2sudmMpCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQGxpdC9yZWFjdGl2ZS1lbGVtZW50QDIuMS4yCkxpY2Vuc2U6IEJTRC0zLUNsYXVzZQoKLS0tIExJQ0VOU0UgLS0tCgpCU0QgMy1DbGF1c2UgTGljZW5zZQoKQ29weXJpZ2h0IChjKSAyMDE3IEdvb2dsZSBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CgoxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCgoyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCgozLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQpJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQpGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTApEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgpTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgpDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLApPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQpPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQHB1c2gucm9ja3MvaXNvdW5pcXVlQDEuMC41CkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgpDb3B5cmlnaHQgKGMpIDIwMjAgTG9zc2xlc3MgR21iSCAoaGVsbG9AbG9zc2xlc3MuY29tKQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBwdXNoLnJvY2tzL2xpa0A2LjQuMgpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKTUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgVGFzayBWZW50dXJlIENhcGl0YWwgR21iSAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBwdXNoLnJvY2tzL3NtYXJ0YnVmZmVyQDMuMC42CkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgpDb3B5cmlnaHQgKGMpIDIwMjIgVGFzayBWZW50dXJlIENhcGl0YWwgR21iSCA8aGVsbG9AdGFzay52Yz4KQ29weXJpZ2h0IDIwMTEgSm9uIExlaWdodG9uCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQHB1c2gucm9ja3Mvc21hcnRkZWxheUAzLjEuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKVGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTcgVGFzayBWZW50dXJlIENhcGl0YWwgR21iSCA8aGVsbG9AdGFzay52Yz4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAcHVzaC5yb2Nrcy9zbWFydGVudkA2LjEuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKVGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMjYgVGFzayBWZW50dXJlIENhcGl0YWwgR21iSAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBwdXNoLnJvY2tzL3NtYXJ0Z3VhcmRAMy4xLjIKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCkNvcHlyaWdodCAoYykgMjAxOSBMb3NzbGVzcyBHbWJIIChoZWxsb0Bsb3NzbGVzcy5jb20pCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQHB1c2gucm9ja3Mvc21hcnRoYXNoQDMuMy4wCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgpUaGUgTUlUIExpY2Vuc2UgKE1JVCkKCkNvcHlyaWdodCAoYykgMjAxNiBMb3NzbGVzcyBHbWJICgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQHB1c2gucm9ja3Mvc21hcnRqc29uQDYuMC4yCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgpUaGUgTUlUIExpY2Vuc2UgKE1JVCkKCkNvcHlyaWdodCAoYykgMjAyNiBUYXNrIFZlbnR1cmUgQ2FwaXRhbCBHbWJICgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQHB1c2gucm9ja3Mvc21hcnRtYXJrZG93bkAzLjMuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlLm1kIC0tLQoKQ29weXJpZ2h0IChjKSAyMDI2IFRhc2sgVmVudHVyZSBDYXBpdGFsIEdtYkggPGhlbGxvQHRhc2sudmM+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQHB1c2gucm9ja3Mvc21hcnRtYXRjaEAyLjAuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKQ29weXJpZ2h0IChjKSAyMDIwIExvc3NsZXNzIEdtYkggKGhlbGxvQGxvc3NsZXNzLmNvbSkKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAcHVzaC5yb2Nrcy9zbWFydHByb21pc2VANC4yLjUKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCkNvcHlyaWdodCAoYykgMjAyNiBUYXNrIFZlbnR1cmUgQ2FwaXRhbCBHbWJIIDxoZWxsb0B0YXNrLnZjPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBwdXNoLnJvY2tzL3NtYXJ0cm91dGVyQDEuMy4zCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgpDb3B5cmlnaHQgKGMpIDIwMjAgTG9zc2xlc3MgR21iSCAoaGVsbG9AbG9zc2xlc3MuY29tKQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBwdXNoLnJvY2tzL3NtYXJ0cnhAMy4wLjEyCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgpNSVQgTGljZW5zZQoKQ29weXJpZ2h0IChjKSBMb3NzbGVzcyBHbWJICkNvcHlyaWdodCAoYykgVGFzayBWZW50dXJlIENhcGl0YWwgR21iSAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBwdXNoLnJvY2tzL3NtYXJ0c3RhdGVAMi4zLjMKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCkNvcHlyaWdodCAoYykgMjAxOSBUYXNrIFZlbnR1cmUgQ2FwaXRhbCBHbWJIIChoZWxsb0B0YXNrLnZjKQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nQDQuMS4xCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgpUaGUgTUlUIExpY2Vuc2UgKE1JVCkKCkNvcHlyaWdodCAoYykgMjAyNiBUYXNrIFZlbnR1cmUgQ2FwaXRhbCBHbWJICgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQHB1c2gucm9ja3Mvc21hcnR0aW1lQDQuMi4zCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgpUaGUgTUlUIExpY2Vuc2UgKE1JVCkKCkNvcHlyaWdodCAoYykgMjAxNCBMb3NzbGVzcyBHbWJIIChoZWxsb0Bsb3NzbGVzcy5jb20pCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQHB1c2gucm9ja3Mvc21hcnR1cmxAMy4xLjAKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCkNvcHlyaWdodCAoYykgMjAyMCBMb3NzbGVzcyBHbWJIIChoZWxsb0Bsb3NzbGVzcy5jb20pCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQHB1c2gucm9ja3Mvc21hcnR5YW1sQDMuMC41CkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgpDb3B5cmlnaHQgKGMpIDIwMjYgVGFzayBWZW50dXJlIENhcGl0YWwgR21iSCA8aGVsbG9AdGFzay52Yz4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0QDQuMy4xCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UubWQgLS0tCgpDb3B5cmlnaHQgKGMpIDIwMTggTG9zc2xlc3MgR21iSCAoaGVsbG9AbG9zc2xlc3MuY29tKQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBwdXNoLnJvY2tzL3dlYnNldHVwQDMuMC4yMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKQ29weXJpZ2h0IChjKSAyMDI2IFRhc2sgVmVudHVyZSBDYXBpdGFsIEdtYkggPGhlbGxvQHRhc2sudmM+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQHB1c2gucm9ja3Mvd2Vic3RvcmVAMi4yLjAKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCkNvcHlyaWdodCAoYykgMjAyMCBUYXNrIFZlbnR1cmUgQ2FwaXRhbCBHbWJIIChoZWxsb0B0YXNrLnZjKQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkB0ZW1wZml4L2xlbmlzQDEuMy4yMApMaWNlbnNlOiBNSVQKCi0tLSBMSUNFTlNFIC0tLQoKVGhlIE1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMjQgZGFya3Jvb20uZW5naW5lZXJpbmcKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg4oCcU29mdHdhcmXigJ0pLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIOKAnEFTIElT4oCdLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkB0c2NsYXNzL3RzY2xhc3NAOS41LjEKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KClRoZSBNSVQgTGljZW5zZSAoTUlUKQoKQ29weXJpZ2h0IChjKSAyMDE2IFRhc2sgVmVudHVyZSBDYXBpdGFsIEdtYkgKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAdW5nYXAvc3RydWN0dXJlZC1jbG9uZUAxLjQuMApMaWNlbnNlOiBJU0MKCi0tLSBMSUNFTlNFIC0tLQoKSVNDIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAyMSwgQW5kcmVhIEdpYW1tYXJjaGksIEBXZWJSZWZsZWN0aW9uCgpQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFCk9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmJhaWxAMi4wLjIKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIDIwMTUgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KYnJvYWRjYXN0LWNoYW5uZWxANy40LjAKTGljZW5zZTogTUlUCgotLS0gTElDRU5TRSAtLS0KCk1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMTggRGFuaWVsIE1leWVyCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KY2NvdW50QDIuMC4xCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSAyMDE1IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmNoYXJhY3Rlci1lbnRpdGllcy1odG1sNEAyLjEuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgMjAxNSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpjaGFyYWN0ZXItZW50aXRpZXMtbGVnYWN5QDMuMC4wCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSAyMDE1IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmNvbW1hLXNlcGFyYXRlZC10b2tlbnNAMi4wLjMKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIDIwMTYgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KY3JvbmVyQDEwLjAuMQpMaWNlbnNlOiBNSVQKCi0tLSBMSUNFTlNFIC0tLQoKVGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTUtMjAyMSBIZXhhZ29uIDxnaXRodWIuY29tL0hleGFnb24+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGF0ZS1mbnNANC40LjAKTGljZW5zZTogTUlUCgotLS0gTElDRU5TRS5tZCAtLS0KCk1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMjEgU2FzaGEgS29zcyBhbmQgTGVzaGEgS29zcyBodHRwczovL2tvc3Nub2NvcnAubWl0LWxpY2Vuc2Uub3JnCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGF5anNAMS4xMS4yMwpMaWNlbnNlOiBNSVQKCi0tLSBMSUNFTlNFIC0tLQoKTUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxOC1wcmVzZW50LCBpYW1rdW4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkZWNvZGUtbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZUAxLjMuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZXNjYXBlLXN0cmluZy1yZWdleHBANS4wLjAKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCk1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChodHRwczovL3NpbmRyZXNvcmh1cy5jb20pCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZXh0ZW5kQDMuMC4yCkxpY2Vuc2U6IE1JVAoKLS0tIExJQ0VOU0UgLS0tCgpUaGUgTUlUIExpY2Vuc2UgKE1JVCkKCkNvcHlyaWdodCAoYykgMjAxNCBTdGVmYW4gVGhvbWFzCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCiJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORApOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCkxJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCldJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnlAMi4xLjAKTGljZW5zZTogTUlUCgotLS0gTElDRU5TRSAtLS0KClRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOgoKQ29weXJpZ2h0IChjKSAyMDE3IEV2Z2VueSBQb2JlcmV6a2luCkNvcHlyaWdodCAoYykgMjAxMyBKYW1lcyBIYWxsaWRheQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgp0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgp0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCnVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mCnRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUgpDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIKSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmZhdWx0QDIuMC4xCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSAyMDE1IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmZvcm1hdEAwLjIuMgpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlcy9mb3JtYXQudHh0IChzdXBwbGllZCBieSBAcHVzaC5yb2Nrcy9zbWFydG1hcmtkb3duQDMuMy4wKSAtLS0KCkxpY2Vuc2UKPT09PT09PQoKQ29weXJpZ2h0IDIwMTAgLSAyMDE0IFNhbWkgU2FtaHVyaSBzYW1pQHNhbWh1cmkubmV0CgpbTUlUIGxpY2Vuc2VdKGh0dHA6Ly9zanMubWl0LWxpY2Vuc2Uub3JnKQoKLy8KLy8gZm9ybWF0IC0gcHJpbnRmLWxpa2Ugc3RyaW5nIGZvcm1hdHRpbmcgZm9yIEphdmFTY3JpcHQKLy8gZ2l0aHViLmNvbS9zYW1zb25qcy9mb3JtYXQKLy8gQF9zanMKLy8KLy8gQ29weXJpZ2h0IDIwMTAgLSAyMDEzIFNhbWkgU2FtaHVyaSA8c2FtaUBzYW1odXJpLm5ldD4KLy8KLy8gTUlUIExpY2Vuc2UKLy8gaHR0cDovL3Nqcy5taXQtbGljZW5zZS5vcmcKLy8KClRoZSBNSVQgTGljZW5zZSAoTUlUKQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSDigJxTb2Z0d2FyZeKAnSksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg4oCcQVMgSVPigJ0sIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KaGFzdC11dGlsLXNhbml0aXplQDUuMC4yCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpoYXN0LXV0aWwtdG8taHRtbEA5LjAuNQpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KaGFzdC11dGlsLXdoaXRlc3BhY2VAMy4wLjAKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIDIwMTYgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KaHRtbC12b2lkLWVsZW1lbnRzQDMuMC4wCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSAyMDE2IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmlzLXBsYWluLW9iakA0LjEuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKTUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgU2luZHJlIFNvcmh1cyA8c2luZHJlc29yaHVzQGdtYWlsLmNvbT4gKGh0dHBzOi8vc2luZHJlc29yaHVzLmNvbSkKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpsaXRAMy4zLjMKTGljZW5zZTogQlNELTMtQ2xhdXNlCgotLS0gTElDRU5TRSAtLS0KCkJTRCAzLUNsYXVzZSBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMTcgR29vZ2xlIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KCjMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgpBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCkZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCkRBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SClNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCkNBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCk9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpsaXQtZWxlbWVudEA0LjIuMgpMaWNlbnNlOiBCU0QtMy1DbGF1c2UKCi0tLSBMSUNFTlNFIC0tLQoKQlNEIDMtQ2xhdXNlIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxNyBHb29nbGUgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLgoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgoKMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgoKMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgoKMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCkFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmxpdC1odG1sQDMuMy4zCkxpY2Vuc2U6IEJTRC0zLUNsYXVzZQoKLS0tIExJQ0VOU0UgLS0tCgpCU0QgMy1DbGF1c2UgTGljZW5zZQoKQ29weXJpZ2h0IChjKSAyMDE3IEdvb2dsZSBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CgoxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCgoyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCgozLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQpJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQpGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTApEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgpTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgpDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLApPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQpPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbG9uZ2VzdC1zdHJlYWtAMy4xLjAKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIDIwMTUgVGl0dXMgV29ybWVyIDxtYWlsdG86dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cmx1Y2lkZUAxLjM3LjAKTGljZW5zZTogSVNDCgotLS0gTElDRU5TRSAtLS0KCklTQyBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMjYgTHVjaWRlIEljb25zIGFuZCBDb250cmlidXRvcnMKClBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQpwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCmNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgpBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCldIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgpBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgpPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgoKLS0tCgpUaGUgZm9sbG93aW5nIEx1Y2lkZSBpY29ucyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBGZWF0aGVyIHByb2plY3Q6CgphaXJwbGF5LCBhbGVydC1jaXJjbGUsIGFsZXJ0LW9jdGFnb24sIGFsZXJ0LXRyaWFuZ2xlLCBhcGVydHVyZSwgYXJyb3ctZG93bi1jaXJjbGUsIGFycm93LWRvd24tbGVmdCwgYXJyb3ctZG93bi1yaWdodCwgYXJyb3ctZG93biwgYXJyb3ctbGVmdC1jaXJjbGUsIGFycm93LWxlZnQsIGFycm93LXJpZ2h0LWNpcmNsZSwgYXJyb3ctcmlnaHQsIGFycm93LXVwLWNpcmNsZSwgYXJyb3ctdXAtbGVmdCwgYXJyb3ctdXAtcmlnaHQsIGFycm93LXVwLCBhdC1zaWduLCBjYWxlbmRhciwgY2FzdCwgY2hlY2ssIGNoZXZyb24tZG93biwgY2hldnJvbi1sZWZ0LCBjaGV2cm9uLXJpZ2h0LCBjaGV2cm9uLXVwLCBjaGV2cm9ucy1kb3duLCBjaGV2cm9ucy1sZWZ0LCBjaGV2cm9ucy1yaWdodCwgY2hldnJvbnMtdXAsIGNpcmNsZSwgY2xpcGJvYXJkLCBjbG9jaywgY29kZSwgY29sdW1ucywgY29tbWFuZCwgY29tcGFzcywgY29ybmVyLWRvd24tbGVmdCwgY29ybmVyLWRvd24tcmlnaHQsIGNvcm5lci1sZWZ0LWRvd24sIGNvcm5lci1sZWZ0LXVwLCBjb3JuZXItcmlnaHQtZG93biwgY29ybmVyLXJpZ2h0LXVwLCBjb3JuZXItdXAtbGVmdCwgY29ybmVyLXVwLXJpZ2h0LCBjcm9zc2hhaXIsIGRhdGFiYXNlLCBkaXZpZGUtY2lyY2xlLCBkaXZpZGUtc3F1YXJlLCBkb2xsYXItc2lnbiwgZG93bmxvYWQsIGV4dGVybmFsLWxpbmssIGZlYXRoZXIsIGZyb3duLCBoYXNoLCBoZWFkcGhvbmVzLCBoZWxwLWNpcmNsZSwgaW5mbywgaXRhbGljLCBrZXksIGxheW91dCwgbGlmZS1idW95LCBsaW5rLTIsIGxpbmssIGxvYWRlciwgbG9jaywgbG9nLWluLCBsb2ctb3V0LCBtYXhpbWl6ZSwgbWVoLCBtaW5pbWl6ZSwgbWluaW1pemUtMiwgbWludXMtY2lyY2xlLCBtaW51cy1zcXVhcmUsIG1pbnVzLCBtb25pdG9yLCBtb29uLCBtb3JlLWhvcml6b250YWwsIG1vcmUtdmVydGljYWwsIG1vdmUsIG11c2ljLCBuYXZpZ2F0aW9uLTIsIG5hdmlnYXRpb24sIG9jdGFnb24sIHBhdXNlLWNpcmNsZSwgcGVyY2VudCwgcGx1cy1jaXJjbGUsIHBsdXMtc3F1YXJlLCBwbHVzLCBwb3dlciwgcmFkaW8sIHJzcywgc2VhcmNoLCBzZXJ2ZXIsIHNoYXJlLCBzaG9wcGluZy1iYWcsIHNpZGViYXIsIHNtYXJ0cGhvbmUsIHNtaWxlLCBzcXVhcmUsIHRhYmxlLTIsIHRhYmxldCwgdGFyZ2V0LCB0ZXJtaW5hbCwgdHJhc2gtMiwgdHJhc2gsIHRyaWFuZ2xlLCB0diwgdHlwZSwgdXBsb2FkLCB4LWNpcmNsZSwgeC1vY3RhZ29uLCB4LXNxdWFyZSwgeCwgem9vbS1pbiwgem9vbS1vdXQKClRoZSBNSVQgTGljZW5zZSAoTUlUKSAoZm9yIHRoZSBpY29ucyBsaXN0ZWQgYWJvdmUpCgpDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCBDb2xlIEJlbWlzCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWFya2Rvd24tdGFibGVAMy4wLjQKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cm1hdGNoZXJANS4wLjAKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCk1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChodHRwczovL3NpbmRyZXNvcmh1cy5jb20pCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlQDMuMC4yCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQptZGFzdC11dGlsLWZyb20tbWFya2Rvd25AMi4wLjMKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cm1kYXN0LXV0aWwtZnJvbnRtYXR0ZXJAMi4wLjEKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIDIwMjAgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWRhc3QtdXRpbC1nZm1AMy4xLjAKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cm1kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4wLjEKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIDIwMjAgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGVAMi4xLjAKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cm1kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2hAMi4wLjAKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIDIwMjAgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWRhc3QtdXRpbC1nZm0tdGFibGVAMi4wLjAKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIDIwMjAgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW1AMi4wLjAKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIDIwMjAgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWRhc3QtdXRpbC1waHJhc2luZ0A0LjEuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgMjAxNyBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KQ29weXJpZ2h0IChjKSAyMDE3IFZpY3RvciBGZWxkZXIgPHZpY3RvckBkcmFmdC5saT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQptZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSAyMDE2IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cm1kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cm1kYXN0LXV0aWwtdG8tc3RyaW5nQDQuMC4wCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSAyMDE1IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cm1pY3JvbWFya0A0LjAuMgpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMwpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgMjAyMCBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQptaWNyb21hcmstZXh0ZW5zaW9uLWdmbUAzLjAuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgMjAyMCBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQptaWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMS4wCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSAyMDIwIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cm1pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlQDIuMS4wCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSAyMDIxIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cm1pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2hAMi4xLjAKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIDIwMjAgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cm1pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhZ2ZpbHRlckAyLjAuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgMjAyMCBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQptaWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbUAyLjEuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgMjAyMCBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQptaWNyb21hcmstZmFjdG9yeS1kZXN0aW5hdGlvbkAyLjAuMQpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWljcm9tYXJrLWZhY3RvcnktbGFiZWxAMi4wLjEKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cm1pY3JvbWFyay1mYWN0b3J5LXNwYWNlQDIuMC4xCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQptaWNyb21hcmstZmFjdG9yeS10aXRsZUAyLjAuMQpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWljcm9tYXJrLWZhY3Rvcnktd2hpdGVzcGFjZUAyLjAuMQpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyQDIuMS4xCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQptaWNyb21hcmstdXRpbC1jaHVua2VkQDIuMC4xCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQptaWNyb21hcmstdXRpbC1jbGFzc2lmeS1jaGFyYWN0ZXJAMi4wLjEKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cm1pY3JvbWFyay11dGlsLWNvbWJpbmUtZXh0ZW5zaW9uc0AyLjAuMQpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWljcm9tYXJrLXV0aWwtZGVjb2RlLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZUAyLjAuMgpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWljcm9tYXJrLXV0aWwtZGVjb2RlLXN0cmluZ0AyLjAuMQpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWljcm9tYXJrLXV0aWwtZW5jb2RlQDIuMC4xCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQptaWNyb21hcmstdXRpbC1odG1sLXRhZy1uYW1lQDIuMC4xCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQptaWNyb21hcmstdXRpbC1ub3JtYWxpemUtaWRlbnRpZmllckAyLjAuMQpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWljcm9tYXJrLXV0aWwtcmVzb2x2ZS1hbGxAMi4wLjEKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cm1pY3JvbWFyay11dGlsLXNhbml0aXplLXVyaUAyLjAuMQpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbWljcm9tYXJrLXV0aWwtc3VidG9rZW5pemVAMi4xLjAKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cm9ibGl2aW91cy1zZXRAMi4wLjAKTGljZW5zZTogTUlUCgotLS0gTElDRU5TRSAtLS0KCk1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMjAgRGFuaWVsIE1leWVyCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KcGFyc2UtbXNANC4wLjAKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCk1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChodHRwczovL3NpbmRyZXNvcmh1cy5jb20pCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KcGF0aC10by1yZWdleHBAOC40LjIKTGljZW5zZTogTUlUCgotLS0gTElDRU5TRSAtLS0KClRoZSBNSVQgTGljZW5zZSAoTUlUKQoKQ29weXJpZ2h0IChjKSAyMDE0IEJsYWtlIEVtYnJleSAoaGVsbG9AYmxha2VlbWJyZXkuY29tKQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnByZXR0eS1tc0A5LjMuMQpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKTUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgU2luZHJlIFNvcmh1cyA8c2luZHJlc29yaHVzQGdtYWlsLmNvbT4gKGh0dHBzOi8vc2luZHJlc29yaHVzLmNvbSkKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpwcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjIuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgVGl0dXMgV29ybWVyIDxtYWlsdG86dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnJlbWFyay1mcm9udG1hdHRlckA1LjAuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgMjAxNyBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpyZW1hcmstZ2ZtQDQuMC4xCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpyZW1hcmstaHRtbEAxNi4wLjEKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIDIwMTUgVGl0dXMgV29ybWVyCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KcmVtYXJrLXBhcnNlQDExLjAuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgMjAxNCBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpyZW1hcmstc3RyaW5naWZ5QDExLjAuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgMjAxNCBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpyeGpzQDcuOC4yCkxpY2Vuc2U6IEFwYWNoZS0yLjAKCi0tLSBMSUNFTlNFLnR4dCAtLS0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQogICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwoKIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgoKIDEuIERlZmluaXRpb25zLgoKICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCiAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KCiAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQogICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgoKICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCiAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCiAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCgogICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQogICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KCiAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCgogICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KCiAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgogICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQogICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCiAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgoKICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCiAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCgogICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQogICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgogICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCiAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCiAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAogICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAogICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgoKICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CiAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgoKIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAogICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAogICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCiAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgoKIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAogICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAogICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCiAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQogICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CiAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQogICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yawogICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQogICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgoKIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCiAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CiAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCiAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgogICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCgogICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwogICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAoKICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcwogICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAogICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCgogICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCiAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAogICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAogICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAogICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQogICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCiAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgogICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAogICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCiAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQogICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAogICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAogICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KCiAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAogICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCiAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgoKIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawogICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgogICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQogICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KCiA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCiAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCiAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgoKIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgogICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAogICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCiAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCiAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQogICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgoKIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAogICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCiAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQogICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQogICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQogICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAogICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KCiA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCiAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAogICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCiAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQogICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQogICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgogICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCgogRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCgogQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgoKICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCiAgICBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieSBicmFja2V0cyAiW10iCiAgICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uJ3QgaW5jbHVkZQogICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQogICAgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZQogICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCiAgICBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCgogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTggR29vZ2xlLCBJbmMuLCBOZXRmbGl4LCBJbmMuLCBNaWNyb3NvZnQgQ29ycC4gYW5kIGNvbnRyaWJ1dG9ycwoKIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0Kc3BhY2Utc2VwYXJhdGVkLXRva2Vuc0AyLjAuMgpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgMjAxNiBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpzdHJpbmdpZnktZW50aXRpZXNANC4wLjQKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIExpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIDIwMTUgVGl0dXMgV29ybWVyIDxtYWlsdG86dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnN3ZWV0LXNjcm9sbEA0LjAuMApMaWNlbnNlOiBNSVQKCi0tLSBMSUNFTlNFIC0tLQoKVGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTkgdHN1eW9zaGl3YWRhCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0Kc3ltYm9sLXRyZWVAMy4yLjQKTGljZW5zZTogTUlUCgotLS0gTElDRU5TRSAtLS0KClRoZSBNSVQgTGljZW5zZSAoTUlUKQoKQ29weXJpZ2h0IChjKSAyMDE1IEpvcmlzIHZhbiBkZXIgV2VsCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KdHJpbS1saW5lc0AzLjAuMQpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgMjAxNSBUaXR1cyBXb3JtZXIgPG1haWx0bzp0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KdHJvdWdoQDIuMi4wCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSAyMDE2IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnRzbGliQDIuOC4xCkxpY2Vuc2U6IDBCU0QKCi0tLSBMSUNFTlNFLnR4dCAtLS0KCkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgoKUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIClJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQpBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQpMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgpPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SClBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQp0dXJuZG93bkA3LjIuNApMaWNlbnNlOiBNSVQKCi0tLSBMSUNFTlNFIC0tLQoKTUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxNyBEb20gQ2hyaXN0aWUKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQp0dXJuZG93bi1wbHVnaW4tZ2ZtQDEuMC4yCkxpY2Vuc2U6IE1JVAoKLS0tIExJQ0VOU0UgLS0tCgpNSVQgTGljZW5zZQoKQ29weXJpZ2h0IChjKSAyMDE3IERvbSBDaHJpc3RpZQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnVpbnQ4YXJyYXktZXh0cmFzQDEuNS4wCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgpNSVQgTGljZW5zZQoKQ29weXJpZ2h0IChjKSBTaW5kcmUgU29yaHVzIDxzaW5kcmVzb3JodXNAZ21haWwuY29tPiAoaHR0cHM6Ly9zaW5kcmVzb3JodXMuY29tKQoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnVuaWZpZWRAMTEuMC41CkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSAyMDE1IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnVuaXN0LXV0aWwtaXNANi4wLjEKTGljZW5zZTogTUlUCgotLS0gbGljZW5zZSAtLS0KCihUaGUgTUlUIGxpY2Vuc2UpCgpDb3B5cmlnaHQgKGMpIDIwMTUgVGl0dXMgV29ybWVyIDx0aXR1c3dvcm1lckBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCidTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLApkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCkNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFClNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KdW5pc3QtdXRpbC1wb3NpdGlvbkA1LjAuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgMjAxNSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQp1bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbkA0LjAuMApMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgMjAxNiBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQp1bmlzdC11dGlsLXZpc2l0QDUuMS4wCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSAyMDE1IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnVuaXN0LXV0aWwtdmlzaXQtcGFyZW50c0A2LjAuMgpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgMjAxNiBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQp2ZmlsZUA2LjAuMwpMaWNlbnNlOiBNSVQKCi0tLSBsaWNlbnNlIC0tLQoKKFRoZSBNSVQgTGljZW5zZSkKCkNvcHlyaWdodCAoYykgMjAxNSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQp2ZmlsZS1tZXNzYWdlQDQuMC4zCkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSBUaXR1cyBXb3JtZXIgPHRpdHVzd29ybWVyQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwphIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQp5YW1sQDIuOS4wCkxpY2Vuc2U6IElTQwoKLS0tIExJQ0VOU0UgLS0tCgpDb3B5cmlnaHQgRWVtZWxpIEFybyA8ZWVtZWxpQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlCndpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UKYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSApSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECkZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULApJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUwpPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgpUSElTIFNPRlRXQVJFLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KendpdGNoQDIuMC40CkxpY2Vuc2U6IE1JVAoKLS0tIGxpY2Vuc2UgLS0tCgooVGhlIE1JVCBMaWNlbnNlKQoKQ29weXJpZ2h0IChjKSAyMDE2IFRpdHVzIFdvcm1lciA8dGl0dXN3b3JtZXJAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQonU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCnBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwp0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQppbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELApFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQpDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULApUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQpTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K" }, { "path": "index.html", "contentBase64": "PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CiAgICA8bWV0YSBuYW1lPSJjb2xvci1zY2hlbWUiIGNvbnRlbnQ9ImxpZ2h0IGRhcmsiIC8+CiAgICA8bGluayByZWw9Imljb24iIGhyZWY9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNjQgNjQnJTNFJTNDcmVjdCB3aWR0aD0nNjQnIGhlaWdodD0nNjQnIHJ4PScxNicgZmlsbD0nJTIzMEE4NEZGJy8lM0UlM0NwYXRoIGQ9J00xOCAxOGgxN2M4IDAgMTMgNCAxMyAxMSAwIDgtNiAxMi0xNSAxMmgtNXY3SDE4VjE4em0xMCA4djhoNmMzIDAgNS0xIDUtNCAwLTMtMi00LTUtNGgtNnonIGZpbGw9J3doaXRlJy8lM0UlM0Mvc3ZnJTNFIiAvPgogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkRldmVsb3BlciBkb2N1bWVudGF0aW9uIiAvPgogICAgPHRpdGxlPkRvY3VtZW50YXRpb248L3RpdGxlPgogICAgPHN0eWxlPgogICAgICBodG1sLCBib2R5IHsgbWFyZ2luOiAwOyBtaW4taGVpZ2h0OiAxMDAlOyBiYWNrZ3JvdW5kOiAjZmZmOyB9CiAgICAgIGJvZHkgeyBmb250LWZhbWlseTogSW50ZXIsIHVpLXNhbnMtc2VyaWYsIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgc2Fucy1zZXJpZjsgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgc3JjPSIvYnVuZGxlLmpzIj48L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K" }, { "path": "lucide-license.txt", "contentBase64": "SVNDIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAyNiBMdWNpZGUgSWNvbnMgYW5kIENvbnRyaWJ1dG9ycwoKUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwpXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCkFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCkFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCk9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCgotLS0KClRoZSBmb2xsb3dpbmcgTHVjaWRlIGljb25zIGFyZSBkZXJpdmVkIGZyb20gdGhlIEZlYXRoZXIgcHJvamVjdDoKCmFpcnBsYXksIGFsZXJ0LWNpcmNsZSwgYWxlcnQtb2N0YWdvbiwgYWxlcnQtdHJpYW5nbGUsIGFwZXJ0dXJlLCBhcnJvdy1kb3duLWNpcmNsZSwgYXJyb3ctZG93bi1sZWZ0LCBhcnJvdy1kb3duLXJpZ2h0LCBhcnJvdy1kb3duLCBhcnJvdy1sZWZ0LWNpcmNsZSwgYXJyb3ctbGVmdCwgYXJyb3ctcmlnaHQtY2lyY2xlLCBhcnJvdy1yaWdodCwgYXJyb3ctdXAtY2lyY2xlLCBhcnJvdy11cC1sZWZ0LCBhcnJvdy11cC1yaWdodCwgYXJyb3ctdXAsIGF0LXNpZ24sIGNhbGVuZGFyLCBjYXN0LCBjaGVjaywgY2hldnJvbi1kb3duLCBjaGV2cm9uLWxlZnQsIGNoZXZyb24tcmlnaHQsIGNoZXZyb24tdXAsIGNoZXZyb25zLWRvd24sIGNoZXZyb25zLWxlZnQsIGNoZXZyb25zLXJpZ2h0LCBjaGV2cm9ucy11cCwgY2lyY2xlLCBjbGlwYm9hcmQsIGNsb2NrLCBjb2RlLCBjb2x1bW5zLCBjb21tYW5kLCBjb21wYXNzLCBjb3JuZXItZG93bi1sZWZ0LCBjb3JuZXItZG93bi1yaWdodCwgY29ybmVyLWxlZnQtZG93biwgY29ybmVyLWxlZnQtdXAsIGNvcm5lci1yaWdodC1kb3duLCBjb3JuZXItcmlnaHQtdXAsIGNvcm5lci11cC1sZWZ0LCBjb3JuZXItdXAtcmlnaHQsIGNyb3NzaGFpciwgZGF0YWJhc2UsIGRpdmlkZS1jaXJjbGUsIGRpdmlkZS1zcXVhcmUsIGRvbGxhci1zaWduLCBkb3dubG9hZCwgZXh0ZXJuYWwtbGluaywgZmVhdGhlciwgZnJvd24sIGhhc2gsIGhlYWRwaG9uZXMsIGhlbHAtY2lyY2xlLCBpbmZvLCBpdGFsaWMsIGtleSwgbGF5b3V0LCBsaWZlLWJ1b3ksIGxpbmstMiwgbGluaywgbG9hZGVyLCBsb2NrLCBsb2ctaW4sIGxvZy1vdXQsIG1heGltaXplLCBtZWgsIG1pbmltaXplLCBtaW5pbWl6ZS0yLCBtaW51cy1jaXJjbGUsIG1pbnVzLXNxdWFyZSwgbWludXMsIG1vbml0b3IsIG1vb24sIG1vcmUtaG9yaXpvbnRhbCwgbW9yZS12ZXJ0aWNhbCwgbW92ZSwgbXVzaWMsIG5hdmlnYXRpb24tMiwgbmF2aWdhdGlvbiwgb2N0YWdvbiwgcGF1c2UtY2lyY2xlLCBwZXJjZW50LCBwbHVzLWNpcmNsZSwgcGx1cy1zcXVhcmUsIHBsdXMsIHBvd2VyLCByYWRpbywgcnNzLCBzZWFyY2gsIHNlcnZlciwgc2hhcmUsIHNob3BwaW5nLWJhZywgc2lkZWJhciwgc21hcnRwaG9uZSwgc21pbGUsIHNxdWFyZSwgdGFibGUtMiwgdGFibGV0LCB0YXJnZXQsIHRlcm1pbmFsLCB0cmFzaC0yLCB0cmFzaCwgdHJpYW5nbGUsIHR2LCB0eXBlLCB1cGxvYWQsIHgtY2lyY2xlLCB4LW9jdGFnb24sIHgtc3F1YXJlLCB4LCB6b29tLWluLCB6b29tLW91dAoKVGhlIE1JVCBMaWNlbnNlIChNSVQpIChmb3IgdGhlIGljb25zIGxpc3RlZCBhYm92ZSkKCkNvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50IENvbGUgQmVtaXMKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuCg==" } ];