@burgan-tech/morph-touch-runtime 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/burgan-tech-morph-touch-runtime-0.0.8.tgz +0 -0
  2. package/morph-touch/Functions/get-absence-entry.1.0.0.json +1 -1
  3. package/morph-touch/Functions/get-advisor-stats.1.0.0.json +1 -1
  4. package/morph-touch/Functions/get-available-slots.1.0.0.json +1 -1
  5. package/morph-touch/Functions/get-rezervations.1.0.0.json +1 -1
  6. package/morph-touch/Functions/src/GetAbsenceEntryMapping.csx +18 -4
  7. package/morph-touch/Functions/src/GetAdvisorStatsMapping.csx +22 -8
  8. package/morph-touch/Functions/src/GetAvailableSlotsMapping.csx +22 -14
  9. package/morph-touch/Functions/src/GetRezervationsMapping.csx +46 -9
  10. package/morph-touch/Functions/src/SendCancelNotificationMapping.csx +27 -2
  11. package/morph-touch/Tasks/login-for-chat.1.0.0.json +27 -0
  12. package/morph-touch/Tasks/register-for-chat.1.0.0.json +27 -0
  13. package/morph-touch/Workflows/chat-room.json +273 -14
  14. package/morph-touch/Workflows/notification-sender.json +2 -2
  15. package/morph-touch/Workflows/rezervation-start.json +39 -2
  16. package/morph-touch/Workflows/rezervation-transfer.json +44 -7
  17. package/morph-touch/Workflows/rezervation-update.json +4 -4
  18. package/morph-touch/Workflows/rezervation.json +135 -45
  19. package/morph-touch/Workflows/src/CanStartRezervationTimerMapping.csx +18 -3
  20. package/morph-touch/Workflows/src/ChatRoomRemoveMapping.csx +10 -1
  21. package/morph-touch/Workflows/src/ChatRoomTransferInviteMapping.csx +10 -1
  22. package/morph-touch/Workflows/src/ChatRoomTransferRemoveMapping.csx +9 -1
  23. package/morph-touch/Workflows/src/ChatRoomUpdateMapping.csx +10 -1
  24. package/morph-touch/Workflows/src/CheckDuplicateRezervationMapping.csx +17 -3
  25. package/morph-touch/Workflows/src/CheckRandevuTimeMapping.csx +16 -2
  26. package/morph-touch/Workflows/src/CreateChatRoomForRezervationMapping.csx +12 -2
  27. package/morph-touch/Workflows/src/CreatePermanentChatRoomMapping.csx +11 -1
  28. package/morph-touch/Workflows/src/EnrichRezervationsForTransferMapping.csx +18 -4
  29. package/morph-touch/Workflows/src/FetchRoomMessagesForSummaryMapping.csx +10 -2
  30. package/morph-touch/Workflows/src/InviteAdvisorForRandevuUpdateMapping.csx +10 -1
  31. package/morph-touch/Workflows/src/InviteNewAdvisorToRezervationRoomMapping.csx +11 -2
  32. package/morph-touch/Workflows/src/InviteNewParticipantToRandevuRoomMapping.csx +10 -1
  33. package/morph-touch/Workflows/src/JoinChatRoomForAddParticipantMapping.csx +5 -1
  34. package/morph-touch/Workflows/src/JoinChatRoomForRandevuStartMapping.csx +5 -1
  35. package/morph-touch/Workflows/src/JoinChatRoomForRezervationMapping.csx +4 -0
  36. package/morph-touch/Workflows/src/JoinMatrixRoomMapping.csx +11 -1
  37. package/morph-touch/Workflows/src/JoinUserToRoomMapping.csx +6 -0
  38. package/morph-touch/Workflows/src/LoginForAddParticipantChatMapping.csx +35 -6
  39. package/morph-touch/Workflows/src/LoginForChatRoomMapping.csx +121 -0
  40. package/morph-touch/Workflows/src/LoginForJoinUserToRoomMapping.csx +142 -0
  41. package/morph-touch/Workflows/src/LoginForRandevuStartChatMapping.csx +35 -10
  42. package/morph-touch/Workflows/src/LoginForTransferChatMapping.csx +153 -0
  43. package/morph-touch/Workflows/src/RegisterForAddParticipantChatMapping.csx +74 -0
  44. package/morph-touch/Workflows/src/RegisterForChatRoomMapping.csx +74 -0
  45. package/morph-touch/Workflows/src/RegisterForJoinUserToRoomMapping.csx +87 -0
  46. package/morph-touch/Workflows/src/RegisterForRandevuStartChatMapping.csx +80 -0
  47. package/morph-touch/Workflows/src/RegisterForTransferChatMapping.csx +113 -0
  48. package/morph-touch/Workflows/src/SendPushNotificationMapping.csx +25 -4
  49. package/morph-touch/Workflows/src/SendSmsNotificationMapping.csx +25 -4
  50. package/morph-touch/Workflows/src/SendSummaryToNewRoomMapping.csx +10 -2
  51. package/morph-touch/Workflows/src/SetRoomHistoryVisibilityMapping.csx +12 -4
  52. package/morph-touch/Workflows/src/ValidateDateForRezervationMapping.csx +16 -2
  53. package/morph-touch/Workflows/src/ValidateSlotForRandevuUpdateMapping.csx +22 -15
  54. package/morph-touch/Workflows/src/ValidateSlotForRezervationMapping.csx +23 -16
  55. package/morph-touch/Workflows/src/ValidateTransferMapping.csx +16 -2
  56. package/morph-touch/doc/morph-touch-domain.en.md +420 -6
  57. package/morph-touch/doc/morph-touch-domain.md +423 -6
  58. package/package.json +1 -1
  59. package/vnext.config.json +1 -1
  60. package/burgan-tech-morph-touch-runtime-0.0.6.tgz +0 -0
@@ -115,7 +115,7 @@
115
115
  },
116
116
  "mapping": {
117
117
  "location": "./src/SendCancelNotificationMapping.csx",
118
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwp1c2luZyBCQlQuV29ya2Zsb3cuU2NyaXB0aW5nOwp1c2luZyBCQlQuV29ya2Zsb3cuRGVmaW5pdGlvbnM7Ci8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIFNlbmRDYW5jZWxOb3RpZmljYXRpb24gKERpcmVjdFRyaWdnZXJUYXNrIC0gVHlwZSAxMikKLy8vIFRyaWdnZXJzIG5vdGlmaWNhdGlvbi1zZW5kZXIgd29ya2Zsb3cgd2hlbiBhIHJlc2VydmF0aW9uIGlzIGNhbmNlbGxlZC4KLy8vIFNlbmRzIFNNUy9wdXNoIG5vdGlmaWNhdGlvbiB0byB0aGUgY3VzdG9tZXIgYWJvdXQgdGhlIGNhbmNlbGxhdGlvbi4KLy8vIDwvc3VtbWFyeT4KcHVibGljIGNsYXNzIFNlbmRDYW5jZWxOb3RpZmljYXRpb25NYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciB0cmlnZ2VyVGFzayA9IHRhc2sgYXMgRGlyZWN0VHJpZ2dlclRhc2s7CiAgICAgICAgaWYgKHRyaWdnZXJUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEaXJlY3RUcmlnZ2VyVGFzayIpOwoKICAgICAgICB2YXIgaW5zdGFuY2UgPSBjb250ZXh0Lkluc3RhbmNlOwogICAgICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKCiAgICAgICAgdmFyIGF0dHJzID0gaW5zdGFuY2UuQXR0cmlidXRlczsKICAgICAgICBzdHJpbmcgdXNlciA9IGF0dHJzPy51c2VyPy5Ub1N0cmluZygpID8/ICIiOwogICAgICAgIHN0cmluZyBhZHZpc29yID0gYXR0cnM/LmFkdmlzb3I/LlRvU3RyaW5nKCkgPz8gIiI7CiAgICAgICAgc3RyaW5nIHN0YXJ0RGF0ZVRpbWUgPSBhdHRycz8uc3RhcnREYXRlVGltZT8uVG9TdHJpbmcoKSA/PyAiIjsKCiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHVzZXIpKQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKCiAgICAgICAgc3RyaW5nIGluc3RhbmNlS2V5ID0gaW5zdGFuY2UuS2V5Py5Ub1N0cmluZygpID8/ICIiOwogICAgICAgIHN0cmluZyBub3RpZktleSA9ICQiY2FuY2VsLW5vdGlmLXtpbnN0YW5jZUtleX0te0RhdGVUaW1lLlV0Y05vdzp5eXl5TU1kZEhIbW1zc30iOwoKICAgICAgICB0cmlnZ2VyVGFzay5TZXRUYXJnZXRXb3JrZmxvdygibm90aWZpY2F0aW9uLXNlbmRlciIpOwogICAgICAgIHRyaWdnZXJUYXNrLlNldFRhcmdldFRyYW5zaXRpb24oInN0YXJ0Iik7CiAgICAgICAgdHJpZ2dlclRhc2suU2V0SW5zdGFuY2VLZXkobm90aWZLZXkpOwogICAgICAgIHRyaWdnZXJUYXNrLlNldEF0dHJpYnV0ZXMobmV3CiAgICAgICAgewogICAgICAgICAgICByZWNpcGllbnRJZCA9IHVzZXIsCiAgICAgICAgICAgIHR5cGUgPSAicmVzZXJ2YXRpb24tY2FuY2VsbGVkIiwKICAgICAgICAgICAgY2hhbm5lbCA9ICJzbXMiLAogICAgICAgICAgICB0aXRsZSA9ICJSYW5kZXZ1IMSwcHRhbGkiLAogICAgICAgICAgICBtZXNzYWdlID0gJCJSYW5kZXZ1bnV6IGlwdGFsIGVkaWxtacWfdGlyLiBUYXJpaDoge3N0YXJ0RGF0ZVRpbWV9LCBEYW7EscWfbWFuOiB7YWR2aXNvcn0iLAogICAgICAgICAgICBtZXRhZGF0YSA9IG5ldwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXNlcnZhdGlvbktleSA9IGluc3RhbmNlS2V5LAogICAgICAgICAgICAgICAgYWR2aXNvcklkID0gYWR2aXNvciwKICAgICAgICAgICAgICAgIG9yaWdpbmFsRGF0ZVRpbWUgPSBzdGFydERhdGVUaW1lCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IE91dHB1dEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgewogICAgICAgICAgICBLZXkgPSAibm90aWZpY2F0aW9uLXNlbnQiLAogICAgICAgICAgICBEYXRhID0gbmV3IHsgc3VjY2VzcyA9IHRydWUgfSwKICAgICAgICAgICAgVGFncyA9IG5ld1tdIHsgIm5vdGlmaWNhdGlvbiIsICJjYW5jZWwiIH0KICAgICAgICB9KTsKICAgIH0KfQo="
118
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwp1c2luZyBCQlQuV29ya2Zsb3cuU2NyaXB0aW5nOwp1c2luZyBCQlQuV29ya2Zsb3cuRGVmaW5pdGlvbnM7Ci8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIFNlbmRDYW5jZWxOb3RpZmljYXRpb24gKERpcmVjdFRyaWdnZXJUYXNrIC0gVHlwZSAxMikKLy8vIFRyaWdnZXJzIG5vdGlmaWNhdGlvbi1zZW5kZXIgd29ya2Zsb3cgd2hlbiBhIHJlc2VydmF0aW9uIGlzIGNhbmNlbGxlZC4KLy8vIFNlbmRzIFNNUy9wdXNoIG5vdGlmaWNhdGlvbiB0byB0aGUgY3VzdG9tZXIgYWJvdXQgdGhlIGNhbmNlbGxhdGlvbi4KLy8vIDwvc3VtbWFyeT4KcHVibGljIGNsYXNzIFNlbmRDYW5jZWxOb3RpZmljYXRpb25NYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciB0cmlnZ2VyVGFzayA9IHRhc2sgYXMgRGlyZWN0VHJpZ2dlclRhc2s7CiAgICAgICAgaWYgKHRyaWdnZXJUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEaXJlY3RUcmlnZ2VyVGFzayIpOwoKICAgICAgICB2YXIgaW5zdGFuY2UgPSBjb250ZXh0Lkluc3RhbmNlOwogICAgICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKCiAgICAgICAgdmFyIGF0dHJzID0gaW5zdGFuY2UuQXR0cmlidXRlczsKICAgICAgICBzdHJpbmcgdXNlciA9IGF0dHJzPy51c2VyPy5Ub1N0cmluZygpID8/ICIiOwogICAgICAgIHN0cmluZyBhZHZpc29yID0gYXR0cnM/LmFkdmlzb3I/LlRvU3RyaW5nKCkgPz8gIiI7CiAgICAgICAgc3RyaW5nIHN0YXJ0RGF0ZVRpbWVSYXcgPSBhdHRycz8uc3RhcnREYXRlVGltZT8uVG9TdHJpbmcoKSA/PyAiIjsKICAgICAgICBzdHJpbmcgc3RhcnREYXRlVGltZSA9IEZvcm1hdEluQnVzaW5lc3NUaW1lWm9uZShzdGFydERhdGVUaW1lUmF3KTsKCiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHVzZXIpKQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKCiAgICAgICAgc3RyaW5nIGluc3RhbmNlS2V5ID0gaW5zdGFuY2UuS2V5Py5Ub1N0cmluZygpID8/ICIiOwogICAgICAgIHN0cmluZyBub3RpZktleSA9ICQiY2FuY2VsLW5vdGlmLXtpbnN0YW5jZUtleX0te0RhdGVUaW1lLlV0Y05vdzp5eXl5TU1kZEhIbW1zc30iOwoKICAgICAgICB0cmlnZ2VyVGFzay5TZXRUYXJnZXRXb3JrZmxvdygibm90aWZpY2F0aW9uLXNlbmRlciIpOwogICAgICAgIHRyaWdnZXJUYXNrLlNldFRhcmdldFRyYW5zaXRpb24oInN0YXJ0Iik7CiAgICAgICAgdHJpZ2dlclRhc2suU2V0SW5zdGFuY2VLZXkobm90aWZLZXkpOwogICAgICAgIHRyaWdnZXJUYXNrLlNldEF0dHJpYnV0ZXMobmV3CiAgICAgICAgewogICAgICAgICAgICByZWNpcGllbnRJZCA9IHVzZXIsCiAgICAgICAgICAgIHR5cGUgPSAicmVzZXJ2YXRpb24tY2FuY2VsbGVkIiwKICAgICAgICAgICAgY2hhbm5lbCA9ICJzbXMiLAogICAgICAgICAgICB0aXRsZSA9ICJSYW5kZXZ1IMSwcHRhbGkiLAogICAgICAgICAgICBtZXNzYWdlID0gJCJSYW5kZXZ1bnV6IGlwdGFsIGVkaWxtacWfdGlyLiBUYXJpaDoge3N0YXJ0RGF0ZVRpbWV9LCBEYW7EscWfbWFuOiB7YWR2aXNvcn0iLAogICAgICAgICAgICBtZXRhZGF0YSA9IG5ldwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXNlcnZhdGlvbktleSA9IGluc3RhbmNlS2V5LAogICAgICAgICAgICAgICAgYWR2aXNvcklkID0gYWR2aXNvciwKICAgICAgICAgICAgICAgIG9yaWdpbmFsRGF0ZVRpbWUgPSBzdGFydERhdGVUaW1lUmF3CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IE91dHB1dEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgewogICAgICAgICAgICBLZXkgPSAibm90aWZpY2F0aW9uLXNlbnQiLAogICAgICAgICAgICBEYXRhID0gbmV3IHsgc3VjY2VzcyA9IHRydWUgfSwKICAgICAgICAgICAgVGFncyA9IG5ld1tdIHsgIm5vdGlmaWNhdGlvbiIsICJjYW5jZWwiIH0KICAgICAgICB9KTsKICAgIH0KCiAgICBwcml2YXRlIHN0cmluZyBGb3JtYXRJbkJ1c2luZXNzVGltZVpvbmUoc3RyaW5nIGRhdGVTdHIpCiAgICB7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KGRhdGVTdHIpKSByZXR1cm4gZGF0ZVN0cjsKICAgICAgICBpZiAoIURhdGVUaW1lT2Zmc2V0LlRyeVBhcnNlKGRhdGVTdHIsCiAgICAgICAgICAgIFN5c3RlbS5HbG9iYWxpemF0aW9uLkN1bHR1cmVJbmZvLkludmFyaWFudEN1bHR1cmUsCiAgICAgICAgICAgIFN5c3RlbS5HbG9iYWxpemF0aW9uLkRhdGVUaW1lU3R5bGVzLk5vbmUsIG91dCB2YXIgZHRvKSkKICAgICAgICAgICAgcmV0dXJuIGRhdGVTdHI7CgogICAgICAgIHZhciB0eiA9IFJlc29sdmVCdXNpbmVzc1RpbWVab25lKCk7CiAgICAgICAgdmFyIGxvY2FsID0gVGltZVpvbmVJbmZvLkNvbnZlcnRUaW1lRnJvbVV0YyhkdG8uVXRjRGF0ZVRpbWUsIHR6KTsKICAgICAgICByZXR1cm4gbG9jYWwuVG9TdHJpbmcoImRkLk1NLnl5eXkgSEg6bW0iKTsKICAgIH0KCiAgICBwcml2YXRlIFRpbWVab25lSW5mbyBSZXNvbHZlQnVzaW5lc3NUaW1lWm9uZSgpCiAgICB7CiAgICAgICAgdmFyIGlkID0gR2V0Q29uZmlnVmFsdWUoIkFwcG9pbnRtZW50czpUaW1lWm9uZSIpCiAgICAgICAgICAgICAgPz8gR2V0Q29uZmlnVmFsdWUoIkFQUE9JTlRNRU5UX1RJTUVaT05FIik7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPcldoaXRlU3BhY2UoaWQpKSBpZCA9ICJFdXJvcGUvSXN0YW5idWwiOwogICAgICAgIHRyeSB7IHJldHVybiBUaW1lWm9uZUluZm8uRmluZFN5c3RlbVRpbWVab25lQnlJZChpZC5UcmltKCkpOyB9IGNhdGNoIHsgfQogICAgICAgIHRyeSB7IHJldHVybiBUaW1lWm9uZUluZm8uRmluZFN5c3RlbVRpbWVab25lQnlJZCgiVHVya2V5IFN0YW5kYXJkIFRpbWUiKTsgfSBjYXRjaCB7IH0KICAgICAgICByZXR1cm4gVGltZVpvbmVJbmZvLkNyZWF0ZUN1c3RvbVRpbWVab25lKAogICAgICAgICAgICAiVFJUIiwgVGltZVNwYW4uRnJvbUhvdXJzKDMpLCAiVFJUIChVVEMrMykiLCAiVFJUIChVVEMrMykiKTsKICAgIH0KfQo="
119
119
  }
120
120
  }
121
121
  ]
@@ -238,52 +238,13 @@
238
238
  "location": "./src/SetUserFromHeadersForRezervationMapping.csx",
239
239
  "code": "dXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gUG9wdWxhdGUgc3ViIChmcm9tIEhlYWRlcnMgc3ViKSBpbnRvIHRoZSB3b3JrZmxvdyBpbnN0YW5jZSBkYXRhLgovLy8gVXNlZCBhdCBzdGFydCBzbyBzdWJzZXF1ZW50IHRhc2tzIChlLmcuIGdldC11c2VyLWluZm8tZm9yLXJlemVydmF0aW9uKSByZWFkIHN1YiBmcm9tIGRhdGEuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBTZXRVc2VyRnJvbUhlYWRlcnNGb3JSZXplcnZhdGlvbk1hcHBpbmcgOiBTY3JpcHRCYXNlLCBJTWFwcGluZwp7CiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gSW5wdXRIYW5kbGVyKFdvcmtmbG93VGFzayB0YXNrLCBTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IE91dHB1dEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciBzdWIgPSBjb250ZXh0LkhlYWRlcnM/WyJzdWIiXT8uVG9TdHJpbmcoKT8uVHJpbSgpOwogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgewogICAgICAgICAgICBEYXRhID0gbmV3IHsgc3ViIH0KICAgICAgICB9KTsKICAgIH0KfQo="
240
240
  }
241
- },
242
- {
243
- "order": 2,
244
- "task": {
245
- "domain": "morph-touch",
246
- "flow": "sys-tasks",
247
- "key": "validate-date-for-rezervation",
248
- "version": "1.0.0"
249
- },
250
- "mapping": {
251
- "location": "./src/ValidateDateForRezervationMapping.csx",
252
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwp1c2luZyBCQlQuV29ya2Zsb3cuU2NyaXB0aW5nOwp1c2luZyBCQlQuV29ya2Zsb3cuRGVmaW5pdGlvbnM7CgovLy8gPHN1bW1hcnk+Ci8vLyBTY3JpcHQgVGFzayAodHlwZSA3KSBtYXBwaW5nIGZvciB2YWxpZGF0ZS1kYXRlLWZvci1yZXplcnZhdGlvbi4KLy8vIFZhbGlkYXRlcyBzdGFydERhdGVUaW1lIGFuZCBlbmREYXRlVGltZSBmcm9tIHJlemVydmF0aW9uIGluc3RhbmNlIGRhdGEuCi8vLyBUaHJvd3MgQXJndW1lbnRFeGNlcHRpb24gaWYgZGF0ZSBpcyBpbiB0aGUgcGFzdCBvciBpbnZhbGlkOyBvdGhlcndpc2UgcmV0dXJucyBzdWNjZXNzLgovLy8gUnVucyBiZWZvcmUgdmFsaWRhdGUtc2xvdC1mb3ItcmV6ZXJ2YXRpb24gdG8gYXZvaWQgY2FsbGluZyBnZXQtYXZhaWxhYmxlLXNsb3RzIHdpdGggaW52YWxpZCBkYXRlLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgVmFsaWRhdGVEYXRlRm9yUmV6ZXJ2YXRpb25NYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICBpZiAoZGF0YSA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiSW5zdGFuY2UgZGF0YSBpcyByZXF1aXJlZC4iKTsKCiAgICAgICAgdmFyIHN0YXJ0RGF0ZVRpbWVTdHIgPSBHZXRTdHJpbmcoZGF0YSwgInN0YXJ0RGF0ZVRpbWUiKTsKICAgICAgICB2YXIgZW5kRGF0ZVRpbWVTdHIgPSBHZXRTdHJpbmcoZGF0YSwgImVuZERhdGVUaW1lIik7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHN0YXJ0RGF0ZVRpbWVTdHIpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KGVuZERhdGVUaW1lU3RyKSkKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJzdGFydERhdGVUaW1lIGFuZCBlbmREYXRlVGltZSBhcmUgcmVxdWlyZWQuIiwgImRhdGUiKTsKCiAgICAgICAgRGF0ZVRpbWUgc3RhcnREdDsKICAgICAgICBpZiAoIURhdGVUaW1lLlRyeVBhcnNlKHN0YXJ0RGF0ZVRpbWVTdHIsIG91dCBzdGFydER0KSkKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHN0YXJ0RGF0ZVRpbWUgZm9ybWF0LiIsICJzdGFydERhdGVUaW1lIik7CiAgICAgICAgRGF0ZVRpbWUgZW5kRHQ7CiAgICAgICAgaWYgKCFEYXRlVGltZS5UcnlQYXJzZShlbmREYXRlVGltZVN0ciwgb3V0IGVuZER0KSkKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGVuZERhdGVUaW1lIGZvcm1hdC4iLCAiZW5kRGF0ZVRpbWUiKTsKCiAgICAgICAgdmFyIG5vdyA9IERhdGVUaW1lLlV0Y05vdzsKICAgICAgICBpZiAoc3RhcnREdCA8IG5vdyB8fCBlbmREdCA8IG5vdykKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJEYXRlIGNhbm5vdCBiZSBpbiB0aGUgcGFzdC4iLCAiZGF0ZSIpOwogICAgICAgIGlmIChlbmREdCA8PSBzdGFydER0KQogICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oImVuZERhdGVUaW1lIG11c3QgYmUgYWZ0ZXIgc3RhcnREYXRlVGltZS4iLCAiZGF0ZSIpOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0K"
253
- }
254
- },
255
- {
256
- "order": 3,
257
- "task": {
258
- "domain": "morph-touch",
259
- "flow": "sys-tasks",
260
- "key": "check-duplicate-rezervation",
261
- "version": "1.0.0"
262
- },
263
- "mapping": {
264
- "location": "./src/CheckDuplicateRezervationMapping.csx",
265
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgY2hlY2stZHVwbGljYXRlLXJlemVydmF0aW9uIChEYXByU2VydmljZVRhc2sgLSBUeXBlIDMpLgovLy8gUXVlcmllcyByZXplcnZhdGlvbiB3b3JrZmxvdyBpbnN0YW5jZXMgdG8gZW5mb3JjZSB0d28gcnVsZXM6Ci8vLyAxLiBBIHVzZXIgY2FuIGhhdmUgYXQgbW9zdCAyIHJlc2VydmF0aW9ucyBpbiBjb25maXJtZWQgc3RhdGVzIChhY3RpdmUsIHVwZGF0ZS1jb250cm9sLCBjaGFuZ2UtYWR2aXNvciwgY2FuLXN0YXJ0LW1lZXRpbmcsIGFjY2VwdC10ZXJtcykuCi8vLyAyLiBBIHVzZXIgY2Fubm90IGhhdmUgdHdvIHJlc2VydmF0aW9ucyB3aXRoIG92ZXJsYXBwaW5nIHRpbWUgc2xvdHMuCi8vLwovLy8gRmxvdzoKLy8vIDEuIElucHV0SGFuZGxlcjogQnVpbGRzIHF1ZXJ5IHRvIGZpbmQgYWxsIGFjdGl2ZSByZXNlcnZhdGlvbnMgZm9yIHRoZSBzYW1lIHVzZXIuCi8vLyAyLiBPdXRwdXRIYW5kbGVyOiBDaGVja3MgY291bnQgKG1heCAyKSBhbmQgdGltZSBvdmVybGFwOyB0aHJvd3MgZXhjZXB0aW9uIG9uIHZpb2xhdGlvbi4KLy8vICAgIEV4Y2VwdGlvbiBmYWlscyB0aGUgdHJhbnNpdGlvbjsgaW5zdGFuY2Ugc3RheXMgaW4gaXRzIGN1cnJlbnQgc3RhdGUuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBDaGVja0R1cGxpY2F0ZVJlemVydmF0aW9uTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgc2VydmljZVRhc2sgPSB0YXNrIGFzIERhcHJTZXJ2aWNlVGFzazsKICAgICAgICBpZiAoc2VydmljZVRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIlRhc2sgbXVzdCBiZSBhIERhcHJTZXJ2aWNlVGFzayIpOwoKICAgICAgICB2YXIgYXBwSWQgPSBHZXRDb25maWdWYWx1ZSgiREFQUl9BUFBfSUQiKTsKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGFwcElkKSkKICAgICAgICAgICAgc2VydmljZVRhc2suU2V0QXBwSWQoYXBwSWQpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCB8fCAhSGFzUHJvcGVydHkoZGF0YSwgInVzZXIiKSB8fCBkYXRhLnVzZXIgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIk1BWF9SRVpFUlZBVElPTjogVXNlciBmaWVsZCBpcyByZXF1aXJlZCBmb3IgZHVwbGljYXRlIGNoZWNrIik7CgogICAgICAgIHZhciB1c2VyID0gZGF0YS51c2VyLlRvU3RyaW5nKCk7CiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBjb250ZXh0Lkluc3RhbmNlPy5LZXkgPz8gIiI7CgogICAgICAgIHZhciB1c2VyRXNjYXBlZCA9IHVzZXIuUmVwbGFjZSgiXFwiLCAiXFxcXCIpLlJlcGxhY2UoIlwiIiwgIlxcXCIiKTsKICAgICAgICB2YXIga2V5RXNjYXBlZCA9IGN1cnJlbnRLZXkuUmVwbGFjZSgiXFwiLCAiXFxcXCIpLlJlcGxhY2UoIlwiIiwgIlxcXCIiKTsKCiAgICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gbmV3IExpc3Q8c3RyaW5nPgogICAgICAgIHsKICAgICAgICAgICAgInBhZ2VTaXplPTEwIiwKICAgICAgICAgICAgImZpbHRlcj0iICsKICAgICAgICAgICAgICAgICJ7XCJhbmRcIjpbIiArCiAgICAgICAgICAgICAgICAgICAgIntcImF0dHJpYnV0ZXNcIjp7XCJ1c2VyXCI6e1wiZXFcIjpcIiIgKyB1c2VyRXNjYXBlZCArICJcIn19fSwiICsKICAgICAgICAgICAgICAgICAgICAie1wia2V5XCI6e1wibmVcIjpcIiIgKyBrZXlFc2NhcGVkICsgIlwifX0sIiArCiAgICAgICAgICAgICAgICAgICAgIntcImN1cnJlbnRTdGF0ZVwiOntcImVxXCI6XCIiICsgImFjdGl2ZSIgKyAiXCJ9fSwiICArCiAgICAgICAgICAgICAgICAiXX0iCiAgICAgICAgfTsKCiAgICAgICAgc2VydmljZVRhc2suU2V0UXVlcnlTdHJpbmcoc3RyaW5nLkpvaW4oIiYiLCBxdWVyeVBhcmFtcykpOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHJlc3BvbnNlID0gY29udGV4dC5Cb2R5OwoKICAgICAgICBpZiAocmVzcG9uc2U/LmlzU3VjY2VzcyA9PSBmYWxzZSkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSByZXNwb25zZT8uZXJyb3JNZXNzYWdlPy5Ub1N0cmluZygpID8/ICJTZXJ2aWNlIGNhbGwgZmFpbGVkIjsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigkIlNFUlZJQ0VfRVJST1I6IHtlcnJvck1lc3NhZ2V9Iik7CiAgICAgICAgfQoKICAgICAgICB2YXIgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2U/LmRhdGE7CiAgICAgICAgdmFyIGl0ZW1zID0gcmVzcG9uc2VEYXRhPy5pdGVtczsKCiAgICAgICAgaWYgKGl0ZW1zID09IG51bGwgfHwgaXRlbXMuQ291bnQgPT0gMCkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CgogICAgICAgIGludCBjb3VudCA9IGl0ZW1zLkNvdW50OwoKICAgICAgICBpZiAoY291bnQgPj0gMikKICAgICAgICB7CiAgICAgICAgICAgIHZhciB1c2VyID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YT8udXNlcj8uVG9TdHJpbmcoKSA/PyAidW5rbm93biI7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJCJNQVhfUkVaRVJWQVRJT046IFVzZXIgJ3t1c2VyfScgYWxyZWFkeSBoYXMge2NvdW50fSBhY3RpdmUgcmVzZXJ2YXRpb25zLiBNYXhpbXVtIGFsbG93ZWQgaXMgMi4iKTsKICAgICAgICB9CgogICAgICAgIHZhciBpbnN0YW5jZURhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIHZhciBuZXdTdGFydFN0ciA9IEdldFN0cmluZyhpbnN0YW5jZURhdGEsICJzdGFydERhdGVUaW1lIik7CiAgICAgICAgdmFyIG5ld0VuZFN0ciA9IEdldFN0cmluZyhpbnN0YW5jZURhdGEsICJlbmREYXRlVGltZSIpOwoKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KG5ld1N0YXJ0U3RyKSAmJiAhc3RyaW5nLklzTnVsbE9yRW1wdHkobmV3RW5kU3RyKSkKICAgICAgICB7CiAgICAgICAgICAgIERhdGVUaW1lIG5ld1N0YXJ0ID0gZGVmYXVsdCwgbmV3RW5kID0gZGVmYXVsdDsKICAgICAgICAgICAgaWYgKERhdGVUaW1lLlRyeVBhcnNlKG5ld1N0YXJ0U3RyLCBvdXQgbmV3U3RhcnQpICYmIERhdGVUaW1lLlRyeVBhcnNlKG5ld0VuZFN0ciwgb3V0IG5ld0VuZCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKHZhciBpdGVtIGluIGl0ZW1zKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwpIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICB2YXIgZXhpc3RpbmdTdGFydFN0ciA9IEdldE5lc3RlZFN0cmluZyhpdGVtLCAiYXR0cmlidXRlcyIsICJzdGFydERhdGVUaW1lIik7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nRW5kU3RyID0gR2V0TmVzdGVkU3RyaW5nKGl0ZW0sICJhdHRyaWJ1dGVzIiwgImVuZERhdGVUaW1lIik7CgogICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShleGlzdGluZ1N0YXJ0U3RyKSB8fCBzdHJpbmcuSXNOdWxsT3JFbXB0eShleGlzdGluZ0VuZFN0cikpCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICBEYXRlVGltZSBleGlzdGluZ1N0YXJ0ID0gZGVmYXVsdCwgZXhpc3RpbmdFbmQgPSBkZWZhdWx0OwogICAgICAgICAgICAgICAgICAgIGlmICghRGF0ZVRpbWUuVHJ5UGFyc2UoZXhpc3RpbmdTdGFydFN0ciwgb3V0IGV4aXN0aW5nU3RhcnQpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICFEYXRlVGltZS5UcnlQYXJzZShleGlzdGluZ0VuZFN0ciwgb3V0IGV4aXN0aW5nRW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1N0YXJ0IDwgbmV3RW5kICYmIGV4aXN0aW5nRW5kID4gbmV3U3RhcnQpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhpc3RpbmdLZXkgPSBIYXNQcm9wZXJ0eShpdGVtLCAia2V5IikgPyBpdGVtLmtleT8uVG9TdHJpbmcoKSA6ICJ1bmtub3duIjsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQiVElNRV9PVkVSTEFQOiBSZXF1ZXN0ZWQgdGltZSB7bmV3U3RhcnRTdHJ9IC0ge25ld0VuZFN0cn0gb3ZlcmxhcHMgd2l0aCBleGlzdGluZyByZXNlcnZhdGlvbiAne2V4aXN0aW5nS2V5fScgKHtleGlzdGluZ1N0YXJ0U3RyfSAtIHtleGlzdGluZ0VuZFN0cn0pLiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0TmVzdGVkU3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgcGFyZW50LCBzdHJpbmcgY2hpbGQpCiAgICB7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShvYmosIHBhcmVudCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBuZXN0ZWQgPSBHZXRQcm9wZXJ0eVZhbHVlKG9iaiwgcGFyZW50KTsKICAgICAgICAgICAgICAgIGlmIChuZXN0ZWQgIT0gbnVsbCAmJiBIYXNQcm9wZXJ0eShuZXN0ZWQsIGNoaWxkKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUobmVzdGVkLCBjaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0K"
266
- }
267
- },
268
- {
269
- "order": 4,
270
- "task": {
271
- "domain": "morph-touch",
272
- "flow": "sys-tasks",
273
- "key": "validate-slot-for-rezervation",
274
- "version": "1.0.0"
275
- },
276
- "mapping": {
277
- "location": "./src/ValidateSlotForRezervationMapping.csx",
278
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIHZhbGlkYXRlLXNsb3QtZm9yLXJlemVydmF0aW9uIHRhc2suCi8vLyBJbnZva2VzIGdldC1hdmFpbGFibGUtc2xvdHMgZnVuY3Rpb24gd2l0aCBhZHZpc29yIGFuZCBkYXRlIGZyb20gcmV6ZXJ2YXRpb24gaW5zdGFuY2UsCi8vLyB0aGVuIGNoZWNrcyBpZiB0aGUgcmVxdWVzdGVkIHN0YXJ0RGF0ZVRpbWUtZW5kRGF0ZVRpbWUgc2xvdCBpcyBpbiB0aGUgYXZhaWxhYmxlIHNsb3RzIGxpc3QuCi8vLyBPdXRwdXQ6IHNsb3RDaGVja1Jlc3VsdCB7IGF2YWlsYWJsZTogYm9vbCwga2V5Pzogc3RyaW5nIH0gZm9yIHVzZSBieSB2YWxpZGF0aW5nIHN0YXRlIGF1dG8gdHJhbnNpdGlvbnMuCi8vLyA8L3N1bW1hcnk+CmludGVybmFsIHNlYWxlZCBjbGFzcyBHZXRBdmFpbGFibGVTbG90c0V4Y2VwdGlvbiA6IEV4Y2VwdGlvbgp7CiAgICBwdWJsaWMgR2V0QXZhaWxhYmxlU2xvdHNFeGNlcHRpb24oc3RyaW5nIG1lc3NhZ2UpIDogYmFzZShtZXNzYWdlKSB7IH0KfQoKcHVibGljIGNsYXNzIFZhbGlkYXRlU2xvdEZvclJlemVydmF0aW9uTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBzZXJ2aWNlVGFzayA9IHRhc2sgYXMgRGFwclNlcnZpY2VUYXNrOwogICAgICAgICAgICBpZiAoc2VydmljZVRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEYXByU2VydmljZVRhc2siKTsKCiAgICAgICAgICAgIHZhciBhcHBJZCA9IEdldENvbmZpZ1ZhbHVlKCJEQVBSX0FQUF9JRCIpOwogICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGFwcElkKSkKICAgICAgICAgICAgICAgIHNlcnZpY2VUYXNrLlNldEFwcElkKGFwcElkKTsKCiAgICAgICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJJbnN0YW5jZSBkYXRhIGlzIHJlcXVpcmVkIik7CgogICAgICAgICAgICB2YXIgYWR2aXNvciA9IEdldFN0cmluZyhkYXRhLCAiYWR2aXNvciIpOwogICAgICAgICAgICB2YXIgc3RhcnREYXRlVGltZVN0ciA9IEdldFN0cmluZyhkYXRhLCAic3RhcnREYXRlVGltZSIpOwogICAgICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoYWR2aXNvcikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoc3RhcnREYXRlVGltZVN0cikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0gInZhbGlkYXRpb24tZXJyb3IiLAogICAgICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RDaGVja1Jlc3VsdCA9IG5ldyB7IGF2YWlsYWJsZSA9IGZhbHNlLCBrZXkgPSAidmFsaWRhdGlvbi1lcnJvciIgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBEYXRlVGltZSBzdGFydERhdGVUaW1lOwogICAgICAgICAgICBpZiAoIURhdGVUaW1lLlRyeVBhcnNlKHN0YXJ0RGF0ZVRpbWVTdHIsIG91dCBzdGFydERhdGVUaW1lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPSAidmFsaWRhdGlvbi1lcnJvciIsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2xvdENoZWNrUmVzdWx0ID0gbmV3IHsgYXZhaWxhYmxlID0gZmFsc2UsIGtleSA9ICJ2YWxpZGF0aW9uLWVycm9yIiB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBkYXRlU3RyID0gc3RhcnREYXRlVGltZS5Ub1N0cmluZygieXl5eS1NTS1kZCIpOwogICAgICAgICAgICB2YXIgcXVlcnlQYXJhbXMgPSBuZXcgTGlzdDxzdHJpbmc+CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJhZHZpc29ySWQ9IiArIFVyaS5Fc2NhcGVEYXRhU3RyaW5nKGFkdmlzb3IpLAogICAgICAgICAgICAgICAgImRhdGU9IiArIFVyaS5Fc2NhcGVEYXRhU3RyaW5nKGRhdGVTdHIpCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHNlcnZpY2VUYXNrLlNldFF1ZXJ5U3RyaW5nKHN0cmluZy5Kb2luKCImIiwgcXVlcnlQYXJhbXMpKTsKCiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlKCkpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ID0gImlucHV0LWVycm9yIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBzbG90Q2hlY2tSZXN1bHQgPSBuZXcKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSAiaW5wdXQtZXJyb3IiLAogICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGV4Lk1lc3NhZ2UKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgIFRhc2s8U2NyaXB0UmVzcG9uc2U+IE91dHB1dEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgICB2YXIgYm9keSA9IGNvbnRleHQuQm9keTsKICAgICAgICAgICAgaWYgKGJvZHkgIT0gbnVsbCAmJiBIYXNQcm9wZXJ0eShib2R5LCAiaXNTdWNjZXNzIikgJiYgYm9keS5pc1N1Y2Nlc3MgPT0gZmFsc2UpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBlcnJOb2RlID0gSGFzUHJvcGVydHkoYm9keSwgImRhdGEiKSA/IGJvZHkuZGF0YSA6IG51bGw7CiAgICAgICAgICAgICAgICB2YXIgZGV0YWlsID0gR2V0U3RyaW5nKGVyck5vZGUsICJkZXRhaWwiKSA/PyBHZXRTdHJpbmcoYm9keSwgImVycm9yTWVzc2FnZSIpID8/IEdldFN0cmluZyhib2R5LCAiZGV0YWlsIik7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oZGV0YWlsID8/ICJGdW5jdGlvbiBjYWxsIGZhaWxlZCIsIiIpOwogICAgICAgICAgICB9CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgICAgIGlmIChkYXRhID09IG51bGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgRGF0YSA9IG5ldyB7IHNsb3RDaGVja1Jlc3VsdCA9IG5ldyB7IGF2YWlsYWJsZSA9IGZhbHNlLCBrZXkgPSAibm8taW5zdGFuY2UtZGF0YSIgfSB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZVRpbWVTdHIgPSBHZXRTdHJpbmcoZGF0YSwgInN0YXJ0RGF0ZVRpbWUiKTsKICAgICAgICAgICAgdmFyIGVuZERhdGVUaW1lU3RyID0gR2V0U3RyaW5nKGRhdGEsICJlbmREYXRlVGltZSIpOwogICAgICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoc3RhcnREYXRlVGltZVN0cikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoZW5kRGF0ZVRpbWVTdHIpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIERhdGEgPSBuZXcgeyBzbG90Q2hlY2tSZXN1bHQgPSBuZXcgeyBhdmFpbGFibGUgPSBmYWxzZSwga2V5ID0gInZhbGlkYXRpb24tZXJyb3IiIH0gfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIERhdGVUaW1lIHN0YXJ0RHQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgRGF0ZVRpbWUgZW5kRHQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN0YXJ0RHQgPSBEYXRlVGltZS5QYXJzZShzdGFydERhdGVUaW1lU3RyKTsKICAgICAgICAgICAgICAgIGVuZER0ID0gRGF0ZVRpbWUuUGFyc2UoZW5kRGF0ZVRpbWVTdHIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgRGF0YSA9IG5ldyB7IHNsb3RDaGVja1Jlc3VsdCA9IG5ldyB7IGF2YWlsYWJsZSA9IGZhbHNlLCBrZXkgPSAidmFsaWRhdGlvbi1lcnJvciIgfSB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHR6ID0gUmVzb2x2ZUJ1c2luZXNzVGltZVpvbmUoKTsKICAgICAgICAgICAgdmFyIGxvY2FsU3RhcnQgPSBDb252ZXJ0VG9UaW1lWm9uZShzdGFydER0LCBzdGFydERhdGVUaW1lU3RyLCB0eik7CiAgICAgICAgICAgIHZhciBsb2NhbEVuZCA9IENvbnZlcnRUb1RpbWVab25lKGVuZER0LCBlbmREYXRlVGltZVN0ciwgdHopOwogICAgICAgICAgICB2YXIgcmVxdWVzdGVkU2xvdCA9IGxvY2FsU3RhcnQuVG9TdHJpbmcoIkhIOm1tIikgKyAiLSIgKyBsb2NhbEVuZC5Ub1N0cmluZygiSEg6bW0iKTsKCiAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gZmFsc2U7CiAgICAgICAgICAgIHN0cmluZyByZXNwb25zZUtleSA9IG51bGw7CiAgICAgICAgICAgIGR5bmFtaWMgcmVzb2x2ZWRTbG90cyA9IG51bGw7CgogICAgICAgICAgICBpZiAoYm9keSAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXNwb25zZUtleSA9IEdldFN0cmluZyhib2R5LCAia2V5IikgPz8gR2V0U3RyaW5nKGJvZHksICJLZXkiKTsKCiAgICAgICAgICAgICAgICBkeW5hbWljIHNsb3RzQ29udGFpbmVyID0gbnVsbDsKCiAgICAgICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkoYm9keSwgImdldEF2YWlsYWJsZVNsb3RzIikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc2xvdHNDb250YWluZXIgPSBib2R5LmdldEF2YWlsYWJsZVNsb3RzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBkYXRhTm9kZSA9IEhhc1Byb3BlcnR5KGJvZHksICJkYXRhIikgPyBib2R5LmRhdGEgOiAoSGFzUHJvcGVydHkoYm9keSwgIkRhdGEiKSA/IGJvZHkuRGF0YSA6IG51bGwpOwogICAgICAgICAgICAgICAgICAgIGlmIChkYXRhTm9kZSAhPSBudWxsICYmIEhhc1Byb3BlcnR5KGRhdGFOb2RlLCAiZ2V0QXZhaWxhYmxlU2xvdHMiKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RzQ29udGFpbmVyID0gZGF0YU5vZGUuZ2V0QXZhaWxhYmxlU2xvdHM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFOb2RlICE9IG51bGwgJiYgSGFzUHJvcGVydHkoZGF0YU5vZGUsICJhdmFpbGFibGVTbG90cyIpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2xvdHNDb250YWluZXIgPSBkYXRhTm9kZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHNsb3RzQ29udGFpbmVyICE9IG51bGwgJiYgSGFzUHJvcGVydHkoc2xvdHNDb250YWluZXIsICJhdmFpbGFibGVTbG90cyIpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBhdmFpbGFibGVTbG90cyA9IHNsb3RzQ29udGFpbmVyLmF2YWlsYWJsZVNsb3RzOwogICAgICAgICAgICAgICAgICAgIHJlc29sdmVkU2xvdHMgPSBhdmFpbGFibGVTbG90czsKICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlU2xvdHMgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gYXZhaWxhYmxlU2xvdHMgYXMgSUVudW1lcmFibGU8b2JqZWN0PjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIHMgaW4gbGlzdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdFN0ciA9IHM/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3RTdHIgPT0gcmVxdWVzdGVkU2xvdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGV0YWlsTXNnID0gR2V0U3RyaW5nKGJvZHksICJkZXRhaWwiKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGRldGFpbE1zZykpCiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBHZXRBdmFpbGFibGVTbG90c0V4Y2VwdGlvbihkZXRhaWxNc2cpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUtleSA9PSBudWxsICYmIEhhc1Byb3BlcnR5KGJvZHksICJpc1N1Y2Nlc3MiKSAmJiBib2R5LmlzU3VjY2VzcyA9PSBmYWxzZSkKICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc2xvdENoZWNrUmVzdWx0ID0gbmV3CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHJlc3BvbnNlS2V5ID8/IChhdmFpbGFibGUgPyAiYXZhaWxhYmxlLXNsb3RzLXN1Y2Nlc3MiIDogInNsb3QtdW5hdmFpbGFibGUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2xvdHMgPSByZXNvbHZlZFNsb3RzCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKCiAgICAgICAgfQogICAgICAgIGNhdGNoIChHZXRBdmFpbGFibGVTbG90c0V4Y2VwdGlvbikKICAgICAgICB7CiAgICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHNsb3RDaGVja1Jlc3VsdCA9IG5ldwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9ICJvdXRwdXQtZXJyb3IiLAogICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGV4Lk1lc3NhZ2UKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIFRpbWVab25lSW5mbyBSZXNvbHZlQnVzaW5lc3NUaW1lWm9uZSgpCiAgICB7CiAgICAgICAgdmFyIGlkID0gR2V0Q29uZmlnVmFsdWUoIkFwcG9pbnRtZW50czpUaW1lWm9uZSIpID8/IEdldENvbmZpZ1ZhbHVlKCJBUFBPSU5UTUVOVF9USU1FWk9ORSIpOwogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKGlkKSkKICAgICAgICAgICAgaWQgPSAiRXVyb3BlL0lzdGFuYnVsIjsKCiAgICAgICAgdHJ5IHsgcmV0dXJuIFRpbWVab25lSW5mby5GaW5kU3lzdGVtVGltZVpvbmVCeUlkKGlkLlRyaW0oKSk7IH0gY2F0Y2ggeyB9CiAgICAgICAgdHJ5IHsgcmV0dXJuIFRpbWVab25lSW5mby5GaW5kU3lzdGVtVGltZVpvbmVCeUlkKCJUdXJrZXkgU3RhbmRhcmQgVGltZSIpOyB9IGNhdGNoIHsgfQogICAgICAgIHJldHVybiBUaW1lWm9uZUluZm8uQ3JlYXRlQ3VzdG9tVGltZVpvbmUoIlRSVCIsIFRpbWVTcGFuLkZyb21Ib3VycygzKSwgIlRSVCAoVVRDKzMpIiwgIlRSVCAoVVRDKzMpIik7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgRGF0ZVRpbWUgQ29udmVydFRvVGltZVpvbmUoRGF0ZVRpbWUgZHQsIHN0cmluZyBvcmlnaW5hbCwgVGltZVpvbmVJbmZvIHR6KQogICAgewogICAgICAgIGlmIChkdC5LaW5kID09IERhdGVUaW1lS2luZC5VdGMpCiAgICAgICAgICAgIHJldHVybiBUaW1lWm9uZUluZm8uQ29udmVydFRpbWVGcm9tVXRjKGR0LCB0eik7CgogICAgICAgIGlmIChEYXRlVGltZU9mZnNldC5UcnlQYXJzZShvcmlnaW5hbCwgb3V0IHZhciBkdG8pKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHV0YyA9IGR0by5VdGNEYXRlVGltZTsKICAgICAgICAgICAgcmV0dXJuIFRpbWVab25lSW5mby5Db252ZXJ0VGltZUZyb21VdGModXRjLCB0eik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZHQ7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0K"
279
- }
280
241
  }
281
242
  ]
282
243
  },
283
244
  "states": [
284
245
  {
285
246
  "key": "appointment-form",
286
- "stateType": 1,
247
+ "stateType": 2,
287
248
  "versionStrategy": "Minor",
288
249
  "labels": [
289
250
  {
@@ -372,7 +333,7 @@
372
333
  },
373
334
  {
374
335
  "key": "validating",
375
- "stateType": 2,
336
+ "stateType": 1,
376
337
  "versionStrategy": "Minor",
377
338
  "labels": [
378
339
  {
@@ -384,6 +345,87 @@
384
345
  "language": "tr-TR"
385
346
  }
386
347
  ],
348
+ "onEntries": [
349
+ {
350
+ "order": 1,
351
+ "task": {
352
+ "domain": "morph-touch",
353
+ "flow": "sys-tasks",
354
+ "key": "validate-date-for-rezervation",
355
+ "version": "1.0.0"
356
+ },
357
+ "mapping": {
358
+ "location": "./src/ValidateDateForRezervationMapping.csx",
359
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwp1c2luZyBCQlQuV29ya2Zsb3cuU2NyaXB0aW5nOwp1c2luZyBCQlQuV29ya2Zsb3cuRGVmaW5pdGlvbnM7CgovLy8gPHN1bW1hcnk+Ci8vLyBTY3JpcHQgVGFzayAodHlwZSA3KSBtYXBwaW5nIGZvciB2YWxpZGF0ZS1kYXRlLWZvci1yZXplcnZhdGlvbi4KLy8vIFZhbGlkYXRlcyBzdGFydERhdGVUaW1lIGFuZCBlbmREYXRlVGltZSBmcm9tIHJlemVydmF0aW9uIGluc3RhbmNlIGRhdGEuCi8vLyBUaHJvd3MgQXJndW1lbnRFeGNlcHRpb24gaWYgZGF0ZSBpcyBpbiB0aGUgcGFzdCBvciBpbnZhbGlkOyBvdGhlcndpc2UgcmV0dXJucyBzdWNjZXNzLgovLy8gUnVucyBiZWZvcmUgdmFsaWRhdGUtc2xvdC1mb3ItcmV6ZXJ2YXRpb24gdG8gYXZvaWQgY2FsbGluZyBnZXQtYXZhaWxhYmxlLXNsb3RzIHdpdGggaW52YWxpZCBkYXRlLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgVmFsaWRhdGVEYXRlRm9yUmV6ZXJ2YXRpb25NYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICBpZiAoZGF0YSA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiSW5zdGFuY2UgZGF0YSBpcyByZXF1aXJlZC4iKTsKCiAgICAgICAgdmFyIHN0YXJ0RGF0ZVRpbWVTdHIgPSBHZXRTdHJpbmcoZGF0YSwgInN0YXJ0RGF0ZVRpbWUiKTsKICAgICAgICB2YXIgZW5kRGF0ZVRpbWVTdHIgPSBHZXRTdHJpbmcoZGF0YSwgImVuZERhdGVUaW1lIik7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHN0YXJ0RGF0ZVRpbWVTdHIpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KGVuZERhdGVUaW1lU3RyKSkKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJzdGFydERhdGVUaW1lIGFuZCBlbmREYXRlVGltZSBhcmUgcmVxdWlyZWQuIiwgImRhdGUiKTsKCiAgICAgICAgRGF0ZVRpbWUgc3RhcnREdDsKICAgICAgICBpZiAoIVRyeVBhcnNlVG9VdGMoc3RhcnREYXRlVGltZVN0ciwgb3V0IHN0YXJ0RHQpKQogICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgc3RhcnREYXRlVGltZSBmb3JtYXQuIiwgInN0YXJ0RGF0ZVRpbWUiKTsKICAgICAgICBEYXRlVGltZSBlbmREdDsKICAgICAgICBpZiAoIVRyeVBhcnNlVG9VdGMoZW5kRGF0ZVRpbWVTdHIsIG91dCBlbmREdCkpCiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBlbmREYXRlVGltZSBmb3JtYXQuIiwgImVuZERhdGVUaW1lIik7CgogICAgICAgIHZhciBub3cgPSBEYXRlVGltZS5VdGNOb3c7CiAgICAgICAgaWYgKHN0YXJ0RHQgPCBub3cgfHwgZW5kRHQgPCBub3cpCiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigiRGF0ZSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QuIiwgImRhdGUiKTsKICAgICAgICBpZiAoZW5kRHQgPD0gc3RhcnREdCkKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJlbmREYXRlVGltZSBtdXN0IGJlIGFmdGVyIHN0YXJ0RGF0ZVRpbWUuIiwgImRhdGUiKTsKCiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IE91dHB1dEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlKCkpOwogICAgfQoKICAgIHByaXZhdGUgYm9vbCBUcnlQYXJzZVRvVXRjKHN0cmluZyBkYXRlU3RyLCBvdXQgRGF0ZVRpbWUgdXRjRGF0ZVRpbWUpCiAgICB7CiAgICAgICAgdXRjRGF0ZVRpbWUgPSBkZWZhdWx0OwogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShkYXRlU3RyKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChEYXRlVGltZU9mZnNldC5UcnlQYXJzZShkYXRlU3RyLAogICAgICAgICAgICBTeXN0ZW0uR2xvYmFsaXphdGlvbi5DdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlLAogICAgICAgICAgICBTeXN0ZW0uR2xvYmFsaXphdGlvbi5EYXRlVGltZVN0eWxlcy5Ob25lLCBvdXQgdmFyIGR0bykpCiAgICAgICAgewogICAgICAgICAgICB1dGNEYXRlVGltZSA9IGR0by5VdGNEYXRlVGltZTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBwcml2YXRlIHN0cmluZyBHZXRTdHJpbmcoZHluYW1pYyBvYmosIHN0cmluZyBuYW1lKQogICAgewogICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkob2JqLCBuYW1lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHYgPSBHZXRQcm9wZXJ0eVZhbHVlKG9iaiwgbmFtZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdj8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfQo="
360
+ },
361
+ "errorBoundary": {
362
+ "onError": [
363
+ {
364
+ "action": 2,
365
+ "errorCodes": [
366
+ "*"
367
+ ],
368
+ "transition": "date-invalid",
369
+ "priority": 1
370
+ }
371
+ ]
372
+ }
373
+ },
374
+ {
375
+ "order": 2,
376
+ "task": {
377
+ "domain": "morph-touch",
378
+ "flow": "sys-tasks",
379
+ "key": "check-duplicate-rezervation",
380
+ "version": "1.0.0"
381
+ },
382
+ "mapping": {
383
+ "location": "./src/CheckDuplicateRezervationMapping.csx",
384
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgY2hlY2stZHVwbGljYXRlLXJlemVydmF0aW9uIChEYXByU2VydmljZVRhc2sgLSBUeXBlIDMpLgovLy8gUXVlcmllcyByZXplcnZhdGlvbiB3b3JrZmxvdyBpbnN0YW5jZXMgdG8gZW5mb3JjZSB0d28gcnVsZXM6Ci8vLyAxLiBBIHVzZXIgY2FuIGhhdmUgYXQgbW9zdCAyIHJlc2VydmF0aW9ucyBpbiBjb25maXJtZWQgc3RhdGVzIChhY3RpdmUsIHVwZGF0ZS1jb250cm9sLCBjaGFuZ2UtYWR2aXNvciwgY2FuLXN0YXJ0LW1lZXRpbmcsIGFjY2VwdC10ZXJtcykuCi8vLyAyLiBBIHVzZXIgY2Fubm90IGhhdmUgdHdvIHJlc2VydmF0aW9ucyB3aXRoIG92ZXJsYXBwaW5nIHRpbWUgc2xvdHMuCi8vLwovLy8gRmxvdzoKLy8vIDEuIElucHV0SGFuZGxlcjogQnVpbGRzIHF1ZXJ5IHRvIGZpbmQgYWxsIGFjdGl2ZSByZXNlcnZhdGlvbnMgZm9yIHRoZSBzYW1lIHVzZXIuCi8vLyAyLiBPdXRwdXRIYW5kbGVyOiBDaGVja3MgY291bnQgKG1heCAyKSBhbmQgdGltZSBvdmVybGFwOyB0aHJvd3MgZXhjZXB0aW9uIG9uIHZpb2xhdGlvbi4KLy8vICAgIEV4Y2VwdGlvbiBmYWlscyB0aGUgdHJhbnNpdGlvbjsgaW5zdGFuY2Ugc3RheXMgaW4gaXRzIGN1cnJlbnQgc3RhdGUuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBDaGVja0R1cGxpY2F0ZVJlemVydmF0aW9uTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgc2VydmljZVRhc2sgPSB0YXNrIGFzIERhcHJTZXJ2aWNlVGFzazsKICAgICAgICBpZiAoc2VydmljZVRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIlRhc2sgbXVzdCBiZSBhIERhcHJTZXJ2aWNlVGFzayIpOwoKICAgICAgICB2YXIgYXBwSWQgPSBHZXRDb25maWdWYWx1ZSgiREFQUl9BUFBfSUQiKTsKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGFwcElkKSkKICAgICAgICAgICAgc2VydmljZVRhc2suU2V0QXBwSWQoYXBwSWQpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCB8fCAhSGFzUHJvcGVydHkoZGF0YSwgInVzZXIiKSB8fCBkYXRhLnVzZXIgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIk1BWF9SRVpFUlZBVElPTjogVXNlciBmaWVsZCBpcyByZXF1aXJlZCBmb3IgZHVwbGljYXRlIGNoZWNrIik7CgogICAgICAgIHZhciB1c2VyID0gZGF0YS51c2VyLlRvU3RyaW5nKCk7CiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBjb250ZXh0Lkluc3RhbmNlPy5LZXkgPz8gIiI7CgogICAgICAgIHZhciB1c2VyRXNjYXBlZCA9IHVzZXIuUmVwbGFjZSgiXFwiLCAiXFxcXCIpLlJlcGxhY2UoIlwiIiwgIlxcXCIiKTsKICAgICAgICB2YXIga2V5RXNjYXBlZCA9IGN1cnJlbnRLZXkuUmVwbGFjZSgiXFwiLCAiXFxcXCIpLlJlcGxhY2UoIlwiIiwgIlxcXCIiKTsKCiAgICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gbmV3IExpc3Q8c3RyaW5nPgogICAgICAgIHsKICAgICAgICAgICAgInBhZ2VTaXplPTEwIiwKICAgICAgICAgICAgImZpbHRlcj0iICsKICAgICAgICAgICAgICAgICJ7XCJhbmRcIjpbIiArCiAgICAgICAgICAgICAgICAgICAgIntcImF0dHJpYnV0ZXNcIjp7XCJ1c2VyXCI6e1wiZXFcIjpcIiIgKyB1c2VyRXNjYXBlZCArICJcIn19fSwiICsKICAgICAgICAgICAgICAgICAgICAie1wia2V5XCI6e1wibmVcIjpcIiIgKyBrZXlFc2NhcGVkICsgIlwifX0sIiArCiAgICAgICAgICAgICAgICAgICAgIntcImN1cnJlbnRTdGF0ZVwiOntcImVxXCI6XCIiICsgImFjdGl2ZSIgKyAiXCJ9fSwiICArCiAgICAgICAgICAgICAgICAiXX0iCiAgICAgICAgfTsKCiAgICAgICAgc2VydmljZVRhc2suU2V0UXVlcnlTdHJpbmcoc3RyaW5nLkpvaW4oIiYiLCBxdWVyeVBhcmFtcykpOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHJlc3BvbnNlID0gY29udGV4dC5Cb2R5OwoKICAgICAgICBpZiAocmVzcG9uc2U/LmlzU3VjY2VzcyA9PSBmYWxzZSkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSByZXNwb25zZT8uZXJyb3JNZXNzYWdlPy5Ub1N0cmluZygpID8/ICJTZXJ2aWNlIGNhbGwgZmFpbGVkIjsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigkIlNFUlZJQ0VfRVJST1I6IHtlcnJvck1lc3NhZ2V9Iik7CiAgICAgICAgfQoKICAgICAgICB2YXIgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2U/LmRhdGE7CiAgICAgICAgdmFyIGl0ZW1zID0gcmVzcG9uc2VEYXRhPy5pdGVtczsKCiAgICAgICAgaWYgKGl0ZW1zID09IG51bGwgfHwgaXRlbXMuQ291bnQgPT0gMCkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CgogICAgICAgIGludCBjb3VudCA9IGl0ZW1zLkNvdW50OwoKICAgICAgICBpZiAoY291bnQgPj0gMikKICAgICAgICB7CiAgICAgICAgICAgIHZhciB1c2VyID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YT8udXNlcj8uVG9TdHJpbmcoKSA/PyAidW5rbm93biI7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJCJNQVhfUkVaRVJWQVRJT046IFVzZXIgJ3t1c2VyfScgYWxyZWFkeSBoYXMge2NvdW50fSBhY3RpdmUgcmVzZXJ2YXRpb25zLiBNYXhpbXVtIGFsbG93ZWQgaXMgMi4iKTsKICAgICAgICB9CgogICAgICAgIHZhciBpbnN0YW5jZURhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIHZhciBuZXdTdGFydFN0ciA9IEdldFN0cmluZyhpbnN0YW5jZURhdGEsICJzdGFydERhdGVUaW1lIik7CiAgICAgICAgdmFyIG5ld0VuZFN0ciA9IEdldFN0cmluZyhpbnN0YW5jZURhdGEsICJlbmREYXRlVGltZSIpOwoKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KG5ld1N0YXJ0U3RyKSAmJiAhc3RyaW5nLklzTnVsbE9yRW1wdHkobmV3RW5kU3RyKSkKICAgICAgICB7CiAgICAgICAgICAgIERhdGVUaW1lIG5ld1N0YXJ0ID0gZGVmYXVsdCwgbmV3RW5kID0gZGVmYXVsdDsKICAgICAgICAgICAgaWYgKFRyeVBhcnNlVG9VdGMobmV3U3RhcnRTdHIsIG91dCBuZXdTdGFydCkgJiYgVHJ5UGFyc2VUb1V0YyhuZXdFbmRTdHIsIG91dCBuZXdFbmQpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgaXRlbSBpbiBpdGVtcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nU3RhcnRTdHIgPSBHZXROZXN0ZWRTdHJpbmcoaXRlbSwgImF0dHJpYnV0ZXMiLCAic3RhcnREYXRlVGltZSIpOwogICAgICAgICAgICAgICAgICAgIHZhciBleGlzdGluZ0VuZFN0ciA9IEdldE5lc3RlZFN0cmluZyhpdGVtLCAiYXR0cmlidXRlcyIsICJlbmREYXRlVGltZSIpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoZXhpc3RpbmdTdGFydFN0cikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoZXhpc3RpbmdFbmRTdHIpKQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWUgZXhpc3RpbmdTdGFydCA9IGRlZmF1bHQsIGV4aXN0aW5nRW5kID0gZGVmYXVsdDsKICAgICAgICAgICAgICAgICAgICBpZiAoIVRyeVBhcnNlVG9VdGMoZXhpc3RpbmdTdGFydFN0ciwgb3V0IGV4aXN0aW5nU3RhcnQpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICFUcnlQYXJzZVRvVXRjKGV4aXN0aW5nRW5kU3RyLCBvdXQgZXhpc3RpbmdFbmQpKQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nU3RhcnQgPCBuZXdFbmQgJiYgZXhpc3RpbmdFbmQgPiBuZXdTdGFydCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleGlzdGluZ0tleSA9IEhhc1Byb3BlcnR5KGl0ZW0sICJrZXkiKSA/IGl0ZW0ua2V5Py5Ub1N0cmluZygpIDogInVua25vd24iOwogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCJUSU1FX09WRVJMQVA6IFJlcXVlc3RlZCB0aW1lIHtuZXdTdGFydFN0cn0gLSB7bmV3RW5kU3RyfSBvdmVybGFwcyB3aXRoIGV4aXN0aW5nIHJlc2VydmF0aW9uICd7ZXhpc3RpbmdLZXl9JyAoe2V4aXN0aW5nU3RhcnRTdHJ9IC0ge2V4aXN0aW5nRW5kU3RyfSkuIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwcml2YXRlIGJvb2wgVHJ5UGFyc2VUb1V0YyhzdHJpbmcgZGF0ZVN0ciwgb3V0IERhdGVUaW1lIHV0Y0RhdGVUaW1lKQogICAgewogICAgICAgIHV0Y0RhdGVUaW1lID0gZGVmYXVsdDsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoZGF0ZVN0cikpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoRGF0ZVRpbWVPZmZzZXQuVHJ5UGFyc2UoZGF0ZVN0ciwKICAgICAgICAgICAgU3lzdGVtLkdsb2JhbGl6YXRpb24uQ3VsdHVyZUluZm8uSW52YXJpYW50Q3VsdHVyZSwKICAgICAgICAgICAgU3lzdGVtLkdsb2JhbGl6YXRpb24uRGF0ZVRpbWVTdHlsZXMuTm9uZSwgb3V0IHZhciBkdG8pKQogICAgICAgIHsKICAgICAgICAgICAgdXRjRGF0ZVRpbWUgPSBkdG8uVXRjRGF0ZVRpbWU7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0TmVzdGVkU3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgcGFyZW50LCBzdHJpbmcgY2hpbGQpCiAgICB7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShvYmosIHBhcmVudCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBuZXN0ZWQgPSBHZXRQcm9wZXJ0eVZhbHVlKG9iaiwgcGFyZW50KTsKICAgICAgICAgICAgICAgIGlmIChuZXN0ZWQgIT0gbnVsbCAmJiBIYXNQcm9wZXJ0eShuZXN0ZWQsIGNoaWxkKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUobmVzdGVkLCBjaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0K"
385
+ },
386
+ "errorBoundary": {
387
+ "onError": [
388
+ {
389
+ "action": 2,
390
+ "errorCodes": [
391
+ "MAX_REZERVATION"
392
+ ],
393
+ "transition": "reject-duplicate-rezervation",
394
+ "priority": 1
395
+ },
396
+ {
397
+ "action": 2,
398
+ "errorCodes": [
399
+ "TIME_OVERLAP"
400
+ ],
401
+ "transition": "reject-duplicate-rezervation",
402
+ "priority": 2
403
+ },
404
+ {
405
+ "action": 2,
406
+ "errorCodes": [
407
+ "*"
408
+ ],
409
+ "transition": "reject-duplicate-rezervation",
410
+ "priority": 999
411
+ }
412
+ ]
413
+ }
414
+ },
415
+ {
416
+ "order": 3,
417
+ "task": {
418
+ "domain": "morph-touch",
419
+ "flow": "sys-tasks",
420
+ "key": "validate-slot-for-rezervation",
421
+ "version": "1.0.0"
422
+ },
423
+ "mapping": {
424
+ "location": "./src/ValidateSlotForRezervationMapping.csx",
425
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIHZhbGlkYXRlLXNsb3QtZm9yLXJlemVydmF0aW9uIHRhc2suCi8vLyBJbnZva2VzIGdldC1hdmFpbGFibGUtc2xvdHMgZnVuY3Rpb24gd2l0aCBhZHZpc29yIGFuZCBkYXRlIGZyb20gcmV6ZXJ2YXRpb24gaW5zdGFuY2UsCi8vLyB0aGVuIGNoZWNrcyBpZiB0aGUgcmVxdWVzdGVkIHN0YXJ0RGF0ZVRpbWUtZW5kRGF0ZVRpbWUgc2xvdCBpcyBpbiB0aGUgYXZhaWxhYmxlIHNsb3RzIGxpc3QuCi8vLyBPdXRwdXQ6IHNsb3RDaGVja1Jlc3VsdCB7IGF2YWlsYWJsZTogYm9vbCwga2V5Pzogc3RyaW5nIH0gZm9yIHVzZSBieSB2YWxpZGF0aW5nIHN0YXRlIGF1dG8gdHJhbnNpdGlvbnMuCi8vLyA8L3N1bW1hcnk+CmludGVybmFsIHNlYWxlZCBjbGFzcyBHZXRBdmFpbGFibGVTbG90c0V4Y2VwdGlvbiA6IEV4Y2VwdGlvbgp7CiAgICBwdWJsaWMgR2V0QXZhaWxhYmxlU2xvdHNFeGNlcHRpb24oc3RyaW5nIG1lc3NhZ2UpIDogYmFzZShtZXNzYWdlKSB7IH0KfQoKcHVibGljIGNsYXNzIFZhbGlkYXRlU2xvdEZvclJlemVydmF0aW9uTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBzZXJ2aWNlVGFzayA9IHRhc2sgYXMgRGFwclNlcnZpY2VUYXNrOwogICAgICAgICAgICBpZiAoc2VydmljZVRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEYXByU2VydmljZVRhc2siKTsKCiAgICAgICAgICAgIHZhciBhcHBJZCA9IEdldENvbmZpZ1ZhbHVlKCJEQVBSX0FQUF9JRCIpOwogICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGFwcElkKSkKICAgICAgICAgICAgICAgIHNlcnZpY2VUYXNrLlNldEFwcElkKGFwcElkKTsKCiAgICAgICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJJbnN0YW5jZSBkYXRhIGlzIHJlcXVpcmVkIik7CgogICAgICAgICAgICB2YXIgYWR2aXNvciA9IEdldFN0cmluZyhkYXRhLCAiYWR2aXNvciIpOwogICAgICAgICAgICB2YXIgc3RhcnREYXRlVGltZVN0ciA9IEdldFN0cmluZyhkYXRhLCAic3RhcnREYXRlVGltZSIpOwogICAgICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoYWR2aXNvcikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoc3RhcnREYXRlVGltZVN0cikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0gInZhbGlkYXRpb24tZXJyb3IiLAogICAgICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RDaGVja1Jlc3VsdCA9IG5ldyB7IGF2YWlsYWJsZSA9IGZhbHNlLCBrZXkgPSAidmFsaWRhdGlvbi1lcnJvciIgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBEYXRlVGltZSBzdGFydERhdGVUaW1lOwogICAgICAgICAgICBpZiAoIVRyeVBhcnNlVG9VdGMoc3RhcnREYXRlVGltZVN0ciwgb3V0IHN0YXJ0RGF0ZVRpbWUpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9ICJ2YWxpZGF0aW9uLWVycm9yIiwKICAgICAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzbG90Q2hlY2tSZXN1bHQgPSBuZXcgeyBhdmFpbGFibGUgPSBmYWxzZSwga2V5ID0gInZhbGlkYXRpb24tZXJyb3IiIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGRhdGVTdHIgPSBzdGFydERhdGVUaW1lLlRvU3RyaW5nKCJ5eXl5LU1NLWRkIik7CiAgICAgICAgICAgIHZhciBxdWVyeVBhcmFtcyA9IG5ldyBMaXN0PHN0cmluZz4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImFkdmlzb3JJZD0iICsgVXJpLkVzY2FwZURhdGFTdHJpbmcoYWR2aXNvciksCiAgICAgICAgICAgICAgICAiZGF0ZT0iICsgVXJpLkVzY2FwZURhdGFTdHJpbmcoZGF0ZVN0cikKICAgICAgICAgICAgfTsKICAgICAgICAgICAgc2VydmljZVRhc2suU2V0UXVlcnlTdHJpbmcoc3RyaW5nLkpvaW4oIiYiLCBxdWVyeVBhcmFtcykpOwoKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPSAiaW5wdXQtZXJyb3IiLAogICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHNsb3RDaGVja1Jlc3VsdCA9IG5ldwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9ICJpbnB1dC1lcnJvciIsCiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXguTWVzc2FnZQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyAgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgIHZhciBib2R5ID0gY29udGV4dC5Cb2R5OwogICAgICAgICAgICBpZiAoYm9keSAhPSBudWxsICYmIEhhc1Byb3BlcnR5KGJvZHksICJpc1N1Y2Nlc3MiKSAmJiBib2R5LmlzU3VjY2VzcyA9PSBmYWxzZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIGVyck5vZGUgPSBIYXNQcm9wZXJ0eShib2R5LCAiZGF0YSIpID8gYm9keS5kYXRhIDogbnVsbDsKICAgICAgICAgICAgICAgIHZhciBkZXRhaWwgPSBHZXRTdHJpbmcoZXJyTm9kZSwgImRldGFpbCIpID8/IEdldFN0cmluZyhib2R5LCAiZXJyb3JNZXNzYWdlIikgPz8gR2V0U3RyaW5nKGJvZHksICJkZXRhaWwiKTsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbihkZXRhaWwgPz8gIkZ1bmN0aW9uIGNhbGwgZmFpbGVkIiwiIik7CiAgICAgICAgICAgIH0KICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBEYXRhID0gbmV3IHsgc2xvdENoZWNrUmVzdWx0ID0gbmV3IHsgYXZhaWxhYmxlID0gZmFsc2UsIGtleSA9ICJuby1pbnN0YW5jZS1kYXRhIiB9IH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgc3RhcnREYXRlVGltZVN0ciA9IEdldFN0cmluZyhkYXRhLCAic3RhcnREYXRlVGltZSIpOwogICAgICAgICAgICB2YXIgZW5kRGF0ZVRpbWVTdHIgPSBHZXRTdHJpbmcoZGF0YSwgImVuZERhdGVUaW1lIik7CiAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShzdGFydERhdGVUaW1lU3RyKSB8fCBzdHJpbmcuSXNOdWxsT3JFbXB0eShlbmREYXRlVGltZVN0cikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgRGF0YSA9IG5ldyB7IHNsb3RDaGVja1Jlc3VsdCA9IG5ldyB7IGF2YWlsYWJsZSA9IGZhbHNlLCBrZXkgPSAidmFsaWRhdGlvbi1lcnJvciIgfSB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgRGF0ZVRpbWUgc3RhcnREdFV0YyA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICBEYXRlVGltZSBlbmREdFV0YyA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3RhcnREdFV0YyA9IFBhcnNlVG9VdGMoc3RhcnREYXRlVGltZVN0cik7CiAgICAgICAgICAgICAgICBlbmREdFV0YyA9IFBhcnNlVG9VdGMoZW5kRGF0ZVRpbWVTdHIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgRGF0YSA9IG5ldyB7IHNsb3RDaGVja1Jlc3VsdCA9IG5ldyB7IGF2YWlsYWJsZSA9IGZhbHNlLCBrZXkgPSAidmFsaWRhdGlvbi1lcnJvciIgfSB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHR6ID0gUmVzb2x2ZUJ1c2luZXNzVGltZVpvbmUoKTsKICAgICAgICAgICAgdmFyIGxvY2FsU3RhcnQgPSBUaW1lWm9uZUluZm8uQ29udmVydFRpbWVGcm9tVXRjKHN0YXJ0RHRVdGMsIHR6KTsKICAgICAgICAgICAgdmFyIGxvY2FsRW5kID0gVGltZVpvbmVJbmZvLkNvbnZlcnRUaW1lRnJvbVV0YyhlbmREdFV0YywgdHopOwogICAgICAgICAgICB2YXIgcmVxdWVzdGVkU2xvdCA9IGxvY2FsU3RhcnQuVG9TdHJpbmcoIkhIOm1tIikgKyAiLSIgKyBsb2NhbEVuZC5Ub1N0cmluZygiSEg6bW0iKTsKCiAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gZmFsc2U7CiAgICAgICAgICAgIHN0cmluZyByZXNwb25zZUtleSA9IG51bGw7CiAgICAgICAgICAgIGR5bmFtaWMgcmVzb2x2ZWRTbG90cyA9IG51bGw7CgogICAgICAgICAgICBpZiAoYm9keSAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXNwb25zZUtleSA9IEdldFN0cmluZyhib2R5LCAia2V5IikgPz8gR2V0U3RyaW5nKGJvZHksICJLZXkiKTsKCiAgICAgICAgICAgICAgICBkeW5hbWljIHNsb3RzQ29udGFpbmVyID0gbnVsbDsKCiAgICAgICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkoYm9keSwgImdldEF2YWlsYWJsZVNsb3RzIikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc2xvdHNDb250YWluZXIgPSBib2R5LmdldEF2YWlsYWJsZVNsb3RzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBkYXRhTm9kZSA9IEhhc1Byb3BlcnR5KGJvZHksICJkYXRhIikgPyBib2R5LmRhdGEgOiAoSGFzUHJvcGVydHkoYm9keSwgIkRhdGEiKSA/IGJvZHkuRGF0YSA6IG51bGwpOwogICAgICAgICAgICAgICAgICAgIGlmIChkYXRhTm9kZSAhPSBudWxsICYmIEhhc1Byb3BlcnR5KGRhdGFOb2RlLCAiZ2V0QXZhaWxhYmxlU2xvdHMiKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RzQ29udGFpbmVyID0gZGF0YU5vZGUuZ2V0QXZhaWxhYmxlU2xvdHM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFOb2RlICE9IG51bGwgJiYgSGFzUHJvcGVydHkoZGF0YU5vZGUsICJhdmFpbGFibGVTbG90cyIpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2xvdHNDb250YWluZXIgPSBkYXRhTm9kZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHNsb3RzQ29udGFpbmVyICE9IG51bGwgJiYgSGFzUHJvcGVydHkoc2xvdHNDb250YWluZXIsICJhdmFpbGFibGVTbG90cyIpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBhdmFpbGFibGVTbG90cyA9IHNsb3RzQ29udGFpbmVyLmF2YWlsYWJsZVNsb3RzOwogICAgICAgICAgICAgICAgICAgIHJlc29sdmVkU2xvdHMgPSBhdmFpbGFibGVTbG90czsKICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlU2xvdHMgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gYXZhaWxhYmxlU2xvdHMgYXMgSUVudW1lcmFibGU8b2JqZWN0PjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIHMgaW4gbGlzdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdFN0ciA9IHM/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3RTdHIgPT0gcmVxdWVzdGVkU2xvdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGV0YWlsTXNnID0gR2V0U3RyaW5nKGJvZHksICJkZXRhaWwiKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGRldGFpbE1zZykpCiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBHZXRBdmFpbGFibGVTbG90c0V4Y2VwdGlvbihkZXRhaWxNc2cpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUtleSA9PSBudWxsICYmIEhhc1Byb3BlcnR5KGJvZHksICJpc1N1Y2Nlc3MiKSAmJiBib2R5LmlzU3VjY2VzcyA9PSBmYWxzZSkKICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc2xvdENoZWNrUmVzdWx0ID0gbmV3CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHJlc3BvbnNlS2V5ID8/IChhdmFpbGFibGUgPyAiYXZhaWxhYmxlLXNsb3RzLXN1Y2Nlc3MiIDogInNsb3QtdW5hdmFpbGFibGUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2xvdHMgPSByZXNvbHZlZFNsb3RzCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKCiAgICAgICAgfQogICAgICAgIGNhdGNoIChHZXRBdmFpbGFibGVTbG90c0V4Y2VwdGlvbikKICAgICAgICB7CiAgICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHNsb3RDaGVja1Jlc3VsdCA9IG5ldwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9ICJvdXRwdXQtZXJyb3IiLAogICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGV4Lk1lc3NhZ2UKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIFRpbWVab25lSW5mbyBSZXNvbHZlQnVzaW5lc3NUaW1lWm9uZSgpCiAgICB7CiAgICAgICAgdmFyIGlkID0gR2V0Q29uZmlnVmFsdWUoIkFwcG9pbnRtZW50czpUaW1lWm9uZSIpID8/IEdldENvbmZpZ1ZhbHVlKCJBUFBPSU5UTUVOVF9USU1FWk9ORSIpOwogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKGlkKSkKICAgICAgICAgICAgaWQgPSAiRXVyb3BlL0lzdGFuYnVsIjsKCiAgICAgICAgdHJ5IHsgcmV0dXJuIFRpbWVab25lSW5mby5GaW5kU3lzdGVtVGltZVpvbmVCeUlkKGlkLlRyaW0oKSk7IH0gY2F0Y2ggeyB9CiAgICAgICAgdHJ5IHsgcmV0dXJuIFRpbWVab25lSW5mby5GaW5kU3lzdGVtVGltZVpvbmVCeUlkKCJUdXJrZXkgU3RhbmRhcmQgVGltZSIpOyB9IGNhdGNoIHsgfQogICAgICAgIHJldHVybiBUaW1lWm9uZUluZm8uQ3JlYXRlQ3VzdG9tVGltZVpvbmUoIlRSVCIsIFRpbWVTcGFuLkZyb21Ib3VycygzKSwgIlRSVCAoVVRDKzMpIiwgIlRSVCAoVVRDKzMpIik7CiAgICB9CgogICAgcHJpdmF0ZSBib29sIFRyeVBhcnNlVG9VdGMoc3RyaW5nIGRhdGVTdHIsIG91dCBEYXRlVGltZSB1dGNEYXRlVGltZSkKICAgIHsKICAgICAgICB1dGNEYXRlVGltZSA9IGRlZmF1bHQ7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KGRhdGVTdHIpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKERhdGVUaW1lT2Zmc2V0LlRyeVBhcnNlKGRhdGVTdHIsCiAgICAgICAgICAgIFN5c3RlbS5HbG9iYWxpemF0aW9uLkN1bHR1cmVJbmZvLkludmFyaWFudEN1bHR1cmUsCiAgICAgICAgICAgIFN5c3RlbS5HbG9iYWxpemF0aW9uLkRhdGVUaW1lU3R5bGVzLk5vbmUsIG91dCB2YXIgZHRvKSkKICAgICAgICB7CiAgICAgICAgICAgIHV0Y0RhdGVUaW1lID0gZHRvLlV0Y0RhdGVUaW1lOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHByaXZhdGUgRGF0ZVRpbWUgUGFyc2VUb1V0YyhzdHJpbmcgZGF0ZVN0cikKICAgIHsKICAgICAgICB2YXIgZHRvID0gRGF0ZVRpbWVPZmZzZXQuUGFyc2UoZGF0ZVN0ciwKICAgICAgICAgICAgU3lzdGVtLkdsb2JhbGl6YXRpb24uQ3VsdHVyZUluZm8uSW52YXJpYW50Q3VsdHVyZSk7CiAgICAgICAgcmV0dXJuIGR0by5VdGNEYXRlVGltZTsKICAgIH0KCiAgICBwcml2YXRlIHN0cmluZyBHZXRTdHJpbmcoZHluYW1pYyBvYmosIHN0cmluZyBuYW1lKQogICAgewogICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkob2JqLCBuYW1lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHYgPSBHZXRQcm9wZXJ0eVZhbHVlKG9iaiwgbmFtZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdj8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfQo="
426
+ }
427
+ }
428
+ ],
387
429
  "transitions": [
388
430
  {
389
431
  "key": "slot-available",
@@ -424,6 +466,38 @@
424
466
  "location": "./src/SlotUnavailableRule.csx",
425
467
  "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwp1c2luZyBCQlQuV29ya2Zsb3cuU2NyaXB0aW5nOwoKLy8vIDxzdW1tYXJ5PgovLy8gQ29uZGl0aW9uIG1hcHBpbmcgZm9yIHNsb3QtdW5hdmFpbGFibGUgYXV0byB0cmFuc2l0aW9uIGluIHJlemVydmF0aW9uIHZhbGlkYXRpbmcgc3RhdGUuCi8vLyBSdWxlOiBzbG90Q2hlY2tSZXN1bHQgPT0gbnVsbCBPUiBzbG90Q2hlY2tSZXN1bHQuYXZhaWxhYmxlICE9IHRydWUKLy8vIDwvc3VtbWFyeT4KcHVibGljIGNsYXNzIFNsb3RVbmF2YWlsYWJsZVJ1bGUgOiBTY3JpcHRCYXNlLCBJQ29uZGl0aW9uTWFwcGluZwp7CiAgICBwdWJsaWMgVGFzazxib29sPiBIYW5kbGVyKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChjb250ZXh0Py5JbnN0YW5jZT8uRGF0YSA9PSBudWxsKQogICAgICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdCh0cnVlKTsKCiAgICAgICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZS5EYXRhOwogICAgICAgICAgICBpZiAoIUhhc1Byb3BlcnR5KGRhdGEsICJzbG90Q2hlY2tSZXN1bHQiKSB8fCBkYXRhLnNsb3RDaGVja1Jlc3VsdCA9PSBudWxsKQogICAgICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdCh0cnVlKTsKCiAgICAgICAgICAgIHZhciBzbG90Q2hlY2tSZXN1bHQgPSBkYXRhLnNsb3RDaGVja1Jlc3VsdDsKICAgICAgICAgICAgaWYgKCFIYXNQcm9wZXJ0eShzbG90Q2hlY2tSZXN1bHQsICJhdmFpbGFibGUiKSkKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQodHJ1ZSk7CgogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KHNsb3RDaGVja1Jlc3VsdC5hdmFpbGFibGUgIT0gdHJ1ZSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24pCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KHRydWUpOwogICAgICAgIH0KICAgIH0KfQo="
426
468
  }
469
+ },
470
+ {
471
+ "key": "date-invalid",
472
+ "target": "slot-unavailable",
473
+ "triggerType": 0,
474
+ "versionStrategy": "Minor",
475
+ "labels": [
476
+ {
477
+ "label": "Date Invalid",
478
+ "language": "en-US"
479
+ },
480
+ {
481
+ "label": "Tarih Geçersiz",
482
+ "language": "tr-TR"
483
+ }
484
+ ]
485
+ },
486
+ {
487
+ "key": "reject-duplicate-rezervation",
488
+ "target": "duplicate-rezervation",
489
+ "triggerType": 0,
490
+ "versionStrategy": "Minor",
491
+ "labels": [
492
+ {
493
+ "label": "Reject Duplicate Reservation",
494
+ "language": "en-US"
495
+ },
496
+ {
497
+ "label": "Mükerrer Rezervasyon Reddet",
498
+ "language": "tr-TR"
499
+ }
500
+ ]
427
501
  }
428
502
  ]
429
503
  },
@@ -468,7 +542,7 @@
468
542
  },
469
543
  "mapping": {
470
544
  "location": "./src/ValidateDateForRezervationMapping.csx",
471
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwp1c2luZyBCQlQuV29ya2Zsb3cuU2NyaXB0aW5nOwp1c2luZyBCQlQuV29ya2Zsb3cuRGVmaW5pdGlvbnM7CgovLy8gPHN1bW1hcnk+Ci8vLyBTY3JpcHQgVGFzayAodHlwZSA3KSBtYXBwaW5nIGZvciB2YWxpZGF0ZS1kYXRlLWZvci1yZXplcnZhdGlvbi4KLy8vIFZhbGlkYXRlcyBzdGFydERhdGVUaW1lIGFuZCBlbmREYXRlVGltZSBmcm9tIHJlemVydmF0aW9uIGluc3RhbmNlIGRhdGEuCi8vLyBUaHJvd3MgQXJndW1lbnRFeGNlcHRpb24gaWYgZGF0ZSBpcyBpbiB0aGUgcGFzdCBvciBpbnZhbGlkOyBvdGhlcndpc2UgcmV0dXJucyBzdWNjZXNzLgovLy8gUnVucyBiZWZvcmUgdmFsaWRhdGUtc2xvdC1mb3ItcmV6ZXJ2YXRpb24gdG8gYXZvaWQgY2FsbGluZyBnZXQtYXZhaWxhYmxlLXNsb3RzIHdpdGggaW52YWxpZCBkYXRlLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgVmFsaWRhdGVEYXRlRm9yUmV6ZXJ2YXRpb25NYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICBpZiAoZGF0YSA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiSW5zdGFuY2UgZGF0YSBpcyByZXF1aXJlZC4iKTsKCiAgICAgICAgdmFyIHN0YXJ0RGF0ZVRpbWVTdHIgPSBHZXRTdHJpbmcoZGF0YSwgInN0YXJ0RGF0ZVRpbWUiKTsKICAgICAgICB2YXIgZW5kRGF0ZVRpbWVTdHIgPSBHZXRTdHJpbmcoZGF0YSwgImVuZERhdGVUaW1lIik7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHN0YXJ0RGF0ZVRpbWVTdHIpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KGVuZERhdGVUaW1lU3RyKSkKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJzdGFydERhdGVUaW1lIGFuZCBlbmREYXRlVGltZSBhcmUgcmVxdWlyZWQuIiwgImRhdGUiKTsKCiAgICAgICAgRGF0ZVRpbWUgc3RhcnREdDsKICAgICAgICBpZiAoIURhdGVUaW1lLlRyeVBhcnNlKHN0YXJ0RGF0ZVRpbWVTdHIsIG91dCBzdGFydER0KSkKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHN0YXJ0RGF0ZVRpbWUgZm9ybWF0LiIsICJzdGFydERhdGVUaW1lIik7CiAgICAgICAgRGF0ZVRpbWUgZW5kRHQ7CiAgICAgICAgaWYgKCFEYXRlVGltZS5UcnlQYXJzZShlbmREYXRlVGltZVN0ciwgb3V0IGVuZER0KSkKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGVuZERhdGVUaW1lIGZvcm1hdC4iLCAiZW5kRGF0ZVRpbWUiKTsKCiAgICAgICAgdmFyIG5vdyA9IERhdGVUaW1lLlV0Y05vdzsKICAgICAgICBpZiAoc3RhcnREdCA8IG5vdyB8fCBlbmREdCA8IG5vdykKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJEYXRlIGNhbm5vdCBiZSBpbiB0aGUgcGFzdC4iLCAiZGF0ZSIpOwogICAgICAgIGlmIChlbmREdCA8PSBzdGFydER0KQogICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oImVuZERhdGVUaW1lIG11c3QgYmUgYWZ0ZXIgc3RhcnREYXRlVGltZS4iLCAiZGF0ZSIpOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0K"
545
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwp1c2luZyBCQlQuV29ya2Zsb3cuU2NyaXB0aW5nOwp1c2luZyBCQlQuV29ya2Zsb3cuRGVmaW5pdGlvbnM7CgovLy8gPHN1bW1hcnk+Ci8vLyBTY3JpcHQgVGFzayAodHlwZSA3KSBtYXBwaW5nIGZvciB2YWxpZGF0ZS1kYXRlLWZvci1yZXplcnZhdGlvbi4KLy8vIFZhbGlkYXRlcyBzdGFydERhdGVUaW1lIGFuZCBlbmREYXRlVGltZSBmcm9tIHJlemVydmF0aW9uIGluc3RhbmNlIGRhdGEuCi8vLyBUaHJvd3MgQXJndW1lbnRFeGNlcHRpb24gaWYgZGF0ZSBpcyBpbiB0aGUgcGFzdCBvciBpbnZhbGlkOyBvdGhlcndpc2UgcmV0dXJucyBzdWNjZXNzLgovLy8gUnVucyBiZWZvcmUgdmFsaWRhdGUtc2xvdC1mb3ItcmV6ZXJ2YXRpb24gdG8gYXZvaWQgY2FsbGluZyBnZXQtYXZhaWxhYmxlLXNsb3RzIHdpdGggaW52YWxpZCBkYXRlLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgVmFsaWRhdGVEYXRlRm9yUmV6ZXJ2YXRpb25NYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICBpZiAoZGF0YSA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiSW5zdGFuY2UgZGF0YSBpcyByZXF1aXJlZC4iKTsKCiAgICAgICAgdmFyIHN0YXJ0RGF0ZVRpbWVTdHIgPSBHZXRTdHJpbmcoZGF0YSwgInN0YXJ0RGF0ZVRpbWUiKTsKICAgICAgICB2YXIgZW5kRGF0ZVRpbWVTdHIgPSBHZXRTdHJpbmcoZGF0YSwgImVuZERhdGVUaW1lIik7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHN0YXJ0RGF0ZVRpbWVTdHIpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KGVuZERhdGVUaW1lU3RyKSkKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJzdGFydERhdGVUaW1lIGFuZCBlbmREYXRlVGltZSBhcmUgcmVxdWlyZWQuIiwgImRhdGUiKTsKCiAgICAgICAgRGF0ZVRpbWUgc3RhcnREdDsKICAgICAgICBpZiAoIVRyeVBhcnNlVG9VdGMoc3RhcnREYXRlVGltZVN0ciwgb3V0IHN0YXJ0RHQpKQogICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgc3RhcnREYXRlVGltZSBmb3JtYXQuIiwgInN0YXJ0RGF0ZVRpbWUiKTsKICAgICAgICBEYXRlVGltZSBlbmREdDsKICAgICAgICBpZiAoIVRyeVBhcnNlVG9VdGMoZW5kRGF0ZVRpbWVTdHIsIG91dCBlbmREdCkpCiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBlbmREYXRlVGltZSBmb3JtYXQuIiwgImVuZERhdGVUaW1lIik7CgogICAgICAgIHZhciBub3cgPSBEYXRlVGltZS5VdGNOb3c7CiAgICAgICAgaWYgKHN0YXJ0RHQgPCBub3cgfHwgZW5kRHQgPCBub3cpCiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigiRGF0ZSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QuIiwgImRhdGUiKTsKICAgICAgICBpZiAoZW5kRHQgPD0gc3RhcnREdCkKICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJlbmREYXRlVGltZSBtdXN0IGJlIGFmdGVyIHN0YXJ0RGF0ZVRpbWUuIiwgImRhdGUiKTsKCiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IE91dHB1dEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlKCkpOwogICAgfQoKICAgIHByaXZhdGUgYm9vbCBUcnlQYXJzZVRvVXRjKHN0cmluZyBkYXRlU3RyLCBvdXQgRGF0ZVRpbWUgdXRjRGF0ZVRpbWUpCiAgICB7CiAgICAgICAgdXRjRGF0ZVRpbWUgPSBkZWZhdWx0OwogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShkYXRlU3RyKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChEYXRlVGltZU9mZnNldC5UcnlQYXJzZShkYXRlU3RyLAogICAgICAgICAgICBTeXN0ZW0uR2xvYmFsaXphdGlvbi5DdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlLAogICAgICAgICAgICBTeXN0ZW0uR2xvYmFsaXphdGlvbi5EYXRlVGltZVN0eWxlcy5Ob25lLCBvdXQgdmFyIGR0bykpCiAgICAgICAgewogICAgICAgICAgICB1dGNEYXRlVGltZSA9IGR0by5VdGNEYXRlVGltZTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBwcml2YXRlIHN0cmluZyBHZXRTdHJpbmcoZHluYW1pYyBvYmosIHN0cmluZyBuYW1lKQogICAgewogICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkob2JqLCBuYW1lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHYgPSBHZXRQcm9wZXJ0eVZhbHVlKG9iaiwgbmFtZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdj8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfQo="
472
546
  }
473
547
  },
474
548
  {
@@ -481,7 +555,7 @@
481
555
  },
482
556
  "mapping": {
483
557
  "location": "./src/CheckDuplicateRezervationMapping.csx",
484
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgY2hlY2stZHVwbGljYXRlLXJlemVydmF0aW9uIChEYXByU2VydmljZVRhc2sgLSBUeXBlIDMpLgovLy8gUXVlcmllcyByZXplcnZhdGlvbiB3b3JrZmxvdyBpbnN0YW5jZXMgdG8gZW5mb3JjZSB0d28gcnVsZXM6Ci8vLyAxLiBBIHVzZXIgY2FuIGhhdmUgYXQgbW9zdCAyIHJlc2VydmF0aW9ucyBpbiBjb25maXJtZWQgc3RhdGVzIChhY3RpdmUsIHVwZGF0ZS1jb250cm9sLCBjaGFuZ2UtYWR2aXNvciwgY2FuLXN0YXJ0LW1lZXRpbmcsIGFjY2VwdC10ZXJtcykuCi8vLyAyLiBBIHVzZXIgY2Fubm90IGhhdmUgdHdvIHJlc2VydmF0aW9ucyB3aXRoIG92ZXJsYXBwaW5nIHRpbWUgc2xvdHMuCi8vLwovLy8gRmxvdzoKLy8vIDEuIElucHV0SGFuZGxlcjogQnVpbGRzIHF1ZXJ5IHRvIGZpbmQgYWxsIGFjdGl2ZSByZXNlcnZhdGlvbnMgZm9yIHRoZSBzYW1lIHVzZXIuCi8vLyAyLiBPdXRwdXRIYW5kbGVyOiBDaGVja3MgY291bnQgKG1heCAyKSBhbmQgdGltZSBvdmVybGFwOyB0aHJvd3MgZXhjZXB0aW9uIG9uIHZpb2xhdGlvbi4KLy8vICAgIEV4Y2VwdGlvbiBmYWlscyB0aGUgdHJhbnNpdGlvbjsgaW5zdGFuY2Ugc3RheXMgaW4gaXRzIGN1cnJlbnQgc3RhdGUuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBDaGVja0R1cGxpY2F0ZVJlemVydmF0aW9uTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgc2VydmljZVRhc2sgPSB0YXNrIGFzIERhcHJTZXJ2aWNlVGFzazsKICAgICAgICBpZiAoc2VydmljZVRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIlRhc2sgbXVzdCBiZSBhIERhcHJTZXJ2aWNlVGFzayIpOwoKICAgICAgICB2YXIgYXBwSWQgPSBHZXRDb25maWdWYWx1ZSgiREFQUl9BUFBfSUQiKTsKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGFwcElkKSkKICAgICAgICAgICAgc2VydmljZVRhc2suU2V0QXBwSWQoYXBwSWQpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCB8fCAhSGFzUHJvcGVydHkoZGF0YSwgInVzZXIiKSB8fCBkYXRhLnVzZXIgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIk1BWF9SRVpFUlZBVElPTjogVXNlciBmaWVsZCBpcyByZXF1aXJlZCBmb3IgZHVwbGljYXRlIGNoZWNrIik7CgogICAgICAgIHZhciB1c2VyID0gZGF0YS51c2VyLlRvU3RyaW5nKCk7CiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBjb250ZXh0Lkluc3RhbmNlPy5LZXkgPz8gIiI7CgogICAgICAgIHZhciB1c2VyRXNjYXBlZCA9IHVzZXIuUmVwbGFjZSgiXFwiLCAiXFxcXCIpLlJlcGxhY2UoIlwiIiwgIlxcXCIiKTsKICAgICAgICB2YXIga2V5RXNjYXBlZCA9IGN1cnJlbnRLZXkuUmVwbGFjZSgiXFwiLCAiXFxcXCIpLlJlcGxhY2UoIlwiIiwgIlxcXCIiKTsKCiAgICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gbmV3IExpc3Q8c3RyaW5nPgogICAgICAgIHsKICAgICAgICAgICAgInBhZ2VTaXplPTEwIiwKICAgICAgICAgICAgImZpbHRlcj0iICsKICAgICAgICAgICAgICAgICJ7XCJhbmRcIjpbIiArCiAgICAgICAgICAgICAgICAgICAgIntcImF0dHJpYnV0ZXNcIjp7XCJ1c2VyXCI6e1wiZXFcIjpcIiIgKyB1c2VyRXNjYXBlZCArICJcIn19fSwiICsKICAgICAgICAgICAgICAgICAgICAie1wia2V5XCI6e1wibmVcIjpcIiIgKyBrZXlFc2NhcGVkICsgIlwifX0sIiArCiAgICAgICAgICAgICAgICAgICAgIntcImN1cnJlbnRTdGF0ZVwiOntcImVxXCI6XCIiICsgImFjdGl2ZSIgKyAiXCJ9fSwiICArCiAgICAgICAgICAgICAgICAiXX0iCiAgICAgICAgfTsKCiAgICAgICAgc2VydmljZVRhc2suU2V0UXVlcnlTdHJpbmcoc3RyaW5nLkpvaW4oIiYiLCBxdWVyeVBhcmFtcykpOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHJlc3BvbnNlID0gY29udGV4dC5Cb2R5OwoKICAgICAgICBpZiAocmVzcG9uc2U/LmlzU3VjY2VzcyA9PSBmYWxzZSkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSByZXNwb25zZT8uZXJyb3JNZXNzYWdlPy5Ub1N0cmluZygpID8/ICJTZXJ2aWNlIGNhbGwgZmFpbGVkIjsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigkIlNFUlZJQ0VfRVJST1I6IHtlcnJvck1lc3NhZ2V9Iik7CiAgICAgICAgfQoKICAgICAgICB2YXIgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2U/LmRhdGE7CiAgICAgICAgdmFyIGl0ZW1zID0gcmVzcG9uc2VEYXRhPy5pdGVtczsKCiAgICAgICAgaWYgKGl0ZW1zID09IG51bGwgfHwgaXRlbXMuQ291bnQgPT0gMCkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CgogICAgICAgIGludCBjb3VudCA9IGl0ZW1zLkNvdW50OwoKICAgICAgICBpZiAoY291bnQgPj0gMikKICAgICAgICB7CiAgICAgICAgICAgIHZhciB1c2VyID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YT8udXNlcj8uVG9TdHJpbmcoKSA/PyAidW5rbm93biI7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJCJNQVhfUkVaRVJWQVRJT046IFVzZXIgJ3t1c2VyfScgYWxyZWFkeSBoYXMge2NvdW50fSBhY3RpdmUgcmVzZXJ2YXRpb25zLiBNYXhpbXVtIGFsbG93ZWQgaXMgMi4iKTsKICAgICAgICB9CgogICAgICAgIHZhciBpbnN0YW5jZURhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIHZhciBuZXdTdGFydFN0ciA9IEdldFN0cmluZyhpbnN0YW5jZURhdGEsICJzdGFydERhdGVUaW1lIik7CiAgICAgICAgdmFyIG5ld0VuZFN0ciA9IEdldFN0cmluZyhpbnN0YW5jZURhdGEsICJlbmREYXRlVGltZSIpOwoKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KG5ld1N0YXJ0U3RyKSAmJiAhc3RyaW5nLklzTnVsbE9yRW1wdHkobmV3RW5kU3RyKSkKICAgICAgICB7CiAgICAgICAgICAgIERhdGVUaW1lIG5ld1N0YXJ0ID0gZGVmYXVsdCwgbmV3RW5kID0gZGVmYXVsdDsKICAgICAgICAgICAgaWYgKERhdGVUaW1lLlRyeVBhcnNlKG5ld1N0YXJ0U3RyLCBvdXQgbmV3U3RhcnQpICYmIERhdGVUaW1lLlRyeVBhcnNlKG5ld0VuZFN0ciwgb3V0IG5ld0VuZCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKHZhciBpdGVtIGluIGl0ZW1zKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwpIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICB2YXIgZXhpc3RpbmdTdGFydFN0ciA9IEdldE5lc3RlZFN0cmluZyhpdGVtLCAiYXR0cmlidXRlcyIsICJzdGFydERhdGVUaW1lIik7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nRW5kU3RyID0gR2V0TmVzdGVkU3RyaW5nKGl0ZW0sICJhdHRyaWJ1dGVzIiwgImVuZERhdGVUaW1lIik7CgogICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShleGlzdGluZ1N0YXJ0U3RyKSB8fCBzdHJpbmcuSXNOdWxsT3JFbXB0eShleGlzdGluZ0VuZFN0cikpCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICBEYXRlVGltZSBleGlzdGluZ1N0YXJ0ID0gZGVmYXVsdCwgZXhpc3RpbmdFbmQgPSBkZWZhdWx0OwogICAgICAgICAgICAgICAgICAgIGlmICghRGF0ZVRpbWUuVHJ5UGFyc2UoZXhpc3RpbmdTdGFydFN0ciwgb3V0IGV4aXN0aW5nU3RhcnQpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICFEYXRlVGltZS5UcnlQYXJzZShleGlzdGluZ0VuZFN0ciwgb3V0IGV4aXN0aW5nRW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1N0YXJ0IDwgbmV3RW5kICYmIGV4aXN0aW5nRW5kID4gbmV3U3RhcnQpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhpc3RpbmdLZXkgPSBIYXNQcm9wZXJ0eShpdGVtLCAia2V5IikgPyBpdGVtLmtleT8uVG9TdHJpbmcoKSA6ICJ1bmtub3duIjsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQiVElNRV9PVkVSTEFQOiBSZXF1ZXN0ZWQgdGltZSB7bmV3U3RhcnRTdHJ9IC0ge25ld0VuZFN0cn0gb3ZlcmxhcHMgd2l0aCBleGlzdGluZyByZXNlcnZhdGlvbiAne2V4aXN0aW5nS2V5fScgKHtleGlzdGluZ1N0YXJ0U3RyfSAtIHtleGlzdGluZ0VuZFN0cn0pLiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0TmVzdGVkU3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgcGFyZW50LCBzdHJpbmcgY2hpbGQpCiAgICB7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShvYmosIHBhcmVudCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBuZXN0ZWQgPSBHZXRQcm9wZXJ0eVZhbHVlKG9iaiwgcGFyZW50KTsKICAgICAgICAgICAgICAgIGlmIChuZXN0ZWQgIT0gbnVsbCAmJiBIYXNQcm9wZXJ0eShuZXN0ZWQsIGNoaWxkKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUobmVzdGVkLCBjaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0K"
558
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgY2hlY2stZHVwbGljYXRlLXJlemVydmF0aW9uIChEYXByU2VydmljZVRhc2sgLSBUeXBlIDMpLgovLy8gUXVlcmllcyByZXplcnZhdGlvbiB3b3JrZmxvdyBpbnN0YW5jZXMgdG8gZW5mb3JjZSB0d28gcnVsZXM6Ci8vLyAxLiBBIHVzZXIgY2FuIGhhdmUgYXQgbW9zdCAyIHJlc2VydmF0aW9ucyBpbiBjb25maXJtZWQgc3RhdGVzIChhY3RpdmUsIHVwZGF0ZS1jb250cm9sLCBjaGFuZ2UtYWR2aXNvciwgY2FuLXN0YXJ0LW1lZXRpbmcsIGFjY2VwdC10ZXJtcykuCi8vLyAyLiBBIHVzZXIgY2Fubm90IGhhdmUgdHdvIHJlc2VydmF0aW9ucyB3aXRoIG92ZXJsYXBwaW5nIHRpbWUgc2xvdHMuCi8vLwovLy8gRmxvdzoKLy8vIDEuIElucHV0SGFuZGxlcjogQnVpbGRzIHF1ZXJ5IHRvIGZpbmQgYWxsIGFjdGl2ZSByZXNlcnZhdGlvbnMgZm9yIHRoZSBzYW1lIHVzZXIuCi8vLyAyLiBPdXRwdXRIYW5kbGVyOiBDaGVja3MgY291bnQgKG1heCAyKSBhbmQgdGltZSBvdmVybGFwOyB0aHJvd3MgZXhjZXB0aW9uIG9uIHZpb2xhdGlvbi4KLy8vICAgIEV4Y2VwdGlvbiBmYWlscyB0aGUgdHJhbnNpdGlvbjsgaW5zdGFuY2Ugc3RheXMgaW4gaXRzIGN1cnJlbnQgc3RhdGUuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBDaGVja0R1cGxpY2F0ZVJlemVydmF0aW9uTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgc2VydmljZVRhc2sgPSB0YXNrIGFzIERhcHJTZXJ2aWNlVGFzazsKICAgICAgICBpZiAoc2VydmljZVRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIlRhc2sgbXVzdCBiZSBhIERhcHJTZXJ2aWNlVGFzayIpOwoKICAgICAgICB2YXIgYXBwSWQgPSBHZXRDb25maWdWYWx1ZSgiREFQUl9BUFBfSUQiKTsKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGFwcElkKSkKICAgICAgICAgICAgc2VydmljZVRhc2suU2V0QXBwSWQoYXBwSWQpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCB8fCAhSGFzUHJvcGVydHkoZGF0YSwgInVzZXIiKSB8fCBkYXRhLnVzZXIgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIk1BWF9SRVpFUlZBVElPTjogVXNlciBmaWVsZCBpcyByZXF1aXJlZCBmb3IgZHVwbGljYXRlIGNoZWNrIik7CgogICAgICAgIHZhciB1c2VyID0gZGF0YS51c2VyLlRvU3RyaW5nKCk7CiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBjb250ZXh0Lkluc3RhbmNlPy5LZXkgPz8gIiI7CgogICAgICAgIHZhciB1c2VyRXNjYXBlZCA9IHVzZXIuUmVwbGFjZSgiXFwiLCAiXFxcXCIpLlJlcGxhY2UoIlwiIiwgIlxcXCIiKTsKICAgICAgICB2YXIga2V5RXNjYXBlZCA9IGN1cnJlbnRLZXkuUmVwbGFjZSgiXFwiLCAiXFxcXCIpLlJlcGxhY2UoIlwiIiwgIlxcXCIiKTsKCiAgICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gbmV3IExpc3Q8c3RyaW5nPgogICAgICAgIHsKICAgICAgICAgICAgInBhZ2VTaXplPTEwIiwKICAgICAgICAgICAgImZpbHRlcj0iICsKICAgICAgICAgICAgICAgICJ7XCJhbmRcIjpbIiArCiAgICAgICAgICAgICAgICAgICAgIntcImF0dHJpYnV0ZXNcIjp7XCJ1c2VyXCI6e1wiZXFcIjpcIiIgKyB1c2VyRXNjYXBlZCArICJcIn19fSwiICsKICAgICAgICAgICAgICAgICAgICAie1wia2V5XCI6e1wibmVcIjpcIiIgKyBrZXlFc2NhcGVkICsgIlwifX0sIiArCiAgICAgICAgICAgICAgICAgICAgIntcImN1cnJlbnRTdGF0ZVwiOntcImVxXCI6XCIiICsgImFjdGl2ZSIgKyAiXCJ9fSwiICArCiAgICAgICAgICAgICAgICAiXX0iCiAgICAgICAgfTsKCiAgICAgICAgc2VydmljZVRhc2suU2V0UXVlcnlTdHJpbmcoc3RyaW5nLkpvaW4oIiYiLCBxdWVyeVBhcmFtcykpOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHJlc3BvbnNlID0gY29udGV4dC5Cb2R5OwoKICAgICAgICBpZiAocmVzcG9uc2U/LmlzU3VjY2VzcyA9PSBmYWxzZSkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSByZXNwb25zZT8uZXJyb3JNZXNzYWdlPy5Ub1N0cmluZygpID8/ICJTZXJ2aWNlIGNhbGwgZmFpbGVkIjsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigkIlNFUlZJQ0VfRVJST1I6IHtlcnJvck1lc3NhZ2V9Iik7CiAgICAgICAgfQoKICAgICAgICB2YXIgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2U/LmRhdGE7CiAgICAgICAgdmFyIGl0ZW1zID0gcmVzcG9uc2VEYXRhPy5pdGVtczsKCiAgICAgICAgaWYgKGl0ZW1zID09IG51bGwgfHwgaXRlbXMuQ291bnQgPT0gMCkKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CgogICAgICAgIGludCBjb3VudCA9IGl0ZW1zLkNvdW50OwoKICAgICAgICBpZiAoY291bnQgPj0gMikKICAgICAgICB7CiAgICAgICAgICAgIHZhciB1c2VyID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YT8udXNlcj8uVG9TdHJpbmcoKSA/PyAidW5rbm93biI7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJCJNQVhfUkVaRVJWQVRJT046IFVzZXIgJ3t1c2VyfScgYWxyZWFkeSBoYXMge2NvdW50fSBhY3RpdmUgcmVzZXJ2YXRpb25zLiBNYXhpbXVtIGFsbG93ZWQgaXMgMi4iKTsKICAgICAgICB9CgogICAgICAgIHZhciBpbnN0YW5jZURhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIHZhciBuZXdTdGFydFN0ciA9IEdldFN0cmluZyhpbnN0YW5jZURhdGEsICJzdGFydERhdGVUaW1lIik7CiAgICAgICAgdmFyIG5ld0VuZFN0ciA9IEdldFN0cmluZyhpbnN0YW5jZURhdGEsICJlbmREYXRlVGltZSIpOwoKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KG5ld1N0YXJ0U3RyKSAmJiAhc3RyaW5nLklzTnVsbE9yRW1wdHkobmV3RW5kU3RyKSkKICAgICAgICB7CiAgICAgICAgICAgIERhdGVUaW1lIG5ld1N0YXJ0ID0gZGVmYXVsdCwgbmV3RW5kID0gZGVmYXVsdDsKICAgICAgICAgICAgaWYgKFRyeVBhcnNlVG9VdGMobmV3U3RhcnRTdHIsIG91dCBuZXdTdGFydCkgJiYgVHJ5UGFyc2VUb1V0YyhuZXdFbmRTdHIsIG91dCBuZXdFbmQpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgaXRlbSBpbiBpdGVtcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nU3RhcnRTdHIgPSBHZXROZXN0ZWRTdHJpbmcoaXRlbSwgImF0dHJpYnV0ZXMiLCAic3RhcnREYXRlVGltZSIpOwogICAgICAgICAgICAgICAgICAgIHZhciBleGlzdGluZ0VuZFN0ciA9IEdldE5lc3RlZFN0cmluZyhpdGVtLCAiYXR0cmlidXRlcyIsICJlbmREYXRlVGltZSIpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoZXhpc3RpbmdTdGFydFN0cikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoZXhpc3RpbmdFbmRTdHIpKQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWUgZXhpc3RpbmdTdGFydCA9IGRlZmF1bHQsIGV4aXN0aW5nRW5kID0gZGVmYXVsdDsKICAgICAgICAgICAgICAgICAgICBpZiAoIVRyeVBhcnNlVG9VdGMoZXhpc3RpbmdTdGFydFN0ciwgb3V0IGV4aXN0aW5nU3RhcnQpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICFUcnlQYXJzZVRvVXRjKGV4aXN0aW5nRW5kU3RyLCBvdXQgZXhpc3RpbmdFbmQpKQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nU3RhcnQgPCBuZXdFbmQgJiYgZXhpc3RpbmdFbmQgPiBuZXdTdGFydCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleGlzdGluZ0tleSA9IEhhc1Byb3BlcnR5KGl0ZW0sICJrZXkiKSA/IGl0ZW0ua2V5Py5Ub1N0cmluZygpIDogInVua25vd24iOwogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCJUSU1FX09WRVJMQVA6IFJlcXVlc3RlZCB0aW1lIHtuZXdTdGFydFN0cn0gLSB7bmV3RW5kU3RyfSBvdmVybGFwcyB3aXRoIGV4aXN0aW5nIHJlc2VydmF0aW9uICd7ZXhpc3RpbmdLZXl9JyAoe2V4aXN0aW5nU3RhcnRTdHJ9IC0ge2V4aXN0aW5nRW5kU3RyfSkuIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwcml2YXRlIGJvb2wgVHJ5UGFyc2VUb1V0YyhzdHJpbmcgZGF0ZVN0ciwgb3V0IERhdGVUaW1lIHV0Y0RhdGVUaW1lKQogICAgewogICAgICAgIHV0Y0RhdGVUaW1lID0gZGVmYXVsdDsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoZGF0ZVN0cikpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoRGF0ZVRpbWVPZmZzZXQuVHJ5UGFyc2UoZGF0ZVN0ciwKICAgICAgICAgICAgU3lzdGVtLkdsb2JhbGl6YXRpb24uQ3VsdHVyZUluZm8uSW52YXJpYW50Q3VsdHVyZSwKICAgICAgICAgICAgU3lzdGVtLkdsb2JhbGl6YXRpb24uRGF0ZVRpbWVTdHlsZXMuTm9uZSwgb3V0IHZhciBkdG8pKQogICAgICAgIHsKICAgICAgICAgICAgdXRjRGF0ZVRpbWUgPSBkdG8uVXRjRGF0ZVRpbWU7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0TmVzdGVkU3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgcGFyZW50LCBzdHJpbmcgY2hpbGQpCiAgICB7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShvYmosIHBhcmVudCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBuZXN0ZWQgPSBHZXRQcm9wZXJ0eVZhbHVlKG9iaiwgcGFyZW50KTsKICAgICAgICAgICAgICAgIGlmIChuZXN0ZWQgIT0gbnVsbCAmJiBIYXNQcm9wZXJ0eShuZXN0ZWQsIGNoaWxkKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUobmVzdGVkLCBjaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0K"
485
559
  }
486
560
  },
487
561
  {
@@ -494,7 +568,7 @@
494
568
  },
495
569
  "mapping": {
496
570
  "location": "./src/ValidateSlotForRezervationMapping.csx",
497
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIHZhbGlkYXRlLXNsb3QtZm9yLXJlemVydmF0aW9uIHRhc2suCi8vLyBJbnZva2VzIGdldC1hdmFpbGFibGUtc2xvdHMgZnVuY3Rpb24gd2l0aCBhZHZpc29yIGFuZCBkYXRlIGZyb20gcmV6ZXJ2YXRpb24gaW5zdGFuY2UsCi8vLyB0aGVuIGNoZWNrcyBpZiB0aGUgcmVxdWVzdGVkIHN0YXJ0RGF0ZVRpbWUtZW5kRGF0ZVRpbWUgc2xvdCBpcyBpbiB0aGUgYXZhaWxhYmxlIHNsb3RzIGxpc3QuCi8vLyBPdXRwdXQ6IHNsb3RDaGVja1Jlc3VsdCB7IGF2YWlsYWJsZTogYm9vbCwga2V5Pzogc3RyaW5nIH0gZm9yIHVzZSBieSB2YWxpZGF0aW5nIHN0YXRlIGF1dG8gdHJhbnNpdGlvbnMuCi8vLyA8L3N1bW1hcnk+CmludGVybmFsIHNlYWxlZCBjbGFzcyBHZXRBdmFpbGFibGVTbG90c0V4Y2VwdGlvbiA6IEV4Y2VwdGlvbgp7CiAgICBwdWJsaWMgR2V0QXZhaWxhYmxlU2xvdHNFeGNlcHRpb24oc3RyaW5nIG1lc3NhZ2UpIDogYmFzZShtZXNzYWdlKSB7IH0KfQoKcHVibGljIGNsYXNzIFZhbGlkYXRlU2xvdEZvclJlemVydmF0aW9uTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBzZXJ2aWNlVGFzayA9IHRhc2sgYXMgRGFwclNlcnZpY2VUYXNrOwogICAgICAgICAgICBpZiAoc2VydmljZVRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEYXByU2VydmljZVRhc2siKTsKCiAgICAgICAgICAgIHZhciBhcHBJZCA9IEdldENvbmZpZ1ZhbHVlKCJEQVBSX0FQUF9JRCIpOwogICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGFwcElkKSkKICAgICAgICAgICAgICAgIHNlcnZpY2VUYXNrLlNldEFwcElkKGFwcElkKTsKCiAgICAgICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJJbnN0YW5jZSBkYXRhIGlzIHJlcXVpcmVkIik7CgogICAgICAgICAgICB2YXIgYWR2aXNvciA9IEdldFN0cmluZyhkYXRhLCAiYWR2aXNvciIpOwogICAgICAgICAgICB2YXIgc3RhcnREYXRlVGltZVN0ciA9IEdldFN0cmluZyhkYXRhLCAic3RhcnREYXRlVGltZSIpOwogICAgICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoYWR2aXNvcikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoc3RhcnREYXRlVGltZVN0cikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0gInZhbGlkYXRpb24tZXJyb3IiLAogICAgICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RDaGVja1Jlc3VsdCA9IG5ldyB7IGF2YWlsYWJsZSA9IGZhbHNlLCBrZXkgPSAidmFsaWRhdGlvbi1lcnJvciIgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBEYXRlVGltZSBzdGFydERhdGVUaW1lOwogICAgICAgICAgICBpZiAoIURhdGVUaW1lLlRyeVBhcnNlKHN0YXJ0RGF0ZVRpbWVTdHIsIG91dCBzdGFydERhdGVUaW1lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPSAidmFsaWRhdGlvbi1lcnJvciIsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2xvdENoZWNrUmVzdWx0ID0gbmV3IHsgYXZhaWxhYmxlID0gZmFsc2UsIGtleSA9ICJ2YWxpZGF0aW9uLWVycm9yIiB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBkYXRlU3RyID0gc3RhcnREYXRlVGltZS5Ub1N0cmluZygieXl5eS1NTS1kZCIpOwogICAgICAgICAgICB2YXIgcXVlcnlQYXJhbXMgPSBuZXcgTGlzdDxzdHJpbmc+CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJhZHZpc29ySWQ9IiArIFVyaS5Fc2NhcGVEYXRhU3RyaW5nKGFkdmlzb3IpLAogICAgICAgICAgICAgICAgImRhdGU9IiArIFVyaS5Fc2NhcGVEYXRhU3RyaW5nKGRhdGVTdHIpCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHNlcnZpY2VUYXNrLlNldFF1ZXJ5U3RyaW5nKHN0cmluZy5Kb2luKCImIiwgcXVlcnlQYXJhbXMpKTsKCiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlKCkpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ID0gImlucHV0LWVycm9yIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBzbG90Q2hlY2tSZXN1bHQgPSBuZXcKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSAiaW5wdXQtZXJyb3IiLAogICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGV4Lk1lc3NhZ2UKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgIFRhc2s8U2NyaXB0UmVzcG9uc2U+IE91dHB1dEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgICB2YXIgYm9keSA9IGNvbnRleHQuQm9keTsKICAgICAgICAgICAgaWYgKGJvZHkgIT0gbnVsbCAmJiBIYXNQcm9wZXJ0eShib2R5LCAiaXNTdWNjZXNzIikgJiYgYm9keS5pc1N1Y2Nlc3MgPT0gZmFsc2UpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBlcnJOb2RlID0gSGFzUHJvcGVydHkoYm9keSwgImRhdGEiKSA/IGJvZHkuZGF0YSA6IG51bGw7CiAgICAgICAgICAgICAgICB2YXIgZGV0YWlsID0gR2V0U3RyaW5nKGVyck5vZGUsICJkZXRhaWwiKSA/PyBHZXRTdHJpbmcoYm9keSwgImVycm9yTWVzc2FnZSIpID8/IEdldFN0cmluZyhib2R5LCAiZGV0YWlsIik7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oZGV0YWlsID8/ICJGdW5jdGlvbiBjYWxsIGZhaWxlZCIsIiIpOwogICAgICAgICAgICB9CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgICAgIGlmIChkYXRhID09IG51bGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgRGF0YSA9IG5ldyB7IHNsb3RDaGVja1Jlc3VsdCA9IG5ldyB7IGF2YWlsYWJsZSA9IGZhbHNlLCBrZXkgPSAibm8taW5zdGFuY2UtZGF0YSIgfSB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZVRpbWVTdHIgPSBHZXRTdHJpbmcoZGF0YSwgInN0YXJ0RGF0ZVRpbWUiKTsKICAgICAgICAgICAgdmFyIGVuZERhdGVUaW1lU3RyID0gR2V0U3RyaW5nKGRhdGEsICJlbmREYXRlVGltZSIpOwogICAgICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoc3RhcnREYXRlVGltZVN0cikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoZW5kRGF0ZVRpbWVTdHIpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIERhdGEgPSBuZXcgeyBzbG90Q2hlY2tSZXN1bHQgPSBuZXcgeyBhdmFpbGFibGUgPSBmYWxzZSwga2V5ID0gInZhbGlkYXRpb24tZXJyb3IiIH0gfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIERhdGVUaW1lIHN0YXJ0RHQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgRGF0ZVRpbWUgZW5kRHQgPSBEYXRlVGltZS5NaW5WYWx1ZTsKICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN0YXJ0RHQgPSBEYXRlVGltZS5QYXJzZShzdGFydERhdGVUaW1lU3RyKTsKICAgICAgICAgICAgICAgIGVuZER0ID0gRGF0ZVRpbWUuUGFyc2UoZW5kRGF0ZVRpbWVTdHIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgRGF0YSA9IG5ldyB7IHNsb3RDaGVja1Jlc3VsdCA9IG5ldyB7IGF2YWlsYWJsZSA9IGZhbHNlLCBrZXkgPSAidmFsaWRhdGlvbi1lcnJvciIgfSB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHR6ID0gUmVzb2x2ZUJ1c2luZXNzVGltZVpvbmUoKTsKICAgICAgICAgICAgdmFyIGxvY2FsU3RhcnQgPSBDb252ZXJ0VG9UaW1lWm9uZShzdGFydER0LCBzdGFydERhdGVUaW1lU3RyLCB0eik7CiAgICAgICAgICAgIHZhciBsb2NhbEVuZCA9IENvbnZlcnRUb1RpbWVab25lKGVuZER0LCBlbmREYXRlVGltZVN0ciwgdHopOwogICAgICAgICAgICB2YXIgcmVxdWVzdGVkU2xvdCA9IGxvY2FsU3RhcnQuVG9TdHJpbmcoIkhIOm1tIikgKyAiLSIgKyBsb2NhbEVuZC5Ub1N0cmluZygiSEg6bW0iKTsKCiAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gZmFsc2U7CiAgICAgICAgICAgIHN0cmluZyByZXNwb25zZUtleSA9IG51bGw7CiAgICAgICAgICAgIGR5bmFtaWMgcmVzb2x2ZWRTbG90cyA9IG51bGw7CgogICAgICAgICAgICBpZiAoYm9keSAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXNwb25zZUtleSA9IEdldFN0cmluZyhib2R5LCAia2V5IikgPz8gR2V0U3RyaW5nKGJvZHksICJLZXkiKTsKCiAgICAgICAgICAgICAgICBkeW5hbWljIHNsb3RzQ29udGFpbmVyID0gbnVsbDsKCiAgICAgICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkoYm9keSwgImdldEF2YWlsYWJsZVNsb3RzIikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc2xvdHNDb250YWluZXIgPSBib2R5LmdldEF2YWlsYWJsZVNsb3RzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBkYXRhTm9kZSA9IEhhc1Byb3BlcnR5KGJvZHksICJkYXRhIikgPyBib2R5LmRhdGEgOiAoSGFzUHJvcGVydHkoYm9keSwgIkRhdGEiKSA/IGJvZHkuRGF0YSA6IG51bGwpOwogICAgICAgICAgICAgICAgICAgIGlmIChkYXRhTm9kZSAhPSBudWxsICYmIEhhc1Byb3BlcnR5KGRhdGFOb2RlLCAiZ2V0QXZhaWxhYmxlU2xvdHMiKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RzQ29udGFpbmVyID0gZGF0YU5vZGUuZ2V0QXZhaWxhYmxlU2xvdHM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFOb2RlICE9IG51bGwgJiYgSGFzUHJvcGVydHkoZGF0YU5vZGUsICJhdmFpbGFibGVTbG90cyIpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2xvdHNDb250YWluZXIgPSBkYXRhTm9kZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHNsb3RzQ29udGFpbmVyICE9IG51bGwgJiYgSGFzUHJvcGVydHkoc2xvdHNDb250YWluZXIsICJhdmFpbGFibGVTbG90cyIpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBhdmFpbGFibGVTbG90cyA9IHNsb3RzQ29udGFpbmVyLmF2YWlsYWJsZVNsb3RzOwogICAgICAgICAgICAgICAgICAgIHJlc29sdmVkU2xvdHMgPSBhdmFpbGFibGVTbG90czsKICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlU2xvdHMgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gYXZhaWxhYmxlU2xvdHMgYXMgSUVudW1lcmFibGU8b2JqZWN0PjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIHMgaW4gbGlzdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdFN0ciA9IHM/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3RTdHIgPT0gcmVxdWVzdGVkU2xvdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGV0YWlsTXNnID0gR2V0U3RyaW5nKGJvZHksICJkZXRhaWwiKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGRldGFpbE1zZykpCiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBHZXRBdmFpbGFibGVTbG90c0V4Y2VwdGlvbihkZXRhaWxNc2cpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUtleSA9PSBudWxsICYmIEhhc1Byb3BlcnR5KGJvZHksICJpc1N1Y2Nlc3MiKSAmJiBib2R5LmlzU3VjY2VzcyA9PSBmYWxzZSkKICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc2xvdENoZWNrUmVzdWx0ID0gbmV3CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHJlc3BvbnNlS2V5ID8/IChhdmFpbGFibGUgPyAiYXZhaWxhYmxlLXNsb3RzLXN1Y2Nlc3MiIDogInNsb3QtdW5hdmFpbGFibGUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2xvdHMgPSByZXNvbHZlZFNsb3RzCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKCiAgICAgICAgfQogICAgICAgIGNhdGNoIChHZXRBdmFpbGFibGVTbG90c0V4Y2VwdGlvbikKICAgICAgICB7CiAgICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHNsb3RDaGVja1Jlc3VsdCA9IG5ldwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9ICJvdXRwdXQtZXJyb3IiLAogICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGV4Lk1lc3NhZ2UKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIFRpbWVab25lSW5mbyBSZXNvbHZlQnVzaW5lc3NUaW1lWm9uZSgpCiAgICB7CiAgICAgICAgdmFyIGlkID0gR2V0Q29uZmlnVmFsdWUoIkFwcG9pbnRtZW50czpUaW1lWm9uZSIpID8/IEdldENvbmZpZ1ZhbHVlKCJBUFBPSU5UTUVOVF9USU1FWk9ORSIpOwogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKGlkKSkKICAgICAgICAgICAgaWQgPSAiRXVyb3BlL0lzdGFuYnVsIjsKCiAgICAgICAgdHJ5IHsgcmV0dXJuIFRpbWVab25lSW5mby5GaW5kU3lzdGVtVGltZVpvbmVCeUlkKGlkLlRyaW0oKSk7IH0gY2F0Y2ggeyB9CiAgICAgICAgdHJ5IHsgcmV0dXJuIFRpbWVab25lSW5mby5GaW5kU3lzdGVtVGltZVpvbmVCeUlkKCJUdXJrZXkgU3RhbmRhcmQgVGltZSIpOyB9IGNhdGNoIHsgfQogICAgICAgIHJldHVybiBUaW1lWm9uZUluZm8uQ3JlYXRlQ3VzdG9tVGltZVpvbmUoIlRSVCIsIFRpbWVTcGFuLkZyb21Ib3VycygzKSwgIlRSVCAoVVRDKzMpIiwgIlRSVCAoVVRDKzMpIik7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgRGF0ZVRpbWUgQ29udmVydFRvVGltZVpvbmUoRGF0ZVRpbWUgZHQsIHN0cmluZyBvcmlnaW5hbCwgVGltZVpvbmVJbmZvIHR6KQogICAgewogICAgICAgIGlmIChkdC5LaW5kID09IERhdGVUaW1lS2luZC5VdGMpCiAgICAgICAgICAgIHJldHVybiBUaW1lWm9uZUluZm8uQ29udmVydFRpbWVGcm9tVXRjKGR0LCB0eik7CgogICAgICAgIGlmIChEYXRlVGltZU9mZnNldC5UcnlQYXJzZShvcmlnaW5hbCwgb3V0IHZhciBkdG8pKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHV0YyA9IGR0by5VdGNEYXRlVGltZTsKICAgICAgICAgICAgcmV0dXJuIFRpbWVab25lSW5mby5Db252ZXJ0VGltZUZyb21VdGModXRjLCB0eik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZHQ7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0K"
571
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKCi8vLyA8c3VtbWFyeT4KLy8vIE1hcHBpbmcgZm9yIHZhbGlkYXRlLXNsb3QtZm9yLXJlemVydmF0aW9uIHRhc2suCi8vLyBJbnZva2VzIGdldC1hdmFpbGFibGUtc2xvdHMgZnVuY3Rpb24gd2l0aCBhZHZpc29yIGFuZCBkYXRlIGZyb20gcmV6ZXJ2YXRpb24gaW5zdGFuY2UsCi8vLyB0aGVuIGNoZWNrcyBpZiB0aGUgcmVxdWVzdGVkIHN0YXJ0RGF0ZVRpbWUtZW5kRGF0ZVRpbWUgc2xvdCBpcyBpbiB0aGUgYXZhaWxhYmxlIHNsb3RzIGxpc3QuCi8vLyBPdXRwdXQ6IHNsb3RDaGVja1Jlc3VsdCB7IGF2YWlsYWJsZTogYm9vbCwga2V5Pzogc3RyaW5nIH0gZm9yIHVzZSBieSB2YWxpZGF0aW5nIHN0YXRlIGF1dG8gdHJhbnNpdGlvbnMuCi8vLyA8L3N1bW1hcnk+CmludGVybmFsIHNlYWxlZCBjbGFzcyBHZXRBdmFpbGFibGVTbG90c0V4Y2VwdGlvbiA6IEV4Y2VwdGlvbgp7CiAgICBwdWJsaWMgR2V0QXZhaWxhYmxlU2xvdHNFeGNlcHRpb24oc3RyaW5nIG1lc3NhZ2UpIDogYmFzZShtZXNzYWdlKSB7IH0KfQoKcHVibGljIGNsYXNzIFZhbGlkYXRlU2xvdEZvclJlemVydmF0aW9uTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBzZXJ2aWNlVGFzayA9IHRhc2sgYXMgRGFwclNlcnZpY2VUYXNrOwogICAgICAgICAgICBpZiAoc2VydmljZVRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEYXByU2VydmljZVRhc2siKTsKCiAgICAgICAgICAgIHZhciBhcHBJZCA9IEdldENvbmZpZ1ZhbHVlKCJEQVBSX0FQUF9JRCIpOwogICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGFwcElkKSkKICAgICAgICAgICAgICAgIHNlcnZpY2VUYXNrLlNldEFwcElkKGFwcElkKTsKCiAgICAgICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJJbnN0YW5jZSBkYXRhIGlzIHJlcXVpcmVkIik7CgogICAgICAgICAgICB2YXIgYWR2aXNvciA9IEdldFN0cmluZyhkYXRhLCAiYWR2aXNvciIpOwogICAgICAgICAgICB2YXIgc3RhcnREYXRlVGltZVN0ciA9IEdldFN0cmluZyhkYXRhLCAic3RhcnREYXRlVGltZSIpOwogICAgICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoYWR2aXNvcikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoc3RhcnREYXRlVGltZVN0cikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0gInZhbGlkYXRpb24tZXJyb3IiLAogICAgICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RDaGVja1Jlc3VsdCA9IG5ldyB7IGF2YWlsYWJsZSA9IGZhbHNlLCBrZXkgPSAidmFsaWRhdGlvbi1lcnJvciIgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBEYXRlVGltZSBzdGFydERhdGVUaW1lOwogICAgICAgICAgICBpZiAoIVRyeVBhcnNlVG9VdGMoc3RhcnREYXRlVGltZVN0ciwgb3V0IHN0YXJ0RGF0ZVRpbWUpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9ICJ2YWxpZGF0aW9uLWVycm9yIiwKICAgICAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzbG90Q2hlY2tSZXN1bHQgPSBuZXcgeyBhdmFpbGFibGUgPSBmYWxzZSwga2V5ID0gInZhbGlkYXRpb24tZXJyb3IiIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGRhdGVTdHIgPSBzdGFydERhdGVUaW1lLlRvU3RyaW5nKCJ5eXl5LU1NLWRkIik7CiAgICAgICAgICAgIHZhciBxdWVyeVBhcmFtcyA9IG5ldyBMaXN0PHN0cmluZz4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImFkdmlzb3JJZD0iICsgVXJpLkVzY2FwZURhdGFTdHJpbmcoYWR2aXNvciksCiAgICAgICAgICAgICAgICAiZGF0ZT0iICsgVXJpLkVzY2FwZURhdGFTdHJpbmcoZGF0ZVN0cikKICAgICAgICAgICAgfTsKICAgICAgICAgICAgc2VydmljZVRhc2suU2V0UXVlcnlTdHJpbmcoc3RyaW5nLkpvaW4oIiYiLCBxdWVyeVBhcmFtcykpOwoKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPSAiaW5wdXQtZXJyb3IiLAogICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHNsb3RDaGVja1Jlc3VsdCA9IG5ldwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9ICJpbnB1dC1lcnJvciIsCiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXguTWVzc2FnZQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyAgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgIHZhciBib2R5ID0gY29udGV4dC5Cb2R5OwogICAgICAgICAgICBpZiAoYm9keSAhPSBudWxsICYmIEhhc1Byb3BlcnR5KGJvZHksICJpc1N1Y2Nlc3MiKSAmJiBib2R5LmlzU3VjY2VzcyA9PSBmYWxzZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIGVyck5vZGUgPSBIYXNQcm9wZXJ0eShib2R5LCAiZGF0YSIpID8gYm9keS5kYXRhIDogbnVsbDsKICAgICAgICAgICAgICAgIHZhciBkZXRhaWwgPSBHZXRTdHJpbmcoZXJyTm9kZSwgImRldGFpbCIpID8/IEdldFN0cmluZyhib2R5LCAiZXJyb3JNZXNzYWdlIikgPz8gR2V0U3RyaW5nKGJvZHksICJkZXRhaWwiKTsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbihkZXRhaWwgPz8gIkZ1bmN0aW9uIGNhbGwgZmFpbGVkIiwiIik7CiAgICAgICAgICAgIH0KICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBEYXRhID0gbmV3IHsgc2xvdENoZWNrUmVzdWx0ID0gbmV3IHsgYXZhaWxhYmxlID0gZmFsc2UsIGtleSA9ICJuby1pbnN0YW5jZS1kYXRhIiB9IH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgc3RhcnREYXRlVGltZVN0ciA9IEdldFN0cmluZyhkYXRhLCAic3RhcnREYXRlVGltZSIpOwogICAgICAgICAgICB2YXIgZW5kRGF0ZVRpbWVTdHIgPSBHZXRTdHJpbmcoZGF0YSwgImVuZERhdGVUaW1lIik7CiAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShzdGFydERhdGVUaW1lU3RyKSB8fCBzdHJpbmcuSXNOdWxsT3JFbXB0eShlbmREYXRlVGltZVN0cikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgRGF0YSA9IG5ldyB7IHNsb3RDaGVja1Jlc3VsdCA9IG5ldyB7IGF2YWlsYWJsZSA9IGZhbHNlLCBrZXkgPSAidmFsaWRhdGlvbi1lcnJvciIgfSB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgRGF0ZVRpbWUgc3RhcnREdFV0YyA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICBEYXRlVGltZSBlbmREdFV0YyA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3RhcnREdFV0YyA9IFBhcnNlVG9VdGMoc3RhcnREYXRlVGltZVN0cik7CiAgICAgICAgICAgICAgICBlbmREdFV0YyA9IFBhcnNlVG9VdGMoZW5kRGF0ZVRpbWVTdHIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgRGF0YSA9IG5ldyB7IHNsb3RDaGVja1Jlc3VsdCA9IG5ldyB7IGF2YWlsYWJsZSA9IGZhbHNlLCBrZXkgPSAidmFsaWRhdGlvbi1lcnJvciIgfSB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHR6ID0gUmVzb2x2ZUJ1c2luZXNzVGltZVpvbmUoKTsKICAgICAgICAgICAgdmFyIGxvY2FsU3RhcnQgPSBUaW1lWm9uZUluZm8uQ29udmVydFRpbWVGcm9tVXRjKHN0YXJ0RHRVdGMsIHR6KTsKICAgICAgICAgICAgdmFyIGxvY2FsRW5kID0gVGltZVpvbmVJbmZvLkNvbnZlcnRUaW1lRnJvbVV0YyhlbmREdFV0YywgdHopOwogICAgICAgICAgICB2YXIgcmVxdWVzdGVkU2xvdCA9IGxvY2FsU3RhcnQuVG9TdHJpbmcoIkhIOm1tIikgKyAiLSIgKyBsb2NhbEVuZC5Ub1N0cmluZygiSEg6bW0iKTsKCiAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gZmFsc2U7CiAgICAgICAgICAgIHN0cmluZyByZXNwb25zZUtleSA9IG51bGw7CiAgICAgICAgICAgIGR5bmFtaWMgcmVzb2x2ZWRTbG90cyA9IG51bGw7CgogICAgICAgICAgICBpZiAoYm9keSAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXNwb25zZUtleSA9IEdldFN0cmluZyhib2R5LCAia2V5IikgPz8gR2V0U3RyaW5nKGJvZHksICJLZXkiKTsKCiAgICAgICAgICAgICAgICBkeW5hbWljIHNsb3RzQ29udGFpbmVyID0gbnVsbDsKCiAgICAgICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkoYm9keSwgImdldEF2YWlsYWJsZVNsb3RzIikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc2xvdHNDb250YWluZXIgPSBib2R5LmdldEF2YWlsYWJsZVNsb3RzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBkYXRhTm9kZSA9IEhhc1Byb3BlcnR5KGJvZHksICJkYXRhIikgPyBib2R5LmRhdGEgOiAoSGFzUHJvcGVydHkoYm9keSwgIkRhdGEiKSA/IGJvZHkuRGF0YSA6IG51bGwpOwogICAgICAgICAgICAgICAgICAgIGlmIChkYXRhTm9kZSAhPSBudWxsICYmIEhhc1Byb3BlcnR5KGRhdGFOb2RlLCAiZ2V0QXZhaWxhYmxlU2xvdHMiKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RzQ29udGFpbmVyID0gZGF0YU5vZGUuZ2V0QXZhaWxhYmxlU2xvdHM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFOb2RlICE9IG51bGwgJiYgSGFzUHJvcGVydHkoZGF0YU5vZGUsICJhdmFpbGFibGVTbG90cyIpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2xvdHNDb250YWluZXIgPSBkYXRhTm9kZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHNsb3RzQ29udGFpbmVyICE9IG51bGwgJiYgSGFzUHJvcGVydHkoc2xvdHNDb250YWluZXIsICJhdmFpbGFibGVTbG90cyIpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBhdmFpbGFibGVTbG90cyA9IHNsb3RzQ29udGFpbmVyLmF2YWlsYWJsZVNsb3RzOwogICAgICAgICAgICAgICAgICAgIHJlc29sdmVkU2xvdHMgPSBhdmFpbGFibGVTbG90czsKICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlU2xvdHMgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gYXZhaWxhYmxlU2xvdHMgYXMgSUVudW1lcmFibGU8b2JqZWN0PjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIHMgaW4gbGlzdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdFN0ciA9IHM/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3RTdHIgPT0gcmVxdWVzdGVkU2xvdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGV0YWlsTXNnID0gR2V0U3RyaW5nKGJvZHksICJkZXRhaWwiKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGRldGFpbE1zZykpCiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBHZXRBdmFpbGFibGVTbG90c0V4Y2VwdGlvbihkZXRhaWxNc2cpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUtleSA9PSBudWxsICYmIEhhc1Byb3BlcnR5KGJvZHksICJpc1N1Y2Nlc3MiKSAmJiBib2R5LmlzU3VjY2VzcyA9PSBmYWxzZSkKICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc2xvdENoZWNrUmVzdWx0ID0gbmV3CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHJlc3BvbnNlS2V5ID8/IChhdmFpbGFibGUgPyAiYXZhaWxhYmxlLXNsb3RzLXN1Y2Nlc3MiIDogInNsb3QtdW5hdmFpbGFibGUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2xvdHMgPSByZXNvbHZlZFNsb3RzCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKCiAgICAgICAgfQogICAgICAgIGNhdGNoIChHZXRBdmFpbGFibGVTbG90c0V4Y2VwdGlvbikKICAgICAgICB7CiAgICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHNsb3RDaGVja1Jlc3VsdCA9IG5ldwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9ICJvdXRwdXQtZXJyb3IiLAogICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGV4Lk1lc3NhZ2UKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIFRpbWVab25lSW5mbyBSZXNvbHZlQnVzaW5lc3NUaW1lWm9uZSgpCiAgICB7CiAgICAgICAgdmFyIGlkID0gR2V0Q29uZmlnVmFsdWUoIkFwcG9pbnRtZW50czpUaW1lWm9uZSIpID8/IEdldENvbmZpZ1ZhbHVlKCJBUFBPSU5UTUVOVF9USU1FWk9ORSIpOwogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKGlkKSkKICAgICAgICAgICAgaWQgPSAiRXVyb3BlL0lzdGFuYnVsIjsKCiAgICAgICAgdHJ5IHsgcmV0dXJuIFRpbWVab25lSW5mby5GaW5kU3lzdGVtVGltZVpvbmVCeUlkKGlkLlRyaW0oKSk7IH0gY2F0Y2ggeyB9CiAgICAgICAgdHJ5IHsgcmV0dXJuIFRpbWVab25lSW5mby5GaW5kU3lzdGVtVGltZVpvbmVCeUlkKCJUdXJrZXkgU3RhbmRhcmQgVGltZSIpOyB9IGNhdGNoIHsgfQogICAgICAgIHJldHVybiBUaW1lWm9uZUluZm8uQ3JlYXRlQ3VzdG9tVGltZVpvbmUoIlRSVCIsIFRpbWVTcGFuLkZyb21Ib3VycygzKSwgIlRSVCAoVVRDKzMpIiwgIlRSVCAoVVRDKzMpIik7CiAgICB9CgogICAgcHJpdmF0ZSBib29sIFRyeVBhcnNlVG9VdGMoc3RyaW5nIGRhdGVTdHIsIG91dCBEYXRlVGltZSB1dGNEYXRlVGltZSkKICAgIHsKICAgICAgICB1dGNEYXRlVGltZSA9IGRlZmF1bHQ7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KGRhdGVTdHIpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKERhdGVUaW1lT2Zmc2V0LlRyeVBhcnNlKGRhdGVTdHIsCiAgICAgICAgICAgIFN5c3RlbS5HbG9iYWxpemF0aW9uLkN1bHR1cmVJbmZvLkludmFyaWFudEN1bHR1cmUsCiAgICAgICAgICAgIFN5c3RlbS5HbG9iYWxpemF0aW9uLkRhdGVUaW1lU3R5bGVzLk5vbmUsIG91dCB2YXIgZHRvKSkKICAgICAgICB7CiAgICAgICAgICAgIHV0Y0RhdGVUaW1lID0gZHRvLlV0Y0RhdGVUaW1lOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHByaXZhdGUgRGF0ZVRpbWUgUGFyc2VUb1V0YyhzdHJpbmcgZGF0ZVN0cikKICAgIHsKICAgICAgICB2YXIgZHRvID0gRGF0ZVRpbWVPZmZzZXQuUGFyc2UoZGF0ZVN0ciwKICAgICAgICAgICAgU3lzdGVtLkdsb2JhbGl6YXRpb24uQ3VsdHVyZUluZm8uSW52YXJpYW50Q3VsdHVyZSk7CiAgICAgICAgcmV0dXJuIGR0by5VdGNEYXRlVGltZTsKICAgIH0KCiAgICBwcml2YXRlIHN0cmluZyBHZXRTdHJpbmcoZHluYW1pYyBvYmosIHN0cmluZyBuYW1lKQogICAgewogICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkob2JqLCBuYW1lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHYgPSBHZXRQcm9wZXJ0eVZhbHVlKG9iaiwgbmFtZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdj8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfQo="
498
572
  }
499
573
  }
500
574
  ]
@@ -502,6 +576,22 @@
502
576
  ],
503
577
  "_comment": "## State Overview\n\n**Purpose:** Rezervasyon temel bilgilerini girmek icin kullanilir.\n\n* Tarih : Rezervasyon Tarihi\n* Saat : Rezervasyon Saati"
504
578
  },
579
+ {
580
+ "key": "duplicate-rezervation",
581
+ "stateType": 2,
582
+ "versionStrategy": "Minor",
583
+ "labels": [
584
+ {
585
+ "label": "Duplicate Reservation",
586
+ "language": "en-US"
587
+ },
588
+ {
589
+ "label": "Mükerrer Rezervasyon",
590
+ "language": "tr-TR"
591
+ }
592
+ ],
593
+ "transitions": []
594
+ },
505
595
  {
506
596
  "key": "active",
507
597
  "stateType": 2,
@@ -18,10 +18,11 @@ public class CanStartRezervationTimerMapping : ScriptBase, ITimerMapping
18
18
  if (string.IsNullOrWhiteSpace(startDateTimeStr))
19
19
  return Task.FromResult(TimerSchedule.FromDuration(TimeSpan.FromMinutes(1)));
20
20
 
21
- if (!DateTime.TryParse(startDateTimeStr, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.RoundtripKind, out DateTime startDateTime))
21
+ DateTime startDateTimeUtc;
22
+ if (!TryParseToUtc(startDateTimeStr, out startDateTimeUtc))
22
23
  return Task.FromResult(TimerSchedule.FromDuration(TimeSpan.FromMinutes(1)));
23
24
 
24
- var targetTime = startDateTime.AddMinutes(-15);
25
+ var targetTime = startDateTimeUtc.AddMinutes(-15);
25
26
  var now = DateTime.UtcNow;
26
27
  var duration = targetTime - now;
27
28
 
@@ -31,7 +32,21 @@ public class CanStartRezervationTimerMapping : ScriptBase, ITimerMapping
31
32
  return Task.FromResult(TimerSchedule.FromDuration(duration));
32
33
  }
33
34
 
34
- private string GetString(dynamic obj, string name)
35
+ private bool TryParseToUtc(string dateStr, out DateTime utcDateTime)
36
+ {
37
+ utcDateTime = default;
38
+ if (string.IsNullOrEmpty(dateStr)) return false;
39
+ if (DateTimeOffset.TryParse(dateStr,
40
+ System.Globalization.CultureInfo.InvariantCulture,
41
+ System.Globalization.DateTimeStyles.None, out var dto))
42
+ {
43
+ utcDateTime = dto.UtcDateTime;
44
+ return true;
45
+ }
46
+ return false;
47
+ }
48
+
49
+ private string GetString(dynamic obj, string name)
35
50
  {
36
51
  if (obj == null) return null;
37
52
  try
@@ -36,10 +36,17 @@ public class ChatRoomRemoveMapping : ScriptBase, IMapping
36
36
  var matrixBaseUrl = await GetSecretAsync(secretName, "workflow-secret", "MatrixBaseUrl");
37
37
  if (string.IsNullOrWhiteSpace(matrixBaseUrl))
38
38
  throw new InvalidOperationException("MatrixBaseUrl secret is required");
39
+
40
+ var SynapseServer = await GetSecretAsync(secretName, "workflow-secret", "SynapseServer");
41
+ if (string.IsNullOrWhiteSpace(SynapseServer))
42
+ throw new InvalidOperationException("SynapseServer secret is required");
43
+
39
44
  var fullUrl = matrixBaseUrl.TrimEnd('/') + "/_matrix/client/v3/rooms/" + Uri.EscapeDataString(roomId) + "/kick";
40
45
  httpTask.SetUrl(fullUrl);
41
46
 
42
- var matrixUserId = removeMemberId.Trim().StartsWith("@") ? removeMemberId.Trim() : $"@{removeMemberId.Trim()}:localhost";
47
+ var matrixUserId = removeMemberId.Trim().StartsWith("@") ? removeMemberId.Trim() : $"@{removeMemberId.Trim()}:{SynapseServer}";
48
+
49
+ var sessionId = GetString(chatIntegration, "sessionId");
43
50
 
44
51
  var headers = new Dictionary<string, string>
45
52
  {
@@ -47,6 +54,8 @@ public class ChatRoomRemoveMapping : ScriptBase, IMapping
47
54
  ["Accept"] = "application/json",
48
55
  ["X-Matrix-User"] = user
49
56
  };
57
+ if (!string.IsNullOrWhiteSpace(sessionId))
58
+ headers["Authorization"] = "Bearer " + sessionId;
50
59
  httpTask.SetHeaders(headers);
51
60
 
52
61
  httpTask.SetBody(new { user_id = matrixUserId });
@@ -37,10 +37,17 @@ public class ChatRoomTransferInviteMapping : ScriptBase, IMapping
37
37
  var matrixBaseUrl = await GetSecretAsync(secretName, "workflow-secret", "MatrixBaseUrl");
38
38
  if (string.IsNullOrWhiteSpace(matrixBaseUrl))
39
39
  throw new InvalidOperationException("MatrixBaseUrl secret is required");
40
+
41
+ var SynapseServer = await GetSecretAsync(secretName, "workflow-secret", "SynapseServer");
42
+ if (string.IsNullOrWhiteSpace(SynapseServer))
43
+ throw new InvalidOperationException("SynapseServer secret is required");
44
+
40
45
  var fullUrl = matrixBaseUrl.TrimEnd('/') + "/_matrix/client/v3/rooms/" + Uri.EscapeDataString(roomId) + "/invite";
41
46
  httpTask.SetUrl(fullUrl);
42
47
 
43
- var matrixUserId = newAdvisorId.Trim().StartsWith("@") ? newAdvisorId.Trim() : $"@{newAdvisorId.Trim()}:localhost";
48
+ var matrixUserId = newAdvisorId.Trim().StartsWith("@") ? newAdvisorId.Trim() : $"@{newAdvisorId.Trim()}:{SynapseServer}";
49
+
50
+ var sessionId = GetString(chatIntegration, "sessionId");
44
51
 
45
52
  var headers = new Dictionary<string, string>
46
53
  {
@@ -48,6 +55,8 @@ public class ChatRoomTransferInviteMapping : ScriptBase, IMapping
48
55
  ["Accept"] = "application/json",
49
56
  ["X-Matrix-User"] = user
50
57
  };
58
+ if (!string.IsNullOrWhiteSpace(sessionId))
59
+ headers["Authorization"] = "Bearer " + sessionId;
51
60
  httpTask.SetHeaders(headers);
52
61
 
53
62
  httpTask.SetBody(new { user_id = matrixUserId });
@@ -26,6 +26,10 @@ public class ChatRoomTransferRemoveMapping : ScriptBase, IMapping
26
26
  if (string.IsNullOrWhiteSpace(matrixBaseUrl))
27
27
  throw new InvalidOperationException("MatrixBaseUrl secret is required");
28
28
 
29
+ var SynapseServer = await GetSecretAsync(secretName, "workflow-secret", "SynapseServer");
30
+ if (string.IsNullOrWhiteSpace(SynapseServer))
31
+ throw new InvalidOperationException("SynapseServer secret is required");
32
+
29
33
  var data = context.Instance?.Data;
30
34
  var user = GetString(data, "user");
31
35
  var chatIntegration = data?.chatIntegration;
@@ -38,7 +42,9 @@ public class ChatRoomTransferRemoveMapping : ScriptBase, IMapping
38
42
  var fullUrl = matrixBaseUrl.TrimEnd('/') + "/_matrix/client/v3/rooms/" + Uri.EscapeDataString(roomId) + "/kick";
39
43
  httpTask.SetUrl(fullUrl);
40
44
 
41
- var matrixUserId = currentAdvisorId.Trim().StartsWith("@") ? currentAdvisorId.Trim() : $"@{currentAdvisorId.Trim()}:localhost";
45
+ var matrixUserId = currentAdvisorId.Trim().StartsWith("@") ? currentAdvisorId.Trim() : $"@{currentAdvisorId.Trim()}:{SynapseServer}";
46
+
47
+ var sessionId = GetString(chatIntegration, "sessionId");
42
48
 
43
49
  var headers = new Dictionary<string, string>
44
50
  {
@@ -46,6 +52,8 @@ public class ChatRoomTransferRemoveMapping : ScriptBase, IMapping
46
52
  ["Accept"] = "application/json",
47
53
  ["X-Matrix-User"] = user
48
54
  };
55
+ if (!string.IsNullOrWhiteSpace(sessionId))
56
+ headers["Authorization"] = "Bearer " + sessionId;
49
57
  httpTask.SetHeaders(headers);
50
58
 
51
59
  httpTask.SetBody(new { user_id = matrixUserId });
@@ -37,10 +37,17 @@ public class ChatRoomUpdateMapping : ScriptBase, IMapping
37
37
  var matrixBaseUrl = await GetSecretAsync(secretName, "workflow-secret", "MatrixBaseUrl");
38
38
  if (string.IsNullOrWhiteSpace(matrixBaseUrl))
39
39
  throw new InvalidOperationException("MatrixBaseUrl secret is required");
40
+
41
+ var SynapseServer = await GetSecretAsync(secretName, "workflow-secret", "SynapseServer");
42
+ if (string.IsNullOrWhiteSpace(SynapseServer))
43
+ throw new InvalidOperationException("SynapseServer secret is required");
44
+
40
45
  var fullUrl = matrixBaseUrl.TrimEnd('/') + "/_matrix/client/v3/rooms/" + Uri.EscapeDataString(roomId) + "/invite";
41
46
  httpTask.SetUrl(fullUrl);
42
47
 
43
- var matrixUserId = newMemberId.Trim().StartsWith("@") ? newMemberId.Trim() : $"@{newMemberId.Trim()}:localhost";
48
+ var matrixUserId = newMemberId.Trim().StartsWith("@") ? newMemberId.Trim() : $"@{newMemberId.Trim()}:{SynapseServer}";
49
+
50
+ var sessionId = GetString(chatIntegration, "sessionId");
44
51
 
45
52
  var headers = new Dictionary<string, string>
46
53
  {
@@ -48,6 +55,8 @@ public class ChatRoomUpdateMapping : ScriptBase, IMapping
48
55
  ["Accept"] = "application/json",
49
56
  ["X-Matrix-User"] = user
50
57
  };
58
+ if (!string.IsNullOrWhiteSpace(sessionId))
59
+ headers["Authorization"] = "Bearer " + sessionId;
51
60
  httpTask.SetHeaders(headers);
52
61
 
53
62
  httpTask.SetBody(new { user_id = matrixUserId });