@discordeno/bot 22.0.1-next.f334bb8 → 22.0.1-next.f4e424f

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 (209) hide show
  1. package/dist/bot.d.ts +3 -3
  2. package/dist/bot.d.ts.map +1 -1
  3. package/dist/bot.js +3 -2
  4. package/dist/constants.d.ts.map +1 -1
  5. package/dist/constants.js +2 -2
  6. package/dist/desiredProperties.d.ts +4 -1
  7. package/dist/desiredProperties.d.ts.map +1 -1
  8. package/dist/desiredProperties.js +38 -1
  9. package/dist/events.d.ts +22 -7
  10. package/dist/events.d.ts.map +1 -1
  11. package/dist/events.js +1 -1
  12. package/dist/handlers/guilds/automod/AUTO_MODERATION_ACTION_EXECUTION.js +2 -2
  13. package/dist/handlers/guilds/automod/AUTO_MODERATION_RULE_CREATE.js +2 -2
  14. package/dist/handlers/guilds/automod/AUTO_MODERATION_RULE_DELETE.js +2 -2
  15. package/dist/handlers/guilds/automod/AUTO_MODERATION_RULE_UPDATE.js +2 -2
  16. package/dist/handlers/interactions/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +2 -2
  17. package/dist/handlers/invites/INVITE_CREATE.d.ts.map +1 -1
  18. package/dist/handlers/invites/INVITE_CREATE.js +20 -5
  19. package/dist/handlers/invites/INVITE_DELETE.d.ts.map +1 -1
  20. package/dist/handlers/invites/INVITE_DELETE.js +4 -4
  21. package/dist/handlers/members/GUILD_MEMBER_UPDATE.d.ts.map +1 -1
  22. package/dist/handlers/members/GUILD_MEMBER_UPDATE.js +4 -4
  23. package/dist/handlers/messages/MESSAGE_REACTION_ADD.d.ts.map +1 -1
  24. package/dist/handlers/messages/MESSAGE_REACTION_ADD.js +4 -3
  25. package/dist/handlers/messages/MESSAGE_REACTION_REMOVE.d.ts.map +1 -1
  26. package/dist/handlers/messages/MESSAGE_REACTION_REMOVE.js +4 -3
  27. package/dist/handlers/messages/MESSAGE_REACTION_REMOVE_EMOJI.d.ts.map +1 -1
  28. package/dist/handlers/messages/MESSAGE_REACTION_REMOVE_EMOJI.js +4 -3
  29. package/dist/helpers.d.ts +15 -2
  30. package/dist/helpers.d.ts.map +1 -1
  31. package/dist/helpers.js +52 -12
  32. package/dist/transformers/activity.d.ts +17 -5
  33. package/dist/transformers/activity.d.ts.map +1 -1
  34. package/dist/transformers/activity.js +55 -37
  35. package/dist/transformers/application.d.ts +3 -3
  36. package/dist/transformers/application.d.ts.map +1 -1
  37. package/dist/transformers/application.js +18 -7
  38. package/dist/transformers/applicationCommand.d.ts +3 -2
  39. package/dist/transformers/applicationCommand.d.ts.map +1 -1
  40. package/dist/transformers/applicationCommand.js +19 -17
  41. package/dist/transformers/applicationCommandOption.d.ts +3 -2
  42. package/dist/transformers/applicationCommandOption.d.ts.map +1 -1
  43. package/dist/transformers/applicationCommandOption.js +22 -19
  44. package/dist/transformers/applicationCommandOptionChoice.d.ts +3 -2
  45. package/dist/transformers/applicationCommandOptionChoice.d.ts.map +1 -1
  46. package/dist/transformers/applicationCommandOptionChoice.js +10 -8
  47. package/dist/transformers/applicationCommandPermission.d.ts +7 -3
  48. package/dist/transformers/applicationCommandPermission.d.ts.map +1 -1
  49. package/dist/transformers/applicationCommandPermission.js +20 -13
  50. package/dist/transformers/attachment.d.ts +3 -1
  51. package/dist/transformers/attachment.d.ts.map +1 -1
  52. package/dist/transformers/attachment.js +12 -4
  53. package/dist/transformers/auditLogEntry.d.ts +7 -3
  54. package/dist/transformers/auditLogEntry.d.ts.map +1 -1
  55. package/dist/transformers/auditLogEntry.js +32 -25
  56. package/dist/transformers/automodActionExecution.d.ts +10 -3
  57. package/dist/transformers/automodActionExecution.d.ts.map +1 -1
  58. package/dist/transformers/automodActionExecution.js +35 -23
  59. package/dist/transformers/automodRule.d.ts +7 -3
  60. package/dist/transformers/automodRule.d.ts.map +1 -1
  61. package/dist/transformers/automodRule.js +30 -30
  62. package/dist/transformers/avatarDecorationData.d.ts +3 -2
  63. package/dist/transformers/avatarDecorationData.d.ts.map +1 -1
  64. package/dist/transformers/avatarDecorationData.js +6 -3
  65. package/dist/transformers/channel.d.ts +6 -3
  66. package/dist/transformers/channel.d.ts.map +1 -1
  67. package/dist/transformers/channel.js +11 -6
  68. package/dist/transformers/component.d.ts +9 -4
  69. package/dist/transformers/component.d.ts.map +1 -1
  70. package/dist/transformers/component.js +76 -51
  71. package/dist/transformers/embed.d.ts +16 -3
  72. package/dist/transformers/embed.d.ts.map +1 -1
  73. package/dist/transformers/embed.js +71 -42
  74. package/dist/transformers/emoji.d.ts +7 -3
  75. package/dist/transformers/emoji.d.ts.map +1 -1
  76. package/dist/transformers/emoji.js +10 -5
  77. package/dist/transformers/entitlement.d.ts +3 -2
  78. package/dist/transformers/entitlement.d.ts.map +1 -1
  79. package/dist/transformers/entitlement.js +6 -3
  80. package/dist/transformers/gatewayBot.d.ts +7 -3
  81. package/dist/transformers/gatewayBot.d.ts.map +1 -1
  82. package/dist/transformers/gatewayBot.js +20 -13
  83. package/dist/transformers/guild.d.ts +3 -2
  84. package/dist/transformers/guild.d.ts.map +1 -1
  85. package/dist/transformers/guild.js +25 -25
  86. package/dist/transformers/incidentsData.d.ts +3 -2
  87. package/dist/transformers/incidentsData.d.ts.map +1 -1
  88. package/dist/transformers/incidentsData.js +6 -3
  89. package/dist/transformers/integration.d.ts +10 -3
  90. package/dist/transformers/integration.d.ts.map +1 -1
  91. package/dist/transformers/integration.js +43 -31
  92. package/dist/transformers/interaction.d.ts +20 -12
  93. package/dist/transformers/interaction.d.ts.map +1 -1
  94. package/dist/transformers/interaction.js +47 -32
  95. package/dist/transformers/invite.d.ts +4 -4
  96. package/dist/transformers/invite.d.ts.map +1 -1
  97. package/dist/transformers/invite.js +26 -25
  98. package/dist/transformers/lobby.d.ts +13 -4
  99. package/dist/transformers/lobby.d.ts.map +1 -1
  100. package/dist/transformers/lobby.js +35 -5
  101. package/dist/transformers/member.d.ts +3 -2
  102. package/dist/transformers/member.d.ts.map +1 -1
  103. package/dist/transformers/member.js +6 -3
  104. package/dist/transformers/message.d.ts +20 -10
  105. package/dist/transformers/message.d.ts.map +1 -1
  106. package/dist/transformers/message.js +52 -25
  107. package/dist/transformers/onboarding.d.ts +9 -4
  108. package/dist/transformers/onboarding.d.ts.map +1 -1
  109. package/dist/transformers/onboarding.js +17 -10
  110. package/dist/transformers/poll.d.ts +6 -3
  111. package/dist/transformers/poll.d.ts.map +1 -1
  112. package/dist/transformers/poll.js +14 -7
  113. package/dist/transformers/presence.d.ts +3 -2
  114. package/dist/transformers/presence.d.ts.map +1 -1
  115. package/dist/transformers/presence.js +10 -6
  116. package/dist/transformers/reverse/activity.d.ts +4 -3
  117. package/dist/transformers/reverse/activity.d.ts.map +1 -1
  118. package/dist/transformers/reverse/activity.js +20 -24
  119. package/dist/transformers/reverse/applicationCommand.js +2 -2
  120. package/dist/transformers/reverse/component.d.ts.map +1 -1
  121. package/dist/transformers/reverse/component.js +4 -1
  122. package/dist/transformers/reverse/embed.d.ts.map +1 -1
  123. package/dist/transformers/reverse/embed.js +19 -4
  124. package/dist/transformers/reverse/member.d.ts.map +1 -1
  125. package/dist/transformers/reverse/member.js +4 -2
  126. package/dist/transformers/reverse/presence.d.ts.map +1 -1
  127. package/dist/transformers/reverse/presence.js +3 -2
  128. package/dist/transformers/reverse/user.d.ts +5 -0
  129. package/dist/transformers/reverse/user.d.ts.map +1 -0
  130. package/dist/transformers/reverse/user.js +17 -0
  131. package/dist/transformers/role.d.ts +7 -4
  132. package/dist/transformers/role.d.ts.map +1 -1
  133. package/dist/transformers/role.js +11 -7
  134. package/dist/transformers/scheduledEvent.d.ts +6 -3
  135. package/dist/transformers/scheduledEvent.d.ts.map +1 -1
  136. package/dist/transformers/scheduledEvent.js +10 -5
  137. package/dist/transformers/sku.d.ts +3 -2
  138. package/dist/transformers/sku.d.ts.map +1 -1
  139. package/dist/transformers/sku.js +6 -3
  140. package/dist/transformers/soundboardSound.d.ts +3 -2
  141. package/dist/transformers/soundboardSound.d.ts.map +1 -1
  142. package/dist/transformers/soundboardSound.js +6 -3
  143. package/dist/transformers/stageInstance.d.ts +3 -2
  144. package/dist/transformers/stageInstance.d.ts.map +1 -1
  145. package/dist/transformers/stageInstance.js +6 -3
  146. package/dist/transformers/stageInviteInstance.d.ts +3 -3
  147. package/dist/transformers/stageInviteInstance.d.ts.map +1 -1
  148. package/dist/transformers/stageInviteInstance.js +10 -8
  149. package/dist/transformers/sticker.d.ts +6 -3
  150. package/dist/transformers/sticker.d.ts.map +1 -1
  151. package/dist/transformers/sticker.js +18 -14
  152. package/dist/transformers/subscription.d.ts +3 -2
  153. package/dist/transformers/subscription.d.ts.map +1 -1
  154. package/dist/transformers/subscription.js +6 -3
  155. package/dist/transformers/team.d.ts +7 -3
  156. package/dist/transformers/team.d.ts.map +1 -1
  157. package/dist/transformers/team.js +22 -16
  158. package/dist/transformers/template.d.ts +3 -2
  159. package/dist/transformers/template.d.ts.map +1 -1
  160. package/dist/transformers/template.js +18 -16
  161. package/dist/transformers/threadMember.d.ts +6 -3
  162. package/dist/transformers/threadMember.d.ts.map +1 -1
  163. package/dist/transformers/threadMember.js +20 -16
  164. package/dist/transformers/toggles/channel.d.ts +2 -2
  165. package/dist/transformers/toggles/channel.d.ts.map +1 -1
  166. package/dist/transformers/toggles/channel.js +2 -2
  167. package/dist/transformers/toggles/emoji.d.ts +1 -1
  168. package/dist/transformers/toggles/emoji.d.ts.map +1 -1
  169. package/dist/transformers/toggles/emoji.js +1 -1
  170. package/dist/transformers/toggles/guild.d.ts +1 -1
  171. package/dist/transformers/toggles/guild.d.ts.map +1 -1
  172. package/dist/transformers/toggles/guild.js +1 -1
  173. package/dist/transformers/toggles/role.d.ts +1 -1
  174. package/dist/transformers/toggles/role.d.ts.map +1 -1
  175. package/dist/transformers/toggles/role.js +1 -1
  176. package/dist/transformers/toggles/user.d.ts +1 -1
  177. package/dist/transformers/toggles/user.d.ts.map +1 -1
  178. package/dist/transformers/toggles/user.js +1 -1
  179. package/dist/transformers/toggles/voice.d.ts +1 -1
  180. package/dist/transformers/toggles/voice.d.ts.map +1 -1
  181. package/dist/transformers/toggles/voice.js +1 -1
  182. package/dist/transformers/types.d.ts +194 -39
  183. package/dist/transformers/types.d.ts.map +1 -1
  184. package/dist/transformers/types.js +2 -2
  185. package/dist/transformers/user.d.ts +13 -5
  186. package/dist/transformers/user.d.ts.map +1 -1
  187. package/dist/transformers/user.js +18 -9
  188. package/dist/transformers/voiceRegion.d.ts +3 -2
  189. package/dist/transformers/voiceRegion.d.ts.map +1 -1
  190. package/dist/transformers/voiceRegion.js +12 -10
  191. package/dist/transformers/voiceState.d.ts +3 -3
  192. package/dist/transformers/voiceState.d.ts.map +1 -1
  193. package/dist/transformers/voiceState.js +6 -4
  194. package/dist/transformers/webhook.d.ts +3 -1
  195. package/dist/transformers/webhook.d.ts.map +1 -1
  196. package/dist/transformers/webhook.js +9 -6
  197. package/dist/transformers/welcomeScreen.d.ts +1 -2
  198. package/dist/transformers/welcomeScreen.d.ts.map +1 -1
  199. package/dist/transformers/welcomeScreen.js +1 -1
  200. package/dist/transformers/widget.d.ts +1 -2
  201. package/dist/transformers/widget.d.ts.map +1 -1
  202. package/dist/transformers/widget.js +7 -5
  203. package/dist/transformers/widgetSettings.d.ts +1 -2
  204. package/dist/transformers/widgetSettings.d.ts.map +1 -1
  205. package/dist/transformers/widgetSettings.js +1 -1
  206. package/dist/transformers.d.ts +190 -78
  207. package/dist/transformers.d.ts.map +1 -1
  208. package/dist/transformers.js +81 -21
  209. package/package.json +16 -16
@@ -1,6 +1,12 @@
1
1
  import { MessageComponentTypes } from '@discordeno/types';
2
- export function transformComponent(bot, payload) {
2
+ import { callCustomizer } from '../transformers.js';
3
+ import { ToggleBitfield } from './toggles/ToggleBitfield.js';
4
+ export function transformComponent(bot, payload, extra) {
3
5
  let component;
6
+ // There's nothing to do with a component without a type, as it means an issue on Discord, so we just throw an error
7
+ if (!payload.type) {
8
+ throw new Error(`[Discordeno] Received a component payload without a type in the component transformer.`);
9
+ }
4
10
  // This switch is exhaustive, so we dont need the default case and TS does not error out for the un-initialized component variable
5
11
  switch(payload.type){
6
12
  case MessageComponentTypes.ActionRow:
@@ -64,26 +70,35 @@ export function transformComponent(bot, payload) {
64
70
  component = transformCheckboxComponent(bot, payload);
65
71
  break;
66
72
  }
67
- return bot.transformers.customizers.component(bot, payload, component);
73
+ return callCustomizer('component', bot, payload, component, {
74
+ partial: extra?.partial ?? false
75
+ });
68
76
  }
69
- export function transformUnfurledMediaItem(bot, payload) {
77
+ export function transformUnfurledMediaItem(bot, payload, extra) {
70
78
  const props = bot.transformers.desiredProperties.unfurledMediaItem;
71
79
  const mediaItem = {};
72
80
  if (props.url && payload.url) mediaItem.url = payload.url;
73
81
  if (props.proxyUrl && payload.proxy_url) mediaItem.proxyUrl = payload.proxy_url;
74
82
  if (props.height && payload.height) mediaItem.height = payload.height;
75
83
  if (props.width && payload.width) mediaItem.width = payload.width;
84
+ if (props.placeholder && payload.placeholder) mediaItem.placeholder = payload.placeholder;
85
+ if (props.placeholderVersion && payload.placeholder_version) mediaItem.placeholderVersion = payload.placeholder_version;
76
86
  if (props.contentType && payload.content_type) mediaItem.contentType = payload.content_type;
87
+ if (props.flags && payload.flags) mediaItem.flags = new ToggleBitfield(payload.flags);
77
88
  if (props.attachmentId && payload.attachment_id) mediaItem.attachmentId = bot.transformers.snowflake(payload.attachment_id);
78
- return bot.transformers.customizers.unfurledMediaItem(bot, payload, mediaItem);
89
+ return callCustomizer('unfurledMediaItem', bot, payload, mediaItem, {
90
+ partial: extra?.partial ?? false
91
+ });
79
92
  }
80
- export function transformMediaGalleryItem(bot, payload) {
93
+ export function transformMediaGalleryItem(bot, payload, extra) {
81
94
  const props = bot.transformers.desiredProperties.mediaGalleryItem;
82
95
  const galleryItem = {};
83
96
  if (props.media && payload.media) galleryItem.media = bot.transformers.unfurledMediaItem(bot, payload.media);
84
97
  if (props.description && payload.description) galleryItem.description = payload.description;
85
98
  if (props.spoiler && payload.spoiler) galleryItem.spoiler = payload.spoiler;
86
- return bot.transformers.customizers.mediaGalleryItem(bot, payload, galleryItem);
99
+ return callCustomizer('mediaGalleryItem', bot, payload, galleryItem, {
100
+ partial: extra?.partial ?? false
101
+ });
87
102
  }
88
103
  function transformActionRow(bot, payload) {
89
104
  const props = bot.transformers.desiredProperties.component;
@@ -111,8 +126,9 @@ function transformButtonComponent(bot, payload) {
111
126
  if (props.label && payload.label) button.label = payload.label;
112
127
  if (props.customId && payload.custom_id) button.customId = payload.custom_id;
113
128
  if (props.style && payload.style) button.style = payload.style;
114
- // @ts-expect-error TODO: Deal with partials
115
- if (props.emoji && payload.emoji) button.emoji = bot.transformers.emoji(bot, payload.emoji);
129
+ if (props.emoji && payload.emoji) button.emoji = bot.transformers.emoji(bot, payload.emoji, {
130
+ partial: true
131
+ });
116
132
  if (props.url && payload.url) button.url = payload.url;
117
133
  if (props.disabled && payload.disabled) button.disabled = payload.disabled;
118
134
  if (props.skuId && payload.sku_id) button.skuId = bot.transformers.snowflake(payload.sku_id);
@@ -125,7 +141,7 @@ function transformInputTextComponent(bot, payload) {
125
141
  if (props.id && payload.id) input.id = payload.id;
126
142
  if (props.value && payload.value) input.value = payload.value;
127
143
  if (props.customId && payload.custom_id) input.customId = payload.custom_id;
128
- // Check if it is the component or the response
144
+ // We assume that if we find 'values' it is the interaction response
129
145
  if ('style' in payload) {
130
146
  if (props.style && payload.style) input.style = payload.style;
131
147
  if (props.required && payload.required) input.required = payload.required;
@@ -142,14 +158,15 @@ function transformStringSelectMenuComponent(bot, payload) {
142
158
  if (props.type && payload.type) select.type = payload.type;
143
159
  if (props.id && payload.id) select.id = payload.id;
144
160
  if (props.customId && payload.custom_id) select.customId = payload.custom_id;
145
- // Check if this is the string select response
161
+ // We assume that if we find 'values' it is the interaction response
146
162
  if ('values' in payload) {
147
163
  if (props.values && payload.values) select.values = payload.values;
148
164
  } else {
149
- if (props.placeholder && payload.placeholder) select.placeholder = payload.placeholder;
150
- if (props.minValues && payload.min_values) select.minValues = payload.min_values;
151
- if (props.maxValues && payload.max_values) select.maxValues = payload.max_values;
152
- if (props.options && payload.options) select.options = payload.options.map((option)=>({
165
+ const _payload = payload;
166
+ if (props.placeholder && _payload.placeholder) select.placeholder = _payload.placeholder;
167
+ if (props.minValues && _payload.min_values) select.minValues = _payload.min_values;
168
+ if (props.maxValues && _payload.max_values) select.maxValues = _payload.max_values;
169
+ if (props.options && _payload.options) select.options = _payload.options.map((option)=>({
153
170
  label: option.label,
154
171
  value: option.value,
155
172
  description: option.description,
@@ -160,7 +177,7 @@ function transformStringSelectMenuComponent(bot, payload) {
160
177
  } : undefined,
161
178
  default: option.default
162
179
  }));
163
- if (props.disabled && payload.disabled) select.disabled = payload.disabled;
180
+ if (props.disabled && _payload.disabled) select.disabled = _payload.disabled;
164
181
  }
165
182
  return select;
166
183
  }
@@ -170,19 +187,20 @@ function transformUserSelectMenuComponent(bot, payload) {
170
187
  if (props.type && payload.type) select.type = payload.type;
171
188
  if (props.id && payload.id) select.id = payload.id;
172
189
  if (props.customId && payload.custom_id) select.customId = payload.custom_id;
173
- // Check if this is the user select response
190
+ // We assume that if we find 'values' it is the interaction response
174
191
  if ('values' in payload) {
175
192
  if (props.values && payload.values) select.values = payload.values;
176
193
  if (props.resolved && payload.resolved) select.resolved = bot.transformers.interactionDataResolved(bot, payload.resolved);
177
194
  } else {
178
- if (props.placeholder && payload.placeholder) select.placeholder = payload.placeholder;
179
- if (props.minValues && payload.min_values) select.minValues = payload.min_values;
180
- if (props.maxValues && payload.max_values) select.maxValues = payload.max_values;
181
- if (props.defaultValues && payload.default_values) select.defaultValues = payload.default_values.map((defaultValue)=>({
195
+ const _payload = payload;
196
+ if (props.placeholder && _payload.placeholder) select.placeholder = _payload.placeholder;
197
+ if (props.minValues && _payload.min_values) select.minValues = _payload.min_values;
198
+ if (props.maxValues && _payload.max_values) select.maxValues = _payload.max_values;
199
+ if (props.defaultValues && _payload.default_values) select.defaultValues = _payload.default_values.map((defaultValue)=>({
182
200
  id: bot.transformers.snowflake(defaultValue.id),
183
201
  type: defaultValue.type
184
202
  }));
185
- if (props.disabled && payload.disabled) select.disabled = payload.disabled;
203
+ if (props.disabled && _payload.disabled) select.disabled = _payload.disabled;
186
204
  }
187
205
  return select;
188
206
  }
@@ -192,19 +210,20 @@ function transformRoleSelectMenuComponent(bot, payload) {
192
210
  if (props.type && payload.type) select.type = payload.type;
193
211
  if (props.id && payload.id) select.id = payload.id;
194
212
  if (props.customId && payload.custom_id) select.customId = payload.custom_id;
195
- // Check if this is the role select response
213
+ // We assume that if we find 'values' it is the interaction response
196
214
  if ('values' in payload) {
197
215
  if (props.values && payload.values) select.values = payload.values;
198
216
  if (props.resolved && payload.resolved) select.resolved = bot.transformers.interactionDataResolved(bot, payload.resolved);
199
217
  } else {
200
- if (props.placeholder && payload.placeholder) select.placeholder = payload.placeholder;
201
- if (props.minValues && payload.min_values) select.minValues = payload.min_values;
202
- if (props.maxValues && payload.max_values) select.maxValues = payload.max_values;
203
- if (props.defaultValues && payload.default_values) select.defaultValues = payload.default_values.map((defaultValue)=>({
218
+ const _payload = payload;
219
+ if (props.placeholder && _payload.placeholder) select.placeholder = _payload.placeholder;
220
+ if (props.minValues && _payload.min_values) select.minValues = _payload.min_values;
221
+ if (props.maxValues && _payload.max_values) select.maxValues = _payload.max_values;
222
+ if (props.defaultValues && _payload.default_values) select.defaultValues = _payload.default_values.map((defaultValue)=>({
204
223
  id: bot.transformers.snowflake(defaultValue.id),
205
224
  type: defaultValue.type
206
225
  }));
207
- if (props.disabled && payload.disabled) select.disabled = payload.disabled;
226
+ if (props.disabled && _payload.disabled) select.disabled = _payload.disabled;
208
227
  }
209
228
  return select;
210
229
  }
@@ -214,19 +233,20 @@ function transformMentionableSelectMenuComponent(bot, payload) {
214
233
  if (props.type && payload.type) select.type = payload.type;
215
234
  if (props.id && payload.id) select.id = payload.id;
216
235
  if (props.customId && payload.custom_id) select.customId = payload.custom_id;
217
- // Check if this is the mentionable select response
236
+ // We assume that if we find 'values' it is the interaction response
218
237
  if ('values' in payload) {
219
238
  if (props.values && payload.values) select.values = payload.values;
220
239
  if (props.resolved && payload.resolved) select.resolved = bot.transformers.interactionDataResolved(bot, payload.resolved);
221
240
  } else {
222
- if (props.placeholder && payload.placeholder) select.placeholder = payload.placeholder;
223
- if (props.minValues && payload.min_values) select.minValues = payload.min_values;
224
- if (props.maxValues && payload.max_values) select.maxValues = payload.max_values;
225
- if (props.defaultValues && payload.default_values) select.defaultValues = payload.default_values.map((defaultValue)=>({
241
+ const _payload = payload;
242
+ if (props.placeholder && _payload.placeholder) select.placeholder = _payload.placeholder;
243
+ if (props.minValues && _payload.min_values) select.minValues = _payload.min_values;
244
+ if (props.maxValues && _payload.max_values) select.maxValues = _payload.max_values;
245
+ if (props.defaultValues && _payload.default_values) select.defaultValues = _payload.default_values.map((defaultValue)=>({
226
246
  id: bot.transformers.snowflake(defaultValue.id),
227
247
  type: defaultValue.type
228
248
  }));
229
- if (props.disabled && payload.disabled) select.disabled = payload.disabled;
249
+ if (props.disabled && _payload.disabled) select.disabled = _payload.disabled;
230
250
  }
231
251
  return select;
232
252
  }
@@ -236,20 +256,21 @@ function transformChannelSelectMenuComponent(bot, payload) {
236
256
  if (props.type && payload.type) select.type = payload.type;
237
257
  if (props.id && payload.id) select.id = payload.id;
238
258
  if (props.customId && payload.custom_id) select.customId = payload.custom_id;
239
- // Check if this is the channel select response
259
+ // We assume that if we find 'values' it is the interaction response
240
260
  if ('values' in payload) {
241
261
  if (props.values && payload.values) select.values = payload.values;
242
262
  if (props.resolved && payload.resolved) select.resolved = bot.transformers.interactionDataResolved(bot, payload.resolved);
243
263
  } else {
244
- if (props.placeholder && payload.placeholder) select.placeholder = payload.placeholder;
245
- if (props.minValues && payload.min_values) select.minValues = payload.min_values;
246
- if (props.maxValues && payload.max_values) select.maxValues = payload.max_values;
247
- if (props.defaultValues && payload.default_values) select.defaultValues = payload.default_values.map((defaultValue)=>({
264
+ const _payload = payload;
265
+ if (props.placeholder && _payload.placeholder) select.placeholder = _payload.placeholder;
266
+ if (props.minValues && _payload.min_values) select.minValues = _payload.min_values;
267
+ if (props.maxValues && _payload.max_values) select.maxValues = _payload.max_values;
268
+ if (props.defaultValues && _payload.default_values) select.defaultValues = _payload.default_values.map((defaultValue)=>({
248
269
  id: bot.transformers.snowflake(defaultValue.id),
249
270
  type: defaultValue.type
250
271
  }));
251
- if (props.channelTypes && payload.channel_types) select.channelTypes = payload.channel_types;
252
- if (props.disabled && payload.disabled) select.disabled = payload.disabled;
272
+ if (props.channelTypes && _payload.channel_types) select.channelTypes = _payload.channel_types;
273
+ if (props.disabled && _payload.disabled) select.disabled = _payload.disabled;
253
274
  }
254
275
  return select;
255
276
  }
@@ -296,7 +317,7 @@ function transformTextDisplayComponent(bot, payload) {
296
317
  const textDisplay = {};
297
318
  if (props.type && payload.type) textDisplay.type = payload.type;
298
319
  if (props.id && payload.id) textDisplay.id = payload.id;
299
- // That that this isn't a response
320
+ // We assume that if we find 'content' it is the component
300
321
  if ('content' in payload) {
301
322
  if (props.content && payload.content) textDisplay.content = payload.content;
302
323
  }
@@ -316,7 +337,7 @@ function transformLabelComponent(bot, payload) {
316
337
  const label = {};
317
338
  if (props.type && payload.type) label.type = payload.type;
318
339
  if (props.id && payload.id) label.id = payload.id;
319
- // Check that this isn't a response
340
+ // We assume that if we find 'label' it is the component
320
341
  if ('label' in payload) {
321
342
  if (props.label && payload.label) label.label = payload.label;
322
343
  if (props.description && payload.description) label.description = payload.description;
@@ -330,13 +351,15 @@ function transformFileUploadComponent(bot, payload) {
330
351
  if (props.type && payload.type) fileUpload.type = payload.type;
331
352
  if (props.id && payload.id) fileUpload.id = payload.id;
332
353
  if (props.customId && payload.custom_id) fileUpload.customId = payload.custom_id;
333
- // Check that this is a response
354
+ // We assume that if we find 'values' it is the interaction response
334
355
  if ('values' in payload) {
335
356
  if (props.values && payload.values) fileUpload.values = payload.values;
336
357
  } else {
337
- if (props.minValues && payload.min_values) fileUpload.minValues = payload.min_values;
338
- if (props.maxValues && payload.max_values) fileUpload.maxValues = payload.max_values;
339
- if (props.required && payload.required) fileUpload.required = payload.required;
358
+ const _payload = payload;
359
+ if (props.minValues && _payload.min_values) fileUpload.minValues = _payload.min_values;
360
+ if (props.maxValues && _payload.max_values) fileUpload.maxValues = _payload.max_values;
361
+ if (props.required && _payload.required) fileUpload.required = _payload.required;
362
+ if (props.fileTypes && _payload.file_types) fileUpload.fileTypes = _payload.file_types;
340
363
  }
341
364
  return fileUpload;
342
365
  }
@@ -346,12 +369,13 @@ function transformRadioGroupComponent(bot, payload) {
346
369
  if (props.type && payload.type) radioGroup.type = payload.type;
347
370
  if (props.id && payload.id) radioGroup.id = payload.id;
348
371
  if (props.customId && payload.custom_id) radioGroup.customId = payload.custom_id;
349
- // Check if this is the component (has options) or the interaction response (modal submit, has value)
372
+ // We assume that if we find 'options' it is the component
350
373
  if ('options' in payload) {
351
374
  if (props.options && payload.options) radioGroup.options = payload.options;
352
375
  if (props.required && payload.required !== undefined) radioGroup.required = payload.required;
353
376
  } else {
354
- if (props.value) radioGroup.value = payload.value ?? undefined;
377
+ const _payload = payload;
378
+ if (props.value) radioGroup.value = _payload.value ?? undefined;
355
379
  }
356
380
  return radioGroup;
357
381
  }
@@ -361,14 +385,15 @@ function transformCheckboxGroupComponent(bot, payload) {
361
385
  if (props.type && payload.type) checkboxGroup.type = payload.type;
362
386
  if (props.id && payload.id) checkboxGroup.id = payload.id;
363
387
  if (props.customId && payload.custom_id) checkboxGroup.customId = payload.custom_id;
364
- // Check if this is the component (has options) or the interaction response (modal submit, has values)
388
+ // We assume that if we find 'options' it is the component
365
389
  if ('options' in payload) {
366
390
  if (props.options && payload.options) checkboxGroup.options = payload.options;
367
391
  if (props.minValues && payload.min_values !== undefined) checkboxGroup.minValues = payload.min_values;
368
392
  if (props.maxValues && payload.max_values !== undefined) checkboxGroup.maxValues = payload.max_values;
369
393
  if (props.required && payload.required !== undefined) checkboxGroup.required = payload.required;
370
394
  } else {
371
- if (props.values && payload.values) checkboxGroup.values = payload.values;
395
+ const _payload = payload;
396
+ if (props.values && _payload.values) checkboxGroup.values = _payload.values;
372
397
  }
373
398
  return checkboxGroup;
374
399
  }
@@ -383,4 +408,4 @@ function transformCheckboxComponent(bot, payload) {
383
408
  return checkbox;
384
409
  }
385
410
 
386
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2Zvcm1lcnMvY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgRGlzY29yZEFjdGlvblJvdyxcbiAgdHlwZSBEaXNjb3JkQnV0dG9uQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRDaGFubmVsU2VsZWN0Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRDaGFubmVsU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbCxcbiAgdHlwZSBEaXNjb3JkQ2hlY2tib3hDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZENoZWNrYm94R3JvdXBDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZENoZWNrYm94R3JvdXBJbnRlcmFjdGlvblJlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRDaGVja2JveEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZENvbnRhaW5lckNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkRmlsZUNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkRmlsZVVwbG9hZENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkRmlsZVVwbG9hZEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZExhYmVsQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRMYWJlbEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZE1lZGlhR2FsbGVyeUNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkTWVkaWFHYWxsZXJ5SXRlbSxcbiAgdHlwZSBEaXNjb3JkTWVudGlvbmFibGVTZWxlY3RDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZE1lbnRpb25hYmxlU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbCxcbiAgdHlwZSBEaXNjb3JkTWVzc2FnZUNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkTWVzc2FnZUNvbXBvbmVudEZyb21Nb2RhbEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZFJhZGlvR3JvdXBDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZFJhZGlvR3JvdXBJbnRlcmFjdGlvblJlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRSb2xlU2VsZWN0Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRSb2xlU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbCxcbiAgdHlwZSBEaXNjb3JkU2VjdGlvbkNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkU2VwYXJhdG9yQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRTdHJpbmdTZWxlY3RDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZFN0cmluZ1NlbGVjdEludGVyYWN0aW9uUmVzcG9uc2VGcm9tTW9kYWwsXG4gIHR5cGUgRGlzY29yZFRleHREaXNwbGF5Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRUZXh0RGlzcGxheUludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZFRleHRJbnB1dENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkVGV4dElucHV0SW50ZXJhY3Rpb25SZXNwb25zZSxcbiAgdHlwZSBEaXNjb3JkVGh1bWJuYWlsQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRVbmZ1cmxlZE1lZGlhSXRlbSxcbiAgdHlwZSBEaXNjb3JkVXNlclNlbGVjdENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkVXNlclNlbGVjdEludGVyYWN0aW9uUmVzcG9uc2VGcm9tTW9kYWwsXG4gIE1lc3NhZ2VDb21wb25lbnRUeXBlcyxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBCb3QgfSBmcm9tICcuLi9ib3QuanMnO1xuaW1wb3J0IHR5cGUgeyBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yLCBTZXR1cERlc2lyZWRQcm9wcywgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMgfSBmcm9tICcuLi9kZXNpcmVkUHJvcGVydGllcy5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudCwgTWVkaWFHYWxsZXJ5SXRlbSwgVW5mdXJsZWRNZWRpYUl0ZW0gfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybUNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZE1lc3NhZ2VDb21wb25lbnQgfCBEaXNjb3JkTWVzc2FnZUNvbXBvbmVudEZyb21Nb2RhbEludGVyYWN0aW9uUmVzcG9uc2UpOiBDb21wb25lbnQge1xuICBsZXQgY29tcG9uZW50OiBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICAvLyBUaGlzIHN3aXRjaCBpcyBleGhhdXN0aXZlLCBzbyB3ZSBkb250IG5lZWQgdGhlIGRlZmF1bHQgY2FzZSBhbmQgVFMgZG9lcyBub3QgZXJyb3Igb3V0IGZvciB0aGUgdW4taW5pdGlhbGl6ZWQgY29tcG9uZW50IHZhcmlhYmxlXG4gIHN3aXRjaCAocGF5bG9hZC50eXBlKSB7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuQWN0aW9uUm93OlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtQWN0aW9uUm93KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5CdXR0b246XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1CdXR0b25Db21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkNvbnRhaW5lcjpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUNvbnRhaW5lckNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuVGV4dElucHV0OlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtSW5wdXRUZXh0Q29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5TdHJpbmdTZWxlY3Q6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1TdHJpbmdTZWxlY3RNZW51Q29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5Vc2VyU2VsZWN0OlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtVXNlclNlbGVjdE1lbnVDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlJvbGVTZWxlY3Q6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1Sb2xlU2VsZWN0TWVudUNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuTWVudGlvbmFibGVTZWxlY3Q6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1NZW50aW9uYWJsZVNlbGVjdE1lbnVDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkNoYW5uZWxTZWxlY3Q6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1DaGFubmVsU2VsZWN0TWVudUNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuU2VjdGlvbjpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybVNlY3Rpb25Db21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlRodW1ibmFpbDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybVRodW1ibmFpbENvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuTWVkaWFHYWxsZXJ5OlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtTWVkaWFHYWxsZXJ5Q29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5GaWxlOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtRmlsZUNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuU2VwYXJhdG9yOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtU2VwYXJhdG9yQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5UZXh0RGlzcGxheTpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybVRleHREaXNwbGF5Q29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5MYWJlbDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUxhYmVsQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5GaWxlVXBsb2FkOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtRmlsZVVwbG9hZENvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuUmFkaW9Hcm91cDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybVJhZGlvR3JvdXBDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkNoZWNrYm94R3JvdXA6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1DaGVja2JveEdyb3VwQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5DaGVja2JveDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUNoZWNrYm94Q29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBib3QudHJhbnNmb3JtZXJzLmN1c3RvbWl6ZXJzLmNvbXBvbmVudChib3QsIHBheWxvYWQsIGNvbXBvbmVudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1VbmZ1cmxlZE1lZGlhSXRlbShib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZFVuZnVybGVkTWVkaWFJdGVtKTogVW5mdXJsZWRNZWRpYUl0ZW0ge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMudW5mdXJsZWRNZWRpYUl0ZW07XG4gIGNvbnN0IG1lZGlhSXRlbSA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPFVuZnVybGVkTWVkaWFJdGVtLCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnVybCAmJiBwYXlsb2FkLnVybCkgbWVkaWFJdGVtLnVybCA9IHBheWxvYWQudXJsO1xuICBpZiAocHJvcHMucHJveHlVcmwgJiYgcGF5bG9hZC5wcm94eV91cmwpIG1lZGlhSXRlbS5wcm94eVVybCA9IHBheWxvYWQucHJveHlfdXJsO1xuICBpZiAocHJvcHMuaGVpZ2h0ICYmIHBheWxvYWQuaGVpZ2h0KSBtZWRpYUl0ZW0uaGVpZ2h0ID0gcGF5bG9hZC5oZWlnaHQ7XG4gIGlmIChwcm9wcy53aWR0aCAmJiBwYXlsb2FkLndpZHRoKSBtZWRpYUl0ZW0ud2lkdGggPSBwYXlsb2FkLndpZHRoO1xuICBpZiAocHJvcHMuY29udGVudFR5cGUgJiYgcGF5bG9hZC5jb250ZW50X3R5cGUpIG1lZGlhSXRlbS5jb250ZW50VHlwZSA9IHBheWxvYWQuY29udGVudF90eXBlO1xuICBpZiAocHJvcHMuYXR0YWNobWVudElkICYmIHBheWxvYWQuYXR0YWNobWVudF9pZCkgbWVkaWFJdGVtLmF0dGFjaG1lbnRJZCA9IGJvdC50cmFuc2Zvcm1lcnMuc25vd2ZsYWtlKHBheWxvYWQuYXR0YWNobWVudF9pZCk7XG5cbiAgcmV0dXJuIGJvdC50cmFuc2Zvcm1lcnMuY3VzdG9taXplcnMudW5mdXJsZWRNZWRpYUl0ZW0oYm90LCBwYXlsb2FkLCBtZWRpYUl0ZW0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWVkaWFHYWxsZXJ5SXRlbShib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZE1lZGlhR2FsbGVyeUl0ZW0pOiBNZWRpYUdhbGxlcnlJdGVtIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLm1lZGlhR2FsbGVyeUl0ZW07XG4gIGNvbnN0IGdhbGxlcnlJdGVtID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8TWVkaWFHYWxsZXJ5SXRlbSwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy5tZWRpYSAmJiBwYXlsb2FkLm1lZGlhKSBnYWxsZXJ5SXRlbS5tZWRpYSA9IGJvdC50cmFuc2Zvcm1lcnMudW5mdXJsZWRNZWRpYUl0ZW0oYm90LCBwYXlsb2FkLm1lZGlhKTtcbiAgaWYgKHByb3BzLmRlc2NyaXB0aW9uICYmIHBheWxvYWQuZGVzY3JpcHRpb24pIGdhbGxlcnlJdGVtLmRlc2NyaXB0aW9uID0gcGF5bG9hZC5kZXNjcmlwdGlvbjtcbiAgaWYgKHByb3BzLnNwb2lsZXIgJiYgcGF5bG9hZC5zcG9pbGVyKSBnYWxsZXJ5SXRlbS5zcG9pbGVyID0gcGF5bG9hZC5zcG9pbGVyO1xuXG4gIHJldHVybiBib3QudHJhbnNmb3JtZXJzLmN1c3RvbWl6ZXJzLm1lZGlhR2FsbGVyeUl0ZW0oYm90LCBwYXlsb2FkLCBnYWxsZXJ5SXRlbSk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUFjdGlvblJvdyhib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZEFjdGlvblJvdykge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBhY3Rpb25Sb3cgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIGFjdGlvblJvdy50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgYWN0aW9uUm93LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmNvbXBvbmVudHMgJiYgcGF5bG9hZC5jb21wb25lbnRzKVxuICAgIGFjdGlvblJvdy5jb21wb25lbnRzID0gcGF5bG9hZC5jb21wb25lbnRzLm1hcCgoY29tcG9uZW50KSA9PiBib3QudHJhbnNmb3JtZXJzLmNvbXBvbmVudChib3QsIGNvbXBvbmVudCkpO1xuXG4gIHJldHVybiBhY3Rpb25Sb3c7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUNvbnRhaW5lckNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZENvbnRhaW5lckNvbXBvbmVudCkge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBjb250YWluZXIgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIGNvbnRhaW5lci50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgY29udGFpbmVyLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmFjY2VudENvbG9yICYmIHBheWxvYWQuYWNjZW50X2NvbG9yKSBjb250YWluZXIuYWNjZW50Q29sb3IgPSBwYXlsb2FkLmFjY2VudF9jb2xvcjtcbiAgaWYgKHByb3BzLnNwb2lsZXIgJiYgcGF5bG9hZC5zcG9pbGVyKSBjb250YWluZXIuc3BvaWxlciA9IHBheWxvYWQuc3BvaWxlcjtcbiAgaWYgKHByb3BzLmNvbXBvbmVudHMgJiYgcGF5bG9hZC5jb21wb25lbnRzKVxuICAgIGNvbnRhaW5lci5jb21wb25lbnRzID0gcGF5bG9hZC5jb21wb25lbnRzLm1hcCgoY29tcG9uZW50KSA9PiBib3QudHJhbnNmb3JtZXJzLmNvbXBvbmVudChib3QsIGNvbXBvbmVudCkpO1xuXG4gIHJldHVybiBjb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUJ1dHRvbkNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZEJ1dHRvbkNvbXBvbmVudCkge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBidXR0b24gPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIGJ1dHRvbi50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgYnV0dG9uLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmxhYmVsICYmIHBheWxvYWQubGFiZWwpIGJ1dHRvbi5sYWJlbCA9IHBheWxvYWQubGFiZWw7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgYnV0dG9uLmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG4gIGlmIChwcm9wcy5zdHlsZSAmJiBwYXlsb2FkLnN0eWxlKSBidXR0b24uc3R5bGUgPSBwYXlsb2FkLnN0eWxlO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IERlYWwgd2l0aCBwYXJ0aWFsc1xuICBpZiAocHJvcHMuZW1vamkgJiYgcGF5bG9hZC5lbW9qaSkgYnV0dG9uLmVtb2ppID0gYm90LnRyYW5zZm9ybWVycy5lbW9qaShib3QsIHBheWxvYWQuZW1vamkpO1xuICBpZiAocHJvcHMudXJsICYmIHBheWxvYWQudXJsKSBidXR0b24udXJsID0gcGF5bG9hZC51cmw7XG4gIGlmIChwcm9wcy5kaXNhYmxlZCAmJiBwYXlsb2FkLmRpc2FibGVkKSBidXR0b24uZGlzYWJsZWQgPSBwYXlsb2FkLmRpc2FibGVkO1xuICBpZiAocHJvcHMuc2t1SWQgJiYgcGF5bG9hZC5za3VfaWQpIGJ1dHRvbi5za3VJZCA9IGJvdC50cmFuc2Zvcm1lcnMuc25vd2ZsYWtlKHBheWxvYWQuc2t1X2lkKTtcblxuICByZXR1cm4gYnV0dG9uO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1JbnB1dFRleHRDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IERpc2NvcmRUZXh0SW5wdXRDb21wb25lbnQgfCBEaXNjb3JkVGV4dElucHV0SW50ZXJhY3Rpb25SZXNwb25zZSkge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBpbnB1dCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgaW5wdXQudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGlucHV0LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLnZhbHVlICYmIHBheWxvYWQudmFsdWUpIGlucHV0LnZhbHVlID0gcGF5bG9hZC52YWx1ZTtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBpbnB1dC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIC8vIENoZWNrIGlmIGl0IGlzIHRoZSBjb21wb25lbnQgb3IgdGhlIHJlc3BvbnNlXG4gIGlmICgnc3R5bGUnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMuc3R5bGUgJiYgcGF5bG9hZC5zdHlsZSkgaW5wdXQuc3R5bGUgPSBwYXlsb2FkLnN0eWxlO1xuICAgIGlmIChwcm9wcy5yZXF1aXJlZCAmJiBwYXlsb2FkLnJlcXVpcmVkKSBpbnB1dC5yZXF1aXJlZCA9IHBheWxvYWQucmVxdWlyZWQ7XG4gICAgaWYgKHByb3BzLmxhYmVsICYmIHBheWxvYWQubGFiZWwpIGlucHV0LmxhYmVsID0gcGF5bG9hZC5sYWJlbDtcbiAgICBpZiAocHJvcHMucGxhY2Vob2xkZXIgJiYgcGF5bG9hZC5wbGFjZWhvbGRlcikgaW5wdXQucGxhY2Vob2xkZXIgPSBwYXlsb2FkLnBsYWNlaG9sZGVyO1xuICAgIGlmIChwcm9wcy5taW5MZW5ndGggJiYgcGF5bG9hZC5taW5fbGVuZ3RoKSBpbnB1dC5taW5MZW5ndGggPSBwYXlsb2FkLm1pbl9sZW5ndGg7XG4gICAgaWYgKHByb3BzLm1heExlbmd0aCAmJiBwYXlsb2FkLm1heF9sZW5ndGgpIGlucHV0Lm1heExlbmd0aCA9IHBheWxvYWQubWF4X2xlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBpbnB1dDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU3RyaW5nU2VsZWN0TWVudUNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZFN0cmluZ1NlbGVjdENvbXBvbmVudCB8IERpc2NvcmRTdHJpbmdTZWxlY3RJbnRlcmFjdGlvblJlc3BvbnNlRnJvbU1vZGFsKSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHNlbGVjdCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgc2VsZWN0LnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBzZWxlY3QuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY3VzdG9tSWQgJiYgcGF5bG9hZC5jdXN0b21faWQpIHNlbGVjdC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIC8vIENoZWNrIGlmIHRoaXMgaXMgdGhlIHN0cmluZyBzZWxlY3QgcmVzcG9uc2VcbiAgaWYgKCd2YWx1ZXMnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMudmFsdWVzICYmIHBheWxvYWQudmFsdWVzKSBzZWxlY3QudmFsdWVzID0gcGF5bG9hZC52YWx1ZXM7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHByb3BzLnBsYWNlaG9sZGVyICYmIHBheWxvYWQucGxhY2Vob2xkZXIpIHNlbGVjdC5wbGFjZWhvbGRlciA9IHBheWxvYWQucGxhY2Vob2xkZXI7XG4gICAgaWYgKHByb3BzLm1pblZhbHVlcyAmJiBwYXlsb2FkLm1pbl92YWx1ZXMpIHNlbGVjdC5taW5WYWx1ZXMgPSBwYXlsb2FkLm1pbl92YWx1ZXM7XG4gICAgaWYgKHByb3BzLm1heFZhbHVlcyAmJiBwYXlsb2FkLm1heF92YWx1ZXMpIHNlbGVjdC5tYXhWYWx1ZXMgPSBwYXlsb2FkLm1heF92YWx1ZXM7XG4gICAgaWYgKHByb3BzLm9wdGlvbnMgJiYgcGF5bG9hZC5vcHRpb25zKVxuICAgICAgc2VsZWN0Lm9wdGlvbnMgPSBwYXlsb2FkLm9wdGlvbnMubWFwKChvcHRpb24pID0+ICh7XG4gICAgICAgIGxhYmVsOiBvcHRpb24ubGFiZWwsXG4gICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb24uZGVzY3JpcHRpb24sXG4gICAgICAgIGVtb2ppOiBvcHRpb24uZW1vamlcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgaWQ6IG9wdGlvbi5lbW9qaS5pZCA/IGJvdC50cmFuc2Zvcm1lcnMuc25vd2ZsYWtlKG9wdGlvbi5lbW9qaS5pZCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIG5hbWU6IG9wdGlvbi5lbW9qaS5uYW1lID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgYW5pbWF0ZWQ6IG9wdGlvbi5lbW9qaS5hbmltYXRlZCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGVmYXVsdDogb3B0aW9uLmRlZmF1bHQsXG4gICAgICB9KSk7XG4gICAgaWYgKHByb3BzLmRpc2FibGVkICYmIHBheWxvYWQuZGlzYWJsZWQpIHNlbGVjdC5kaXNhYmxlZCA9IHBheWxvYWQuZGlzYWJsZWQ7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Vc2VyU2VsZWN0TWVudUNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZFVzZXJTZWxlY3RDb21wb25lbnQgfCBEaXNjb3JkVXNlclNlbGVjdEludGVyYWN0aW9uUmVzcG9uc2VGcm9tTW9kYWwpIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3Qgc2VsZWN0ID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBzZWxlY3QudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHNlbGVjdC5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgc2VsZWN0LmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgdXNlciBzZWxlY3QgcmVzcG9uc2VcbiAgaWYgKCd2YWx1ZXMnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMudmFsdWVzICYmIHBheWxvYWQudmFsdWVzKSBzZWxlY3QudmFsdWVzID0gcGF5bG9hZC52YWx1ZXM7XG4gICAgaWYgKHByb3BzLnJlc29sdmVkICYmIHBheWxvYWQucmVzb2x2ZWQpIHNlbGVjdC5yZXNvbHZlZCA9IGJvdC50cmFuc2Zvcm1lcnMuaW50ZXJhY3Rpb25EYXRhUmVzb2x2ZWQoYm90LCBwYXlsb2FkLnJlc29sdmVkKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocHJvcHMucGxhY2Vob2xkZXIgJiYgcGF5bG9hZC5wbGFjZWhvbGRlcikgc2VsZWN0LnBsYWNlaG9sZGVyID0gcGF5bG9hZC5wbGFjZWhvbGRlcjtcbiAgICBpZiAocHJvcHMubWluVmFsdWVzICYmIHBheWxvYWQubWluX3ZhbHVlcykgc2VsZWN0Lm1pblZhbHVlcyA9IHBheWxvYWQubWluX3ZhbHVlcztcbiAgICBpZiAocHJvcHMubWF4VmFsdWVzICYmIHBheWxvYWQubWF4X3ZhbHVlcykgc2VsZWN0Lm1heFZhbHVlcyA9IHBheWxvYWQubWF4X3ZhbHVlcztcbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlcyAmJiBwYXlsb2FkLmRlZmF1bHRfdmFsdWVzKVxuICAgICAgc2VsZWN0LmRlZmF1bHRWYWx1ZXMgPSBwYXlsb2FkLmRlZmF1bHRfdmFsdWVzLm1hcCgoZGVmYXVsdFZhbHVlKSA9PiAoe1xuICAgICAgICBpZDogYm90LnRyYW5zZm9ybWVycy5zbm93Zmxha2UoZGVmYXVsdFZhbHVlLmlkKSxcbiAgICAgICAgdHlwZTogZGVmYXVsdFZhbHVlLnR5cGUsXG4gICAgICB9KSk7XG4gICAgaWYgKHByb3BzLmRpc2FibGVkICYmIHBheWxvYWQuZGlzYWJsZWQpIHNlbGVjdC5kaXNhYmxlZCA9IHBheWxvYWQuZGlzYWJsZWQ7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Sb2xlU2VsZWN0TWVudUNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZFJvbGVTZWxlY3RDb21wb25lbnQgfCBEaXNjb3JkUm9sZVNlbGVjdEludGVyYWN0aW9uUmVzcG9uc2VGcm9tTW9kYWwpIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3Qgc2VsZWN0ID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBzZWxlY3QudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHNlbGVjdC5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgc2VsZWN0LmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgcm9sZSBzZWxlY3QgcmVzcG9uc2VcbiAgaWYgKCd2YWx1ZXMnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMudmFsdWVzICYmIHBheWxvYWQudmFsdWVzKSBzZWxlY3QudmFsdWVzID0gcGF5bG9hZC52YWx1ZXM7XG4gICAgaWYgKHByb3BzLnJlc29sdmVkICYmIHBheWxvYWQucmVzb2x2ZWQpIHNlbGVjdC5yZXNvbHZlZCA9IGJvdC50cmFuc2Zvcm1lcnMuaW50ZXJhY3Rpb25EYXRhUmVzb2x2ZWQoYm90LCBwYXlsb2FkLnJlc29sdmVkKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocHJvcHMucGxhY2Vob2xkZXIgJiYgcGF5bG9hZC5wbGFjZWhvbGRlcikgc2VsZWN0LnBsYWNlaG9sZGVyID0gcGF5bG9hZC5wbGFjZWhvbGRlcjtcbiAgICBpZiAocHJvcHMubWluVmFsdWVzICYmIHBheWxvYWQubWluX3ZhbHVlcykgc2VsZWN0Lm1pblZhbHVlcyA9IHBheWxvYWQubWluX3ZhbHVlcztcbiAgICBpZiAocHJvcHMubWF4VmFsdWVzICYmIHBheWxvYWQubWF4X3ZhbHVlcykgc2VsZWN0Lm1heFZhbHVlcyA9IHBheWxvYWQubWF4X3ZhbHVlcztcbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlcyAmJiBwYXlsb2FkLmRlZmF1bHRfdmFsdWVzKVxuICAgICAgc2VsZWN0LmRlZmF1bHRWYWx1ZXMgPSBwYXlsb2FkLmRlZmF1bHRfdmFsdWVzLm1hcCgoZGVmYXVsdFZhbHVlKSA9PiAoe1xuICAgICAgICBpZDogYm90LnRyYW5zZm9ybWVycy5zbm93Zmxha2UoZGVmYXVsdFZhbHVlLmlkKSxcbiAgICAgICAgdHlwZTogZGVmYXVsdFZhbHVlLnR5cGUsXG4gICAgICB9KSk7XG4gICAgaWYgKHByb3BzLmRpc2FibGVkICYmIHBheWxvYWQuZGlzYWJsZWQpIHNlbGVjdC5kaXNhYmxlZCA9IHBheWxvYWQuZGlzYWJsZWQ7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1NZW50aW9uYWJsZVNlbGVjdE1lbnVDb21wb25lbnQoXG4gIGJvdDogQm90LFxuICBwYXlsb2FkOiBEaXNjb3JkTWVudGlvbmFibGVTZWxlY3RDb21wb25lbnQgfCBEaXNjb3JkTWVudGlvbmFibGVTZWxlY3RJbnRlcmFjdGlvblJlc3BvbnNlRnJvbU1vZGFsLFxuKSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHNlbGVjdCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgc2VsZWN0LnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBzZWxlY3QuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY3VzdG9tSWQgJiYgcGF5bG9hZC5jdXN0b21faWQpIHNlbGVjdC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIC8vIENoZWNrIGlmIHRoaXMgaXMgdGhlIG1lbnRpb25hYmxlIHNlbGVjdCByZXNwb25zZVxuICBpZiAoJ3ZhbHVlcycgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy52YWx1ZXMgJiYgcGF5bG9hZC52YWx1ZXMpIHNlbGVjdC52YWx1ZXMgPSBwYXlsb2FkLnZhbHVlcztcbiAgICBpZiAocHJvcHMucmVzb2x2ZWQgJiYgcGF5bG9hZC5yZXNvbHZlZCkgc2VsZWN0LnJlc29sdmVkID0gYm90LnRyYW5zZm9ybWVycy5pbnRlcmFjdGlvbkRhdGFSZXNvbHZlZChib3QsIHBheWxvYWQucmVzb2x2ZWQpO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcm9wcy5wbGFjZWhvbGRlciAmJiBwYXlsb2FkLnBsYWNlaG9sZGVyKSBzZWxlY3QucGxhY2Vob2xkZXIgPSBwYXlsb2FkLnBsYWNlaG9sZGVyO1xuICAgIGlmIChwcm9wcy5taW5WYWx1ZXMgJiYgcGF5bG9hZC5taW5fdmFsdWVzKSBzZWxlY3QubWluVmFsdWVzID0gcGF5bG9hZC5taW5fdmFsdWVzO1xuICAgIGlmIChwcm9wcy5tYXhWYWx1ZXMgJiYgcGF5bG9hZC5tYXhfdmFsdWVzKSBzZWxlY3QubWF4VmFsdWVzID0gcGF5bG9hZC5tYXhfdmFsdWVzO1xuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWVzICYmIHBheWxvYWQuZGVmYXVsdF92YWx1ZXMpXG4gICAgICBzZWxlY3QuZGVmYXVsdFZhbHVlcyA9IHBheWxvYWQuZGVmYXVsdF92YWx1ZXMubWFwKChkZWZhdWx0VmFsdWUpID0+ICh7XG4gICAgICAgIGlkOiBib3QudHJhbnNmb3JtZXJzLnNub3dmbGFrZShkZWZhdWx0VmFsdWUuaWQpLFxuICAgICAgICB0eXBlOiBkZWZhdWx0VmFsdWUudHlwZSxcbiAgICAgIH0pKTtcbiAgICBpZiAocHJvcHMuZGlzYWJsZWQgJiYgcGF5bG9hZC5kaXNhYmxlZCkgc2VsZWN0LmRpc2FibGVkID0gcGF5bG9hZC5kaXNhYmxlZDtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Q7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUNoYW5uZWxTZWxlY3RNZW51Q29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBEaXNjb3JkQ2hhbm5lbFNlbGVjdENvbXBvbmVudCB8IERpc2NvcmRDaGFubmVsU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbCkge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBzZWxlY3QgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHNlbGVjdC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgc2VsZWN0LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBzZWxlY3QuY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcblxuICAvLyBDaGVjayBpZiB0aGlzIGlzIHRoZSBjaGFubmVsIHNlbGVjdCByZXNwb25zZVxuICBpZiAoJ3ZhbHVlcycgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy52YWx1ZXMgJiYgcGF5bG9hZC52YWx1ZXMpIHNlbGVjdC52YWx1ZXMgPSBwYXlsb2FkLnZhbHVlcztcbiAgICBpZiAocHJvcHMucmVzb2x2ZWQgJiYgcGF5bG9hZC5yZXNvbHZlZCkgc2VsZWN0LnJlc29sdmVkID0gYm90LnRyYW5zZm9ybWVycy5pbnRlcmFjdGlvbkRhdGFSZXNvbHZlZChib3QsIHBheWxvYWQucmVzb2x2ZWQpO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcm9wcy5wbGFjZWhvbGRlciAmJiBwYXlsb2FkLnBsYWNlaG9sZGVyKSBzZWxlY3QucGxhY2Vob2xkZXIgPSBwYXlsb2FkLnBsYWNlaG9sZGVyO1xuICAgIGlmIChwcm9wcy5taW5WYWx1ZXMgJiYgcGF5bG9hZC5taW5fdmFsdWVzKSBzZWxlY3QubWluVmFsdWVzID0gcGF5bG9hZC5taW5fdmFsdWVzO1xuICAgIGlmIChwcm9wcy5tYXhWYWx1ZXMgJiYgcGF5bG9hZC5tYXhfdmFsdWVzKSBzZWxlY3QubWF4VmFsdWVzID0gcGF5bG9hZC5tYXhfdmFsdWVzO1xuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWVzICYmIHBheWxvYWQuZGVmYXVsdF92YWx1ZXMpXG4gICAgICBzZWxlY3QuZGVmYXVsdFZhbHVlcyA9IHBheWxvYWQuZGVmYXVsdF92YWx1ZXMubWFwKChkZWZhdWx0VmFsdWUpID0+ICh7XG4gICAgICAgIGlkOiBib3QudHJhbnNmb3JtZXJzLnNub3dmbGFrZShkZWZhdWx0VmFsdWUuaWQpLFxuICAgICAgICB0eXBlOiBkZWZhdWx0VmFsdWUudHlwZSxcbiAgICAgIH0pKTtcbiAgICBpZiAocHJvcHMuY2hhbm5lbFR5cGVzICYmIHBheWxvYWQuY2hhbm5lbF90eXBlcykgc2VsZWN0LmNoYW5uZWxUeXBlcyA9IHBheWxvYWQuY2hhbm5lbF90eXBlcztcbiAgICBpZiAocHJvcHMuZGlzYWJsZWQgJiYgcGF5bG9hZC5kaXNhYmxlZCkgc2VsZWN0LmRpc2FibGVkID0gcGF5bG9hZC5kaXNhYmxlZDtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Q7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVNlY3Rpb25Db21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IERpc2NvcmRTZWN0aW9uQ29tcG9uZW50KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHNlY3Rpb24gPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHNlY3Rpb24udHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHNlY3Rpb24uaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY29tcG9uZW50cyAmJiBwYXlsb2FkLmNvbXBvbmVudHMpIHNlY3Rpb24uY29tcG9uZW50cyA9IHBheWxvYWQuY29tcG9uZW50cy5tYXAoKGNvbXBvbmVudCkgPT4gYm90LnRyYW5zZm9ybWVycy5jb21wb25lbnQoYm90LCBjb21wb25lbnQpKTtcbiAgaWYgKHByb3BzLmFjY2Vzc29yeSAmJiBwYXlsb2FkLmFjY2Vzc29yeSkgc2VjdGlvbi5hY2Nlc3NvcnkgPSBib3QudHJhbnNmb3JtZXJzLmNvbXBvbmVudChib3QsIHBheWxvYWQuYWNjZXNzb3J5KTtcblxuICByZXR1cm4gc2VjdGlvbjtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtVGh1bWJuYWlsQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBEaXNjb3JkVGh1bWJuYWlsQ29tcG9uZW50KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHRodW1ibmFpbCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgdGh1bWJuYWlsLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSB0aHVtYm5haWwuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMubWVkaWEgJiYgcGF5bG9hZC5tZWRpYSkgdGh1bWJuYWlsLm1lZGlhID0gYm90LnRyYW5zZm9ybWVycy51bmZ1cmxlZE1lZGlhSXRlbShib3QsIHBheWxvYWQubWVkaWEpO1xuICBpZiAocHJvcHMuZGVzY3JpcHRpb24gJiYgcGF5bG9hZC5kZXNjcmlwdGlvbikgdGh1bWJuYWlsLmRlc2NyaXB0aW9uID0gcGF5bG9hZC5kZXNjcmlwdGlvbjtcbiAgaWYgKHByb3BzLnNwb2lsZXIgJiYgcGF5bG9hZC5zcG9pbGVyKSB0aHVtYm5haWwuc3BvaWxlciA9IHBheWxvYWQuc3BvaWxlcjtcblxuICByZXR1cm4gdGh1bWJuYWlsO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1NZWRpYUdhbGxlcnlDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IERpc2NvcmRNZWRpYUdhbGxlcnlDb21wb25lbnQpIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3QgbWVkaWFHYWxsZXJ5ID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBtZWRpYUdhbGxlcnkudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIG1lZGlhR2FsbGVyeS5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5pdGVtcyAmJiBwYXlsb2FkLml0ZW1zKSBtZWRpYUdhbGxlcnkuaXRlbXMgPSBwYXlsb2FkLml0ZW1zLm1hcCgoaXRlbSkgPT4gYm90LnRyYW5zZm9ybWVycy5tZWRpYUdhbGxlcnlJdGVtKGJvdCwgaXRlbSkpO1xuXG4gIHJldHVybiBtZWRpYUdhbGxlcnk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IERpc2NvcmRGaWxlQ29tcG9uZW50KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGZpbGUgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIGZpbGUudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGZpbGUuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuZmlsZSAmJiBwYXlsb2FkLmZpbGUpIGZpbGUuZmlsZSA9IGJvdC50cmFuc2Zvcm1lcnMudW5mdXJsZWRNZWRpYUl0ZW0oYm90LCBwYXlsb2FkLmZpbGUpO1xuICBpZiAocHJvcHMuc3BvaWxlciAmJiBwYXlsb2FkLnNwb2lsZXIpIGZpbGUuc3BvaWxlciA9IHBheWxvYWQuc3BvaWxlcjtcbiAgaWYgKHByb3BzLm5hbWUgJiYgcGF5bG9hZC5uYW1lKSBmaWxlLm5hbWUgPSBwYXlsb2FkLm5hbWU7XG4gIGlmIChwcm9wcy5zaXplICYmIHBheWxvYWQuc2l6ZSkgZmlsZS5zaXplID0gcGF5bG9hZC5zaXplO1xuXG4gIHJldHVybiBmaWxlO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1UZXh0RGlzcGxheUNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZFRleHREaXNwbGF5Q29tcG9uZW50IHwgRGlzY29yZFRleHREaXNwbGF5SW50ZXJhY3Rpb25SZXNwb25zZSkge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCB0ZXh0RGlzcGxheSA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgdGV4dERpc3BsYXkudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHRleHREaXNwbGF5LmlkID0gcGF5bG9hZC5pZDtcbiAgLy8gVGhhdCB0aGF0IHRoaXMgaXNuJ3QgYSByZXNwb25zZVxuICBpZiAoJ2NvbnRlbnQnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMuY29udGVudCAmJiBwYXlsb2FkLmNvbnRlbnQpIHRleHREaXNwbGF5LmNvbnRlbnQgPSBwYXlsb2FkLmNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gdGV4dERpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVNlcGFyYXRvckNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZFNlcGFyYXRvckNvbXBvbmVudCkge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBzZXBhcmF0b3IgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHNlcGFyYXRvci50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgc2VwYXJhdG9yLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmRpdmlkZXIgJiYgcGF5bG9hZC5kaXZpZGVyKSBzZXBhcmF0b3IuZGl2aWRlciA9IHBheWxvYWQuZGl2aWRlcjtcbiAgaWYgKHByb3BzLnNwYWNpbmcgJiYgcGF5bG9hZC5zcGFjaW5nKSBzZXBhcmF0b3Iuc3BhY2luZyA9IHBheWxvYWQuc3BhY2luZztcblxuICByZXR1cm4gc2VwYXJhdG9yO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1MYWJlbENvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZExhYmVsQ29tcG9uZW50IHwgRGlzY29yZExhYmVsSW50ZXJhY3Rpb25SZXNwb25zZSkge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBsYWJlbCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgbGFiZWwudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGxhYmVsLmlkID0gcGF5bG9hZC5pZDtcbiAgLy8gQ2hlY2sgdGhhdCB0aGlzIGlzbid0IGEgcmVzcG9uc2VcbiAgaWYgKCdsYWJlbCcgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy5sYWJlbCAmJiBwYXlsb2FkLmxhYmVsKSBsYWJlbC5sYWJlbCA9IHBheWxvYWQubGFiZWw7XG4gICAgaWYgKHByb3BzLmRlc2NyaXB0aW9uICYmIHBheWxvYWQuZGVzY3JpcHRpb24pIGxhYmVsLmRlc2NyaXB0aW9uID0gcGF5bG9hZC5kZXNjcmlwdGlvbjtcbiAgfVxuICBpZiAocHJvcHMuY29tcG9uZW50ICYmIHBheWxvYWQuY29tcG9uZW50KSBsYWJlbC5jb21wb25lbnQgPSBib3QudHJhbnNmb3JtZXJzLmNvbXBvbmVudChib3QsIHBheWxvYWQuY29tcG9uZW50KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVVcGxvYWRDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IERpc2NvcmRGaWxlVXBsb2FkQ29tcG9uZW50IHwgRGlzY29yZEZpbGVVcGxvYWRJbnRlcmFjdGlvblJlc3BvbnNlKSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGZpbGVVcGxvYWQgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIGZpbGVVcGxvYWQudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGZpbGVVcGxvYWQuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY3VzdG9tSWQgJiYgcGF5bG9hZC5jdXN0b21faWQpIGZpbGVVcGxvYWQuY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcblxuICAvLyBDaGVjayB0aGF0IHRoaXMgaXMgYSByZXNwb25zZVxuICBpZiAoJ3ZhbHVlcycgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy52YWx1ZXMgJiYgcGF5bG9hZC52YWx1ZXMpIGZpbGVVcGxvYWQudmFsdWVzID0gcGF5bG9hZC52YWx1ZXM7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHByb3BzLm1pblZhbHVlcyAmJiBwYXlsb2FkLm1pbl92YWx1ZXMpIGZpbGVVcGxvYWQubWluVmFsdWVzID0gcGF5bG9hZC5taW5fdmFsdWVzO1xuICAgIGlmIChwcm9wcy5tYXhWYWx1ZXMgJiYgcGF5bG9hZC5tYXhfdmFsdWVzKSBmaWxlVXBsb2FkLm1heFZhbHVlcyA9IHBheWxvYWQubWF4X3ZhbHVlcztcbiAgICBpZiAocHJvcHMucmVxdWlyZWQgJiYgcGF5bG9hZC5yZXF1aXJlZCkgZmlsZVVwbG9hZC5yZXF1aXJlZCA9IHBheWxvYWQucmVxdWlyZWQ7XG4gIH1cblxuICByZXR1cm4gZmlsZVVwbG9hZDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtUmFkaW9Hcm91cENvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZFJhZGlvR3JvdXBDb21wb25lbnQgfCBEaXNjb3JkUmFkaW9Hcm91cEludGVyYWN0aW9uUmVzcG9uc2UpIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3QgcmFkaW9Hcm91cCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgcmFkaW9Hcm91cC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgcmFkaW9Hcm91cC5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgcmFkaW9Hcm91cC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIC8vIENoZWNrIGlmIHRoaXMgaXMgdGhlIGNvbXBvbmVudCAoaGFzIG9wdGlvbnMpIG9yIHRoZSBpbnRlcmFjdGlvbiByZXNwb25zZSAobW9kYWwgc3VibWl0LCBoYXMgdmFsdWUpXG4gIGlmICgnb3B0aW9ucycgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy5vcHRpb25zICYmIHBheWxvYWQub3B0aW9ucykgcmFkaW9Hcm91cC5vcHRpb25zID0gcGF5bG9hZC5vcHRpb25zO1xuICAgIGlmIChwcm9wcy5yZXF1aXJlZCAmJiBwYXlsb2FkLnJlcXVpcmVkICE9PSB1bmRlZmluZWQpIHJhZGlvR3JvdXAucmVxdWlyZWQgPSBwYXlsb2FkLnJlcXVpcmVkO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcm9wcy52YWx1ZSkgcmFkaW9Hcm91cC52YWx1ZSA9IHBheWxvYWQudmFsdWUgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHJhZGlvR3JvdXA7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUNoZWNrYm94R3JvdXBDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IERpc2NvcmRDaGVja2JveEdyb3VwQ29tcG9uZW50IHwgRGlzY29yZENoZWNrYm94R3JvdXBJbnRlcmFjdGlvblJlc3BvbnNlKSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGNoZWNrYm94R3JvdXAgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIGNoZWNrYm94R3JvdXAudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGNoZWNrYm94R3JvdXAuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY3VzdG9tSWQgJiYgcGF5bG9hZC5jdXN0b21faWQpIGNoZWNrYm94R3JvdXAuY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcblxuICAvLyBDaGVjayBpZiB0aGlzIGlzIHRoZSBjb21wb25lbnQgKGhhcyBvcHRpb25zKSBvciB0aGUgaW50ZXJhY3Rpb24gcmVzcG9uc2UgKG1vZGFsIHN1Ym1pdCwgaGFzIHZhbHVlcylcbiAgaWYgKCdvcHRpb25zJyBpbiBwYXlsb2FkKSB7XG4gICAgaWYgKHByb3BzLm9wdGlvbnMgJiYgcGF5bG9hZC5vcHRpb25zKSBjaGVja2JveEdyb3VwLm9wdGlvbnMgPSBwYXlsb2FkLm9wdGlvbnM7XG4gICAgaWYgKHByb3BzLm1pblZhbHVlcyAmJiBwYXlsb2FkLm1pbl92YWx1ZXMgIT09IHVuZGVmaW5lZCkgY2hlY2tib3hHcm91cC5taW5WYWx1ZXMgPSBwYXlsb2FkLm1pbl92YWx1ZXM7XG4gICAgaWYgKHByb3BzLm1heFZhbHVlcyAmJiBwYXlsb2FkLm1heF92YWx1ZXMgIT09IHVuZGVmaW5lZCkgY2hlY2tib3hHcm91cC5tYXhWYWx1ZXMgPSBwYXlsb2FkLm1heF92YWx1ZXM7XG4gICAgaWYgKHByb3BzLnJlcXVpcmVkICYmIHBheWxvYWQucmVxdWlyZWQgIT09IHVuZGVmaW5lZCkgY2hlY2tib3hHcm91cC5yZXF1aXJlZCA9IHBheWxvYWQucmVxdWlyZWQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHByb3BzLnZhbHVlcyAmJiBwYXlsb2FkLnZhbHVlcykgY2hlY2tib3hHcm91cC52YWx1ZXMgPSBwYXlsb2FkLnZhbHVlcztcbiAgfVxuXG4gIHJldHVybiBjaGVja2JveEdyb3VwO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1DaGVja2JveENvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZENoZWNrYm94Q29tcG9uZW50IHwgRGlzY29yZENoZWNrYm94SW50ZXJhY3Rpb25SZXNwb25zZSkge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBjaGVja2JveCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgY2hlY2tib3gudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGNoZWNrYm94LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBjaGVja2JveC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIGlmIChwcm9wcy52YWx1ZSAmJiAndmFsdWUnIGluIHBheWxvYWQpIGNoZWNrYm94LnZhbHVlID0gcGF5bG9hZC52YWx1ZTtcbiAgaWYgKHByb3BzLmRlZmF1bHQgJiYgJ2RlZmF1bHQnIGluIHBheWxvYWQpIGNoZWNrYm94LmRlZmF1bHQgPSBwYXlsb2FkLmRlZmF1bHQ7XG5cbiAgcmV0dXJuIGNoZWNrYm94O1xufVxuIl0sIm5hbWVzIjpbIk1lc3NhZ2VDb21wb25lbnRUeXBlcyIsInRyYW5zZm9ybUNvbXBvbmVudCIsImJvdCIsInBheWxvYWQiLCJjb21wb25lbnQiLCJ0eXBlIiwiQWN0aW9uUm93IiwidHJhbnNmb3JtQWN0aW9uUm93IiwiQnV0dG9uIiwidHJhbnNmb3JtQnV0dG9uQ29tcG9uZW50IiwiQ29udGFpbmVyIiwidHJhbnNmb3JtQ29udGFpbmVyQ29tcG9uZW50IiwiVGV4dElucHV0IiwidHJhbnNmb3JtSW5wdXRUZXh0Q29tcG9uZW50IiwiU3RyaW5nU2VsZWN0IiwidHJhbnNmb3JtU3RyaW5nU2VsZWN0TWVudUNvbXBvbmVudCIsIlVzZXJTZWxlY3QiLCJ0cmFuc2Zvcm1Vc2VyU2VsZWN0TWVudUNvbXBvbmVudCIsIlJvbGVTZWxlY3QiLCJ0cmFuc2Zvcm1Sb2xlU2VsZWN0TWVudUNvbXBvbmVudCIsIk1lbnRpb25hYmxlU2VsZWN0IiwidHJhbnNmb3JtTWVudGlvbmFibGVTZWxlY3RNZW51Q29tcG9uZW50IiwiQ2hhbm5lbFNlbGVjdCIsInRyYW5zZm9ybUNoYW5uZWxTZWxlY3RNZW51Q29tcG9uZW50IiwiU2VjdGlvbiIsInRyYW5zZm9ybVNlY3Rpb25Db21wb25lbnQiLCJUaHVtYm5haWwiLCJ0cmFuc2Zvcm1UaHVtYm5haWxDb21wb25lbnQiLCJNZWRpYUdhbGxlcnkiLCJ0cmFuc2Zvcm1NZWRpYUdhbGxlcnlDb21wb25lbnQiLCJGaWxlIiwidHJhbnNmb3JtRmlsZUNvbXBvbmVudCIsIlNlcGFyYXRvciIsInRyYW5zZm9ybVNlcGFyYXRvckNvbXBvbmVudCIsIlRleHREaXNwbGF5IiwidHJhbnNmb3JtVGV4dERpc3BsYXlDb21wb25lbnQiLCJMYWJlbCIsInRyYW5zZm9ybUxhYmVsQ29tcG9uZW50IiwiRmlsZVVwbG9hZCIsInRyYW5zZm9ybUZpbGVVcGxvYWRDb21wb25lbnQiLCJSYWRpb0dyb3VwIiwidHJhbnNmb3JtUmFkaW9Hcm91cENvbXBvbmVudCIsIkNoZWNrYm94R3JvdXAiLCJ0cmFuc2Zvcm1DaGVja2JveEdyb3VwQ29tcG9uZW50IiwiQ2hlY2tib3giLCJ0cmFuc2Zvcm1DaGVja2JveENvbXBvbmVudCIsInRyYW5zZm9ybWVycyIsImN1c3RvbWl6ZXJzIiwidHJhbnNmb3JtVW5mdXJsZWRNZWRpYUl0ZW0iLCJwcm9wcyIsImRlc2lyZWRQcm9wZXJ0aWVzIiwidW5mdXJsZWRNZWRpYUl0ZW0iLCJtZWRpYUl0ZW0iLCJ1cmwiLCJwcm94eVVybCIsInByb3h5X3VybCIsImhlaWdodCIsIndpZHRoIiwiY29udGVudFR5cGUiLCJjb250ZW50X3R5cGUiLCJhdHRhY2htZW50SWQiLCJhdHRhY2htZW50X2lkIiwic25vd2ZsYWtlIiwidHJhbnNmb3JtTWVkaWFHYWxsZXJ5SXRlbSIsIm1lZGlhR2FsbGVyeUl0ZW0iLCJnYWxsZXJ5SXRlbSIsIm1lZGlhIiwiZGVzY3JpcHRpb24iLCJzcG9pbGVyIiwiYWN0aW9uUm93IiwiaWQiLCJjb21wb25lbnRzIiwibWFwIiwiY29udGFpbmVyIiwiYWNjZW50Q29sb3IiLCJhY2NlbnRfY29sb3IiLCJidXR0b24iLCJsYWJlbCIsImN1c3RvbUlkIiwiY3VzdG9tX2lkIiwic3R5bGUiLCJlbW9qaSIsImRpc2FibGVkIiwic2t1SWQiLCJza3VfaWQiLCJpbnB1dCIsInZhbHVlIiwicmVxdWlyZWQiLCJwbGFjZWhvbGRlciIsIm1pbkxlbmd0aCIsIm1pbl9sZW5ndGgiLCJtYXhMZW5ndGgiLCJtYXhfbGVuZ3RoIiwic2VsZWN0IiwidmFsdWVzIiwibWluVmFsdWVzIiwibWluX3ZhbHVlcyIsIm1heFZhbHVlcyIsIm1heF92YWx1ZXMiLCJvcHRpb25zIiwib3B0aW9uIiwidW5kZWZpbmVkIiwibmFtZSIsImFuaW1hdGVkIiwiZGVmYXVsdCIsInJlc29sdmVkIiwiaW50ZXJhY3Rpb25EYXRhUmVzb2x2ZWQiLCJkZWZhdWx0VmFsdWVzIiwiZGVmYXVsdF92YWx1ZXMiLCJkZWZhdWx0VmFsdWUiLCJjaGFubmVsVHlwZXMiLCJjaGFubmVsX3R5cGVzIiwic2VjdGlvbiIsImFjY2Vzc29yeSIsInRodW1ibmFpbCIsIm1lZGlhR2FsbGVyeSIsIml0ZW1zIiwiaXRlbSIsImZpbGUiLCJzaXplIiwidGV4dERpc3BsYXkiLCJjb250ZW50Iiwic2VwYXJhdG9yIiwiZGl2aWRlciIsInNwYWNpbmciLCJmaWxlVXBsb2FkIiwicmFkaW9Hcm91cCIsImNoZWNrYm94R3JvdXAiLCJjaGVja2JveCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FxQ0VBLHFCQUFxQixRQUNoQixvQkFBb0I7QUFLM0IsT0FBTyxTQUFTQyxtQkFBbUJDLEdBQVEsRUFBRUMsT0FBc0Y7SUFDakksSUFBSUM7SUFFSixrSUFBa0k7SUFDbEksT0FBUUQsUUFBUUUsSUFBSTtRQUNsQixLQUFLTCxzQkFBc0JNLFNBQVM7WUFDbENGLFlBQVlHLG1CQUFtQkwsS0FBS0M7WUFDcEM7UUFDRixLQUFLSCxzQkFBc0JR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
411
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2Zvcm1lcnMvY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgRGlzY29yZEFjdGlvblJvdyxcbiAgdHlwZSBEaXNjb3JkQnV0dG9uQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRDaGFubmVsU2VsZWN0Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRDaGFubmVsU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbCxcbiAgdHlwZSBEaXNjb3JkQ2hlY2tib3hDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZENoZWNrYm94R3JvdXBDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZENoZWNrYm94R3JvdXBJbnRlcmFjdGlvblJlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRDaGVja2JveEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZENvbnRhaW5lckNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkRmlsZUNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkRmlsZVVwbG9hZENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkRmlsZVVwbG9hZEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZExhYmVsQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRMYWJlbEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZE1lZGlhR2FsbGVyeUNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkTWVkaWFHYWxsZXJ5SXRlbSxcbiAgdHlwZSBEaXNjb3JkTWVudGlvbmFibGVTZWxlY3RDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZE1lbnRpb25hYmxlU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbCxcbiAgdHlwZSBEaXNjb3JkTWVzc2FnZUNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkTWVzc2FnZUNvbXBvbmVudEZyb21Nb2RhbEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZFJhZGlvR3JvdXBDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZFJhZGlvR3JvdXBJbnRlcmFjdGlvblJlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRSb2xlU2VsZWN0Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRSb2xlU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbCxcbiAgdHlwZSBEaXNjb3JkU2VjdGlvbkNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkU2VwYXJhdG9yQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRTdHJpbmdTZWxlY3RDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZFN0cmluZ1NlbGVjdEludGVyYWN0aW9uUmVzcG9uc2VGcm9tTW9kYWwsXG4gIHR5cGUgRGlzY29yZFRleHREaXNwbGF5Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRUZXh0RGlzcGxheUludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZFRleHRJbnB1dENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkVGV4dElucHV0SW50ZXJhY3Rpb25SZXNwb25zZSxcbiAgdHlwZSBEaXNjb3JkVGh1bWJuYWlsQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRVbmZ1cmxlZE1lZGlhSXRlbSxcbiAgdHlwZSBEaXNjb3JkVXNlclNlbGVjdENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkVXNlclNlbGVjdEludGVyYWN0aW9uUmVzcG9uc2VGcm9tTW9kYWwsXG4gIE1lc3NhZ2VDb21wb25lbnRUeXBlcyxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBCb3QgfSBmcm9tICcuLi9ib3QuanMnO1xuaW1wb3J0IHR5cGUgeyBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yLCBTZXR1cERlc2lyZWRQcm9wcywgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMgfSBmcm9tICcuLi9kZXNpcmVkUHJvcGVydGllcy5qcyc7XG5pbXBvcnQgeyBjYWxsQ3VzdG9taXplciB9IGZyb20gJy4uL3RyYW5zZm9ybWVycy5qcyc7XG5pbXBvcnQgeyBUb2dnbGVCaXRmaWVsZCB9IGZyb20gJy4vdG9nZ2xlcy9Ub2dnbGVCaXRmaWVsZC5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudCwgTWVkaWFHYWxsZXJ5SXRlbSwgVW5mdXJsZWRNZWRpYUl0ZW0gfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybUNvbXBvbmVudChcbiAgYm90OiBCb3QsXG4gIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZE1lc3NhZ2VDb21wb25lbnQgfCBEaXNjb3JkTWVzc2FnZUNvbXBvbmVudEZyb21Nb2RhbEludGVyYWN0aW9uUmVzcG9uc2U+LFxuICBleHRyYT86IHsgcGFydGlhbD86IGJvb2xlYW4gfSxcbikge1xuICBsZXQgY29tcG9uZW50OiBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICAvLyBUaGVyZSdzIG5vdGhpbmcgdG8gZG8gd2l0aCBhIGNvbXBvbmVudCB3aXRob3V0IGEgdHlwZSwgYXMgaXQgbWVhbnMgYW4gaXNzdWUgb24gRGlzY29yZCwgc28gd2UganVzdCB0aHJvdyBhbiBlcnJvclxuICBpZiAoIXBheWxvYWQudHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgW0Rpc2NvcmRlbm9dIFJlY2VpdmVkIGEgY29tcG9uZW50IHBheWxvYWQgd2l0aG91dCBhIHR5cGUgaW4gdGhlIGNvbXBvbmVudCB0cmFuc2Zvcm1lci5gKTtcbiAgfVxuXG4gIC8vIFRoaXMgc3dpdGNoIGlzIGV4aGF1c3RpdmUsIHNvIHdlIGRvbnQgbmVlZCB0aGUgZGVmYXVsdCBjYXNlIGFuZCBUUyBkb2VzIG5vdCBlcnJvciBvdXQgZm9yIHRoZSB1bi1pbml0aWFsaXplZCBjb21wb25lbnQgdmFyaWFibGVcbiAgc3dpdGNoIChwYXlsb2FkLnR5cGUpIHtcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5BY3Rpb25Sb3c6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1BY3Rpb25Sb3coYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkJ1dHRvbjpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUJ1dHRvbkNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuQ29udGFpbmVyOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtQ29udGFpbmVyQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5UZXh0SW5wdXQ6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1JbnB1dFRleHRDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlN0cmluZ1NlbGVjdDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybVN0cmluZ1NlbGVjdE1lbnVDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlVzZXJTZWxlY3Q6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1Vc2VyU2VsZWN0TWVudUNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuUm9sZVNlbGVjdDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybVJvbGVTZWxlY3RNZW51Q29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5NZW50aW9uYWJsZVNlbGVjdDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybU1lbnRpb25hYmxlU2VsZWN0TWVudUNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuQ2hhbm5lbFNlbGVjdDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUNoYW5uZWxTZWxlY3RNZW51Q29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5TZWN0aW9uOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtU2VjdGlvbkNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuVGh1bWJuYWlsOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtVGh1bWJuYWlsQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5NZWRpYUdhbGxlcnk6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1NZWRpYUdhbGxlcnlDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkZpbGU6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1GaWxlQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5TZXBhcmF0b3I6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1TZXBhcmF0b3JDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlRleHREaXNwbGF5OlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtVGV4dERpc3BsYXlDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkxhYmVsOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtTGFiZWxDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkZpbGVVcGxvYWQ6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1GaWxlVXBsb2FkQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5SYWRpb0dyb3VwOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtUmFkaW9Hcm91cENvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuQ2hlY2tib3hHcm91cDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUNoZWNrYm94R3JvdXBDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkNoZWNrYm94OlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtQ2hlY2tib3hDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGNhbGxDdXN0b21pemVyKCdjb21wb25lbnQnLCBib3QsIHBheWxvYWQsIGNvbXBvbmVudCwge1xuICAgIHBhcnRpYWw6IGV4dHJhPy5wYXJ0aWFsID8/IGZhbHNlLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVVuZnVybGVkTWVkaWFJdGVtKGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRVbmZ1cmxlZE1lZGlhSXRlbT4sIGV4dHJhPzogeyBwYXJ0aWFsPzogYm9vbGVhbiB9KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy51bmZ1cmxlZE1lZGlhSXRlbTtcbiAgY29uc3QgbWVkaWFJdGVtID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8VW5mdXJsZWRNZWRpYUl0ZW0sIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudXJsICYmIHBheWxvYWQudXJsKSBtZWRpYUl0ZW0udXJsID0gcGF5bG9hZC51cmw7XG4gIGlmIChwcm9wcy5wcm94eVVybCAmJiBwYXlsb2FkLnByb3h5X3VybCkgbWVkaWFJdGVtLnByb3h5VXJsID0gcGF5bG9hZC5wcm94eV91cmw7XG4gIGlmIChwcm9wcy5oZWlnaHQgJiYgcGF5bG9hZC5oZWlnaHQpIG1lZGlhSXRlbS5oZWlnaHQgPSBwYXlsb2FkLmhlaWdodDtcbiAgaWYgKHByb3BzLndpZHRoICYmIHBheWxvYWQud2lkdGgpIG1lZGlhSXRlbS53aWR0aCA9IHBheWxvYWQud2lkdGg7XG4gIGlmIChwcm9wcy5wbGFjZWhvbGRlciAmJiBwYXlsb2FkLnBsYWNlaG9sZGVyKSBtZWRpYUl0ZW0ucGxhY2Vob2xkZXIgPSBwYXlsb2FkLnBsYWNlaG9sZGVyO1xuICBpZiAocHJvcHMucGxhY2Vob2xkZXJWZXJzaW9uICYmIHBheWxvYWQucGxhY2Vob2xkZXJfdmVyc2lvbikgbWVkaWFJdGVtLnBsYWNlaG9sZGVyVmVyc2lvbiA9IHBheWxvYWQucGxhY2Vob2xkZXJfdmVyc2lvbjtcbiAgaWYgKHByb3BzLmNvbnRlbnRUeXBlICYmIHBheWxvYWQuY29udGVudF90eXBlKSBtZWRpYUl0ZW0uY29udGVudFR5cGUgPSBwYXlsb2FkLmNvbnRlbnRfdHlwZTtcbiAgaWYgKHByb3BzLmZsYWdzICYmIHBheWxvYWQuZmxhZ3MpIG1lZGlhSXRlbS5mbGFncyA9IG5ldyBUb2dnbGVCaXRmaWVsZChwYXlsb2FkLmZsYWdzKTtcbiAgaWYgKHByb3BzLmF0dGFjaG1lbnRJZCAmJiBwYXlsb2FkLmF0dGFjaG1lbnRfaWQpIG1lZGlhSXRlbS5hdHRhY2htZW50SWQgPSBib3QudHJhbnNmb3JtZXJzLnNub3dmbGFrZShwYXlsb2FkLmF0dGFjaG1lbnRfaWQpO1xuXG4gIHJldHVybiBjYWxsQ3VzdG9taXplcigndW5mdXJsZWRNZWRpYUl0ZW0nLCBib3QsIHBheWxvYWQsIG1lZGlhSXRlbSwge1xuICAgIHBhcnRpYWw6IGV4dHJhPy5wYXJ0aWFsID8/IGZhbHNlLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1lZGlhR2FsbGVyeUl0ZW0oYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZE1lZGlhR2FsbGVyeUl0ZW0+LCBleHRyYT86IHsgcGFydGlhbD86IGJvb2xlYW4gfSkge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMubWVkaWFHYWxsZXJ5SXRlbTtcbiAgY29uc3QgZ2FsbGVyeUl0ZW0gPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxNZWRpYUdhbGxlcnlJdGVtLCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLm1lZGlhICYmIHBheWxvYWQubWVkaWEpIGdhbGxlcnlJdGVtLm1lZGlhID0gYm90LnRyYW5zZm9ybWVycy51bmZ1cmxlZE1lZGlhSXRlbShib3QsIHBheWxvYWQubWVkaWEpO1xuICBpZiAocHJvcHMuZGVzY3JpcHRpb24gJiYgcGF5bG9hZC5kZXNjcmlwdGlvbikgZ2FsbGVyeUl0ZW0uZGVzY3JpcHRpb24gPSBwYXlsb2FkLmRlc2NyaXB0aW9uO1xuICBpZiAocHJvcHMuc3BvaWxlciAmJiBwYXlsb2FkLnNwb2lsZXIpIGdhbGxlcnlJdGVtLnNwb2lsZXIgPSBwYXlsb2FkLnNwb2lsZXI7XG5cbiAgcmV0dXJuIGNhbGxDdXN0b21pemVyKCdtZWRpYUdhbGxlcnlJdGVtJywgYm90LCBwYXlsb2FkLCBnYWxsZXJ5SXRlbSwge1xuICAgIHBhcnRpYWw6IGV4dHJhPy5wYXJ0aWFsID8/IGZhbHNlLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQWN0aW9uUm93KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRBY3Rpb25Sb3c+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGFjdGlvblJvdyA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgYWN0aW9uUm93LnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBhY3Rpb25Sb3cuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY29tcG9uZW50cyAmJiBwYXlsb2FkLmNvbXBvbmVudHMpXG4gICAgYWN0aW9uUm93LmNvbXBvbmVudHMgPSBwYXlsb2FkLmNvbXBvbmVudHMubWFwKChjb21wb25lbnQpID0+IGJvdC50cmFuc2Zvcm1lcnMuY29tcG9uZW50KGJvdCwgY29tcG9uZW50KSk7XG5cbiAgcmV0dXJuIGFjdGlvblJvdztcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQ29udGFpbmVyQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRDb250YWluZXJDb21wb25lbnQ+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGNvbnRhaW5lciA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgY29udGFpbmVyLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBjb250YWluZXIuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuYWNjZW50Q29sb3IgJiYgcGF5bG9hZC5hY2NlbnRfY29sb3IpIGNvbnRhaW5lci5hY2NlbnRDb2xvciA9IHBheWxvYWQuYWNjZW50X2NvbG9yO1xuICBpZiAocHJvcHMuc3BvaWxlciAmJiBwYXlsb2FkLnNwb2lsZXIpIGNvbnRhaW5lci5zcG9pbGVyID0gcGF5bG9hZC5zcG9pbGVyO1xuICBpZiAocHJvcHMuY29tcG9uZW50cyAmJiBwYXlsb2FkLmNvbXBvbmVudHMpXG4gICAgY29udGFpbmVyLmNvbXBvbmVudHMgPSBwYXlsb2FkLmNvbXBvbmVudHMubWFwKChjb21wb25lbnQpID0+IGJvdC50cmFuc2Zvcm1lcnMuY29tcG9uZW50KGJvdCwgY29tcG9uZW50KSk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQnV0dG9uQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRCdXR0b25Db21wb25lbnQ+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGJ1dHRvbiA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgYnV0dG9uLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBidXR0b24uaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMubGFiZWwgJiYgcGF5bG9hZC5sYWJlbCkgYnV0dG9uLmxhYmVsID0gcGF5bG9hZC5sYWJlbDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBidXR0b24uY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcbiAgaWYgKHByb3BzLnN0eWxlICYmIHBheWxvYWQuc3R5bGUpIGJ1dHRvbi5zdHlsZSA9IHBheWxvYWQuc3R5bGU7XG4gIGlmIChwcm9wcy5lbW9qaSAmJiBwYXlsb2FkLmVtb2ppKSBidXR0b24uZW1vamkgPSBib3QudHJhbnNmb3JtZXJzLmVtb2ppKGJvdCwgcGF5bG9hZC5lbW9qaSwgeyBwYXJ0aWFsOiB0cnVlIH0pO1xuICBpZiAocHJvcHMudXJsICYmIHBheWxvYWQudXJsKSBidXR0b24udXJsID0gcGF5bG9hZC51cmw7XG4gIGlmIChwcm9wcy5kaXNhYmxlZCAmJiBwYXlsb2FkLmRpc2FibGVkKSBidXR0b24uZGlzYWJsZWQgPSBwYXlsb2FkLmRpc2FibGVkO1xuICBpZiAocHJvcHMuc2t1SWQgJiYgcGF5bG9hZC5za3VfaWQpIGJ1dHRvbi5za3VJZCA9IGJvdC50cmFuc2Zvcm1lcnMuc25vd2ZsYWtlKHBheWxvYWQuc2t1X2lkKTtcblxuICByZXR1cm4gYnV0dG9uO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1JbnB1dFRleHRDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZFRleHRJbnB1dENvbXBvbmVudCB8IERpc2NvcmRUZXh0SW5wdXRJbnRlcmFjdGlvblJlc3BvbnNlPikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBpbnB1dCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgaW5wdXQudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGlucHV0LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLnZhbHVlICYmIHBheWxvYWQudmFsdWUpIGlucHV0LnZhbHVlID0gcGF5bG9hZC52YWx1ZTtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBpbnB1dC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIC8vIFdlIGFzc3VtZSB0aGF0IGlmIHdlIGZpbmQgJ3ZhbHVlcycgaXQgaXMgdGhlIGludGVyYWN0aW9uIHJlc3BvbnNlXG4gIGlmICgnc3R5bGUnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMuc3R5bGUgJiYgcGF5bG9hZC5zdHlsZSkgaW5wdXQuc3R5bGUgPSBwYXlsb2FkLnN0eWxlO1xuICAgIGlmIChwcm9wcy5yZXF1aXJlZCAmJiBwYXlsb2FkLnJlcXVpcmVkKSBpbnB1dC5yZXF1aXJlZCA9IHBheWxvYWQucmVxdWlyZWQ7XG4gICAgaWYgKHByb3BzLmxhYmVsICYmIHBheWxvYWQubGFiZWwpIGlucHV0LmxhYmVsID0gcGF5bG9hZC5sYWJlbDtcbiAgICBpZiAocHJvcHMucGxhY2Vob2xkZXIgJiYgcGF5bG9hZC5wbGFjZWhvbGRlcikgaW5wdXQucGxhY2Vob2xkZXIgPSBwYXlsb2FkLnBsYWNlaG9sZGVyO1xuICAgIGlmIChwcm9wcy5taW5MZW5ndGggJiYgcGF5bG9hZC5taW5fbGVuZ3RoKSBpbnB1dC5taW5MZW5ndGggPSBwYXlsb2FkLm1pbl9sZW5ndGg7XG4gICAgaWYgKHByb3BzLm1heExlbmd0aCAmJiBwYXlsb2FkLm1heF9sZW5ndGgpIGlucHV0Lm1heExlbmd0aCA9IHBheWxvYWQubWF4X2xlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBpbnB1dDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU3RyaW5nU2VsZWN0TWVudUNvbXBvbmVudChcbiAgYm90OiBCb3QsXG4gIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZFN0cmluZ1NlbGVjdENvbXBvbmVudCB8IERpc2NvcmRTdHJpbmdTZWxlY3RJbnRlcmFjdGlvblJlc3BvbnNlRnJvbU1vZGFsPixcbikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBzZWxlY3QgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHNlbGVjdC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgc2VsZWN0LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBzZWxlY3QuY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcblxuICAvLyBXZSBhc3N1bWUgdGhhdCBpZiB3ZSBmaW5kICd2YWx1ZXMnIGl0IGlzIHRoZSBpbnRlcmFjdGlvbiByZXNwb25zZVxuICBpZiAoJ3ZhbHVlcycgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy52YWx1ZXMgJiYgcGF5bG9hZC52YWx1ZXMpIHNlbGVjdC52YWx1ZXMgPSBwYXlsb2FkLnZhbHVlcztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBfcGF5bG9hZCA9IHBheWxvYWQgYXMgUGFydGlhbDxEaXNjb3JkU3RyaW5nU2VsZWN0Q29tcG9uZW50PjtcblxuICAgIGlmIChwcm9wcy5wbGFjZWhvbGRlciAmJiBfcGF5bG9hZC5wbGFjZWhvbGRlcikgc2VsZWN0LnBsYWNlaG9sZGVyID0gX3BheWxvYWQucGxhY2Vob2xkZXI7XG4gICAgaWYgKHByb3BzLm1pblZhbHVlcyAmJiBfcGF5bG9hZC5taW5fdmFsdWVzKSBzZWxlY3QubWluVmFsdWVzID0gX3BheWxvYWQubWluX3ZhbHVlcztcbiAgICBpZiAocHJvcHMubWF4VmFsdWVzICYmIF9wYXlsb2FkLm1heF92YWx1ZXMpIHNlbGVjdC5tYXhWYWx1ZXMgPSBfcGF5bG9hZC5tYXhfdmFsdWVzO1xuICAgIGlmIChwcm9wcy5vcHRpb25zICYmIF9wYXlsb2FkLm9wdGlvbnMpXG4gICAgICBzZWxlY3Qub3B0aW9ucyA9IF9wYXlsb2FkLm9wdGlvbnMubWFwKChvcHRpb24pID0+ICh7XG4gICAgICAgIGxhYmVsOiBvcHRpb24ubGFiZWwsXG4gICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb24uZGVzY3JpcHRpb24sXG4gICAgICAgIGVtb2ppOiBvcHRpb24uZW1vamlcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgaWQ6IG9wdGlvbi5lbW9qaS5pZCA/IGJvdC50cmFuc2Zvcm1lcnMuc25vd2ZsYWtlKG9wdGlvbi5lbW9qaS5pZCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIG5hbWU6IG9wdGlvbi5lbW9qaS5uYW1lID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgYW5pbWF0ZWQ6IG9wdGlvbi5lbW9qaS5hbmltYXRlZCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGVmYXVsdDogb3B0aW9uLmRlZmF1bHQsXG4gICAgICB9KSk7XG4gICAgaWYgKHByb3BzLmRpc2FibGVkICYmIF9wYXlsb2FkLmRpc2FibGVkKSBzZWxlY3QuZGlzYWJsZWQgPSBfcGF5bG9hZC5kaXNhYmxlZDtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Q7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVVzZXJTZWxlY3RNZW51Q29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRVc2VyU2VsZWN0Q29tcG9uZW50IHwgRGlzY29yZFVzZXJTZWxlY3RJbnRlcmFjdGlvblJlc3BvbnNlRnJvbU1vZGFsPikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBzZWxlY3QgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHNlbGVjdC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgc2VsZWN0LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBzZWxlY3QuY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcblxuICAvLyBXZSBhc3N1bWUgdGhhdCBpZiB3ZSBmaW5kICd2YWx1ZXMnIGl0IGlzIHRoZSBpbnRlcmFjdGlvbiByZXNwb25zZVxuICBpZiAoJ3ZhbHVlcycgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy52YWx1ZXMgJiYgcGF5bG9hZC52YWx1ZXMpIHNlbGVjdC52YWx1ZXMgPSBwYXlsb2FkLnZhbHVlcztcbiAgICBpZiAocHJvcHMucmVzb2x2ZWQgJiYgcGF5bG9hZC5yZXNvbHZlZCkgc2VsZWN0LnJlc29sdmVkID0gYm90LnRyYW5zZm9ybWVycy5pbnRlcmFjdGlvbkRhdGFSZXNvbHZlZChib3QsIHBheWxvYWQucmVzb2x2ZWQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IF9wYXlsb2FkID0gcGF5bG9hZCBhcyBQYXJ0aWFsPERpc2NvcmRVc2VyU2VsZWN0Q29tcG9uZW50PjtcblxuICAgIGlmIChwcm9wcy5wbGFjZWhvbGRlciAmJiBfcGF5bG9hZC5wbGFjZWhvbGRlcikgc2VsZWN0LnBsYWNlaG9sZGVyID0gX3BheWxvYWQucGxhY2Vob2xkZXI7XG4gICAgaWYgKHByb3BzLm1pblZhbHVlcyAmJiBfcGF5bG9hZC5taW5fdmFsdWVzKSBzZWxlY3QubWluVmFsdWVzID0gX3BheWxvYWQubWluX3ZhbHVlcztcbiAgICBpZiAocHJvcHMubWF4VmFsdWVzICYmIF9wYXlsb2FkLm1heF92YWx1ZXMpIHNlbGVjdC5tYXhWYWx1ZXMgPSBfcGF5bG9hZC5tYXhfdmFsdWVzO1xuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWVzICYmIF9wYXlsb2FkLmRlZmF1bHRfdmFsdWVzKVxuICAgICAgc2VsZWN0LmRlZmF1bHRWYWx1ZXMgPSBfcGF5bG9hZC5kZWZhdWx0X3ZhbHVlcy5tYXAoKGRlZmF1bHRWYWx1ZSkgPT4gKHtcbiAgICAgICAgaWQ6IGJvdC50cmFuc2Zvcm1lcnMuc25vd2ZsYWtlKGRlZmF1bHRWYWx1ZS5pZCksXG4gICAgICAgIHR5cGU6IGRlZmF1bHRWYWx1ZS50eXBlLFxuICAgICAgfSkpO1xuICAgIGlmIChwcm9wcy5kaXNhYmxlZCAmJiBfcGF5bG9hZC5kaXNhYmxlZCkgc2VsZWN0LmRpc2FibGVkID0gX3BheWxvYWQuZGlzYWJsZWQ7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Sb2xlU2VsZWN0TWVudUNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkUm9sZVNlbGVjdENvbXBvbmVudCB8IERpc2NvcmRSb2xlU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbD4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3Qgc2VsZWN0ID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBzZWxlY3QudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHNlbGVjdC5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgc2VsZWN0LmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG5cbiAgLy8gV2UgYXNzdW1lIHRoYXQgaWYgd2UgZmluZCAndmFsdWVzJyBpdCBpcyB0aGUgaW50ZXJhY3Rpb24gcmVzcG9uc2VcbiAgaWYgKCd2YWx1ZXMnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMudmFsdWVzICYmIHBheWxvYWQudmFsdWVzKSBzZWxlY3QudmFsdWVzID0gcGF5bG9hZC52YWx1ZXM7XG4gICAgaWYgKHByb3BzLnJlc29sdmVkICYmIHBheWxvYWQucmVzb2x2ZWQpIHNlbGVjdC5yZXNvbHZlZCA9IGJvdC50cmFuc2Zvcm1lcnMuaW50ZXJhY3Rpb25EYXRhUmVzb2x2ZWQoYm90LCBwYXlsb2FkLnJlc29sdmVkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBfcGF5bG9hZCA9IHBheWxvYWQgYXMgUGFydGlhbDxEaXNjb3JkUm9sZVNlbGVjdENvbXBvbmVudD47XG5cbiAgICBpZiAocHJvcHMucGxhY2Vob2xkZXIgJiYgX3BheWxvYWQucGxhY2Vob2xkZXIpIHNlbGVjdC5wbGFjZWhvbGRlciA9IF9wYXlsb2FkLnBsYWNlaG9sZGVyO1xuICAgIGlmIChwcm9wcy5taW5WYWx1ZXMgJiYgX3BheWxvYWQubWluX3ZhbHVlcykgc2VsZWN0Lm1pblZhbHVlcyA9IF9wYXlsb2FkLm1pbl92YWx1ZXM7XG4gICAgaWYgKHByb3BzLm1heFZhbHVlcyAmJiBfcGF5bG9hZC5tYXhfdmFsdWVzKSBzZWxlY3QubWF4VmFsdWVzID0gX3BheWxvYWQubWF4X3ZhbHVlcztcbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlcyAmJiBfcGF5bG9hZC5kZWZhdWx0X3ZhbHVlcylcbiAgICAgIHNlbGVjdC5kZWZhdWx0VmFsdWVzID0gX3BheWxvYWQuZGVmYXVsdF92YWx1ZXMubWFwKChkZWZhdWx0VmFsdWUpID0+ICh7XG4gICAgICAgIGlkOiBib3QudHJhbnNmb3JtZXJzLnNub3dmbGFrZShkZWZhdWx0VmFsdWUuaWQpLFxuICAgICAgICB0eXBlOiBkZWZhdWx0VmFsdWUudHlwZSxcbiAgICAgIH0pKTtcbiAgICBpZiAocHJvcHMuZGlzYWJsZWQgJiYgX3BheWxvYWQuZGlzYWJsZWQpIHNlbGVjdC5kaXNhYmxlZCA9IF9wYXlsb2FkLmRpc2FibGVkO1xuICB9XG5cbiAgcmV0dXJuIHNlbGVjdDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtTWVudGlvbmFibGVTZWxlY3RNZW51Q29tcG9uZW50KFxuICBib3Q6IEJvdCxcbiAgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkTWVudGlvbmFibGVTZWxlY3RDb21wb25lbnQgfCBEaXNjb3JkTWVudGlvbmFibGVTZWxlY3RJbnRlcmFjdGlvblJlc3BvbnNlRnJvbU1vZGFsPixcbikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBzZWxlY3QgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHNlbGVjdC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgc2VsZWN0LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBzZWxlY3QuY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcblxuICAvLyBXZSBhc3N1bWUgdGhhdCBpZiB3ZSBmaW5kICd2YWx1ZXMnIGl0IGlzIHRoZSBpbnRlcmFjdGlvbiByZXNwb25zZVxuICBpZiAoJ3ZhbHVlcycgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy52YWx1ZXMgJiYgcGF5bG9hZC52YWx1ZXMpIHNlbGVjdC52YWx1ZXMgPSBwYXlsb2FkLnZhbHVlcztcbiAgICBpZiAocHJvcHMucmVzb2x2ZWQgJiYgcGF5bG9hZC5yZXNvbHZlZCkgc2VsZWN0LnJlc29sdmVkID0gYm90LnRyYW5zZm9ybWVycy5pbnRlcmFjdGlvbkRhdGFSZXNvbHZlZChib3QsIHBheWxvYWQucmVzb2x2ZWQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IF9wYXlsb2FkID0gcGF5bG9hZCBhcyBQYXJ0aWFsPERpc2NvcmRNZW50aW9uYWJsZVNlbGVjdENvbXBvbmVudD47XG5cbiAgICBpZiAocHJvcHMucGxhY2Vob2xkZXIgJiYgX3BheWxvYWQucGxhY2Vob2xkZXIpIHNlbGVjdC5wbGFjZWhvbGRlciA9IF9wYXlsb2FkLnBsYWNlaG9sZGVyO1xuICAgIGlmIChwcm9wcy5taW5WYWx1ZXMgJiYgX3BheWxvYWQubWluX3ZhbHVlcykgc2VsZWN0Lm1pblZhbHVlcyA9IF9wYXlsb2FkLm1pbl92YWx1ZXM7XG4gICAgaWYgKHByb3BzLm1heFZhbHVlcyAmJiBfcGF5bG9hZC5tYXhfdmFsdWVzKSBzZWxlY3QubWF4VmFsdWVzID0gX3BheWxvYWQubWF4X3ZhbHVlcztcbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlcyAmJiBfcGF5bG9hZC5kZWZhdWx0X3ZhbHVlcylcbiAgICAgIHNlbGVjdC5kZWZhdWx0VmFsdWVzID0gX3BheWxvYWQuZGVmYXVsdF92YWx1ZXMubWFwKChkZWZhdWx0VmFsdWUpID0+ICh7XG4gICAgICAgIGlkOiBib3QudHJhbnNmb3JtZXJzLnNub3dmbGFrZShkZWZhdWx0VmFsdWUuaWQpLFxuICAgICAgICB0eXBlOiBkZWZhdWx0VmFsdWUudHlwZSxcbiAgICAgIH0pKTtcbiAgICBpZiAocHJvcHMuZGlzYWJsZWQgJiYgX3BheWxvYWQuZGlzYWJsZWQpIHNlbGVjdC5kaXNhYmxlZCA9IF9wYXlsb2FkLmRpc2FibGVkO1xuICB9XG5cbiAgcmV0dXJuIHNlbGVjdDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQ2hhbm5lbFNlbGVjdE1lbnVDb21wb25lbnQoXG4gIGJvdDogQm90LFxuICBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRDaGFubmVsU2VsZWN0Q29tcG9uZW50IHwgRGlzY29yZENoYW5uZWxTZWxlY3RJbnRlcmFjdGlvblJlc3BvbnNlRnJvbU1vZGFsPixcbikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBzZWxlY3QgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHNlbGVjdC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgc2VsZWN0LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBzZWxlY3QuY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcblxuICAvLyBXZSBhc3N1bWUgdGhhdCBpZiB3ZSBmaW5kICd2YWx1ZXMnIGl0IGlzIHRoZSBpbnRlcmFjdGlvbiByZXNwb25zZVxuICBpZiAoJ3ZhbHVlcycgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy52YWx1ZXMgJiYgcGF5bG9hZC52YWx1ZXMpIHNlbGVjdC52YWx1ZXMgPSBwYXlsb2FkLnZhbHVlcztcbiAgICBpZiAocHJvcHMucmVzb2x2ZWQgJiYgcGF5bG9hZC5yZXNvbHZlZCkgc2VsZWN0LnJlc29sdmVkID0gYm90LnRyYW5zZm9ybWVycy5pbnRlcmFjdGlvbkRhdGFSZXNvbHZlZChib3QsIHBheWxvYWQucmVzb2x2ZWQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IF9wYXlsb2FkID0gcGF5bG9hZCBhcyBQYXJ0aWFsPERpc2NvcmRDaGFubmVsU2VsZWN0Q29tcG9uZW50PjtcblxuICAgIGlmIChwcm9wcy5wbGFjZWhvbGRlciAmJiBfcGF5bG9hZC5wbGFjZWhvbGRlcikgc2VsZWN0LnBsYWNlaG9sZGVyID0gX3BheWxvYWQucGxhY2Vob2xkZXI7XG4gICAgaWYgKHByb3BzLm1pblZhbHVlcyAmJiBfcGF5bG9hZC5taW5fdmFsdWVzKSBzZWxlY3QubWluVmFsdWVzID0gX3BheWxvYWQubWluX3ZhbHVlcztcbiAgICBpZiAocHJvcHMubWF4VmFsdWVzICYmIF9wYXlsb2FkLm1heF92YWx1ZXMpIHNlbGVjdC5tYXhWYWx1ZXMgPSBfcGF5bG9hZC5tYXhfdmFsdWVzO1xuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWVzICYmIF9wYXlsb2FkLmRlZmF1bHRfdmFsdWVzKVxuICAgICAgc2VsZWN0LmRlZmF1bHRWYWx1ZXMgPSBfcGF5bG9hZC5kZWZhdWx0X3ZhbHVlcy5tYXAoKGRlZmF1bHRWYWx1ZSkgPT4gKHtcbiAgICAgICAgaWQ6IGJvdC50cmFuc2Zvcm1lcnMuc25vd2ZsYWtlKGRlZmF1bHRWYWx1ZS5pZCksXG4gICAgICAgIHR5cGU6IGRlZmF1bHRWYWx1ZS50eXBlLFxuICAgICAgfSkpO1xuICAgIGlmIChwcm9wcy5jaGFubmVsVHlwZXMgJiYgX3BheWxvYWQuY2hhbm5lbF90eXBlcykgc2VsZWN0LmNoYW5uZWxUeXBlcyA9IF9wYXlsb2FkLmNoYW5uZWxfdHlwZXM7XG4gICAgaWYgKHByb3BzLmRpc2FibGVkICYmIF9wYXlsb2FkLmRpc2FibGVkKSBzZWxlY3QuZGlzYWJsZWQgPSBfcGF5bG9hZC5kaXNhYmxlZDtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Q7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVNlY3Rpb25Db21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZFNlY3Rpb25Db21wb25lbnQ+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHNlY3Rpb24gPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHNlY3Rpb24udHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHNlY3Rpb24uaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY29tcG9uZW50cyAmJiBwYXlsb2FkLmNvbXBvbmVudHMpIHNlY3Rpb24uY29tcG9uZW50cyA9IHBheWxvYWQuY29tcG9uZW50cy5tYXAoKGNvbXBvbmVudCkgPT4gYm90LnRyYW5zZm9ybWVycy5jb21wb25lbnQoYm90LCBjb21wb25lbnQpKTtcbiAgaWYgKHByb3BzLmFjY2Vzc29yeSAmJiBwYXlsb2FkLmFjY2Vzc29yeSkgc2VjdGlvbi5hY2Nlc3NvcnkgPSBib3QudHJhbnNmb3JtZXJzLmNvbXBvbmVudChib3QsIHBheWxvYWQuYWNjZXNzb3J5KTtcblxuICByZXR1cm4gc2VjdGlvbjtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtVGh1bWJuYWlsQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRUaHVtYm5haWxDb21wb25lbnQ+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHRodW1ibmFpbCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgdGh1bWJuYWlsLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSB0aHVtYm5haWwuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMubWVkaWEgJiYgcGF5bG9hZC5tZWRpYSkgdGh1bWJuYWlsLm1lZGlhID0gYm90LnRyYW5zZm9ybWVycy51bmZ1cmxlZE1lZGlhSXRlbShib3QsIHBheWxvYWQubWVkaWEpO1xuICBpZiAocHJvcHMuZGVzY3JpcHRpb24gJiYgcGF5bG9hZC5kZXNjcmlwdGlvbikgdGh1bWJuYWlsLmRlc2NyaXB0aW9uID0gcGF5bG9hZC5kZXNjcmlwdGlvbjtcbiAgaWYgKHByb3BzLnNwb2lsZXIgJiYgcGF5bG9hZC5zcG9pbGVyKSB0aHVtYm5haWwuc3BvaWxlciA9IHBheWxvYWQuc3BvaWxlcjtcblxuICByZXR1cm4gdGh1bWJuYWlsO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1NZWRpYUdhbGxlcnlDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZE1lZGlhR2FsbGVyeUNvbXBvbmVudD4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3QgbWVkaWFHYWxsZXJ5ID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBtZWRpYUdhbGxlcnkudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIG1lZGlhR2FsbGVyeS5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5pdGVtcyAmJiBwYXlsb2FkLml0ZW1zKSBtZWRpYUdhbGxlcnkuaXRlbXMgPSBwYXlsb2FkLml0ZW1zLm1hcCgoaXRlbSkgPT4gYm90LnRyYW5zZm9ybWVycy5tZWRpYUdhbGxlcnlJdGVtKGJvdCwgaXRlbSkpO1xuXG4gIHJldHVybiBtZWRpYUdhbGxlcnk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZEZpbGVDb21wb25lbnQ+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGZpbGUgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIGZpbGUudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGZpbGUuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuZmlsZSAmJiBwYXlsb2FkLmZpbGUpIGZpbGUuZmlsZSA9IGJvdC50cmFuc2Zvcm1lcnMudW5mdXJsZWRNZWRpYUl0ZW0oYm90LCBwYXlsb2FkLmZpbGUpO1xuICBpZiAocHJvcHMuc3BvaWxlciAmJiBwYXlsb2FkLnNwb2lsZXIpIGZpbGUuc3BvaWxlciA9IHBheWxvYWQuc3BvaWxlcjtcbiAgaWYgKHByb3BzLm5hbWUgJiYgcGF5bG9hZC5uYW1lKSBmaWxlLm5hbWUgPSBwYXlsb2FkLm5hbWU7XG4gIGlmIChwcm9wcy5zaXplICYmIHBheWxvYWQuc2l6ZSkgZmlsZS5zaXplID0gcGF5bG9hZC5zaXplO1xuXG4gIHJldHVybiBmaWxlO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1UZXh0RGlzcGxheUNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkVGV4dERpc3BsYXlDb21wb25lbnQgfCBEaXNjb3JkVGV4dERpc3BsYXlJbnRlcmFjdGlvblJlc3BvbnNlPikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCB0ZXh0RGlzcGxheSA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgdGV4dERpc3BsYXkudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHRleHREaXNwbGF5LmlkID0gcGF5bG9hZC5pZDtcbiAgLy8gV2UgYXNzdW1lIHRoYXQgaWYgd2UgZmluZCAnY29udGVudCcgaXQgaXMgdGhlIGNvbXBvbmVudFxuICBpZiAoJ2NvbnRlbnQnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMuY29udGVudCAmJiBwYXlsb2FkLmNvbnRlbnQpIHRleHREaXNwbGF5LmNvbnRlbnQgPSBwYXlsb2FkLmNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gdGV4dERpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVNlcGFyYXRvckNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkU2VwYXJhdG9yQ29tcG9uZW50Pikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBzZXBhcmF0b3IgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHNlcGFyYXRvci50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgc2VwYXJhdG9yLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmRpdmlkZXIgJiYgcGF5bG9hZC5kaXZpZGVyKSBzZXBhcmF0b3IuZGl2aWRlciA9IHBheWxvYWQuZGl2aWRlcjtcbiAgaWYgKHByb3BzLnNwYWNpbmcgJiYgcGF5bG9hZC5zcGFjaW5nKSBzZXBhcmF0b3Iuc3BhY2luZyA9IHBheWxvYWQuc3BhY2luZztcblxuICByZXR1cm4gc2VwYXJhdG9yO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1MYWJlbENvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkTGFiZWxDb21wb25lbnQgfCBEaXNjb3JkTGFiZWxJbnRlcmFjdGlvblJlc3BvbnNlPikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBsYWJlbCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgbGFiZWwudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGxhYmVsLmlkID0gcGF5bG9hZC5pZDtcbiAgLy8gV2UgYXNzdW1lIHRoYXQgaWYgd2UgZmluZCAnbGFiZWwnIGl0IGlzIHRoZSBjb21wb25lbnRcbiAgaWYgKCdsYWJlbCcgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy5sYWJlbCAmJiBwYXlsb2FkLmxhYmVsKSBsYWJlbC5sYWJlbCA9IHBheWxvYWQubGFiZWw7XG4gICAgaWYgKHByb3BzLmRlc2NyaXB0aW9uICYmIHBheWxvYWQuZGVzY3JpcHRpb24pIGxhYmVsLmRlc2NyaXB0aW9uID0gcGF5bG9hZC5kZXNjcmlwdGlvbjtcbiAgfVxuICBpZiAocHJvcHMuY29tcG9uZW50ICYmIHBheWxvYWQuY29tcG9uZW50KSBsYWJlbC5jb21wb25lbnQgPSBib3QudHJhbnNmb3JtZXJzLmNvbXBvbmVudChib3QsIHBheWxvYWQuY29tcG9uZW50KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVVcGxvYWRDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZEZpbGVVcGxvYWRDb21wb25lbnQgfCBEaXNjb3JkRmlsZVVwbG9hZEludGVyYWN0aW9uUmVzcG9uc2U+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGZpbGVVcGxvYWQgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIGZpbGVVcGxvYWQudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGZpbGVVcGxvYWQuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY3VzdG9tSWQgJiYgcGF5bG9hZC5jdXN0b21faWQpIGZpbGVVcGxvYWQuY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcblxuICAvLyBXZSBhc3N1bWUgdGhhdCBpZiB3ZSBmaW5kICd2YWx1ZXMnIGl0IGlzIHRoZSBpbnRlcmFjdGlvbiByZXNwb25zZVxuICBpZiAoJ3ZhbHVlcycgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy52YWx1ZXMgJiYgcGF5bG9hZC52YWx1ZXMpIGZpbGVVcGxvYWQudmFsdWVzID0gcGF5bG9hZC52YWx1ZXM7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgX3BheWxvYWQgPSBwYXlsb2FkIGFzIFBhcnRpYWw8RGlzY29yZEZpbGVVcGxvYWRDb21wb25lbnQ+O1xuXG4gICAgaWYgKHByb3BzLm1pblZhbHVlcyAmJiBfcGF5bG9hZC5taW5fdmFsdWVzKSBmaWxlVXBsb2FkLm1pblZhbHVlcyA9IF9wYXlsb2FkLm1pbl92YWx1ZXM7XG4gICAgaWYgKHByb3BzLm1heFZhbHVlcyAmJiBfcGF5bG9hZC5tYXhfdmFsdWVzKSBmaWxlVXBsb2FkLm1heFZhbHVlcyA9IF9wYXlsb2FkLm1heF92YWx1ZXM7XG4gICAgaWYgKHByb3BzLnJlcXVpcmVkICYmIF9wYXlsb2FkLnJlcXVpcmVkKSBmaWxlVXBsb2FkLnJlcXVpcmVkID0gX3BheWxvYWQucmVxdWlyZWQ7XG4gICAgaWYgKHByb3BzLmZpbGVUeXBlcyAmJiBfcGF5bG9hZC5maWxlX3R5cGVzKSBmaWxlVXBsb2FkLmZpbGVUeXBlcyA9IF9wYXlsb2FkLmZpbGVfdHlwZXM7XG4gIH1cblxuICByZXR1cm4gZmlsZVVwbG9hZDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtUmFkaW9Hcm91cENvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkUmFkaW9Hcm91cENvbXBvbmVudCB8IERpc2NvcmRSYWRpb0dyb3VwSW50ZXJhY3Rpb25SZXNwb25zZT4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3QgcmFkaW9Hcm91cCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgcmFkaW9Hcm91cC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgcmFkaW9Hcm91cC5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgcmFkaW9Hcm91cC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIC8vIFdlIGFzc3VtZSB0aGF0IGlmIHdlIGZpbmQgJ29wdGlvbnMnIGl0IGlzIHRoZSBjb21wb25lbnRcbiAgaWYgKCdvcHRpb25zJyBpbiBwYXlsb2FkKSB7XG4gICAgaWYgKHByb3BzLm9wdGlvbnMgJiYgcGF5bG9hZC5vcHRpb25zKSByYWRpb0dyb3VwLm9wdGlvbnMgPSBwYXlsb2FkLm9wdGlvbnM7XG4gICAgaWYgKHByb3BzLnJlcXVpcmVkICYmIHBheWxvYWQucmVxdWlyZWQgIT09IHVuZGVmaW5lZCkgcmFkaW9Hcm91cC5yZXF1aXJlZCA9IHBheWxvYWQucmVxdWlyZWQ7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgX3BheWxvYWQgPSBwYXlsb2FkIGFzIFBhcnRpYWw8RGlzY29yZFJhZGlvR3JvdXBJbnRlcmFjdGlvblJlc3BvbnNlPjtcblxuICAgIGlmIChwcm9wcy52YWx1ZSkgcmFkaW9Hcm91cC52YWx1ZSA9IF9wYXlsb2FkLnZhbHVlID8/IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiByYWRpb0dyb3VwO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1DaGVja2JveEdyb3VwQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRDaGVja2JveEdyb3VwQ29tcG9uZW50IHwgRGlzY29yZENoZWNrYm94R3JvdXBJbnRlcmFjdGlvblJlc3BvbnNlPikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBjaGVja2JveEdyb3VwID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBjaGVja2JveEdyb3VwLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBjaGVja2JveEdyb3VwLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBjaGVja2JveEdyb3VwLmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG5cbiAgLy8gV2UgYXNzdW1lIHRoYXQgaWYgd2UgZmluZCAnb3B0aW9ucycgaXQgaXMgdGhlIGNvbXBvbmVudFxuICBpZiAoJ29wdGlvbnMnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMub3B0aW9ucyAmJiBwYXlsb2FkLm9wdGlvbnMpIGNoZWNrYm94R3JvdXAub3B0aW9ucyA9IHBheWxvYWQub3B0aW9ucztcbiAgICBpZiAocHJvcHMubWluVmFsdWVzICYmIHBheWxvYWQubWluX3ZhbHVlcyAhPT0gdW5kZWZpbmVkKSBjaGVja2JveEdyb3VwLm1pblZhbHVlcyA9IHBheWxvYWQubWluX3ZhbHVlcztcbiAgICBpZiAocHJvcHMubWF4VmFsdWVzICYmIHBheWxvYWQubWF4X3ZhbHVlcyAhPT0gdW5kZWZpbmVkKSBjaGVja2JveEdyb3VwLm1heFZhbHVlcyA9IHBheWxvYWQubWF4X3ZhbHVlcztcbiAgICBpZiAocHJvcHMucmVxdWlyZWQgJiYgcGF5bG9hZC5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkKSBjaGVja2JveEdyb3VwLnJlcXVpcmVkID0gcGF5bG9hZC5yZXF1aXJlZDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBfcGF5bG9hZCA9IHBheWxvYWQgYXMgUGFydGlhbDxEaXNjb3JkQ2hlY2tib3hHcm91cEludGVyYWN0aW9uUmVzcG9uc2U+O1xuXG4gICAgaWYgKHByb3BzLnZhbHVlcyAmJiBfcGF5bG9hZC52YWx1ZXMpIGNoZWNrYm94R3JvdXAudmFsdWVzID0gX3BheWxvYWQudmFsdWVzO1xuICB9XG5cbiAgcmV0dXJuIGNoZWNrYm94R3JvdXA7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUNoZWNrYm94Q29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRDaGVja2JveENvbXBvbmVudCB8IERpc2NvcmRDaGVja2JveEludGVyYWN0aW9uUmVzcG9uc2U+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGNoZWNrYm94ID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBjaGVja2JveC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgY2hlY2tib3guaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY3VzdG9tSWQgJiYgcGF5bG9hZC5jdXN0b21faWQpIGNoZWNrYm94LmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG5cbiAgaWYgKHByb3BzLnZhbHVlICYmICd2YWx1ZScgaW4gcGF5bG9hZCkgY2hlY2tib3gudmFsdWUgPSBwYXlsb2FkLnZhbHVlO1xuICBpZiAocHJvcHMuZGVmYXVsdCAmJiAnZGVmYXVsdCcgaW4gcGF5bG9hZCkgY2hlY2tib3guZGVmYXVsdCA9IHBheWxvYWQuZGVmYXVsdDtcblxuICByZXR1cm4gY2hlY2tib3g7XG59XG4iXSwibmFtZXMiOlsiTWVzc2FnZUNvbXBvbmVudFR5cGVzIiwiY2FsbEN1c3RvbWl6ZXIiLCJUb2dnbGVCaXRmaWVsZCIsInRyYW5zZm9ybUNvbXBvbmVudCIsImJvdCIsInBheWxvYWQiLCJleHRyYSIsImNvbXBvbmVudCIsInR5cGUiLCJFcnJvciIsIkFjdGlvblJvdyIsInRyYW5zZm9ybUFjdGlvblJvdyIsIkJ1dHRvbiIsInRyYW5zZm9ybUJ1dHRvbkNvbXBvbmVudCIsIkNvbnRhaW5lciIsInRyYW5zZm9ybUNvbnRhaW5lckNvbXBvbmVudCIsIlRleHRJbnB1dCIsInRyYW5zZm9ybUlucHV0VGV4dENvbXBvbmVudCIsIlN0cmluZ1NlbGVjdCIsInRyYW5zZm9ybVN0cmluZ1NlbGVjdE1lbnVDb21wb25lbnQiLCJVc2VyU2VsZWN0IiwidHJhbnNmb3JtVXNlclNlbGVjdE1lbnVDb21wb25lbnQiLCJSb2xlU2VsZWN0IiwidHJhbnNmb3JtUm9sZVNlbGVjdE1lbnVDb21wb25lbnQiLCJNZW50aW9uYWJsZVNlbGVjdCIsInRyYW5zZm9ybU1lbnRpb25hYmxlU2VsZWN0TWVudUNvbXBvbmVudCIsIkNoYW5uZWxTZWxlY3QiLCJ0cmFuc2Zvcm1DaGFubmVsU2VsZWN0TWVudUNvbXBvbmVudCIsIlNlY3Rpb24iLCJ0cmFuc2Zvcm1TZWN0aW9uQ29tcG9uZW50IiwiVGh1bWJuYWlsIiwidHJhbnNmb3JtVGh1bWJuYWlsQ29tcG9uZW50IiwiTWVkaWFHYWxsZXJ5IiwidHJhbnNmb3JtTWVkaWFHYWxsZXJ5Q29tcG9uZW50IiwiRmlsZSIsInRyYW5zZm9ybUZpbGVDb21wb25lbnQiLCJTZXBhcmF0b3IiLCJ0cmFuc2Zvcm1TZXBhcmF0b3JDb21wb25lbnQiLCJUZXh0RGlzcGxheSIsInRyYW5zZm9ybVRleHREaXNwbGF5Q29tcG9uZW50IiwiTGFiZWwiLCJ0cmFuc2Zvcm1MYWJlbENvbXBvbmVudCIsIkZpbGVVcGxvYWQiLCJ0cmFuc2Zvcm1GaWxlVXBsb2FkQ29tcG9uZW50IiwiUmFkaW9Hcm91cCIsInRyYW5zZm9ybVJhZGlvR3JvdXBDb21wb25lbnQiLCJDaGVja2JveEdyb3VwIiwidHJhbnNmb3JtQ2hlY2tib3hHcm91cENvbXBvbmVudCIsIkNoZWNrYm94IiwidHJhbnNmb3JtQ2hlY2tib3hDb21wb25lbnQiLCJwYXJ0aWFsIiwidHJhbnNmb3JtVW5mdXJsZWRNZWRpYUl0ZW0iLCJwcm9wcyIsInRyYW5zZm9ybWVycyIsImRlc2lyZWRQcm9wZXJ0aWVzIiwidW5mdXJsZWRNZWRpYUl0ZW0iLCJtZWRpYUl0ZW0iLCJ1cmwiLCJwcm94eVVybCIsInByb3h5X3VybCIsImhlaWdodCIsIndpZHRoIiwicGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlclZlcnNpb24iLCJwbGFjZWhvbGRlcl92ZXJzaW9uIiwiY29udGVudFR5cGUiLCJjb250ZW50X3R5cGUiLCJmbGFncyIsImF0dGFjaG1lbnRJZCIsImF0dGFjaG1lbnRfaWQiLCJzbm93Zmxha2UiLCJ0cmFuc2Zvcm1NZWRpYUdhbGxlcnlJdGVtIiwibWVkaWFHYWxsZXJ5SXRlbSIsImdhbGxlcnlJdGVtIiwibWVkaWEiLCJkZXNjcmlwdGlvbiIsInNwb2lsZXIiLCJhY3Rpb25Sb3ciLCJpZCIsImNvbXBvbmVudHMiLCJtYXAiLCJjb250YWluZXIiLCJhY2NlbnRDb2xvciIsImFjY2VudF9jb2xvciIsImJ1dHRvbiIsImxhYmVsIiwiY3VzdG9tSWQiLCJjdXN0b21faWQiLCJzdHlsZSIsImVtb2ppIiwiZGlzYWJsZWQiLCJza3VJZCIsInNrdV9pZCIsImlucHV0IiwidmFsdWUiLCJyZXF1aXJlZCIsIm1pbkxlbmd0aCIsIm1pbl9sZW5ndGgiLCJtYXhMZW5ndGgiLCJtYXhfbGVuZ3RoIiwic2VsZWN0IiwidmFsdWVzIiwiX3BheWxvYWQiLCJtaW5WYWx1ZXMiLCJtaW5fdmFsdWVzIiwibWF4VmFsdWVzIiwibWF4X3ZhbHVlcyIsIm9wdGlvbnMiLCJvcHRpb24iLCJ1bmRlZmluZWQiLCJuYW1lIiwiYW5pbWF0ZWQiLCJkZWZhdWx0IiwicmVzb2x2ZWQiLCJpbnRlcmFjdGlvbkRhdGFSZXNvbHZlZCIsImRlZmF1bHRWYWx1ZXMiLCJkZWZhdWx0X3ZhbHVlcyIsImRlZmF1bHRWYWx1ZSIsImNoYW5uZWxUeXBlcyIsImNoYW5uZWxfdHlwZXMiLCJzZWN0aW9uIiwiYWNjZXNzb3J5IiwidGh1bWJuYWlsIiwibWVkaWFHYWxsZXJ5IiwiaXRlbXMiLCJpdGVtIiwiZmlsZSIsInNpemUiLCJ0ZXh0RGlzcGxheSIsImNvbnRlbnQiLCJzZXBhcmF0b3IiLCJkaXZpZGVyIiwic3BhY2luZyIsImZpbGVVcGxvYWQiLCJm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
@@ -1,5 +1,18 @@
1
- import type { DiscordEmbed } from '@discordeno/types';
1
+ import type { DiscordEmbed, DiscordEmbedAuthor, DiscordEmbedFooter, DiscordEmbedImage, DiscordEmbedVideo } from '@discordeno/types';
2
2
  import type { Bot } from '../bot.js';
3
- import type { Embed } from './types.js';
4
- export declare function transformEmbed(bot: Bot, payload: DiscordEmbed): Embed;
3
+ export declare function transformEmbed(bot: Bot, payload: Partial<DiscordEmbed>, extra?: {
4
+ partial?: boolean;
5
+ }): any;
6
+ export declare function transformEmbedFooter(bot: Bot, payload: Partial<DiscordEmbedFooter>, extra?: {
7
+ partial?: boolean;
8
+ }): any;
9
+ export declare function transformEmbedImage(bot: Bot, payload: Partial<DiscordEmbedImage>, extra?: {
10
+ partial?: boolean;
11
+ }): any;
12
+ export declare function transformEmbedVideo(bot: Bot, payload: Partial<DiscordEmbedVideo>, extra?: {
13
+ partial?: boolean;
14
+ }): any;
15
+ export declare function transformEmbedAuthor(bot: Bot, payload: Partial<DiscordEmbedAuthor>, extra?: {
16
+ partial?: boolean;
17
+ }): any;
5
18
  //# sourceMappingURL=embed.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../../src/transformers/embed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,GAAG,KAAK,CAoDrE"}
1
+ {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../../src/transformers/embed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACpI,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAMrC,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,OAqBrG;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,OAUjH;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,OAgB/G;AACD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,OAgB/G;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,OAWjH"}