Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

491 lines
19 KiB

  1. //+---------------------------------------------------------------------------
  2. //
  3. // Copyright 2001 Microsoft Corporation. All Rights Reserved.
  4. //
  5. // Contents: MSN Messenger UI Automation interfaces
  6. //
  7. //----------------------------------------------------------------------------
  8. #ifdef __MKTYPLIB__
  9. #define VARIANT_BOOL boolean
  10. #else // __MKTYPLIB__
  11. cpp_quote("//+-------------------------------------------------------------------------")
  12. cpp_quote("//")
  13. cpp_quote("// Microsoft Windows")
  14. cpp_quote("// Copyright 1997 Microsoft Corporation. All Rights Reserved.")
  15. cpp_quote("//")
  16. cpp_quote("// File: msgrua.h")
  17. cpp_quote("//")
  18. cpp_quote("//--------------------------------------------------------------------------")
  19. import "ocidl.idl";
  20. import "objidl.idl";
  21. import "oleidl.idl";
  22. import "oaidl.idl";
  23. #endif // __MKTYPLIB__
  24. #include "msgruaid.h"
  25. //////////////////////////////////////////////////////////////////////////////////
  26. // GUID usage:
  27. // {218CB450-20B6-11d2-8E17-0000F803A446}-{218CB45F-20B6-11d2-8E17-0000F803A446}
  28. //--------------------------------------------------------------------------
  29. // Type Library
  30. [
  31. uuid(E02AD29E-80F5-46c6-B416-9B3EBDDF057E), // LIBID_MessengerUA
  32. version(1.0),
  33. helpstring("Messenger UI Automation Type Library")
  34. ]
  35. library MessengerUA
  36. {
  37. importlib("stdole32.tlb");
  38. interface IMessenger;
  39. dispinterface DMessengerEvents;
  40. interface IMessengerWindow;
  41. interface IMessengerContact;
  42. interface IMessengerContacts;
  43. #define DISPID_VALUE 0
  44. #define DISPID_NEWENUM -4
  45. typedef enum
  46. {
  47. MISTATUS_UNKNOWN = 0x0000,
  48. MISTATUS_OFFLINE = 0x0001,
  49. MISTATUS_ONLINE = 0x0002,
  50. MISTATUS_INVISIBLE = 0x0006,
  51. MISTATUS_BUSY = 0x000A,
  52. MISTATUS_BE_RIGHT_BACK = 0x000E,
  53. MISTATUS_IDLE = 0x0012,
  54. MISTATUS_AWAY = 0x0022,
  55. MISTATUS_ON_THE_PHONE = 0x0032,
  56. MISTATUS_OUT_TO_LUNCH = 0x0042,
  57. MISTATUS_LOCAL_FINDING_SERVER = 0x0100,
  58. MISTATUS_LOCAL_CONNECTING_TO_SERVER = 0x0200,
  59. MISTATUS_LOCAL_SYNCHRONIZING_WITH_SERVER = 0x0300,
  60. MISTATUS_LOCAL_DISCONNECTING_FROM_SERVER = 0x0400,
  61. }
  62. MISTATUS;
  63. typedef enum
  64. {
  65. MCONTACTPROP_INVALID_PROPERTY = -1
  66. }
  67. MCONTACTPROPERTY;
  68. typedef enum
  69. {
  70. MWINDOWPROP_INVALID_PROPERTY = -1
  71. }
  72. MWINDOWPROPERTY;
  73. typedef enum
  74. {
  75. MPHONE_TYPE_THIS = -1,
  76. MPHONE_TYPE_HOME = 0,
  77. MPHONE_TYPE_WORK = 1,
  78. MPHONE_TYPE_MOBILE = 2,
  79. }
  80. MPHONE_TYPE;
  81. typedef enum
  82. {
  83. MOPT_GENERAL_PAGE = 0,
  84. MOPT_PRIVACY_PAGE = 1,
  85. MOPT_EXCHANGE_PAGE = 2,
  86. MOPT_ACCOUNTS_PAGE = 3,
  87. MOPT_CONNECTION_PAGE = 4,
  88. MOPT_PREFERENCES_PAGE = 5,
  89. MOPT_SERVICES_PAGE = 6,
  90. MOPT_PHONE_PAGE = 7,
  91. }
  92. MOPTIONPAGE;
  93. typedef enum
  94. {
  95. MUAFOLDER_INBOX = 0,
  96. MUAFOLDER_ALL_OTHER_FOLDERS = 1,
  97. }
  98. MUAFOLDER;
  99. //--------------------------------------------------------------------------
  100. // IMessengerWindow Interface
  101. [
  102. uuid(D6B0E4C8-FAD6-4885-B271-0DC5A584ADF8), // IID_IMessengerWindow
  103. helpstring("Messenger Window Interface"),
  104. helpcontext(0x0000),
  105. dual,
  106. oleautomation
  107. ]
  108. interface IMessengerWindow : IDispatch
  109. {
  110. [ id(DISPID_MUAW_CLOSE), helpstring("Close the window."), helpcontext(0x0000)]
  111. HRESULT Close();
  112. [ id(DISPID_MUAW_HWND), propget, helpstring("Returns the Handle of the Application window."), helpcontext(0x0000)]
  113. HRESULT HWND([out, retval] LONG *phWnd);
  114. [ id(DISPID_MUAW_LEFT), propget, helpstring("The horizontal position (pixels) of the Application window relative to the screen."), helpcontext(0x0000)]
  115. HRESULT Left([out, retval] LONG *plLeft);
  116. [ id(DISPID_MUAW_LEFT), propput, helpstring("The horizontal position (pixels) of the Application window relative to the screen."), helpcontext(0x0000)]
  117. HRESULT Left([in] LONG lLeft);
  118. [ id(DISPID_MUAW_TOP), propget, helpstring("The vertical position (pixels) of the Application window relative to the screen."), helpcontext(0x0000)]
  119. HRESULT Top([out, retval] LONG *plTop);
  120. [ id(DISPID_MUAW_TOP), propput, helpstring("The vertical position (pixels) of the Application window relative to the screen."), helpcontext(0x0000)]
  121. HRESULT Top([in] LONG lTop);
  122. [ id(DISPID_MUAW_WIDTH), propget, helpstring("The horizontal dimension (pixels) of the Application window."), helpcontext(0x0000)]
  123. HRESULT Width([out, retval] LONG *plWidth);
  124. [ id(DISPID_MUAW_WIDTH), propput, helpstring("The horizontal dimension (pixels) of the Application window."), helpcontext(0x0000)]
  125. HRESULT Width([in] LONG lWidth);
  126. [ id(DISPID_MUAW_HEIGHT), propget, helpstring("The vertical dimension (pixels) of the Application window."), helpcontext(0x0000)]
  127. HRESULT Height([out, retval] LONG *plHeight);
  128. [ id(DISPID_MUAW_HEIGHT), propput, helpstring("The vertical dimension (pixels) of the Application window."), helpcontext(0x0000)]
  129. HRESULT Height([in] LONG lHeight);
  130. [ id(DISPID_MUAW_ISCLOSED), propget, helpstring("Get visibility of the window."), helpcontext(0x0000)]
  131. HRESULT IsClosed([out, retval] VARIANT_BOOL* pBoolClose);
  132. [ id(DISPID_MUAW_SHOW), helpstring("Show the window."), helpcontext(0x0000)]
  133. HRESULT Show();
  134. [id(DISPID_MUAW_PROPERTY), propget, helpstring("Returns an specific property of the window."), helpcontext(0x0000)]
  135. HRESULT Property(
  136. [in] MWINDOWPROPERTY ePropType,
  137. [out, retval] VARIANT *pvPropVal);
  138. [id(DISPID_MUAW_PROPERTY), propput, helpstring("Set an specific property of the window."), helpcontext(0x0000)]
  139. HRESULT Property(
  140. [in] MWINDOWPROPERTY ePropType,
  141. [in] VARIANT vPropVal);
  142. }
  143. //--------------------------------------------------------------------------
  144. // IMessenger Interface
  145. [
  146. uuid(D50C3186-0F89-48f8-B204-3604629DEE10), // IID_IMessenger
  147. helpstring("Messenger UI Automation Interface"),
  148. helpcontext(0x0000),
  149. dual,
  150. oleautomation
  151. ]
  152. interface IMessenger : IDispatch
  153. {
  154. [id(DISPID_MUAM_WINDOW), propget, helpstring("Returns main window IMessengerWindow object.")]
  155. HRESULT Window([out, retval] IDispatch ** ppMWindow);
  156. [id(DISPID_MUAM_VIEWPROFILE), helpstring("Initiates view contact profile.")]
  157. HRESULT ViewProfile([in] VARIANT vContact);
  158. [id(DISPID_MUAM_RECEIVEDIR), propget, helpstring("Returns the path to the receive directory.")]
  159. HRESULT ReceiveFileDirectory([out, retval] BSTR * bstrPath );
  160. [id(DISPID_MUAM_STARTVOICE), helpstring("Initiates voice conversation.")]
  161. HRESULT StartVoice([in] VARIANT vContact, [out, retval] IDispatch ** ppMWindow);
  162. [id(DISPID_MUAM_INVITEAPP), helpstring("Initiates invite application.")]
  163. HRESULT InviteApp([in] VARIANT vContact, [in] BSTR bstrAppID, [out, retval] IDispatch **ppMWindow);
  164. [id(DISPID_MUAM_SENDMAIL), helpstring("Initiates default e-mail provider compose window.")]
  165. HRESULT SendMail([in] VARIANT vContact);
  166. [id(DISPID_MUAM_OPENINBOX), helpstring("Initiates default e-mail application.")]
  167. HRESULT OpenInbox();
  168. [id(DISPID_MUAM_SENDFILE), helpstring("Initiates send file invite.")]
  169. HRESULT SendFile( [in] VARIANT vContact,
  170. [in] BSTR bstrFileName,
  171. [out, retval] IDispatch ** ppMWindow);
  172. [id(DISPID_MUAM_SIGNOUT), helpstring("Initiates a sign out from all services."), helpcontext(0x0000)]
  173. HRESULT Signout();
  174. [ id(DISPID_MUAM_SIGNIN), helpstring("Initiates signin dialog and populates signin name and password edit boxes."), helpcontext(0x0000)]
  175. HRESULT Signin(
  176. [in] LONG hwndParent,
  177. [in] BSTR bstrSigninName,
  178. [in] BSTR bstrPassword);
  179. [id(DISPID_MUAM_GETCONTACT), helpstring("Find contact in list.")]
  180. HRESULT GetContact( [in] BSTR bstrSigninName,
  181. [in] BSTR bstrServiceId,
  182. [out, retval] IDispatch ** ppMContact);
  183. [ id(DISPID_MUAM_OPTIONUI), helpstring("Initiates Options dialog."), helpcontext(0x0000)]
  184. HRESULT OptionsPages(
  185. [in] LONG hwndParent,
  186. [in] MOPTIONPAGE mOptionPage);
  187. [ id(DISPID_MUAM_ADDUI), helpstring("Initiates Add Contact dialog."), helpcontext(0x0000)]
  188. HRESULT AddContact(
  189. [in] LONG hwndParent,
  190. [in] BSTR bstrEMail);
  191. [ id(DISPID_MUAM_FINDUI), helpstring("Initiates Find Contact Dialog."), helpcontext(0x0000)]
  192. HRESULT FindContact(
  193. [in] LONG hwndParent,
  194. [in] BSTR bstrFirstName,
  195. [in] BSTR bstrLastName,
  196. [in, optional] VARIANT vbstrCity,
  197. [in, optional] VARIANT vbstrState,
  198. [in, optional] VARIANT vbstrCountry);
  199. [ id(DISPID_MUAM_INSTANTMESSAGE), helpstring("Initiates IM Window."), helpcontext(0x0000)]
  200. HRESULT InstantMessage(
  201. [in] VARIANT vContact,
  202. [out, retval] IDispatch** ppMWindow);
  203. [ id(DISPID_MUAM_PHONEUI), helpstring("Initiates Phone Window."), helpcontext(0x0000)]
  204. HRESULT Phone(
  205. [in] VARIANT vContact,
  206. [in] MPHONE_TYPE ePhoneNumber,
  207. [in] BSTR bstrNumber,
  208. [out, retval] IDispatch** ppMWindow);
  209. [ id(DISPID_MUAM_AUDIOUI), helpstring("Initiates audio tuning wizard."), helpcontext(0x0000)]
  210. HRESULT MediaWizard(
  211. [in] LONG hwndParent);
  212. [ id(DISPID_MUAM_PAGERUI), helpstring("Initiates pager instant message Window."), helpcontext(0x0000)]
  213. HRESULT Page(
  214. [in] VARIANT vContact,
  215. [out, retval] IDispatch** ppMWindow);
  216. [ id(DISPID_MUAM_AUTOSIGNIN), helpstring("Initiates a signin without UI if connected to the network and contact saved the password."), helpcontext(0x0000)]
  217. HRESULT AutoSignin();
  218. [ id(DISPID_MUAM_CONTACTS), propget, helpstring("Returns the contact list.")]
  219. HRESULT MyContacts([out, retval] IDispatch ** ppMContacts);
  220. [ id(DISPID_MUAM_SIGNINNAME), propget, helpstring("Returns signin name.")]
  221. HRESULT MySigninName([out, retval] BSTR * pbstrName);
  222. [ id(DISPID_MUAM_FRIENDLYNAME), propget, helpstring("Returns friendly Name.")]
  223. HRESULT MyFriendlyName([out, retval] BSTR * pbstrName);
  224. [ id(DISPID_MUAM_STATUS), propput, helpstring("Set my status.")]
  225. HRESULT MyStatus([in] MISTATUS mStatus);
  226. [ id(DISPID_MUAM_STATUS), propget, helpstring("Returns my status.")]
  227. HRESULT MyStatus([out, retval] MISTATUS* pmStatus);
  228. [id(DISPID_MUAM_UNREADEMAILCOUNT), propget, helpstring("Returns the number of unread e-mail from default provider.")]
  229. HRESULT UnreadEmailCount([in] MUAFOLDER mFolder, [out, retval] LONG * plCount);
  230. [id(DISPID_MUAM_MYSERVICENAME), propget, helpstring("Returns my primary service name."), helpcontext(0x0000)]
  231. HRESULT MyServiceName([out, retval] BSTR * pbstrServiceName);
  232. [id(DISPID_MUAM_MYPHONENUMBER), propget, helpstring("Returns one of my phone numbers."), helpcontext(0x0000)]
  233. HRESULT MyPhoneNumber([in] MPHONE_TYPE PhoneType, [out, retval] BSTR * pbstrNumber);
  234. [id(DISPID_MUAM_MYPROPERTY), propget, helpstring("Returns my specific property"), helpcontext(0x0000)]
  235. HRESULT MyProperty(
  236. [in] MCONTACTPROPERTY ePropType,
  237. [out, retval] VARIANT *pvPropVal);
  238. [id(DISPID_MUAM_MYPROPERTY), propput, helpstring("Set my specific property."), helpcontext(0x0000)]
  239. HRESULT MyProperty(
  240. [in] MCONTACTPROPERTY ePropType,
  241. [in] VARIANT vPropVal);
  242. [id(DISPID_MUAM_SERVICEID), propget, helpstring("Return my primary service ID."), helpcontext(0x0000)]
  243. HRESULT MyServiceId([out, retval] BSTR * pbstrServiceId);
  244. [id(DISPID_MUAM_SERVICES), propget, helpstring("Returns services list."), helpcontext(0x0000)]
  245. HRESULT Services([out, retval] IDispatch ** ppdispServices);
  246. }
  247. //--------------------------------------------------------------------------
  248. // DMessengerEvents Interface
  249. [
  250. uuid(C9A6A6B6-9BC1-43a5-B06B-E58874EEBC96), // DIID_DMessengerEvents
  251. helpstring("Messenger Events"),
  252. hidden
  253. ]
  254. dispinterface DMessengerEvents
  255. {
  256. properties:
  257. methods:
  258. [id(DISPID_MUAE_ONAPPSHUTDOWN), helpstring("Messenger is shutting down."), helpcontext(0x0000)]
  259. void OnAppShutdown();
  260. [id(DISPID_MUAE_ONSIGNIN), helpstring("Signin attempt complete.")]
  261. void OnSignin([in] LONG hr);
  262. [id(DISPID_MUAE_ONSIGNOUT), helpstring("Signout attempt complete.")]
  263. void OnSignout();
  264. [id(DISPID_MUAE_ONLISTADD), helpstring("Resutlt from list add request.")]
  265. void OnContactListAdd([in] LONG hr,
  266. [in] IDispatch* pMContact);
  267. [id(DISPID_MUAE_ONLISTREMOVE), helpstring("Result from list remove request.")]
  268. void OnContactListRemove([in] LONG hr,
  269. [in] IDispatch * pMContact);
  270. [id(DISPID_MUAE_ONMYFRIENDLYNAMECHANGE), helpstring("Result from my friendly name change request.")]
  271. void OnMyFriendlyNameChange([in] LONG hr,
  272. [in] BSTR bstrPrevFriendlyName);
  273. [id(DISPID_MUAE_ONMYSTATECHANGE), helpstring("My status changed.")]
  274. void OnMyStatusChange([in] LONG hr,
  275. [in] MISTATUS mMYStatusOE);
  276. [id(DISPID_MUAE_ONMYPHONECHANGE), helpstring("Result from one of my phone numbers change request."), helpcontext(0x0000)]
  277. void OnMyPhoneChange(
  278. [in] MPHONE_TYPE PhoneType,
  279. [in] BSTR bstrNUmber);
  280. [id(DISPID_MUAE_ONMYPROPERTYCHANGE), helpstring("Result from one of my attributes change request."), helpcontext(0x0000)]
  281. void OnMyPropertyChange([in] LONG hr,
  282. [in] MCONTACTPROPERTY ePropType,
  283. [in] VARIANT vPropVal);
  284. [id(DISPID_MUAE_ONUSERFRIENDLYNAMECHANGE), helpstring("Result from contact friendly name change request.")]
  285. void OnContactFriendlyNameChange([in] LONG hr,
  286. [in] IDispatch* pMContact,
  287. [in] BSTR bstrPrevFriendlyName);
  288. [id(DISPID_MUAE_ONUSERSTATECHANGE), helpstring("Contact state changed.")]
  289. void OnContactStatusChange([in] IDispatch* pMContact,
  290. [in] MISTATUS mPrevStatusOE);
  291. [id(DISPID_MUAE_ONUSERPROPERTYCHANGE), helpstring("Result from one of contact attributes change notification."), helpcontext(0x0000)]
  292. void OnContactPropertyChange(
  293. [in] LONG hr,
  294. [in] IDispatch * pContact,
  295. [in] MCONTACTPROPERTY ePropType,
  296. [in] VARIANT vPropVal);
  297. [id(DISPID_MUAE_ONUSERBLOCKCHANGE), helpstring("Result from contact block state change notification."), helpcontext(0x0000)]
  298. void OnContactBlockChange(
  299. [in] LONG hr,
  300. [in] IDispatch * pContact,
  301. [in] VARIANT_BOOL pBoolBlock);
  302. [id(DISPID_MUAE_ONUSERPAGERCHANGE), helpstring("Result from contact pager configuration change notification."), helpcontext(0x0000)]
  303. void OnContactPagerChange(
  304. [in] LONG hr,
  305. [in] IDispatch * pContact,
  306. [in] VARIANT_BOOL pBoolPage);
  307. [id(DISPID_MUAE_ONUSERPHONECHANGE), helpstring("Result from one of contact phone numbers change notification."), helpcontext(0x0000)]
  308. void OnContactPhoneChange(
  309. [in] LONG hr,
  310. [in] IDispatch * pContact,
  311. [in] MPHONE_TYPE PhoneType,
  312. [in] BSTR bstrNUmber);
  313. [id(DISPID_MUAE_ONUNREADEMAILCHANGE), helpstring("Unread email count has changed."), helpcontext(0x0000)]
  314. void OnUnreadEmailChange(
  315. [in] MUAFOLDER mFolder,
  316. [in] LONG cUnreadEmail,
  317. [in, out] VARIANT_BOOL* pBoolfEnableDefault);
  318. }
  319. //--------------------------------------------------------------------------
  320. // IMessengerContact Interface
  321. [
  322. uuid(E7479A0F-BB19-44a5-968F-6F41D93EE0BC), // IID_IMessengerContact
  323. helpstring("Messenger Contact for IMessenger"),
  324. dual,
  325. oleautomation
  326. ]
  327. interface IMessengerContact : IDispatch
  328. {
  329. [id(DISPID_MUAC_FRIENDLYNAME), propget, helpstring("Returns friendly Name of the contact."), helpcontext(0x0000)]
  330. HRESULT FriendlyName([out, retval] BSTR * pbstrFriendlyName);
  331. [id(DISPID_MUAC_STATUS), propget, helpstring("Returns status of the contact."), helpcontext(0x0000)]
  332. HRESULT Status([out, retval] MISTATUS * pMstate);
  333. [id(DISPID_MUAC_SIGNINNAME), propget, helpstring("Returns signin Name of the contact."), helpcontext(0x0000)]
  334. HRESULT SigninName([out, retval] BSTR * pbstrSigninName);
  335. [id(DISPID_MUAC_SERVICENAME), propget, helpstring("Return service name of the contact."), helpcontext(0x0000)]
  336. HRESULT ServiceName([out, retval] BSTR * pbstrServiceName);
  337. [id(DISPID_MUAC_BLOCK), propget, helpstring("Block / Unblock the contact"), helpcontext(0x0000)]
  338. HRESULT Blocked([out, retval] VARIANT_BOOL * pBoolBlock);
  339. [id(DISPID_MUAC_BLOCK), propput, helpstring("Block / Unblock the contact"), helpcontext(0x0000)]
  340. HRESULT Blocked([in] VARIANT_BOOL pBoolBlock);
  341. [id(DISPID_MUAC_CANPAGE), propget, helpstring("The contact has a pager configured?"), helpcontext(0x0000)]
  342. HRESULT CanPage([out, retval] VARIANT_BOOL* pBoolPage);
  343. [id(DISPID_MUAC_PHONENUMBER), propget, helpstring("Returns Contact's phone number"), helpcontext(0x0000)]
  344. HRESULT PhoneNumber([in] MPHONE_TYPE PhoneType, [out, retval] BSTR * bstrNumber);
  345. [id(DISPID_MUAC_ISSELF), propget, helpstring("Is this contact the local contact?"), helpcontext(0x0000)]
  346. HRESULT IsSelf([out, retval] VARIANT_BOOL* pBoolSelf);
  347. [id(DISPID_MUAC_PROPERTY), propget, helpstring("Returns an specific property of the contact."), helpcontext(0x0000)]
  348. HRESULT Property(
  349. [in] MCONTACTPROPERTY ePropType,
  350. [out, retval] VARIANT *pvPropVal);
  351. [id(DISPID_MUAC_PROPERTY), propput, helpstring("Set an specific property of the contact."), helpcontext(0x0000)]
  352. HRESULT Property(
  353. [in] MCONTACTPROPERTY ePropType,
  354. [in] VARIANT vPropVal);
  355. [id(DISPID_MUAC_SERVICEID), propget, helpstring("Return contact's service ID."), helpcontext(0x0000)]
  356. HRESULT ServiceId([out, retval] BSTR * pbstrServiceID);
  357. }
  358. //--------------------------------------------------------------------------
  359. // IMessengerContacts Interface
  360. [
  361. uuid(E7479A0D-BB19-44a5-968F-6F41D93EE0BC), // IID_IMessengerContacts
  362. helpstring("Messenger Contacts Collection for IMessenger"),
  363. dual,
  364. oleautomation
  365. ]
  366. interface IMessengerContacts : IDispatch
  367. {
  368. [id(DISPID_MUAC_COUNT), propget, helpstring("Returns number of contacts.")]
  369. HRESULT Count([out, retval] LONG* pcContacts);
  370. [id(DISPID_VALUE), helpstring("Returns a specific contact by index.")]
  371. HRESULT Item([in] LONG Index,
  372. [out, retval] IDispatch** ppMContact);
  373. [id(DISPID_MUAC_REMOVE), helpstring("Removes a user object from the collection.")]
  374. HRESULT Remove([in] IDispatch * pMContact);
  375. [id(DISPID_NEWENUM), propget, restricted, helpstring("Enumerates the users.")]
  376. HRESULT _NewEnum([out, retval] IUnknown **ppUnknown);
  377. }
  378. [
  379. uuid(B69003B3-C55E-4b48-836C-BC5946FC3B28), // CLSID_MessengerUIAutomation
  380. helpstring("Messenger UI Automation"),
  381. appobject
  382. ]
  383. coclass MessengerUIAutomation
  384. {
  385. [default] interface IMessenger;
  386. [default, source] dispinterface DMessengerEvents;
  387. };
  388. };