Advertisement
Guest User

sdfsdfsdf

a guest
Feb 19th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.83 KB | None | 0 0
  1. // Decompiled with JetBrains decompiler
  2. // Type: Rabbit.Utility
  3. // Assembly: Rabbit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
  4. // MVID: 4341403A-9FDD-43C4-92F1-08327F8D1D7C
  5. // Assembly location: F:\content\Rabbit (2)\Rabbit.exe
  6.  
  7. using Microsoft.VisualBasic;
  8. using Microsoft.VisualBasic.CompilerServices;
  9. using System;
  10. using System.Collections;
  11. using System.Collections.Generic;
  12. using System.Drawing;
  13. using System.Drawing.Drawing2D;
  14. using System.Drawing.Imaging;
  15. using System.IO;
  16. using System.Linq;
  17. using System.Runtime.CompilerServices;
  18. using System.Runtime.InteropServices;
  19. using System.Runtime.Serialization.Formatters.Binary;
  20. using System.Security.Cryptography;
  21. using System.Text;
  22. using System.Text.RegularExpressions;
  23. using System.Threading;
  24.  
  25. namespace Rabbit
  26. {
  27. public class Utility
  28. {
  29. public static object HLock = RuntimeHelpers.GetObjectValue(new object());
  30. [SpecialName]
  31. private static Random \u0024STATIC\u0024RandomNumber\u002402888\u0024Generator;
  32. [SpecialName]
  33. private static StaticLocalInitFlag \u0024STATIC\u0024RandomNumber\u002402888\u0024Generator\u0024Init;
  34. [SpecialName]
  35. private static Random \u0024STATIC\u0024RandomString\u002402E82\u0024Generator;
  36. [SpecialName]
  37. private static StaticLocalInitFlag \u0024STATIC\u0024RandomString\u002402E82\u0024Generator\u0024Init;
  38. [SpecialName]
  39. private static Random \u0024STATIC\u0024GetRandomHexNumber\u002401E8\u0024Generator;
  40. [SpecialName]
  41. private static StaticLocalInitFlag \u0024STATIC\u0024GetRandomHexNumber\u002401E8\u0024Generator\u0024Init;
  42.  
  43. [DllImport("r.dll", CallingConvention = CallingConvention.StdCall)]
  44. public static extern void x4([MarshalAs(UnmanagedType.BStr)] out string output, [MarshalAs(UnmanagedType.BStr), In] string Input, [MarshalAs(UnmanagedType.BStr), In] string Serial, [MarshalAs(UnmanagedType.BStr), In] string Unique);
  45.  
  46. [DllImport("r64.dll", CallingConvention = CallingConvention.StdCall)]
  47. public static extern void x64([MarshalAs(UnmanagedType.BStr)] out string output, [MarshalAs(UnmanagedType.BStr), In] string Input, [MarshalAs(UnmanagedType.BStr), In] string Serial, [MarshalAs(UnmanagedType.BStr), In] string Unique);
  48.  
  49. public static object Expart(string stpart, string ndpart, string source, int negative)
  50. {
  51. object obj1;
  52. try
  53. {
  54. object obj2 = (object) stpart;
  55. object obj3 = (object) Microsoft.VisualBasic.Strings.InStr(source, Conversions.ToString(RuntimeHelpers.GetObjectValue(obj2)), CompareMethod.Binary);
  56. object obj4 = (object) Microsoft.VisualBasic.Strings.Mid(source, Conversions.ToInteger(RuntimeHelpers.GetObjectValue(obj3))).ToString();
  57. object obj5 = (object) Microsoft.VisualBasic.Strings.InStr(Conversions.ToString(RuntimeHelpers.GetObjectValue(obj4)), ndpart, CompareMethod.Binary);
  58. obj1 = (object) Microsoft.VisualBasic.Strings.Replace(Conversions.ToString((object) Microsoft.VisualBasic.Strings.Mid(Conversions.ToString(RuntimeHelpers.GetObjectValue(obj4)), 1, Conversions.ToInteger(RuntimeHelpers.GetObjectValue(Operators.SubtractObject(RuntimeHelpers.GetObjectValue(obj5), (object) negative))))), Conversions.ToString(RuntimeHelpers.GetObjectValue(obj2)), "", 1, -1, CompareMethod.Binary);
  59. }
  60. catch (Exception ex)
  61. {
  62. ProjectData.SetProjectError(ex);
  63. ProjectData.ClearProjectError();
  64. }
  65. return obj1;
  66. }
  67.  
  68. public static string OneLine(string Text)
  69. {
  70. Text = Regex.Replace(Text, "\\r\\n?|\\n", "");
  71. return Text;
  72. }
  73.  
  74. public static object Hmac256(string input)
  75. {
  76. object objectValue = RuntimeHelpers.GetObjectValue(Utility.HLock);
  77. ObjectFlowControl.CheckForSyncLockOnValueType(objectValue);
  78. bool lockTaken = false;
  79. object obj;
  80. try
  81. {
  82. Monitor.Enter(objectValue, ref lockTaken);
  83. string output = "";
  84. try
  85. {
  86. Utility.x4(out output, input, L.S, L.B);
  87. obj = (object) output.ToLower();
  88. goto label_11;
  89. }
  90. catch (Exception ex1)
  91. {
  92. ProjectData.SetProjectError(ex1);
  93. try
  94. {
  95. Utility.x64(out output, input, L.S, L.B);
  96. obj = (object) output.ToLower();
  97. ProjectData.ClearProjectError();
  98. goto label_11;
  99. }
  100. catch (Exception ex2)
  101. {
  102. ProjectData.SetProjectError(ex2);
  103. ProjectData.ClearProjectError();
  104. }
  105. ProjectData.ClearProjectError();
  106. }
  107. }
  108. finally
  109. {
  110. if (lockTaken)
  111. Monitor.Exit(objectValue);
  112. }
  113. obj = (object) "";
  114. label_11:
  115. return obj;
  116. }
  117.  
  118. public static string ByteToString(byte[] buff)
  119. {
  120. string str = "";
  121. int num = checked (buff.Length - 1);
  122. int index = 0;
  123. while (index <= num)
  124. {
  125. str += buff[index].ToString("X2");
  126. checked { ++index; }
  127. }
  128. return str;
  129. }
  130.  
  131. public static Bitmap ResizeImage(Image image, int width, int height)
  132. {
  133. Bitmap bitmap1;
  134. try
  135. {
  136. Rectangle destRect = new Rectangle(0, 0, width, height);
  137. Bitmap bitmap2 = new Bitmap(width, height);
  138. bitmap2.SetResolution(image.HorizontalResolution, image.VerticalResolution);
  139. using (Graphics graphics = Graphics.FromImage((Image) bitmap2))
  140. {
  141. graphics.CompositingMode = CompositingMode.SourceCopy;
  142. graphics.CompositingQuality = CompositingQuality.HighQuality;
  143. graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
  144. graphics.SmoothingMode = SmoothingMode.HighQuality;
  145. graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
  146. using (ImageAttributes imageAttr = new ImageAttributes())
  147. {
  148. imageAttr.SetWrapMode(WrapMode.TileFlipXY);
  149. graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, imageAttr);
  150. }
  151. }
  152. bitmap1 = bitmap2;
  153. }
  154. catch (Exception ex)
  155. {
  156. ProjectData.SetProjectError(ex);
  157. bitmap1 = (Bitmap) image;
  158. ProjectData.ClearProjectError();
  159. }
  160. return bitmap1;
  161. }
  162.  
  163. public static int FindBytes(byte[] src, byte[] find)
  164. {
  165. int num1 = -1;
  166. int index1 = 0;
  167. int num2 = checked (src.Length - 1);
  168. int index2 = 0;
  169. while (index2 <= num2)
  170. {
  171. if ((int) src[index2] == (int) find[index1])
  172. {
  173. if (index1 == checked (find.Length - 1))
  174. {
  175. num1 = checked (index2 - index1);
  176. break;
  177. }
  178. checked { ++index1; }
  179. }
  180. else
  181. index1 = (int) src[index2] != (int) find[0] ? 0 : 1;
  182. checked { ++index2; }
  183. }
  184. return num1;
  185. }
  186.  
  187. public static byte[] ReplaceBytes(byte[] src, byte[] search, byte[] repl)
  188. {
  189. byte[] src1 = src;
  190. byte[] numArray = (byte[]) null;
  191. for (int bytes = Utility.FindBytes(src, search); bytes >= 0; bytes = Utility.FindBytes(src1, search))
  192. {
  193. numArray = numArray != null ? src1 : src;
  194. src1 = new byte[checked (numArray.Length - search.Length + (repl.Length - 1) + 1)];
  195. Buffer.BlockCopy((Array) numArray, 0, (Array) src1, 0, bytes);
  196. Buffer.BlockCopy((Array) repl, 0, (Array) src1, bytes, repl.Length);
  197. Buffer.BlockCopy((Array) numArray, checked (bytes + search.Length), (Array) src1, checked (bytes + repl.Length), checked (numArray.Length - bytes + search.Length));
  198. }
  199. return src1;
  200. }
  201.  
  202. public static Array ArrayFromTxt(string path)
  203. {
  204. Array array = (Array) new string[2]
  205. {
  206. "",
  207. ""
  208. };
  209. try
  210. {
  211. if (File.Exists(path))
  212. {
  213. StreamReader streamReader = new StreamReader(path);
  214. array = (Array) Regex.Split(streamReader.ReadToEnd(), "\\r?\\n|\\r");
  215. streamReader.Close();
  216. }
  217. }
  218. catch (Exception ex)
  219. {
  220. ProjectData.SetProjectError(ex);
  221. ProjectData.ClearProjectError();
  222. }
  223. return array;
  224. }
  225.  
  226. public static string GuidByString(string text)
  227. {
  228. string lower;
  229. try
  230. {
  231. using (MD5 md5 = MD5.Create())
  232. lower = new Guid(md5.ComputeHash(Encoding.Default.GetBytes(text))).ToString().ToLower();
  233. }
  234. catch (Exception ex)
  235. {
  236. ProjectData.SetProjectError(ex);
  237. lower = ex.Message.ToLower();
  238. ProjectData.ClearProjectError();
  239. }
  240. return lower;
  241. }
  242.  
  243. public static object Strip(string des)
  244. {
  245. string[] strArray = new string[31]
  246. {
  247. ".",
  248. ",",
  249. "<",
  250. ">",
  251. ":",
  252. "?",
  253. "\"",
  254. "/",
  255. "{",
  256. "[",
  257. "}",
  258. "]",
  259. "`",
  260. "~",
  261. "!",
  262. "@",
  263. "#",
  264. "$",
  265. "%",
  266. "^",
  267. "&",
  268. "*",
  269. "(",
  270. ")",
  271. "_",
  272. "-",
  273. "+",
  274. "=",
  275. "|",
  276. " ",
  277. "\\"
  278. };
  279. string Expression = des;
  280. int num1 = 0;
  281. int num2 = checked (strArray.Length - 1);
  282. int index = 0;
  283. while (index <= num2)
  284. {
  285. while (num1 != 29)
  286. {
  287. des = Microsoft.VisualBasic.Strings.Replace(Expression, strArray[index], "", 1, -1, CompareMethod.Binary);
  288. checked { ++num1; }
  289. Expression = des;
  290. }
  291. num1 = 0;
  292. checked { ++index; }
  293. }
  294. return (object) Expression.Replace(" ", "");
  295. }
  296.  
  297. public static string GenTimeStamp()
  298. {
  299. return Microsoft.VisualBasic.Strings.Mid(Conversions.ToString((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds), 1, 10);
  300. }
  301.  
  302. public static int RandomNumber(int Min, int Max)
  303. {
  304. if (Utility.\u0024STATIC\u0024RandomNumber\u002402888\u0024Generator\u0024Init == null)
  305. Interlocked.CompareExchange<StaticLocalInitFlag>(ref Utility.\u0024STATIC\u0024RandomNumber\u002402888\u0024Generator\u0024Init, new StaticLocalInitFlag(), (StaticLocalInitFlag) null);
  306. bool lockTaken = false;
  307. try
  308. {
  309. Monitor.Enter((object) Utility.\u0024STATIC\u0024RandomNumber\u002402888\u0024Generator\u0024Init, ref lockTaken);
  310. if (Utility.\u0024STATIC\u0024RandomNumber\u002402888\u0024Generator\u0024Init.State == (short) 0)
  311. {
  312. Utility.\u0024STATIC\u0024RandomNumber\u002402888\u0024Generator\u0024Init.State = (short) 2;
  313. Utility.\u0024STATIC\u0024RandomNumber\u002402888\u0024Generator = new Random();
  314. }
  315. else if (Utility.\u0024STATIC\u0024RandomNumber\u002402888\u0024Generator\u0024Init.State == (short) 2)
  316. throw new IncompleteInitialization();
  317. }
  318. finally
  319. {
  320. Utility.\u0024STATIC\u0024RandomNumber\u002402888\u0024Generator\u0024Init.State = (short) 1;
  321. if (lockTaken)
  322. Monitor.Exit((object) Utility.\u0024STATIC\u0024RandomNumber\u002402888\u0024Generator\u0024Init);
  323. }
  324. return Utility.\u0024STATIC\u0024RandomNumber\u002402888\u0024Generator.Next(Min, Max);
  325. }
  326.  
  327. public static string RandomInt(int len)
  328. {
  329. StringBuilder stringBuilder = new StringBuilder();
  330. string[] strArray = new string[10]
  331. {
  332. "1",
  333. "2",
  334. "3",
  335. "4",
  336. "5",
  337. "6",
  338. "7",
  339. "8",
  340. "9",
  341. "0"
  342. };
  343. Information.UBound((Array) strArray, 1);
  344. int num1 = len;
  345. int num2 = 1;
  346. while (num2 <= num1)
  347. {
  348. stringBuilder.Append(strArray[Conversion.Int(Utility.RandomNumber(0, strArray.Length))]);
  349. checked { ++num2; }
  350. }
  351. return stringBuilder.ToString();
  352. }
  353.  
  354. public static string RandomString(int size, bool lowerCase)
  355. {
  356. StringBuilder stringBuilder = new StringBuilder();
  357. if (Utility.\u0024STATIC\u0024RandomString\u002402E82\u0024Generator\u0024Init == null)
  358. Interlocked.CompareExchange<StaticLocalInitFlag>(ref Utility.\u0024STATIC\u0024RandomString\u002402E82\u0024Generator\u0024Init, new StaticLocalInitFlag(), (StaticLocalInitFlag) null);
  359. bool lockTaken = false;
  360. try
  361. {
  362. Monitor.Enter((object) Utility.\u0024STATIC\u0024RandomString\u002402E82\u0024Generator\u0024Init, ref lockTaken);
  363. if (Utility.\u0024STATIC\u0024RandomString\u002402E82\u0024Generator\u0024Init.State == (short) 0)
  364. {
  365. Utility.\u0024STATIC\u0024RandomString\u002402E82\u0024Generator\u0024Init.State = (short) 2;
  366. Utility.\u0024STATIC\u0024RandomString\u002402E82\u0024Generator = new Random();
  367. }
  368. else if (Utility.\u0024STATIC\u0024RandomString\u002402E82\u0024Generator\u0024Init.State == (short) 2)
  369. throw new IncompleteInitialization();
  370. }
  371. finally
  372. {
  373. Utility.\u0024STATIC\u0024RandomString\u002402E82\u0024Generator\u0024Init.State = (short) 1;
  374. if (lockTaken)
  375. Monitor.Exit((object) Utility.\u0024STATIC\u0024RandomString\u002402E82\u0024Generator\u0024Init);
  376. }
  377. int num1 = checked (size - 1);
  378. int num2 = 0;
  379. while (num2 <= num1)
  380. {
  381. char ch = Convert.ToChar(Convert.ToInt32(26.0 * Utility.\u0024STATIC\u0024RandomString\u002402E82\u0024Generator.NextDouble() + 65.0));
  382. stringBuilder.Append(ch);
  383. checked { ++num2; }
  384. }
  385. if (lowerCase)
  386. return Microsoft.VisualBasic.Strings.Replace(stringBuilder.ToString().ToLower(), "[", "", 1, -1, CompareMethod.Binary);
  387. return Microsoft.VisualBasic.Strings.Replace(stringBuilder.ToString(), "[", "", 1, -1, CompareMethod.Binary);
  388. }
  389.  
  390. public static string GetRandomHexNumber(int digits)
  391. {
  392. if (Utility.\u0024STATIC\u0024GetRandomHexNumber\u002401E8\u0024Generator\u0024Init == null)
  393. Interlocked.CompareExchange<StaticLocalInitFlag>(ref Utility.\u0024STATIC\u0024GetRandomHexNumber\u002401E8\u0024Generator\u0024Init, new StaticLocalInitFlag(), (StaticLocalInitFlag) null);
  394. bool lockTaken = false;
  395. try
  396. {
  397. Monitor.Enter((object) Utility.\u0024STATIC\u0024GetRandomHexNumber\u002401E8\u0024Generator\u0024Init, ref lockTaken);
  398. if (Utility.\u0024STATIC\u0024GetRandomHexNumber\u002401E8\u0024Generator\u0024Init.State == (short) 0)
  399. {
  400. Utility.\u0024STATIC\u0024GetRandomHexNumber\u002401E8\u0024Generator\u0024Init.State = (short) 2;
  401. Utility.\u0024STATIC\u0024GetRandomHexNumber\u002401E8\u0024Generator = new Random();
  402. }
  403. else if (Utility.\u0024STATIC\u0024GetRandomHexNumber\u002401E8\u0024Generator\u0024Init.State == (short) 2)
  404. throw new IncompleteInitialization();
  405. }
  406. finally
  407. {
  408. Utility.\u0024STATIC\u0024GetRandomHexNumber\u002401E8\u0024Generator\u0024Init.State = (short) 1;
  409. if (lockTaken)
  410. Monitor.Exit((object) Utility.\u0024STATIC\u0024GetRandomHexNumber\u002401E8\u0024Generator\u0024Init);
  411. }
  412. byte[] buffer = new byte[checked ((int) Math.Round(unchecked ((double) digits / 2.0 - 1.0)) + 1)];
  413. Utility.\u0024STATIC\u0024GetRandomHexNumber\u002401E8\u0024Generator.NextBytes(buffer);
  414. byte[] numArray = buffer;
  415. Func<byte, string> selector;
  416. // ISSUE: reference to a compiler-generated field
  417. if (Utility._Closure\u0024__.\u0024I19\u002D0 != null)
  418. {
  419. // ISSUE: reference to a compiler-generated field
  420. selector = Utility._Closure\u0024__.\u0024I19\u002D0;
  421. }
  422. else
  423. {
  424. // ISSUE: reference to a compiler-generated field
  425. Utility._Closure\u0024__.\u0024I19\u002D0 = selector = (Func<byte, string>) (x => x.ToString("X2"));
  426. }
  427. string str = string.Concat(((IEnumerable<byte>) numArray).Select<byte, string>(selector).ToArray<string>());
  428. if (digits % 2 == 0)
  429. return str;
  430. return str + Utility.\u0024STATIC\u0024GetRandomHexNumber\u002401E8\u0024Generator.Next(16).ToString("X");
  431. }
  432.  
  433. public static void Wait(int interval)
  434. {
  435. Thread.Sleep(checked (interval * 1000));
  436. }
  437.  
  438. public static void KillThreads(ref List<Thread> ThreadList)
  439. {
  440. while (true)
  441. {
  442. try
  443. {
  444. int num = 0;
  445. List<Thread>.Enumerator enumerator;
  446. try
  447. {
  448. enumerator = ThreadList.GetEnumerator();
  449. while (enumerator.MoveNext())
  450. {
  451. Thread current = enumerator.Current;
  452. if (current.IsAlive)
  453. {
  454. checked { ++num; }
  455. current.Abort();
  456. Thread.Sleep(100);
  457. }
  458. }
  459. }
  460. finally
  461. {
  462. enumerator.Dispose();
  463. }
  464. if (num <= 0)
  465. break;
  466. }
  467. catch (Exception ex)
  468. {
  469. ProjectData.SetProjectError(ex);
  470. ProjectData.ClearProjectError();
  471. break;
  472. }
  473. }
  474. }
  475.  
  476. public static string IP2Long(string ip)
  477. {
  478. string[] strArray = ip.Split('.');
  479. if (((IEnumerable<string>) strArray).Count<string>() == 4)
  480. return Conversions.ToString(Conversions.ToDouble(strArray[0]) * 16777216.0 + Conversions.ToDouble(strArray[1]) * 65536.0 + Conversions.ToDouble(strArray[2]) * 256.0 + Conversions.ToDouble(strArray[3]));
  481. return "";
  482. }
  483.  
  484. public static string Spin(string content)
  485. {
  486. string str1;
  487. string str2;
  488. try
  489. {
  490. if (string.IsNullOrEmpty(content))
  491. {
  492. str1 = "";
  493. goto label_12;
  494. }
  495. else
  496. {
  497. int length1 = content.IndexOf("{");
  498. int num1 = content.IndexOf("}");
  499. if (length1 == -1 && num1 == -1 || (length1 == -1 || num1 < length1))
  500. {
  501. str1 = content;
  502. goto label_12;
  503. }
  504. else if (num1 == -1)
  505. {
  506. int num2 = (int) Interaction.MsgBox((object) "Please make sure that all of the brackets have proper open / close matches", MsgBoxStyle.OkOnly, (object) null);
  507. str1 = "";
  508. goto label_12;
  509. }
  510. else
  511. {
  512. string str3 = Utility.Spin(content.Substring(checked (length1 + 1), checked (content.Length - length1 + 1)));
  513. int length2 = str3.IndexOf("}");
  514. if (length2 == -1)
  515. {
  516. int num2 = (int) Interaction.MsgBox((object) "Please make sure that all of the brackets have proper open / close matches", MsgBoxStyle.OkOnly, (object) null);
  517. str1 = "";
  518. goto label_12;
  519. }
  520. else
  521. {
  522. string[] strArray = str3.Substring(0, length2).Split('|');
  523. string str4 = strArray[Utility.RandomNumber(0, strArray.Length)];
  524. str2 = content.Substring(0, length1) + str4 + Utility.Spin(str3.Substring(checked (length2 + 1), checked (str3.Length - length2 + 1)));
  525. }
  526. }
  527. }
  528. }
  529. catch (Exception ex)
  530. {
  531. ProjectData.SetProjectError(ex);
  532. str1 = "";
  533. ProjectData.ClearProjectError();
  534. goto label_12;
  535. }
  536. str1 = str2;
  537. label_12:
  538. return str1;
  539. }
  540.  
  541. public static void WriteToBinaryFile<T>(string filePath, T objectToWrite, bool append = false)
  542. {
  543. using (Stream serializationStream = (Stream) File.Open(filePath, append ? FileMode.Append : FileMode.Create))
  544. new BinaryFormatter().Serialize(serializationStream, (object) objectToWrite);
  545. }
  546.  
  547. public static T ReadFromBinaryFile<T>(string filePath)
  548. {
  549. using (Stream serializationStream = (Stream) File.Open(filePath, FileMode.Open))
  550. return Conversions.ToGenericParameter<T>(new BinaryFormatter().Deserialize(serializationStream));
  551. }
  552.  
  553. public static ArrayList RemoveDups(ArrayList items)
  554. {
  555. ArrayList arrayList = new ArrayList();
  556. try
  557. {
  558. foreach (object obj in items)
  559. {
  560. string str = Conversions.ToString(obj);
  561. if (!arrayList.Contains((object) str.Trim()))
  562. arrayList.Add((object) str.Trim());
  563. }
  564. }
  565. finally
  566. {
  567. IEnumerator enumerator;
  568. if (enumerator is IDisposable)
  569. (enumerator as IDisposable).Dispose();
  570. }
  571. arrayList.Sort();
  572. return arrayList;
  573. }
  574.  
  575. public static void Shuffle<T>(IList<T> list)
  576. {
  577. Random random = new Random();
  578. int num = checked (list.Count - 1);
  579. int minValue = 0;
  580. while (minValue <= num)
  581. {
  582. int index = random.Next(minValue, list.Count);
  583. if (minValue != index)
  584. {
  585. T obj = list[minValue];
  586. list[minValue] = list[index];
  587. list[index] = obj;
  588. }
  589. checked { ++minValue; }
  590. }
  591. }
  592. }
  593. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement