@rabbitio/ui-kit 1.0.0-beta.45 → 1.0.0-beta.47

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 (147) hide show
  1. package/.husky/pre-push +1 -1
  2. package/coverage/base.css +224 -0
  3. package/coverage/block-navigation.js +87 -0
  4. package/coverage/clover.xml +10957 -0
  5. package/coverage/coverage-final.json +67 -0
  6. package/coverage/favicon.png +0 -0
  7. package/coverage/index.html +701 -0
  8. package/coverage/prettify.css +1 -0
  9. package/coverage/prettify.js +2 -0
  10. package/coverage/rabbit-ui-kit/index.html +116 -0
  11. package/coverage/rabbit-ui-kit/index.js.html +88 -0
  12. package/coverage/rabbit-ui-kit/src/common/adapters/axiosAdapter.js.html +190 -0
  13. package/coverage/rabbit-ui-kit/src/common/adapters/index.html +116 -0
  14. package/coverage/rabbit-ui-kit/src/common/amountUtils.js.html +1393 -0
  15. package/coverage/rabbit-ui-kit/src/common/errorUtils.js.html +211 -0
  16. package/coverage/rabbit-ui-kit/src/common/external-apis/apiGroups.js.html +250 -0
  17. package/coverage/rabbit-ui-kit/src/common/external-apis/index.html +131 -0
  18. package/coverage/rabbit-ui-kit/src/common/external-apis/ipAddressProviders.js.html +499 -0
  19. package/coverage/rabbit-ui-kit/src/common/fiatCurrenciesService.js.html +568 -0
  20. package/coverage/rabbit-ui-kit/src/common/index.html +146 -0
  21. package/coverage/rabbit-ui-kit/src/common/models/blockchain.js.html +115 -0
  22. package/coverage/rabbit-ui-kit/src/common/models/coin.js.html +556 -0
  23. package/coverage/rabbit-ui-kit/src/common/models/index.html +146 -0
  24. package/coverage/rabbit-ui-kit/src/common/models/protocol.js.html +100 -0
  25. package/coverage/rabbit-ui-kit/src/common/utils/cache.js.html +889 -0
  26. package/coverage/rabbit-ui-kit/src/common/utils/emailAPI.js.html +139 -0
  27. package/coverage/rabbit-ui-kit/src/common/utils/index.html +161 -0
  28. package/coverage/rabbit-ui-kit/src/common/utils/logging/index.html +131 -0
  29. package/coverage/rabbit-ui-kit/src/common/utils/logging/logger.js.html +229 -0
  30. package/coverage/rabbit-ui-kit/src/common/utils/logging/logsStorage.js.html +268 -0
  31. package/coverage/rabbit-ui-kit/src/common/utils/postponeExecution.js.html +118 -0
  32. package/coverage/rabbit-ui-kit/src/common/utils/safeStringify.js.html +235 -0
  33. package/coverage/rabbit-ui-kit/src/components/atoms/AssetIcon/AssetIcon.jsx.html +250 -0
  34. package/coverage/rabbit-ui-kit/src/components/atoms/AssetIcon/index.html +116 -0
  35. package/coverage/rabbit-ui-kit/src/components/atoms/AssetSelection/AssetSelection.jsx.html +364 -0
  36. package/coverage/rabbit-ui-kit/src/components/atoms/AssetSelection/index.html +116 -0
  37. package/coverage/rabbit-ui-kit/src/components/atoms/BackgroundTitle/BackgroundTitle.jsx.html +217 -0
  38. package/coverage/rabbit-ui-kit/src/components/atoms/BackgroundTitle/index.html +116 -0
  39. package/coverage/rabbit-ui-kit/src/components/atoms/LoadingDots/LoadingDots.jsx.html +256 -0
  40. package/coverage/rabbit-ui-kit/src/components/atoms/LoadingDots/index.html +116 -0
  41. package/coverage/rabbit-ui-kit/src/components/atoms/NoticeIcon/NoticeIcon.jsx.html +298 -0
  42. package/coverage/rabbit-ui-kit/src/components/atoms/NoticeIcon/index.html +116 -0
  43. package/coverage/rabbit-ui-kit/src/components/atoms/SupportChat/SupportChat.jsx.html +229 -0
  44. package/coverage/rabbit-ui-kit/src/components/atoms/SupportChat/index.html +116 -0
  45. package/coverage/rabbit-ui-kit/src/components/atoms/TitleBox/TitleBox.jsx.html +574 -0
  46. package/coverage/rabbit-ui-kit/src/components/atoms/TitleBox/index.html +116 -0
  47. package/coverage/rabbit-ui-kit/src/components/atoms/Tooltip/Tooltip.jsx.html +370 -0
  48. package/coverage/rabbit-ui-kit/src/components/atoms/Tooltip/index.html +116 -0
  49. package/coverage/rabbit-ui-kit/src/components/atoms/Validation/Validation.jsx.html +475 -0
  50. package/coverage/rabbit-ui-kit/src/components/atoms/Validation/index.html +116 -0
  51. package/coverage/rabbit-ui-kit/src/components/atoms/buttons/Button/Button.jsx.html +802 -0
  52. package/coverage/rabbit-ui-kit/src/components/atoms/buttons/Button/index.html +116 -0
  53. package/coverage/rabbit-ui-kit/src/components/atoms/buttons/Close/Close.jsx.html +277 -0
  54. package/coverage/rabbit-ui-kit/src/components/atoms/buttons/Close/index.html +116 -0
  55. package/coverage/rabbit-ui-kit/src/components/atoms/buttons/LinkButton/LinkButton.jsx.html +448 -0
  56. package/coverage/rabbit-ui-kit/src/components/atoms/buttons/LinkButton/index.html +116 -0
  57. package/coverage/rabbit-ui-kit/src/components/hooks/index.html +131 -0
  58. package/coverage/rabbit-ui-kit/src/components/hooks/useCallHandlingErrors.js.html +163 -0
  59. package/coverage/rabbit-ui-kit/src/components/hooks/useReferredState.js.html +157 -0
  60. package/coverage/rabbit-ui-kit/src/components/molecules/AmountInput/AmountInput.jsx.html +1510 -0
  61. package/coverage/rabbit-ui-kit/src/components/molecules/AmountInput/index.html +116 -0
  62. package/coverage/rabbit-ui-kit/src/components/organisms/Dialog/Dialog.jsx.html +1630 -0
  63. package/coverage/rabbit-ui-kit/src/components/organisms/Dialog/DialogButtons/DialogButtons.jsx.html +451 -0
  64. package/coverage/rabbit-ui-kit/src/components/organisms/Dialog/DialogButtons/index.html +116 -0
  65. package/coverage/rabbit-ui-kit/src/components/organisms/Dialog/DialogStep/DialogStep.jsx.html +2077 -0
  66. package/coverage/rabbit-ui-kit/src/components/organisms/Dialog/DialogStep/index.html +116 -0
  67. package/coverage/rabbit-ui-kit/src/components/organisms/Dialog/index.html +116 -0
  68. package/coverage/rabbit-ui-kit/src/components/organisms/SwapForm/SwapForm.jsx.html +3538 -0
  69. package/coverage/rabbit-ui-kit/src/components/organisms/SwapForm/index.html +116 -0
  70. package/coverage/rabbit-ui-kit/src/components/utils/index.html +161 -0
  71. package/coverage/rabbit-ui-kit/src/components/utils/inputValueProviders.js.html +259 -0
  72. package/coverage/rabbit-ui-kit/src/components/utils/textUtils.js.html +139 -0
  73. package/coverage/rabbit-ui-kit/src/components/utils/uiUtils.js.html +127 -0
  74. package/coverage/rabbit-ui-kit/src/components/utils/urlQueryUtils.js.html +346 -0
  75. package/coverage/rabbit-ui-kit/src/constants/organisms/dialog/DialogStep/dialogStep.js.html +88 -0
  76. package/coverage/rabbit-ui-kit/src/constants/organisms/dialog/DialogStep/index.html +116 -0
  77. package/coverage/rabbit-ui-kit/src/constants/organisms/dialog/dialog.js.html +172 -0
  78. package/coverage/rabbit-ui-kit/src/constants/organisms/dialog/index.html +116 -0
  79. package/coverage/rabbit-ui-kit/src/index.html +116 -0
  80. package/coverage/rabbit-ui-kit/src/index.js.html +310 -0
  81. package/coverage/rabbit-ui-kit/src/robustExteranlApiCallerService/cacheAndConcurrentRequestsResolver.js.html +1762 -0
  82. package/coverage/rabbit-ui-kit/src/robustExteranlApiCallerService/cachedRobustExternalApiCallerService.js.html +649 -0
  83. package/coverage/rabbit-ui-kit/src/robustExteranlApiCallerService/cancelProcessing.js.html +172 -0
  84. package/coverage/rabbit-ui-kit/src/robustExteranlApiCallerService/concurrentCalculationsMetadataHolder.js.html +394 -0
  85. package/coverage/rabbit-ui-kit/src/robustExteranlApiCallerService/externalApiProvider.js.html +553 -0
  86. package/coverage/rabbit-ui-kit/src/robustExteranlApiCallerService/externalServicesStatsCollector.js.html +331 -0
  87. package/coverage/rabbit-ui-kit/src/robustExteranlApiCallerService/index.html +206 -0
  88. package/coverage/rabbit-ui-kit/src/robustExteranlApiCallerService/robustExternalAPICallerService.js.html +1249 -0
  89. package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/index.html +131 -0
  90. package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/swapProvider.js.html +727 -0
  91. package/coverage/rabbit-ui-kit/src/swaps-lib/external-apis/swapspaceSwapProvider.js.html +2899 -0
  92. package/coverage/rabbit-ui-kit/src/swaps-lib/models/baseSwapCreationInfo.js.html +214 -0
  93. package/coverage/rabbit-ui-kit/src/swaps-lib/models/existingSwap.js.html +304 -0
  94. package/coverage/rabbit-ui-kit/src/swaps-lib/models/existingSwapWithFiatData.js.html +487 -0
  95. package/coverage/rabbit-ui-kit/src/swaps-lib/models/index.html +146 -0
  96. package/coverage/rabbit-ui-kit/src/swaps-lib/services/index.html +116 -0
  97. package/coverage/rabbit-ui-kit/src/swaps-lib/services/publicSwapService.js.html +2191 -0
  98. package/coverage/rabbit-ui-kit/src/swaps-lib/utils/index.html +116 -0
  99. package/coverage/rabbit-ui-kit/src/swaps-lib/utils/swapUtils.js.html +742 -0
  100. package/coverage/rabbit-ui-kit/stories/atoms/BackgroundTitle.stories.jsx.html +202 -0
  101. package/coverage/rabbit-ui-kit/stories/atoms/LoadingDots.stories.jsx.html +226 -0
  102. package/coverage/rabbit-ui-kit/stories/atoms/Validation.stories.jsx.html +178 -0
  103. package/coverage/rabbit-ui-kit/stories/atoms/buttons/Button.stories.jsx.html +946 -0
  104. package/coverage/rabbit-ui-kit/stories/atoms/buttons/Close.stories.jsx.html +211 -0
  105. package/coverage/rabbit-ui-kit/stories/atoms/buttons/LinkButton.stories.jsx.html +298 -0
  106. package/coverage/rabbit-ui-kit/stories/atoms/buttons/index.html +146 -0
  107. package/coverage/rabbit-ui-kit/stories/atoms/index.html +146 -0
  108. package/coverage/rabbit-ui-kit/stories/organisms/Dialog/Dialog.stories.jsx.html +574 -0
  109. package/coverage/rabbit-ui-kit/stories/organisms/Dialog/DialogButtons/DialogButtons.stories.jsx.html +328 -0
  110. package/coverage/rabbit-ui-kit/stories/organisms/Dialog/DialogButtons/index.html +116 -0
  111. package/coverage/rabbit-ui-kit/stories/organisms/Dialog/DialogStep/DialogStep.stories.jsx.html +352 -0
  112. package/coverage/rabbit-ui-kit/stories/organisms/Dialog/DialogStep/index.html +116 -0
  113. package/coverage/rabbit-ui-kit/stories/organisms/Dialog/index.html +116 -0
  114. package/coverage/rabbit-ui-kit/stories/stubs/exampleContent.jsx.html +145 -0
  115. package/coverage/rabbit-ui-kit/stories/stubs/index.html +116 -0
  116. package/coverage/sort-arrow-sprite.png +0 -0
  117. package/coverage/sorter.js +196 -0
  118. package/dist/index.cjs +1634 -130
  119. package/dist/index.cjs.map +1 -1
  120. package/dist/index.css +17456 -110
  121. package/dist/index.css.map +1 -1
  122. package/dist/index.modern.js +1368 -111
  123. package/dist/index.modern.js.map +1 -1
  124. package/dist/index.module.js +1626 -131
  125. package/dist/index.module.js.map +1 -1
  126. package/dist/index.umd.js +1637 -134
  127. package/dist/index.umd.js.map +1 -1
  128. package/package.json +2 -1
  129. package/src/assets/image/icons/arrow-darker.svg +14 -0
  130. package/src/assets/image/icons/dark-rectangle.svg +3 -0
  131. package/src/assets/image/icons/wallet-gray-small.svg +6 -0
  132. package/src/components/atoms/AssetSelection/AssetSelection.jsx +93 -0
  133. package/src/components/atoms/AssetSelection/asset-selection.module.scss +55 -0
  134. package/src/components/atoms/NoticeIcon/NoticeIcon.jsx +71 -0
  135. package/src/components/atoms/NoticeIcon/notice-icon.module.scss +14 -0
  136. package/src/components/atoms/TitleBox/TitleBox.jsx +163 -0
  137. package/src/components/atoms/TitleBox/title-box.module.scss +30 -0
  138. package/src/components/atoms/Tooltip/Tooltip.jsx +95 -0
  139. package/src/components/atoms/Tooltip/tooltip.module.scss +231 -0
  140. package/src/components/atoms/Validation/Validation.jsx +1 -1
  141. package/src/components/molecules/AmountInput/AmountInput.jsx +475 -0
  142. package/src/components/molecules/AmountInput/amount-input.module.scss +189 -0
  143. package/src/components/organisms/SwapForm/SwapForm.jsx +1151 -0
  144. package/src/components/organisms/SwapForm/swap-form.module.scss +120 -0
  145. package/src/components/utils/textUtils.js +18 -0
  146. package/src/index.js +11 -1
  147. package/styles/index.scss +11 -10
@@ -0,0 +1,2191 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for rabbit-ui-kit/src/swaps-lib/services/publicSwapService.js</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../../../prettify.css" />
9
+ <link rel="stylesheet" href="../../../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">rabbit-ui-kit/src/swaps-lib/services</a> publicSwapService.js</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">0% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>0/702</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/1</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/1</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">0% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>0/702</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a>
567
+ <a name='L502'></a><a href='#L502'>502</a>
568
+ <a name='L503'></a><a href='#L503'>503</a>
569
+ <a name='L504'></a><a href='#L504'>504</a>
570
+ <a name='L505'></a><a href='#L505'>505</a>
571
+ <a name='L506'></a><a href='#L506'>506</a>
572
+ <a name='L507'></a><a href='#L507'>507</a>
573
+ <a name='L508'></a><a href='#L508'>508</a>
574
+ <a name='L509'></a><a href='#L509'>509</a>
575
+ <a name='L510'></a><a href='#L510'>510</a>
576
+ <a name='L511'></a><a href='#L511'>511</a>
577
+ <a name='L512'></a><a href='#L512'>512</a>
578
+ <a name='L513'></a><a href='#L513'>513</a>
579
+ <a name='L514'></a><a href='#L514'>514</a>
580
+ <a name='L515'></a><a href='#L515'>515</a>
581
+ <a name='L516'></a><a href='#L516'>516</a>
582
+ <a name='L517'></a><a href='#L517'>517</a>
583
+ <a name='L518'></a><a href='#L518'>518</a>
584
+ <a name='L519'></a><a href='#L519'>519</a>
585
+ <a name='L520'></a><a href='#L520'>520</a>
586
+ <a name='L521'></a><a href='#L521'>521</a>
587
+ <a name='L522'></a><a href='#L522'>522</a>
588
+ <a name='L523'></a><a href='#L523'>523</a>
589
+ <a name='L524'></a><a href='#L524'>524</a>
590
+ <a name='L525'></a><a href='#L525'>525</a>
591
+ <a name='L526'></a><a href='#L526'>526</a>
592
+ <a name='L527'></a><a href='#L527'>527</a>
593
+ <a name='L528'></a><a href='#L528'>528</a>
594
+ <a name='L529'></a><a href='#L529'>529</a>
595
+ <a name='L530'></a><a href='#L530'>530</a>
596
+ <a name='L531'></a><a href='#L531'>531</a>
597
+ <a name='L532'></a><a href='#L532'>532</a>
598
+ <a name='L533'></a><a href='#L533'>533</a>
599
+ <a name='L534'></a><a href='#L534'>534</a>
600
+ <a name='L535'></a><a href='#L535'>535</a>
601
+ <a name='L536'></a><a href='#L536'>536</a>
602
+ <a name='L537'></a><a href='#L537'>537</a>
603
+ <a name='L538'></a><a href='#L538'>538</a>
604
+ <a name='L539'></a><a href='#L539'>539</a>
605
+ <a name='L540'></a><a href='#L540'>540</a>
606
+ <a name='L541'></a><a href='#L541'>541</a>
607
+ <a name='L542'></a><a href='#L542'>542</a>
608
+ <a name='L543'></a><a href='#L543'>543</a>
609
+ <a name='L544'></a><a href='#L544'>544</a>
610
+ <a name='L545'></a><a href='#L545'>545</a>
611
+ <a name='L546'></a><a href='#L546'>546</a>
612
+ <a name='L547'></a><a href='#L547'>547</a>
613
+ <a name='L548'></a><a href='#L548'>548</a>
614
+ <a name='L549'></a><a href='#L549'>549</a>
615
+ <a name='L550'></a><a href='#L550'>550</a>
616
+ <a name='L551'></a><a href='#L551'>551</a>
617
+ <a name='L552'></a><a href='#L552'>552</a>
618
+ <a name='L553'></a><a href='#L553'>553</a>
619
+ <a name='L554'></a><a href='#L554'>554</a>
620
+ <a name='L555'></a><a href='#L555'>555</a>
621
+ <a name='L556'></a><a href='#L556'>556</a>
622
+ <a name='L557'></a><a href='#L557'>557</a>
623
+ <a name='L558'></a><a href='#L558'>558</a>
624
+ <a name='L559'></a><a href='#L559'>559</a>
625
+ <a name='L560'></a><a href='#L560'>560</a>
626
+ <a name='L561'></a><a href='#L561'>561</a>
627
+ <a name='L562'></a><a href='#L562'>562</a>
628
+ <a name='L563'></a><a href='#L563'>563</a>
629
+ <a name='L564'></a><a href='#L564'>564</a>
630
+ <a name='L565'></a><a href='#L565'>565</a>
631
+ <a name='L566'></a><a href='#L566'>566</a>
632
+ <a name='L567'></a><a href='#L567'>567</a>
633
+ <a name='L568'></a><a href='#L568'>568</a>
634
+ <a name='L569'></a><a href='#L569'>569</a>
635
+ <a name='L570'></a><a href='#L570'>570</a>
636
+ <a name='L571'></a><a href='#L571'>571</a>
637
+ <a name='L572'></a><a href='#L572'>572</a>
638
+ <a name='L573'></a><a href='#L573'>573</a>
639
+ <a name='L574'></a><a href='#L574'>574</a>
640
+ <a name='L575'></a><a href='#L575'>575</a>
641
+ <a name='L576'></a><a href='#L576'>576</a>
642
+ <a name='L577'></a><a href='#L577'>577</a>
643
+ <a name='L578'></a><a href='#L578'>578</a>
644
+ <a name='L579'></a><a href='#L579'>579</a>
645
+ <a name='L580'></a><a href='#L580'>580</a>
646
+ <a name='L581'></a><a href='#L581'>581</a>
647
+ <a name='L582'></a><a href='#L582'>582</a>
648
+ <a name='L583'></a><a href='#L583'>583</a>
649
+ <a name='L584'></a><a href='#L584'>584</a>
650
+ <a name='L585'></a><a href='#L585'>585</a>
651
+ <a name='L586'></a><a href='#L586'>586</a>
652
+ <a name='L587'></a><a href='#L587'>587</a>
653
+ <a name='L588'></a><a href='#L588'>588</a>
654
+ <a name='L589'></a><a href='#L589'>589</a>
655
+ <a name='L590'></a><a href='#L590'>590</a>
656
+ <a name='L591'></a><a href='#L591'>591</a>
657
+ <a name='L592'></a><a href='#L592'>592</a>
658
+ <a name='L593'></a><a href='#L593'>593</a>
659
+ <a name='L594'></a><a href='#L594'>594</a>
660
+ <a name='L595'></a><a href='#L595'>595</a>
661
+ <a name='L596'></a><a href='#L596'>596</a>
662
+ <a name='L597'></a><a href='#L597'>597</a>
663
+ <a name='L598'></a><a href='#L598'>598</a>
664
+ <a name='L599'></a><a href='#L599'>599</a>
665
+ <a name='L600'></a><a href='#L600'>600</a>
666
+ <a name='L601'></a><a href='#L601'>601</a>
667
+ <a name='L602'></a><a href='#L602'>602</a>
668
+ <a name='L603'></a><a href='#L603'>603</a>
669
+ <a name='L604'></a><a href='#L604'>604</a>
670
+ <a name='L605'></a><a href='#L605'>605</a>
671
+ <a name='L606'></a><a href='#L606'>606</a>
672
+ <a name='L607'></a><a href='#L607'>607</a>
673
+ <a name='L608'></a><a href='#L608'>608</a>
674
+ <a name='L609'></a><a href='#L609'>609</a>
675
+ <a name='L610'></a><a href='#L610'>610</a>
676
+ <a name='L611'></a><a href='#L611'>611</a>
677
+ <a name='L612'></a><a href='#L612'>612</a>
678
+ <a name='L613'></a><a href='#L613'>613</a>
679
+ <a name='L614'></a><a href='#L614'>614</a>
680
+ <a name='L615'></a><a href='#L615'>615</a>
681
+ <a name='L616'></a><a href='#L616'>616</a>
682
+ <a name='L617'></a><a href='#L617'>617</a>
683
+ <a name='L618'></a><a href='#L618'>618</a>
684
+ <a name='L619'></a><a href='#L619'>619</a>
685
+ <a name='L620'></a><a href='#L620'>620</a>
686
+ <a name='L621'></a><a href='#L621'>621</a>
687
+ <a name='L622'></a><a href='#L622'>622</a>
688
+ <a name='L623'></a><a href='#L623'>623</a>
689
+ <a name='L624'></a><a href='#L624'>624</a>
690
+ <a name='L625'></a><a href='#L625'>625</a>
691
+ <a name='L626'></a><a href='#L626'>626</a>
692
+ <a name='L627'></a><a href='#L627'>627</a>
693
+ <a name='L628'></a><a href='#L628'>628</a>
694
+ <a name='L629'></a><a href='#L629'>629</a>
695
+ <a name='L630'></a><a href='#L630'>630</a>
696
+ <a name='L631'></a><a href='#L631'>631</a>
697
+ <a name='L632'></a><a href='#L632'>632</a>
698
+ <a name='L633'></a><a href='#L633'>633</a>
699
+ <a name='L634'></a><a href='#L634'>634</a>
700
+ <a name='L635'></a><a href='#L635'>635</a>
701
+ <a name='L636'></a><a href='#L636'>636</a>
702
+ <a name='L637'></a><a href='#L637'>637</a>
703
+ <a name='L638'></a><a href='#L638'>638</a>
704
+ <a name='L639'></a><a href='#L639'>639</a>
705
+ <a name='L640'></a><a href='#L640'>640</a>
706
+ <a name='L641'></a><a href='#L641'>641</a>
707
+ <a name='L642'></a><a href='#L642'>642</a>
708
+ <a name='L643'></a><a href='#L643'>643</a>
709
+ <a name='L644'></a><a href='#L644'>644</a>
710
+ <a name='L645'></a><a href='#L645'>645</a>
711
+ <a name='L646'></a><a href='#L646'>646</a>
712
+ <a name='L647'></a><a href='#L647'>647</a>
713
+ <a name='L648'></a><a href='#L648'>648</a>
714
+ <a name='L649'></a><a href='#L649'>649</a>
715
+ <a name='L650'></a><a href='#L650'>650</a>
716
+ <a name='L651'></a><a href='#L651'>651</a>
717
+ <a name='L652'></a><a href='#L652'>652</a>
718
+ <a name='L653'></a><a href='#L653'>653</a>
719
+ <a name='L654'></a><a href='#L654'>654</a>
720
+ <a name='L655'></a><a href='#L655'>655</a>
721
+ <a name='L656'></a><a href='#L656'>656</a>
722
+ <a name='L657'></a><a href='#L657'>657</a>
723
+ <a name='L658'></a><a href='#L658'>658</a>
724
+ <a name='L659'></a><a href='#L659'>659</a>
725
+ <a name='L660'></a><a href='#L660'>660</a>
726
+ <a name='L661'></a><a href='#L661'>661</a>
727
+ <a name='L662'></a><a href='#L662'>662</a>
728
+ <a name='L663'></a><a href='#L663'>663</a>
729
+ <a name='L664'></a><a href='#L664'>664</a>
730
+ <a name='L665'></a><a href='#L665'>665</a>
731
+ <a name='L666'></a><a href='#L666'>666</a>
732
+ <a name='L667'></a><a href='#L667'>667</a>
733
+ <a name='L668'></a><a href='#L668'>668</a>
734
+ <a name='L669'></a><a href='#L669'>669</a>
735
+ <a name='L670'></a><a href='#L670'>670</a>
736
+ <a name='L671'></a><a href='#L671'>671</a>
737
+ <a name='L672'></a><a href='#L672'>672</a>
738
+ <a name='L673'></a><a href='#L673'>673</a>
739
+ <a name='L674'></a><a href='#L674'>674</a>
740
+ <a name='L675'></a><a href='#L675'>675</a>
741
+ <a name='L676'></a><a href='#L676'>676</a>
742
+ <a name='L677'></a><a href='#L677'>677</a>
743
+ <a name='L678'></a><a href='#L678'>678</a>
744
+ <a name='L679'></a><a href='#L679'>679</a>
745
+ <a name='L680'></a><a href='#L680'>680</a>
746
+ <a name='L681'></a><a href='#L681'>681</a>
747
+ <a name='L682'></a><a href='#L682'>682</a>
748
+ <a name='L683'></a><a href='#L683'>683</a>
749
+ <a name='L684'></a><a href='#L684'>684</a>
750
+ <a name='L685'></a><a href='#L685'>685</a>
751
+ <a name='L686'></a><a href='#L686'>686</a>
752
+ <a name='L687'></a><a href='#L687'>687</a>
753
+ <a name='L688'></a><a href='#L688'>688</a>
754
+ <a name='L689'></a><a href='#L689'>689</a>
755
+ <a name='L690'></a><a href='#L690'>690</a>
756
+ <a name='L691'></a><a href='#L691'>691</a>
757
+ <a name='L692'></a><a href='#L692'>692</a>
758
+ <a name='L693'></a><a href='#L693'>693</a>
759
+ <a name='L694'></a><a href='#L694'>694</a>
760
+ <a name='L695'></a><a href='#L695'>695</a>
761
+ <a name='L696'></a><a href='#L696'>696</a>
762
+ <a name='L697'></a><a href='#L697'>697</a>
763
+ <a name='L698'></a><a href='#L698'>698</a>
764
+ <a name='L699'></a><a href='#L699'>699</a>
765
+ <a name='L700'></a><a href='#L700'>700</a>
766
+ <a name='L701'></a><a href='#L701'>701</a>
767
+ <a name='L702'></a><a href='#L702'>702</a>
768
+ <a name='L703'></a><a href='#L703'>703</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
769
+ <span class="cline-any cline-no">&nbsp;</span>
770
+ <span class="cline-any cline-no">&nbsp;</span>
771
+ <span class="cline-any cline-no">&nbsp;</span>
772
+ <span class="cline-any cline-no">&nbsp;</span>
773
+ <span class="cline-any cline-no">&nbsp;</span>
774
+ <span class="cline-any cline-no">&nbsp;</span>
775
+ <span class="cline-any cline-no">&nbsp;</span>
776
+ <span class="cline-any cline-no">&nbsp;</span>
777
+ <span class="cline-any cline-no">&nbsp;</span>
778
+ <span class="cline-any cline-no">&nbsp;</span>
779
+ <span class="cline-any cline-no">&nbsp;</span>
780
+ <span class="cline-any cline-no">&nbsp;</span>
781
+ <span class="cline-any cline-no">&nbsp;</span>
782
+ <span class="cline-any cline-no">&nbsp;</span>
783
+ <span class="cline-any cline-no">&nbsp;</span>
784
+ <span class="cline-any cline-no">&nbsp;</span>
785
+ <span class="cline-any cline-no">&nbsp;</span>
786
+ <span class="cline-any cline-no">&nbsp;</span>
787
+ <span class="cline-any cline-no">&nbsp;</span>
788
+ <span class="cline-any cline-no">&nbsp;</span>
789
+ <span class="cline-any cline-no">&nbsp;</span>
790
+ <span class="cline-any cline-no">&nbsp;</span>
791
+ <span class="cline-any cline-no">&nbsp;</span>
792
+ <span class="cline-any cline-no">&nbsp;</span>
793
+ <span class="cline-any cline-no">&nbsp;</span>
794
+ <span class="cline-any cline-no">&nbsp;</span>
795
+ <span class="cline-any cline-no">&nbsp;</span>
796
+ <span class="cline-any cline-no">&nbsp;</span>
797
+ <span class="cline-any cline-no">&nbsp;</span>
798
+ <span class="cline-any cline-no">&nbsp;</span>
799
+ <span class="cline-any cline-no">&nbsp;</span>
800
+ <span class="cline-any cline-no">&nbsp;</span>
801
+ <span class="cline-any cline-no">&nbsp;</span>
802
+ <span class="cline-any cline-no">&nbsp;</span>
803
+ <span class="cline-any cline-no">&nbsp;</span>
804
+ <span class="cline-any cline-no">&nbsp;</span>
805
+ <span class="cline-any cline-no">&nbsp;</span>
806
+ <span class="cline-any cline-no">&nbsp;</span>
807
+ <span class="cline-any cline-no">&nbsp;</span>
808
+ <span class="cline-any cline-no">&nbsp;</span>
809
+ <span class="cline-any cline-no">&nbsp;</span>
810
+ <span class="cline-any cline-no">&nbsp;</span>
811
+ <span class="cline-any cline-no">&nbsp;</span>
812
+ <span class="cline-any cline-no">&nbsp;</span>
813
+ <span class="cline-any cline-no">&nbsp;</span>
814
+ <span class="cline-any cline-no">&nbsp;</span>
815
+ <span class="cline-any cline-no">&nbsp;</span>
816
+ <span class="cline-any cline-no">&nbsp;</span>
817
+ <span class="cline-any cline-no">&nbsp;</span>
818
+ <span class="cline-any cline-no">&nbsp;</span>
819
+ <span class="cline-any cline-no">&nbsp;</span>
820
+ <span class="cline-any cline-no">&nbsp;</span>
821
+ <span class="cline-any cline-no">&nbsp;</span>
822
+ <span class="cline-any cline-no">&nbsp;</span>
823
+ <span class="cline-any cline-no">&nbsp;</span>
824
+ <span class="cline-any cline-no">&nbsp;</span>
825
+ <span class="cline-any cline-no">&nbsp;</span>
826
+ <span class="cline-any cline-no">&nbsp;</span>
827
+ <span class="cline-any cline-no">&nbsp;</span>
828
+ <span class="cline-any cline-no">&nbsp;</span>
829
+ <span class="cline-any cline-no">&nbsp;</span>
830
+ <span class="cline-any cline-no">&nbsp;</span>
831
+ <span class="cline-any cline-no">&nbsp;</span>
832
+ <span class="cline-any cline-no">&nbsp;</span>
833
+ <span class="cline-any cline-no">&nbsp;</span>
834
+ <span class="cline-any cline-no">&nbsp;</span>
835
+ <span class="cline-any cline-no">&nbsp;</span>
836
+ <span class="cline-any cline-no">&nbsp;</span>
837
+ <span class="cline-any cline-no">&nbsp;</span>
838
+ <span class="cline-any cline-no">&nbsp;</span>
839
+ <span class="cline-any cline-no">&nbsp;</span>
840
+ <span class="cline-any cline-no">&nbsp;</span>
841
+ <span class="cline-any cline-no">&nbsp;</span>
842
+ <span class="cline-any cline-no">&nbsp;</span>
843
+ <span class="cline-any cline-no">&nbsp;</span>
844
+ <span class="cline-any cline-no">&nbsp;</span>
845
+ <span class="cline-any cline-no">&nbsp;</span>
846
+ <span class="cline-any cline-no">&nbsp;</span>
847
+ <span class="cline-any cline-no">&nbsp;</span>
848
+ <span class="cline-any cline-no">&nbsp;</span>
849
+ <span class="cline-any cline-no">&nbsp;</span>
850
+ <span class="cline-any cline-no">&nbsp;</span>
851
+ <span class="cline-any cline-no">&nbsp;</span>
852
+ <span class="cline-any cline-no">&nbsp;</span>
853
+ <span class="cline-any cline-no">&nbsp;</span>
854
+ <span class="cline-any cline-no">&nbsp;</span>
855
+ <span class="cline-any cline-no">&nbsp;</span>
856
+ <span class="cline-any cline-no">&nbsp;</span>
857
+ <span class="cline-any cline-no">&nbsp;</span>
858
+ <span class="cline-any cline-no">&nbsp;</span>
859
+ <span class="cline-any cline-no">&nbsp;</span>
860
+ <span class="cline-any cline-no">&nbsp;</span>
861
+ <span class="cline-any cline-no">&nbsp;</span>
862
+ <span class="cline-any cline-no">&nbsp;</span>
863
+ <span class="cline-any cline-no">&nbsp;</span>
864
+ <span class="cline-any cline-no">&nbsp;</span>
865
+ <span class="cline-any cline-no">&nbsp;</span>
866
+ <span class="cline-any cline-no">&nbsp;</span>
867
+ <span class="cline-any cline-no">&nbsp;</span>
868
+ <span class="cline-any cline-no">&nbsp;</span>
869
+ <span class="cline-any cline-no">&nbsp;</span>
870
+ <span class="cline-any cline-no">&nbsp;</span>
871
+ <span class="cline-any cline-no">&nbsp;</span>
872
+ <span class="cline-any cline-no">&nbsp;</span>
873
+ <span class="cline-any cline-no">&nbsp;</span>
874
+ <span class="cline-any cline-no">&nbsp;</span>
875
+ <span class="cline-any cline-no">&nbsp;</span>
876
+ <span class="cline-any cline-no">&nbsp;</span>
877
+ <span class="cline-any cline-no">&nbsp;</span>
878
+ <span class="cline-any cline-no">&nbsp;</span>
879
+ <span class="cline-any cline-no">&nbsp;</span>
880
+ <span class="cline-any cline-no">&nbsp;</span>
881
+ <span class="cline-any cline-no">&nbsp;</span>
882
+ <span class="cline-any cline-no">&nbsp;</span>
883
+ <span class="cline-any cline-no">&nbsp;</span>
884
+ <span class="cline-any cline-no">&nbsp;</span>
885
+ <span class="cline-any cline-no">&nbsp;</span>
886
+ <span class="cline-any cline-no">&nbsp;</span>
887
+ <span class="cline-any cline-no">&nbsp;</span>
888
+ <span class="cline-any cline-no">&nbsp;</span>
889
+ <span class="cline-any cline-no">&nbsp;</span>
890
+ <span class="cline-any cline-no">&nbsp;</span>
891
+ <span class="cline-any cline-no">&nbsp;</span>
892
+ <span class="cline-any cline-no">&nbsp;</span>
893
+ <span class="cline-any cline-no">&nbsp;</span>
894
+ <span class="cline-any cline-no">&nbsp;</span>
895
+ <span class="cline-any cline-no">&nbsp;</span>
896
+ <span class="cline-any cline-no">&nbsp;</span>
897
+ <span class="cline-any cline-no">&nbsp;</span>
898
+ <span class="cline-any cline-no">&nbsp;</span>
899
+ <span class="cline-any cline-no">&nbsp;</span>
900
+ <span class="cline-any cline-no">&nbsp;</span>
901
+ <span class="cline-any cline-no">&nbsp;</span>
902
+ <span class="cline-any cline-no">&nbsp;</span>
903
+ <span class="cline-any cline-no">&nbsp;</span>
904
+ <span class="cline-any cline-no">&nbsp;</span>
905
+ <span class="cline-any cline-no">&nbsp;</span>
906
+ <span class="cline-any cline-no">&nbsp;</span>
907
+ <span class="cline-any cline-no">&nbsp;</span>
908
+ <span class="cline-any cline-no">&nbsp;</span>
909
+ <span class="cline-any cline-no">&nbsp;</span>
910
+ <span class="cline-any cline-no">&nbsp;</span>
911
+ <span class="cline-any cline-no">&nbsp;</span>
912
+ <span class="cline-any cline-no">&nbsp;</span>
913
+ <span class="cline-any cline-no">&nbsp;</span>
914
+ <span class="cline-any cline-no">&nbsp;</span>
915
+ <span class="cline-any cline-no">&nbsp;</span>
916
+ <span class="cline-any cline-no">&nbsp;</span>
917
+ <span class="cline-any cline-no">&nbsp;</span>
918
+ <span class="cline-any cline-no">&nbsp;</span>
919
+ <span class="cline-any cline-no">&nbsp;</span>
920
+ <span class="cline-any cline-no">&nbsp;</span>
921
+ <span class="cline-any cline-no">&nbsp;</span>
922
+ <span class="cline-any cline-no">&nbsp;</span>
923
+ <span class="cline-any cline-no">&nbsp;</span>
924
+ <span class="cline-any cline-no">&nbsp;</span>
925
+ <span class="cline-any cline-no">&nbsp;</span>
926
+ <span class="cline-any cline-no">&nbsp;</span>
927
+ <span class="cline-any cline-no">&nbsp;</span>
928
+ <span class="cline-any cline-no">&nbsp;</span>
929
+ <span class="cline-any cline-no">&nbsp;</span>
930
+ <span class="cline-any cline-no">&nbsp;</span>
931
+ <span class="cline-any cline-no">&nbsp;</span>
932
+ <span class="cline-any cline-no">&nbsp;</span>
933
+ <span class="cline-any cline-no">&nbsp;</span>
934
+ <span class="cline-any cline-no">&nbsp;</span>
935
+ <span class="cline-any cline-no">&nbsp;</span>
936
+ <span class="cline-any cline-no">&nbsp;</span>
937
+ <span class="cline-any cline-no">&nbsp;</span>
938
+ <span class="cline-any cline-no">&nbsp;</span>
939
+ <span class="cline-any cline-no">&nbsp;</span>
940
+ <span class="cline-any cline-no">&nbsp;</span>
941
+ <span class="cline-any cline-no">&nbsp;</span>
942
+ <span class="cline-any cline-no">&nbsp;</span>
943
+ <span class="cline-any cline-no">&nbsp;</span>
944
+ <span class="cline-any cline-no">&nbsp;</span>
945
+ <span class="cline-any cline-no">&nbsp;</span>
946
+ <span class="cline-any cline-no">&nbsp;</span>
947
+ <span class="cline-any cline-no">&nbsp;</span>
948
+ <span class="cline-any cline-no">&nbsp;</span>
949
+ <span class="cline-any cline-no">&nbsp;</span>
950
+ <span class="cline-any cline-no">&nbsp;</span>
951
+ <span class="cline-any cline-no">&nbsp;</span>
952
+ <span class="cline-any cline-no">&nbsp;</span>
953
+ <span class="cline-any cline-no">&nbsp;</span>
954
+ <span class="cline-any cline-no">&nbsp;</span>
955
+ <span class="cline-any cline-no">&nbsp;</span>
956
+ <span class="cline-any cline-no">&nbsp;</span>
957
+ <span class="cline-any cline-no">&nbsp;</span>
958
+ <span class="cline-any cline-no">&nbsp;</span>
959
+ <span class="cline-any cline-no">&nbsp;</span>
960
+ <span class="cline-any cline-no">&nbsp;</span>
961
+ <span class="cline-any cline-no">&nbsp;</span>
962
+ <span class="cline-any cline-no">&nbsp;</span>
963
+ <span class="cline-any cline-no">&nbsp;</span>
964
+ <span class="cline-any cline-no">&nbsp;</span>
965
+ <span class="cline-any cline-no">&nbsp;</span>
966
+ <span class="cline-any cline-no">&nbsp;</span>
967
+ <span class="cline-any cline-no">&nbsp;</span>
968
+ <span class="cline-any cline-no">&nbsp;</span>
969
+ <span class="cline-any cline-no">&nbsp;</span>
970
+ <span class="cline-any cline-no">&nbsp;</span>
971
+ <span class="cline-any cline-no">&nbsp;</span>
972
+ <span class="cline-any cline-no">&nbsp;</span>
973
+ <span class="cline-any cline-no">&nbsp;</span>
974
+ <span class="cline-any cline-no">&nbsp;</span>
975
+ <span class="cline-any cline-no">&nbsp;</span>
976
+ <span class="cline-any cline-no">&nbsp;</span>
977
+ <span class="cline-any cline-no">&nbsp;</span>
978
+ <span class="cline-any cline-no">&nbsp;</span>
979
+ <span class="cline-any cline-no">&nbsp;</span>
980
+ <span class="cline-any cline-no">&nbsp;</span>
981
+ <span class="cline-any cline-no">&nbsp;</span>
982
+ <span class="cline-any cline-no">&nbsp;</span>
983
+ <span class="cline-any cline-no">&nbsp;</span>
984
+ <span class="cline-any cline-no">&nbsp;</span>
985
+ <span class="cline-any cline-no">&nbsp;</span>
986
+ <span class="cline-any cline-no">&nbsp;</span>
987
+ <span class="cline-any cline-no">&nbsp;</span>
988
+ <span class="cline-any cline-no">&nbsp;</span>
989
+ <span class="cline-any cline-no">&nbsp;</span>
990
+ <span class="cline-any cline-no">&nbsp;</span>
991
+ <span class="cline-any cline-no">&nbsp;</span>
992
+ <span class="cline-any cline-no">&nbsp;</span>
993
+ <span class="cline-any cline-no">&nbsp;</span>
994
+ <span class="cline-any cline-no">&nbsp;</span>
995
+ <span class="cline-any cline-no">&nbsp;</span>
996
+ <span class="cline-any cline-no">&nbsp;</span>
997
+ <span class="cline-any cline-no">&nbsp;</span>
998
+ <span class="cline-any cline-no">&nbsp;</span>
999
+ <span class="cline-any cline-no">&nbsp;</span>
1000
+ <span class="cline-any cline-no">&nbsp;</span>
1001
+ <span class="cline-any cline-no">&nbsp;</span>
1002
+ <span class="cline-any cline-no">&nbsp;</span>
1003
+ <span class="cline-any cline-no">&nbsp;</span>
1004
+ <span class="cline-any cline-no">&nbsp;</span>
1005
+ <span class="cline-any cline-no">&nbsp;</span>
1006
+ <span class="cline-any cline-no">&nbsp;</span>
1007
+ <span class="cline-any cline-no">&nbsp;</span>
1008
+ <span class="cline-any cline-no">&nbsp;</span>
1009
+ <span class="cline-any cline-no">&nbsp;</span>
1010
+ <span class="cline-any cline-no">&nbsp;</span>
1011
+ <span class="cline-any cline-no">&nbsp;</span>
1012
+ <span class="cline-any cline-no">&nbsp;</span>
1013
+ <span class="cline-any cline-no">&nbsp;</span>
1014
+ <span class="cline-any cline-no">&nbsp;</span>
1015
+ <span class="cline-any cline-no">&nbsp;</span>
1016
+ <span class="cline-any cline-no">&nbsp;</span>
1017
+ <span class="cline-any cline-no">&nbsp;</span>
1018
+ <span class="cline-any cline-no">&nbsp;</span>
1019
+ <span class="cline-any cline-no">&nbsp;</span>
1020
+ <span class="cline-any cline-no">&nbsp;</span>
1021
+ <span class="cline-any cline-no">&nbsp;</span>
1022
+ <span class="cline-any cline-no">&nbsp;</span>
1023
+ <span class="cline-any cline-no">&nbsp;</span>
1024
+ <span class="cline-any cline-no">&nbsp;</span>
1025
+ <span class="cline-any cline-no">&nbsp;</span>
1026
+ <span class="cline-any cline-no">&nbsp;</span>
1027
+ <span class="cline-any cline-no">&nbsp;</span>
1028
+ <span class="cline-any cline-no">&nbsp;</span>
1029
+ <span class="cline-any cline-no">&nbsp;</span>
1030
+ <span class="cline-any cline-no">&nbsp;</span>
1031
+ <span class="cline-any cline-no">&nbsp;</span>
1032
+ <span class="cline-any cline-no">&nbsp;</span>
1033
+ <span class="cline-any cline-no">&nbsp;</span>
1034
+ <span class="cline-any cline-no">&nbsp;</span>
1035
+ <span class="cline-any cline-no">&nbsp;</span>
1036
+ <span class="cline-any cline-no">&nbsp;</span>
1037
+ <span class="cline-any cline-no">&nbsp;</span>
1038
+ <span class="cline-any cline-no">&nbsp;</span>
1039
+ <span class="cline-any cline-no">&nbsp;</span>
1040
+ <span class="cline-any cline-no">&nbsp;</span>
1041
+ <span class="cline-any cline-no">&nbsp;</span>
1042
+ <span class="cline-any cline-no">&nbsp;</span>
1043
+ <span class="cline-any cline-no">&nbsp;</span>
1044
+ <span class="cline-any cline-no">&nbsp;</span>
1045
+ <span class="cline-any cline-no">&nbsp;</span>
1046
+ <span class="cline-any cline-no">&nbsp;</span>
1047
+ <span class="cline-any cline-no">&nbsp;</span>
1048
+ <span class="cline-any cline-no">&nbsp;</span>
1049
+ <span class="cline-any cline-no">&nbsp;</span>
1050
+ <span class="cline-any cline-no">&nbsp;</span>
1051
+ <span class="cline-any cline-no">&nbsp;</span>
1052
+ <span class="cline-any cline-no">&nbsp;</span>
1053
+ <span class="cline-any cline-no">&nbsp;</span>
1054
+ <span class="cline-any cline-no">&nbsp;</span>
1055
+ <span class="cline-any cline-no">&nbsp;</span>
1056
+ <span class="cline-any cline-no">&nbsp;</span>
1057
+ <span class="cline-any cline-no">&nbsp;</span>
1058
+ <span class="cline-any cline-no">&nbsp;</span>
1059
+ <span class="cline-any cline-no">&nbsp;</span>
1060
+ <span class="cline-any cline-no">&nbsp;</span>
1061
+ <span class="cline-any cline-no">&nbsp;</span>
1062
+ <span class="cline-any cline-no">&nbsp;</span>
1063
+ <span class="cline-any cline-no">&nbsp;</span>
1064
+ <span class="cline-any cline-no">&nbsp;</span>
1065
+ <span class="cline-any cline-no">&nbsp;</span>
1066
+ <span class="cline-any cline-no">&nbsp;</span>
1067
+ <span class="cline-any cline-no">&nbsp;</span>
1068
+ <span class="cline-any cline-no">&nbsp;</span>
1069
+ <span class="cline-any cline-no">&nbsp;</span>
1070
+ <span class="cline-any cline-no">&nbsp;</span>
1071
+ <span class="cline-any cline-no">&nbsp;</span>
1072
+ <span class="cline-any cline-no">&nbsp;</span>
1073
+ <span class="cline-any cline-no">&nbsp;</span>
1074
+ <span class="cline-any cline-no">&nbsp;</span>
1075
+ <span class="cline-any cline-no">&nbsp;</span>
1076
+ <span class="cline-any cline-no">&nbsp;</span>
1077
+ <span class="cline-any cline-no">&nbsp;</span>
1078
+ <span class="cline-any cline-no">&nbsp;</span>
1079
+ <span class="cline-any cline-no">&nbsp;</span>
1080
+ <span class="cline-any cline-no">&nbsp;</span>
1081
+ <span class="cline-any cline-no">&nbsp;</span>
1082
+ <span class="cline-any cline-no">&nbsp;</span>
1083
+ <span class="cline-any cline-no">&nbsp;</span>
1084
+ <span class="cline-any cline-no">&nbsp;</span>
1085
+ <span class="cline-any cline-no">&nbsp;</span>
1086
+ <span class="cline-any cline-no">&nbsp;</span>
1087
+ <span class="cline-any cline-no">&nbsp;</span>
1088
+ <span class="cline-any cline-no">&nbsp;</span>
1089
+ <span class="cline-any cline-no">&nbsp;</span>
1090
+ <span class="cline-any cline-no">&nbsp;</span>
1091
+ <span class="cline-any cline-no">&nbsp;</span>
1092
+ <span class="cline-any cline-no">&nbsp;</span>
1093
+ <span class="cline-any cline-no">&nbsp;</span>
1094
+ <span class="cline-any cline-no">&nbsp;</span>
1095
+ <span class="cline-any cline-no">&nbsp;</span>
1096
+ <span class="cline-any cline-no">&nbsp;</span>
1097
+ <span class="cline-any cline-no">&nbsp;</span>
1098
+ <span class="cline-any cline-no">&nbsp;</span>
1099
+ <span class="cline-any cline-no">&nbsp;</span>
1100
+ <span class="cline-any cline-no">&nbsp;</span>
1101
+ <span class="cline-any cline-no">&nbsp;</span>
1102
+ <span class="cline-any cline-no">&nbsp;</span>
1103
+ <span class="cline-any cline-no">&nbsp;</span>
1104
+ <span class="cline-any cline-no">&nbsp;</span>
1105
+ <span class="cline-any cline-no">&nbsp;</span>
1106
+ <span class="cline-any cline-no">&nbsp;</span>
1107
+ <span class="cline-any cline-no">&nbsp;</span>
1108
+ <span class="cline-any cline-no">&nbsp;</span>
1109
+ <span class="cline-any cline-no">&nbsp;</span>
1110
+ <span class="cline-any cline-no">&nbsp;</span>
1111
+ <span class="cline-any cline-no">&nbsp;</span>
1112
+ <span class="cline-any cline-no">&nbsp;</span>
1113
+ <span class="cline-any cline-no">&nbsp;</span>
1114
+ <span class="cline-any cline-no">&nbsp;</span>
1115
+ <span class="cline-any cline-no">&nbsp;</span>
1116
+ <span class="cline-any cline-no">&nbsp;</span>
1117
+ <span class="cline-any cline-no">&nbsp;</span>
1118
+ <span class="cline-any cline-no">&nbsp;</span>
1119
+ <span class="cline-any cline-no">&nbsp;</span>
1120
+ <span class="cline-any cline-no">&nbsp;</span>
1121
+ <span class="cline-any cline-no">&nbsp;</span>
1122
+ <span class="cline-any cline-no">&nbsp;</span>
1123
+ <span class="cline-any cline-no">&nbsp;</span>
1124
+ <span class="cline-any cline-no">&nbsp;</span>
1125
+ <span class="cline-any cline-no">&nbsp;</span>
1126
+ <span class="cline-any cline-no">&nbsp;</span>
1127
+ <span class="cline-any cline-no">&nbsp;</span>
1128
+ <span class="cline-any cline-no">&nbsp;</span>
1129
+ <span class="cline-any cline-no">&nbsp;</span>
1130
+ <span class="cline-any cline-no">&nbsp;</span>
1131
+ <span class="cline-any cline-no">&nbsp;</span>
1132
+ <span class="cline-any cline-no">&nbsp;</span>
1133
+ <span class="cline-any cline-no">&nbsp;</span>
1134
+ <span class="cline-any cline-no">&nbsp;</span>
1135
+ <span class="cline-any cline-no">&nbsp;</span>
1136
+ <span class="cline-any cline-no">&nbsp;</span>
1137
+ <span class="cline-any cline-no">&nbsp;</span>
1138
+ <span class="cline-any cline-no">&nbsp;</span>
1139
+ <span class="cline-any cline-no">&nbsp;</span>
1140
+ <span class="cline-any cline-no">&nbsp;</span>
1141
+ <span class="cline-any cline-no">&nbsp;</span>
1142
+ <span class="cline-any cline-no">&nbsp;</span>
1143
+ <span class="cline-any cline-no">&nbsp;</span>
1144
+ <span class="cline-any cline-no">&nbsp;</span>
1145
+ <span class="cline-any cline-no">&nbsp;</span>
1146
+ <span class="cline-any cline-no">&nbsp;</span>
1147
+ <span class="cline-any cline-no">&nbsp;</span>
1148
+ <span class="cline-any cline-no">&nbsp;</span>
1149
+ <span class="cline-any cline-no">&nbsp;</span>
1150
+ <span class="cline-any cline-no">&nbsp;</span>
1151
+ <span class="cline-any cline-no">&nbsp;</span>
1152
+ <span class="cline-any cline-no">&nbsp;</span>
1153
+ <span class="cline-any cline-no">&nbsp;</span>
1154
+ <span class="cline-any cline-no">&nbsp;</span>
1155
+ <span class="cline-any cline-no">&nbsp;</span>
1156
+ <span class="cline-any cline-no">&nbsp;</span>
1157
+ <span class="cline-any cline-no">&nbsp;</span>
1158
+ <span class="cline-any cline-no">&nbsp;</span>
1159
+ <span class="cline-any cline-no">&nbsp;</span>
1160
+ <span class="cline-any cline-no">&nbsp;</span>
1161
+ <span class="cline-any cline-no">&nbsp;</span>
1162
+ <span class="cline-any cline-no">&nbsp;</span>
1163
+ <span class="cline-any cline-no">&nbsp;</span>
1164
+ <span class="cline-any cline-no">&nbsp;</span>
1165
+ <span class="cline-any cline-no">&nbsp;</span>
1166
+ <span class="cline-any cline-no">&nbsp;</span>
1167
+ <span class="cline-any cline-no">&nbsp;</span>
1168
+ <span class="cline-any cline-no">&nbsp;</span>
1169
+ <span class="cline-any cline-no">&nbsp;</span>
1170
+ <span class="cline-any cline-no">&nbsp;</span>
1171
+ <span class="cline-any cline-no">&nbsp;</span>
1172
+ <span class="cline-any cline-no">&nbsp;</span>
1173
+ <span class="cline-any cline-no">&nbsp;</span>
1174
+ <span class="cline-any cline-no">&nbsp;</span>
1175
+ <span class="cline-any cline-no">&nbsp;</span>
1176
+ <span class="cline-any cline-no">&nbsp;</span>
1177
+ <span class="cline-any cline-no">&nbsp;</span>
1178
+ <span class="cline-any cline-no">&nbsp;</span>
1179
+ <span class="cline-any cline-no">&nbsp;</span>
1180
+ <span class="cline-any cline-no">&nbsp;</span>
1181
+ <span class="cline-any cline-no">&nbsp;</span>
1182
+ <span class="cline-any cline-no">&nbsp;</span>
1183
+ <span class="cline-any cline-no">&nbsp;</span>
1184
+ <span class="cline-any cline-no">&nbsp;</span>
1185
+ <span class="cline-any cline-no">&nbsp;</span>
1186
+ <span class="cline-any cline-no">&nbsp;</span>
1187
+ <span class="cline-any cline-no">&nbsp;</span>
1188
+ <span class="cline-any cline-no">&nbsp;</span>
1189
+ <span class="cline-any cline-no">&nbsp;</span>
1190
+ <span class="cline-any cline-no">&nbsp;</span>
1191
+ <span class="cline-any cline-no">&nbsp;</span>
1192
+ <span class="cline-any cline-no">&nbsp;</span>
1193
+ <span class="cline-any cline-no">&nbsp;</span>
1194
+ <span class="cline-any cline-no">&nbsp;</span>
1195
+ <span class="cline-any cline-no">&nbsp;</span>
1196
+ <span class="cline-any cline-no">&nbsp;</span>
1197
+ <span class="cline-any cline-no">&nbsp;</span>
1198
+ <span class="cline-any cline-no">&nbsp;</span>
1199
+ <span class="cline-any cline-no">&nbsp;</span>
1200
+ <span class="cline-any cline-no">&nbsp;</span>
1201
+ <span class="cline-any cline-no">&nbsp;</span>
1202
+ <span class="cline-any cline-no">&nbsp;</span>
1203
+ <span class="cline-any cline-no">&nbsp;</span>
1204
+ <span class="cline-any cline-no">&nbsp;</span>
1205
+ <span class="cline-any cline-no">&nbsp;</span>
1206
+ <span class="cline-any cline-no">&nbsp;</span>
1207
+ <span class="cline-any cline-no">&nbsp;</span>
1208
+ <span class="cline-any cline-no">&nbsp;</span>
1209
+ <span class="cline-any cline-no">&nbsp;</span>
1210
+ <span class="cline-any cline-no">&nbsp;</span>
1211
+ <span class="cline-any cline-no">&nbsp;</span>
1212
+ <span class="cline-any cline-no">&nbsp;</span>
1213
+ <span class="cline-any cline-no">&nbsp;</span>
1214
+ <span class="cline-any cline-no">&nbsp;</span>
1215
+ <span class="cline-any cline-no">&nbsp;</span>
1216
+ <span class="cline-any cline-no">&nbsp;</span>
1217
+ <span class="cline-any cline-no">&nbsp;</span>
1218
+ <span class="cline-any cline-no">&nbsp;</span>
1219
+ <span class="cline-any cline-no">&nbsp;</span>
1220
+ <span class="cline-any cline-no">&nbsp;</span>
1221
+ <span class="cline-any cline-no">&nbsp;</span>
1222
+ <span class="cline-any cline-no">&nbsp;</span>
1223
+ <span class="cline-any cline-no">&nbsp;</span>
1224
+ <span class="cline-any cline-no">&nbsp;</span>
1225
+ <span class="cline-any cline-no">&nbsp;</span>
1226
+ <span class="cline-any cline-no">&nbsp;</span>
1227
+ <span class="cline-any cline-no">&nbsp;</span>
1228
+ <span class="cline-any cline-no">&nbsp;</span>
1229
+ <span class="cline-any cline-no">&nbsp;</span>
1230
+ <span class="cline-any cline-no">&nbsp;</span>
1231
+ <span class="cline-any cline-no">&nbsp;</span>
1232
+ <span class="cline-any cline-no">&nbsp;</span>
1233
+ <span class="cline-any cline-no">&nbsp;</span>
1234
+ <span class="cline-any cline-no">&nbsp;</span>
1235
+ <span class="cline-any cline-no">&nbsp;</span>
1236
+ <span class="cline-any cline-no">&nbsp;</span>
1237
+ <span class="cline-any cline-no">&nbsp;</span>
1238
+ <span class="cline-any cline-no">&nbsp;</span>
1239
+ <span class="cline-any cline-no">&nbsp;</span>
1240
+ <span class="cline-any cline-no">&nbsp;</span>
1241
+ <span class="cline-any cline-no">&nbsp;</span>
1242
+ <span class="cline-any cline-no">&nbsp;</span>
1243
+ <span class="cline-any cline-no">&nbsp;</span>
1244
+ <span class="cline-any cline-no">&nbsp;</span>
1245
+ <span class="cline-any cline-no">&nbsp;</span>
1246
+ <span class="cline-any cline-no">&nbsp;</span>
1247
+ <span class="cline-any cline-no">&nbsp;</span>
1248
+ <span class="cline-any cline-no">&nbsp;</span>
1249
+ <span class="cline-any cline-no">&nbsp;</span>
1250
+ <span class="cline-any cline-no">&nbsp;</span>
1251
+ <span class="cline-any cline-no">&nbsp;</span>
1252
+ <span class="cline-any cline-no">&nbsp;</span>
1253
+ <span class="cline-any cline-no">&nbsp;</span>
1254
+ <span class="cline-any cline-no">&nbsp;</span>
1255
+ <span class="cline-any cline-no">&nbsp;</span>
1256
+ <span class="cline-any cline-no">&nbsp;</span>
1257
+ <span class="cline-any cline-no">&nbsp;</span>
1258
+ <span class="cline-any cline-no">&nbsp;</span>
1259
+ <span class="cline-any cline-no">&nbsp;</span>
1260
+ <span class="cline-any cline-no">&nbsp;</span>
1261
+ <span class="cline-any cline-no">&nbsp;</span>
1262
+ <span class="cline-any cline-no">&nbsp;</span>
1263
+ <span class="cline-any cline-no">&nbsp;</span>
1264
+ <span class="cline-any cline-no">&nbsp;</span>
1265
+ <span class="cline-any cline-no">&nbsp;</span>
1266
+ <span class="cline-any cline-no">&nbsp;</span>
1267
+ <span class="cline-any cline-no">&nbsp;</span>
1268
+ <span class="cline-any cline-no">&nbsp;</span>
1269
+ <span class="cline-any cline-no">&nbsp;</span>
1270
+ <span class="cline-any cline-no">&nbsp;</span>
1271
+ <span class="cline-any cline-no">&nbsp;</span>
1272
+ <span class="cline-any cline-no">&nbsp;</span>
1273
+ <span class="cline-any cline-no">&nbsp;</span>
1274
+ <span class="cline-any cline-no">&nbsp;</span>
1275
+ <span class="cline-any cline-no">&nbsp;</span>
1276
+ <span class="cline-any cline-no">&nbsp;</span>
1277
+ <span class="cline-any cline-no">&nbsp;</span>
1278
+ <span class="cline-any cline-no">&nbsp;</span>
1279
+ <span class="cline-any cline-no">&nbsp;</span>
1280
+ <span class="cline-any cline-no">&nbsp;</span>
1281
+ <span class="cline-any cline-no">&nbsp;</span>
1282
+ <span class="cline-any cline-no">&nbsp;</span>
1283
+ <span class="cline-any cline-no">&nbsp;</span>
1284
+ <span class="cline-any cline-no">&nbsp;</span>
1285
+ <span class="cline-any cline-no">&nbsp;</span>
1286
+ <span class="cline-any cline-no">&nbsp;</span>
1287
+ <span class="cline-any cline-no">&nbsp;</span>
1288
+ <span class="cline-any cline-no">&nbsp;</span>
1289
+ <span class="cline-any cline-no">&nbsp;</span>
1290
+ <span class="cline-any cline-no">&nbsp;</span>
1291
+ <span class="cline-any cline-no">&nbsp;</span>
1292
+ <span class="cline-any cline-no">&nbsp;</span>
1293
+ <span class="cline-any cline-no">&nbsp;</span>
1294
+ <span class="cline-any cline-no">&nbsp;</span>
1295
+ <span class="cline-any cline-no">&nbsp;</span>
1296
+ <span class="cline-any cline-no">&nbsp;</span>
1297
+ <span class="cline-any cline-no">&nbsp;</span>
1298
+ <span class="cline-any cline-no">&nbsp;</span>
1299
+ <span class="cline-any cline-no">&nbsp;</span>
1300
+ <span class="cline-any cline-no">&nbsp;</span>
1301
+ <span class="cline-any cline-no">&nbsp;</span>
1302
+ <span class="cline-any cline-no">&nbsp;</span>
1303
+ <span class="cline-any cline-no">&nbsp;</span>
1304
+ <span class="cline-any cline-no">&nbsp;</span>
1305
+ <span class="cline-any cline-no">&nbsp;</span>
1306
+ <span class="cline-any cline-no">&nbsp;</span>
1307
+ <span class="cline-any cline-no">&nbsp;</span>
1308
+ <span class="cline-any cline-no">&nbsp;</span>
1309
+ <span class="cline-any cline-no">&nbsp;</span>
1310
+ <span class="cline-any cline-no">&nbsp;</span>
1311
+ <span class="cline-any cline-no">&nbsp;</span>
1312
+ <span class="cline-any cline-no">&nbsp;</span>
1313
+ <span class="cline-any cline-no">&nbsp;</span>
1314
+ <span class="cline-any cline-no">&nbsp;</span>
1315
+ <span class="cline-any cline-no">&nbsp;</span>
1316
+ <span class="cline-any cline-no">&nbsp;</span>
1317
+ <span class="cline-any cline-no">&nbsp;</span>
1318
+ <span class="cline-any cline-no">&nbsp;</span>
1319
+ <span class="cline-any cline-no">&nbsp;</span>
1320
+ <span class="cline-any cline-no">&nbsp;</span>
1321
+ <span class="cline-any cline-no">&nbsp;</span>
1322
+ <span class="cline-any cline-no">&nbsp;</span>
1323
+ <span class="cline-any cline-no">&nbsp;</span>
1324
+ <span class="cline-any cline-no">&nbsp;</span>
1325
+ <span class="cline-any cline-no">&nbsp;</span>
1326
+ <span class="cline-any cline-no">&nbsp;</span>
1327
+ <span class="cline-any cline-no">&nbsp;</span>
1328
+ <span class="cline-any cline-no">&nbsp;</span>
1329
+ <span class="cline-any cline-no">&nbsp;</span>
1330
+ <span class="cline-any cline-no">&nbsp;</span>
1331
+ <span class="cline-any cline-no">&nbsp;</span>
1332
+ <span class="cline-any cline-no">&nbsp;</span>
1333
+ <span class="cline-any cline-no">&nbsp;</span>
1334
+ <span class="cline-any cline-no">&nbsp;</span>
1335
+ <span class="cline-any cline-no">&nbsp;</span>
1336
+ <span class="cline-any cline-no">&nbsp;</span>
1337
+ <span class="cline-any cline-no">&nbsp;</span>
1338
+ <span class="cline-any cline-no">&nbsp;</span>
1339
+ <span class="cline-any cline-no">&nbsp;</span>
1340
+ <span class="cline-any cline-no">&nbsp;</span>
1341
+ <span class="cline-any cline-no">&nbsp;</span>
1342
+ <span class="cline-any cline-no">&nbsp;</span>
1343
+ <span class="cline-any cline-no">&nbsp;</span>
1344
+ <span class="cline-any cline-no">&nbsp;</span>
1345
+ <span class="cline-any cline-no">&nbsp;</span>
1346
+ <span class="cline-any cline-no">&nbsp;</span>
1347
+ <span class="cline-any cline-no">&nbsp;</span>
1348
+ <span class="cline-any cline-no">&nbsp;</span>
1349
+ <span class="cline-any cline-no">&nbsp;</span>
1350
+ <span class="cline-any cline-no">&nbsp;</span>
1351
+ <span class="cline-any cline-no">&nbsp;</span>
1352
+ <span class="cline-any cline-no">&nbsp;</span>
1353
+ <span class="cline-any cline-no">&nbsp;</span>
1354
+ <span class="cline-any cline-no">&nbsp;</span>
1355
+ <span class="cline-any cline-no">&nbsp;</span>
1356
+ <span class="cline-any cline-no">&nbsp;</span>
1357
+ <span class="cline-any cline-no">&nbsp;</span>
1358
+ <span class="cline-any cline-no">&nbsp;</span>
1359
+ <span class="cline-any cline-no">&nbsp;</span>
1360
+ <span class="cline-any cline-no">&nbsp;</span>
1361
+ <span class="cline-any cline-no">&nbsp;</span>
1362
+ <span class="cline-any cline-no">&nbsp;</span>
1363
+ <span class="cline-any cline-no">&nbsp;</span>
1364
+ <span class="cline-any cline-no">&nbsp;</span>
1365
+ <span class="cline-any cline-no">&nbsp;</span>
1366
+ <span class="cline-any cline-no">&nbsp;</span>
1367
+ <span class="cline-any cline-no">&nbsp;</span>
1368
+ <span class="cline-any cline-no">&nbsp;</span>
1369
+ <span class="cline-any cline-no">&nbsp;</span>
1370
+ <span class="cline-any cline-no">&nbsp;</span>
1371
+ <span class="cline-any cline-no">&nbsp;</span>
1372
+ <span class="cline-any cline-no">&nbsp;</span>
1373
+ <span class="cline-any cline-no">&nbsp;</span>
1374
+ <span class="cline-any cline-no">&nbsp;</span>
1375
+ <span class="cline-any cline-no">&nbsp;</span>
1376
+ <span class="cline-any cline-no">&nbsp;</span>
1377
+ <span class="cline-any cline-no">&nbsp;</span>
1378
+ <span class="cline-any cline-no">&nbsp;</span>
1379
+ <span class="cline-any cline-no">&nbsp;</span>
1380
+ <span class="cline-any cline-no">&nbsp;</span>
1381
+ <span class="cline-any cline-no">&nbsp;</span>
1382
+ <span class="cline-any cline-no">&nbsp;</span>
1383
+ <span class="cline-any cline-no">&nbsp;</span>
1384
+ <span class="cline-any cline-no">&nbsp;</span>
1385
+ <span class="cline-any cline-no">&nbsp;</span>
1386
+ <span class="cline-any cline-no">&nbsp;</span>
1387
+ <span class="cline-any cline-no">&nbsp;</span>
1388
+ <span class="cline-any cline-no">&nbsp;</span>
1389
+ <span class="cline-any cline-no">&nbsp;</span>
1390
+ <span class="cline-any cline-no">&nbsp;</span>
1391
+ <span class="cline-any cline-no">&nbsp;</span>
1392
+ <span class="cline-any cline-no">&nbsp;</span>
1393
+ <span class="cline-any cline-no">&nbsp;</span>
1394
+ <span class="cline-any cline-no">&nbsp;</span>
1395
+ <span class="cline-any cline-no">&nbsp;</span>
1396
+ <span class="cline-any cline-no">&nbsp;</span>
1397
+ <span class="cline-any cline-no">&nbsp;</span>
1398
+ <span class="cline-any cline-no">&nbsp;</span>
1399
+ <span class="cline-any cline-no">&nbsp;</span>
1400
+ <span class="cline-any cline-no">&nbsp;</span>
1401
+ <span class="cline-any cline-no">&nbsp;</span>
1402
+ <span class="cline-any cline-no">&nbsp;</span>
1403
+ <span class="cline-any cline-no">&nbsp;</span>
1404
+ <span class="cline-any cline-no">&nbsp;</span>
1405
+ <span class="cline-any cline-no">&nbsp;</span>
1406
+ <span class="cline-any cline-no">&nbsp;</span>
1407
+ <span class="cline-any cline-no">&nbsp;</span>
1408
+ <span class="cline-any cline-no">&nbsp;</span>
1409
+ <span class="cline-any cline-no">&nbsp;</span>
1410
+ <span class="cline-any cline-no">&nbsp;</span>
1411
+ <span class="cline-any cline-no">&nbsp;</span>
1412
+ <span class="cline-any cline-no">&nbsp;</span>
1413
+ <span class="cline-any cline-no">&nbsp;</span>
1414
+ <span class="cline-any cline-no">&nbsp;</span>
1415
+ <span class="cline-any cline-no">&nbsp;</span>
1416
+ <span class="cline-any cline-no">&nbsp;</span>
1417
+ <span class="cline-any cline-no">&nbsp;</span>
1418
+ <span class="cline-any cline-no">&nbsp;</span>
1419
+ <span class="cline-any cline-no">&nbsp;</span>
1420
+ <span class="cline-any cline-no">&nbsp;</span>
1421
+ <span class="cline-any cline-no">&nbsp;</span>
1422
+ <span class="cline-any cline-no">&nbsp;</span>
1423
+ <span class="cline-any cline-no">&nbsp;</span>
1424
+ <span class="cline-any cline-no">&nbsp;</span>
1425
+ <span class="cline-any cline-no">&nbsp;</span>
1426
+ <span class="cline-any cline-no">&nbsp;</span>
1427
+ <span class="cline-any cline-no">&nbsp;</span>
1428
+ <span class="cline-any cline-no">&nbsp;</span>
1429
+ <span class="cline-any cline-no">&nbsp;</span>
1430
+ <span class="cline-any cline-no">&nbsp;</span>
1431
+ <span class="cline-any cline-no">&nbsp;</span>
1432
+ <span class="cline-any cline-no">&nbsp;</span>
1433
+ <span class="cline-any cline-no">&nbsp;</span>
1434
+ <span class="cline-any cline-no">&nbsp;</span>
1435
+ <span class="cline-any cline-no">&nbsp;</span>
1436
+ <span class="cline-any cline-no">&nbsp;</span>
1437
+ <span class="cline-any cline-no">&nbsp;</span>
1438
+ <span class="cline-any cline-no">&nbsp;</span>
1439
+ <span class="cline-any cline-no">&nbsp;</span>
1440
+ <span class="cline-any cline-no">&nbsp;</span>
1441
+ <span class="cline-any cline-no">&nbsp;</span>
1442
+ <span class="cline-any cline-no">&nbsp;</span>
1443
+ <span class="cline-any cline-no">&nbsp;</span>
1444
+ <span class="cline-any cline-no">&nbsp;</span>
1445
+ <span class="cline-any cline-no">&nbsp;</span>
1446
+ <span class="cline-any cline-no">&nbsp;</span>
1447
+ <span class="cline-any cline-no">&nbsp;</span>
1448
+ <span class="cline-any cline-no">&nbsp;</span>
1449
+ <span class="cline-any cline-no">&nbsp;</span>
1450
+ <span class="cline-any cline-no">&nbsp;</span>
1451
+ <span class="cline-any cline-no">&nbsp;</span>
1452
+ <span class="cline-any cline-no">&nbsp;</span>
1453
+ <span class="cline-any cline-no">&nbsp;</span>
1454
+ <span class="cline-any cline-no">&nbsp;</span>
1455
+ <span class="cline-any cline-no">&nbsp;</span>
1456
+ <span class="cline-any cline-no">&nbsp;</span>
1457
+ <span class="cline-any cline-no">&nbsp;</span>
1458
+ <span class="cline-any cline-no">&nbsp;</span>
1459
+ <span class="cline-any cline-no">&nbsp;</span>
1460
+ <span class="cline-any cline-no">&nbsp;</span>
1461
+ <span class="cline-any cline-no">&nbsp;</span>
1462
+ <span class="cline-any cline-no">&nbsp;</span>
1463
+ <span class="cline-any cline-no">&nbsp;</span>
1464
+ <span class="cline-any cline-no">&nbsp;</span>
1465
+ <span class="cline-any cline-no">&nbsp;</span>
1466
+ <span class="cline-any cline-no">&nbsp;</span>
1467
+ <span class="cline-any cline-no">&nbsp;</span>
1468
+ <span class="cline-any cline-no">&nbsp;</span>
1469
+ <span class="cline-any cline-no">&nbsp;</span>
1470
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import { BigNumber } from "bignumber.js";</span></span></span>
1471
+ <span class="cstat-no" title="statement not covered" >import EventBusInstance from "eventbusjs";</span>
1472
+ <span class="cstat-no" title="statement not covered" ></span>
1473
+ <span class="cstat-no" title="statement not covered" >import { FiatCurrenciesService } from "../../common/fiatCurrenciesService.js";</span>
1474
+ <span class="cstat-no" title="statement not covered" >import { improveAndRethrow } from "../../common/errorUtils.js";</span>
1475
+ <span class="cstat-no" title="statement not covered" >import { safeStringify } from "../../common/utils/safeStringify.js";</span>
1476
+ <span class="cstat-no" title="statement not covered" >import { Logger } from "../../common/utils/logging/logger.js";</span>
1477
+ <span class="cstat-no" title="statement not covered" >import { Coin } from "../../common/models/coin.js";</span>
1478
+ <span class="cstat-no" title="statement not covered" >import { AmountUtils } from "../../common/amountUtils.js";</span>
1479
+ <span class="cstat-no" title="statement not covered" >import { BaseSwapCreationInfo } from "../models/baseSwapCreationInfo.js";</span>
1480
+ <span class="cstat-no" title="statement not covered" >import { SwapUtils } from "../utils/swapUtils.js";</span>
1481
+ <span class="cstat-no" title="statement not covered" >import { SwapspaceSwapProvider } from "../external-apis/swapspaceSwapProvider.js";</span>
1482
+ <span class="cstat-no" title="statement not covered" >import { SwapProvider } from "../external-apis/swapProvider.js";</span>
1483
+ <span class="cstat-no" title="statement not covered" ></span>
1484
+ <span class="cstat-no" title="statement not covered" >export class PublicSwapService {</span>
1485
+ <span class="cstat-no" title="statement not covered" > static PUBLIC_SWAP_CREATED_EVENT = "publicSwapCreatedEvent";</span>
1486
+ <span class="cstat-no" title="statement not covered" ></span>
1487
+ <span class="cstat-no" title="statement not covered" > static PUBLIC_SWAPS_COMMON_ERRORS = {</span>
1488
+ <span class="cstat-no" title="statement not covered" > REQUESTS_LIMIT_EXCEEDED: "requestsLimitExceeded",</span>
1489
+ <span class="cstat-no" title="statement not covered" > };</span>
1490
+ <span class="cstat-no" title="statement not covered" ></span>
1491
+ <span class="cstat-no" title="statement not covered" > static PUBLIC_SWAP_DETAILS_FAIL_REASONS = {</span>
1492
+ <span class="cstat-no" title="statement not covered" > AMOUNT_LESS_THAN_MIN_SWAPPABLE: "amountLessThanMinSwappable",</span>
1493
+ <span class="cstat-no" title="statement not covered" > AMOUNT_HIGHER_THAN_MAX_SWAPPABLE: "amountHigherThanMaxSwappable",</span>
1494
+ <span class="cstat-no" title="statement not covered" > PAIR_NOT_SUPPORTED: "pairNotSupported",</span>
1495
+ <span class="cstat-no" title="statement not covered" > NO_FIXED_BUT_HAVE_FLOATING_PUBLIC_SWAP_OPTION:</span>
1496
+ <span class="cstat-no" title="statement not covered" > "noFixedButHaveFloatingPublicSwapOption",</span>
1497
+ <span class="cstat-no" title="statement not covered" > NO_FLOATING_BUT_HAVE_FIXED_PUBLIC_SWAP_OPTION:</span>
1498
+ <span class="cstat-no" title="statement not covered" > "noFloatingButHaveFixedPublicSwapOption",</span>
1499
+ <span class="cstat-no" title="statement not covered" > };</span>
1500
+ <span class="cstat-no" title="statement not covered" ></span>
1501
+ <span class="cstat-no" title="statement not covered" > static _fiatDecimalsCount =</span>
1502
+ <span class="cstat-no" title="statement not covered" > FiatCurrenciesService.getCurrencyDecimalCountByCode("USD");</span>
1503
+ <span class="cstat-no" title="statement not covered" ></span>
1504
+ <span class="cstat-no" title="statement not covered" > constructor(apiKeysProxyUrl, cache) {</span>
1505
+ <span class="cstat-no" title="statement not covered" > this._swapProvider = new SwapspaceSwapProvider(</span>
1506
+ <span class="cstat-no" title="statement not covered" > apiKeysProxyUrl,</span>
1507
+ <span class="cstat-no" title="statement not covered" > cache,</span>
1508
+ <span class="cstat-no" title="statement not covered" > () =&gt; null,</span>
1509
+ <span class="cstat-no" title="statement not covered" > false</span>
1510
+ <span class="cstat-no" title="statement not covered" > );</span>
1511
+ <span class="cstat-no" title="statement not covered" > }</span>
1512
+ <span class="cstat-no" title="statement not covered" ></span>
1513
+ <span class="cstat-no" title="statement not covered" > async initialize() {</span>
1514
+ <span class="cstat-no" title="statement not covered" > try {</span>
1515
+ <span class="cstat-no" title="statement not covered" > await this._swapProvider.initialize();</span>
1516
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
1517
+ <span class="cstat-no" title="statement not covered" > Logger.logError(e, "PublicSwapService.initialize");</span>
1518
+ <span class="cstat-no" title="statement not covered" > }</span>
1519
+ <span class="cstat-no" title="statement not covered" > }</span>
1520
+ <span class="cstat-no" title="statement not covered" ></span>
1521
+ <span class="cstat-no" title="statement not covered" > async getAllSupportedCurrenciesListForPublicSwap() {</span>
1522
+ <span class="cstat-no" title="statement not covered" > const loggerSource = "getAllSupportedCurrenciesListForPublicSwap";</span>
1523
+ <span class="cstat-no" title="statement not covered" > try {</span>
1524
+ <span class="cstat-no" title="statement not covered" > const result = await this._swapProvider.getAllSupportedCurrencies();</span>
1525
+ <span class="cstat-no" title="statement not covered" > if (</span>
1526
+ <span class="cstat-no" title="statement not covered" > result.reason ===</span>
1527
+ <span class="cstat-no" title="statement not covered" > SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED</span>
1528
+ <span class="cstat-no" title="statement not covered" > ) {</span>
1529
+ <span class="cstat-no" title="statement not covered" > SwapUtils.safeHandleRequestsLimitExceeding();</span>
1530
+ <span class="cstat-no" title="statement not covered" > return {</span>
1531
+ <span class="cstat-no" title="statement not covered" > result: false,</span>
1532
+ <span class="cstat-no" title="statement not covered" > reason: PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS</span>
1533
+ <span class="cstat-no" title="statement not covered" > .REQUESTS_LIMIT_EXCEEDED,</span>
1534
+ <span class="cstat-no" title="statement not covered" > };</span>
1535
+ <span class="cstat-no" title="statement not covered" > }</span>
1536
+ <span class="cstat-no" title="statement not covered" > Logger.log(</span>
1537
+ <span class="cstat-no" title="statement not covered" > `Retrieved ${result?.coins?.length} supported currencies for swap`,</span>
1538
+ <span class="cstat-no" title="statement not covered" > loggerSource</span>
1539
+ <span class="cstat-no" title="statement not covered" > );</span>
1540
+ <span class="cstat-no" title="statement not covered" > return { result: true, coins: result.coins };</span>
1541
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
1542
+ <span class="cstat-no" title="statement not covered" > improveAndRethrow(e, "getDepositCurrenciesListForPublicSwap");</span>
1543
+ <span class="cstat-no" title="statement not covered" > }</span>
1544
+ <span class="cstat-no" title="statement not covered" > }</span>
1545
+ <span class="cstat-no" title="statement not covered" ></span>
1546
+ <span class="cstat-no" title="statement not covered" > async getDepositCurrenciesListForPublicSwap() {</span>
1547
+ <span class="cstat-no" title="statement not covered" > try {</span>
1548
+ <span class="cstat-no" title="statement not covered" > return await this._getCurrenciesListForPublicSwap(false);</span>
1549
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
1550
+ <span class="cstat-no" title="statement not covered" > improveAndRethrow(e, "getDepositCurrenciesListForPublicSwap");</span>
1551
+ <span class="cstat-no" title="statement not covered" > }</span>
1552
+ <span class="cstat-no" title="statement not covered" > }</span>
1553
+ <span class="cstat-no" title="statement not covered" ></span>
1554
+ <span class="cstat-no" title="statement not covered" > async getWithdrawCurrenciesListForPublicSwap() {</span>
1555
+ <span class="cstat-no" title="statement not covered" > try {</span>
1556
+ <span class="cstat-no" title="statement not covered" > return await this._getCurrenciesListForPublicSwap(true);</span>
1557
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
1558
+ <span class="cstat-no" title="statement not covered" > improveAndRethrow(e, "getWithdrawCurrenciesListForPublicSwap");</span>
1559
+ <span class="cstat-no" title="statement not covered" > }</span>
1560
+ <span class="cstat-no" title="statement not covered" > }</span>
1561
+ <span class="cstat-no" title="statement not covered" ></span>
1562
+ <span class="cstat-no" title="statement not covered" > async _getCurrenciesListForPublicSwap(withdraw = false) {</span>
1563
+ <span class="cstat-no" title="statement not covered" > const loggerSource = "getCurrenciesListForPublicSwap";</span>
1564
+ <span class="cstat-no" title="statement not covered" > try {</span>
1565
+ <span class="cstat-no" title="statement not covered" > const result = withdraw</span>
1566
+ <span class="cstat-no" title="statement not covered" > ? await this._swapProvider.getWithdrawalCurrencies()</span>
1567
+ <span class="cstat-no" title="statement not covered" > : await this._swapProvider.getDepositCurrencies();</span>
1568
+ <span class="cstat-no" title="statement not covered" > if (</span>
1569
+ <span class="cstat-no" title="statement not covered" > result.reason ===</span>
1570
+ <span class="cstat-no" title="statement not covered" > SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED</span>
1571
+ <span class="cstat-no" title="statement not covered" > ) {</span>
1572
+ <span class="cstat-no" title="statement not covered" > SwapUtils.safeHandleRequestsLimitExceeding();</span>
1573
+ <span class="cstat-no" title="statement not covered" > return {</span>
1574
+ <span class="cstat-no" title="statement not covered" > result: false,</span>
1575
+ <span class="cstat-no" title="statement not covered" > reason: PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS</span>
1576
+ <span class="cstat-no" title="statement not covered" > .REQUESTS_LIMIT_EXCEEDED,</span>
1577
+ <span class="cstat-no" title="statement not covered" > };</span>
1578
+ <span class="cstat-no" title="statement not covered" > }</span>
1579
+ <span class="cstat-no" title="statement not covered" > Logger.log(</span>
1580
+ <span class="cstat-no" title="statement not covered" > `Retrieved ${result?.coins?.length} supported currencies for swap (withdraw=${withdraw})`,</span>
1581
+ <span class="cstat-no" title="statement not covered" > loggerSource</span>
1582
+ <span class="cstat-no" title="statement not covered" > );</span>
1583
+ <span class="cstat-no" title="statement not covered" > return { result: true, coins: result.coins };</span>
1584
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
1585
+ <span class="cstat-no" title="statement not covered" > improveAndRethrow(e, loggerSource);</span>
1586
+ <span class="cstat-no" title="statement not covered" > }</span>
1587
+ <span class="cstat-no" title="statement not covered" > }</span>
1588
+ <span class="cstat-no" title="statement not covered" ></span>
1589
+ <span class="cstat-no" title="statement not covered" > /**</span>
1590
+ <span class="cstat-no" title="statement not covered" > * Retrieves initial data for swapping two coins.</span>
1591
+ <span class="cstat-no" title="statement not covered" > *</span>
1592
+ <span class="cstat-no" title="statement not covered" > * @param fromCoin {Coin}</span>
1593
+ <span class="cstat-no" title="statement not covered" > * @param toCoin {Coin}</span>
1594
+ <span class="cstat-no" title="statement not covered" > * @return {Promise&lt;{</span>
1595
+ <span class="cstat-no" title="statement not covered" > * result: true,</span>
1596
+ <span class="cstat-no" title="statement not covered" > * min: string,</span>
1597
+ <span class="cstat-no" title="statement not covered" > * fiatMin: (number|null),</span>
1598
+ <span class="cstat-no" title="statement not covered" > * max: string,</span>
1599
+ <span class="cstat-no" title="statement not covered" > * fiatMax: (number|null),</span>
1600
+ <span class="cstat-no" title="statement not covered" > * rate: (string|null)</span>
1601
+ <span class="cstat-no" title="statement not covered" > * }|{</span>
1602
+ <span class="cstat-no" title="statement not covered" > * result: false,</span>
1603
+ <span class="cstat-no" title="statement not covered" > * reason: string</span>
1604
+ <span class="cstat-no" title="statement not covered" > * }&gt;}</span>
1605
+ <span class="cstat-no" title="statement not covered" > */</span>
1606
+ <span class="cstat-no" title="statement not covered" > async getInitialPublicSwapData(fromCoin, toCoin) {</span>
1607
+ <span class="cstat-no" title="statement not covered" > try {</span>
1608
+ <span class="cstat-no" title="statement not covered" > const result = await SwapUtils.getInitialSwapData(</span>
1609
+ <span class="cstat-no" title="statement not covered" > this._swapProvider,</span>
1610
+ <span class="cstat-no" title="statement not covered" > fromCoin,</span>
1611
+ <span class="cstat-no" title="statement not covered" > toCoin</span>
1612
+ <span class="cstat-no" title="statement not covered" > );</span>
1613
+ <span class="cstat-no" title="statement not covered" > if (!result.result) {</span>
1614
+ <span class="cstat-no" title="statement not covered" > if (</span>
1615
+ <span class="cstat-no" title="statement not covered" > result.reason ===</span>
1616
+ <span class="cstat-no" title="statement not covered" > SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED</span>
1617
+ <span class="cstat-no" title="statement not covered" > ) {</span>
1618
+ <span class="cstat-no" title="statement not covered" > SwapUtils.safeHandleRequestsLimitExceeding();</span>
1619
+ <span class="cstat-no" title="statement not covered" > return {</span>
1620
+ <span class="cstat-no" title="statement not covered" > result: false,</span>
1621
+ <span class="cstat-no" title="statement not covered" > reason: PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS</span>
1622
+ <span class="cstat-no" title="statement not covered" > .REQUESTS_LIMIT_EXCEEDED,</span>
1623
+ <span class="cstat-no" title="statement not covered" > };</span>
1624
+ <span class="cstat-no" title="statement not covered" > }</span>
1625
+ <span class="cstat-no" title="statement not covered" > if (</span>
1626
+ <span class="cstat-no" title="statement not covered" > result.reason ===</span>
1627
+ <span class="cstat-no" title="statement not covered" > SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED</span>
1628
+ <span class="cstat-no" title="statement not covered" > ) {</span>
1629
+ <span class="cstat-no" title="statement not covered" > return {</span>
1630
+ <span class="cstat-no" title="statement not covered" > result: false,</span>
1631
+ <span class="cstat-no" title="statement not covered" > reason: PublicSwapService</span>
1632
+ <span class="cstat-no" title="statement not covered" > .PUBLIC_SWAP_DETAILS_FAIL_REASONS</span>
1633
+ <span class="cstat-no" title="statement not covered" > .PAIR_NOT_SUPPORTED,</span>
1634
+ <span class="cstat-no" title="statement not covered" > };</span>
1635
+ <span class="cstat-no" title="statement not covered" > }</span>
1636
+ <span class="cstat-no" title="statement not covered" > }</span>
1637
+ <span class="cstat-no" title="statement not covered" > return result;</span>
1638
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
1639
+ <span class="cstat-no" title="statement not covered" > improveAndRethrow(e, "getInitialPublicSwapData");</span>
1640
+ <span class="cstat-no" title="statement not covered" > }</span>
1641
+ <span class="cstat-no" title="statement not covered" > }</span>
1642
+ <span class="cstat-no" title="statement not covered" ></span>
1643
+ <span class="cstat-no" title="statement not covered" > /**</span>
1644
+ <span class="cstat-no" title="statement not covered" > * Retrieves swap details that can be used to create swap.</span>
1645
+ <span class="cstat-no" title="statement not covered" > *</span>
1646
+ <span class="cstat-no" title="statement not covered" > * @param fromCoin {Coin}</span>
1647
+ <span class="cstat-no" title="statement not covered" > * @param toCoin {Coin}</span>
1648
+ <span class="cstat-no" title="statement not covered" > * @param fromAmountCoins {string}</span>
1649
+ <span class="cstat-no" title="statement not covered" > * @param [fixed=false] {boolean|null} null means fixed or float doesn't matter</span>
1650
+ <span class="cstat-no" title="statement not covered" > * @param [withoutFiat=false] {boolean} pass true if you don't need the fiat equivalent - this will diminish requests count</span>
1651
+ <span class="cstat-no" title="statement not covered" > * @return {Promise&lt;{</span>
1652
+ <span class="cstat-no" title="statement not covered" > * result: false,</span>
1653
+ <span class="cstat-no" title="statement not covered" > * reason: string,</span>
1654
+ <span class="cstat-no" title="statement not covered" > * min: (string|null),</span>
1655
+ <span class="cstat-no" title="statement not covered" > * max: (string|null),</span>
1656
+ <span class="cstat-no" title="statement not covered" > * rate: (string|undefined),</span>
1657
+ <span class="cstat-no" title="statement not covered" > * fiatMin: (number|null),</span>
1658
+ <span class="cstat-no" title="statement not covered" > * fiatMax: (number|null)</span>
1659
+ <span class="cstat-no" title="statement not covered" > * }|{</span>
1660
+ <span class="cstat-no" title="statement not covered" > * result: true,</span>
1661
+ <span class="cstat-no" title="statement not covered" > * swapCreationInfo: BaseSwapCreationInfo</span>
1662
+ <span class="cstat-no" title="statement not covered" > * }&gt;}</span>
1663
+ <span class="cstat-no" title="statement not covered" > */</span>
1664
+ <span class="cstat-no" title="statement not covered" > async getPublicSwapDetails(</span>
1665
+ <span class="cstat-no" title="statement not covered" > fromCoin,</span>
1666
+ <span class="cstat-no" title="statement not covered" > toCoin,</span>
1667
+ <span class="cstat-no" title="statement not covered" > fromAmountCoins,</span>
1668
+ <span class="cstat-no" title="statement not covered" > fixed = false,</span>
1669
+ <span class="cstat-no" title="statement not covered" > withoutFiat = false</span>
1670
+ <span class="cstat-no" title="statement not covered" > ) {</span>
1671
+ <span class="cstat-no" title="statement not covered" > const loggerSource = "getPublicSwapDetails";</span>
1672
+ <span class="cstat-no" title="statement not covered" > try {</span>
1673
+ <span class="cstat-no" title="statement not covered" > const coinUsdtRate = withoutFiat</span>
1674
+ <span class="cstat-no" title="statement not covered" > ? null</span>
1675
+ <span class="cstat-no" title="statement not covered" > : (await this._swapProvider.getCoinToUSDTRate(fromCoin))</span>
1676
+ <span class="cstat-no" title="statement not covered" > ?.rate ?? null;</span>
1677
+ <span class="cstat-no" title="statement not covered" > const details = await this._swapProvider.getSwapInfo(</span>
1678
+ <span class="cstat-no" title="statement not covered" > fromCoin,</span>
1679
+ <span class="cstat-no" title="statement not covered" > toCoin,</span>
1680
+ <span class="cstat-no" title="statement not covered" > fromAmountCoins,</span>
1681
+ <span class="cstat-no" title="statement not covered" > fixed,</span>
1682
+ <span class="cstat-no" title="statement not covered" > coinUsdtRate</span>
1683
+ <span class="cstat-no" title="statement not covered" > );</span>
1684
+ <span class="cstat-no" title="statement not covered" > const min = details.result ? details.min : details.smallestMin;</span>
1685
+ <span class="cstat-no" title="statement not covered" > const max = details.result ? details.max : details.greatestMax;</span>
1686
+ <span class="cstat-no" title="statement not covered" > let fiatMin = null,</span>
1687
+ <span class="cstat-no" title="statement not covered" > fiatMax = null;</span>
1688
+ <span class="cstat-no" title="statement not covered" > if (coinUsdtRate != null) {</span>
1689
+ <span class="cstat-no" title="statement not covered" > if (min != null) {</span>
1690
+ <span class="cstat-no" title="statement not covered" > fiatMin = BigNumber(min)</span>
1691
+ <span class="cstat-no" title="statement not covered" > .times(coinUsdtRate)</span>
1692
+ <span class="cstat-no" title="statement not covered" > .toFixed(PublicSwapService._fiatDecimalsCount);</span>
1693
+ <span class="cstat-no" title="statement not covered" > }</span>
1694
+ <span class="cstat-no" title="statement not covered" > if (max != null) {</span>
1695
+ <span class="cstat-no" title="statement not covered" > fiatMax = BigNumber(max)</span>
1696
+ <span class="cstat-no" title="statement not covered" > .times(coinUsdtRate)</span>
1697
+ <span class="cstat-no" title="statement not covered" > .toFixed(PublicSwapService._fiatDecimalsCount);</span>
1698
+ <span class="cstat-no" title="statement not covered" > }</span>
1699
+ <span class="cstat-no" title="statement not covered" > }</span>
1700
+ <span class="cstat-no" title="statement not covered" ></span>
1701
+ <span class="cstat-no" title="statement not covered" > const composeFailResult = (reason) =&gt; ({</span>
1702
+ <span class="cstat-no" title="statement not covered" > result: false,</span>
1703
+ <span class="cstat-no" title="statement not covered" > reason: reason,</span>
1704
+ <span class="cstat-no" title="statement not covered" > min: min ?? null,</span>
1705
+ <span class="cstat-no" title="statement not covered" > fiatMin: fiatMin,</span>
1706
+ <span class="cstat-no" title="statement not covered" > max: max ?? null,</span>
1707
+ <span class="cstat-no" title="statement not covered" > fiatMax: fiatMax,</span>
1708
+ <span class="cstat-no" title="statement not covered" > rate: details.rate ?? null,</span>
1709
+ <span class="cstat-no" title="statement not covered" > });</span>
1710
+ <span class="cstat-no" title="statement not covered" ></span>
1711
+ <span class="cstat-no" title="statement not covered" > if (!details.result) {</span>
1712
+ <span class="cstat-no" title="statement not covered" > if (</span>
1713
+ <span class="cstat-no" title="statement not covered" > details?.reason ===</span>
1714
+ <span class="cstat-no" title="statement not covered" > SwapProvider.NO_SWAPS_REASONS.NOT_SUPPORTED</span>
1715
+ <span class="cstat-no" title="statement not covered" > ) {</span>
1716
+ <span class="cstat-no" title="statement not covered" > return composeFailResult(</span>
1717
+ <span class="cstat-no" title="statement not covered" > PublicSwapService.PUBLIC_SWAP_DETAILS_FAIL_REASONS</span>
1718
+ <span class="cstat-no" title="statement not covered" > .PAIR_NOT_SUPPORTED</span>
1719
+ <span class="cstat-no" title="statement not covered" > );</span>
1720
+ <span class="cstat-no" title="statement not covered" > } else if (</span>
1721
+ <span class="cstat-no" title="statement not covered" > details?.reason ===</span>
1722
+ <span class="cstat-no" title="statement not covered" > SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED</span>
1723
+ <span class="cstat-no" title="statement not covered" > ) {</span>
1724
+ <span class="cstat-no" title="statement not covered" > SwapUtils.safeHandleRequestsLimitExceeding();</span>
1725
+ <span class="cstat-no" title="statement not covered" > return composeFailResult(</span>
1726
+ <span class="cstat-no" title="statement not covered" > PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS</span>
1727
+ <span class="cstat-no" title="statement not covered" > .REQUESTS_LIMIT_EXCEEDED</span>
1728
+ <span class="cstat-no" title="statement not covered" > );</span>
1729
+ <span class="cstat-no" title="statement not covered" > } else if (</span>
1730
+ <span class="cstat-no" title="statement not covered" > details?.reason ===</span>
1731
+ <span class="cstat-no" title="statement not covered" > SwapProvider.NO_SWAPS_REASONS.NO_FLOATING_BUT_HAVE_FIXED</span>
1732
+ <span class="cstat-no" title="statement not covered" > ) {</span>
1733
+ <span class="cstat-no" title="statement not covered" > return composeFailResult(</span>
1734
+ <span class="cstat-no" title="statement not covered" > PublicSwapService.PUBLIC_SWAP_DETAILS_FAIL_REASONS</span>
1735
+ <span class="cstat-no" title="statement not covered" > .NO_FLOATING_BUT_HAVE_FIXED_PUBLIC_SWAP_OPTION</span>
1736
+ <span class="cstat-no" title="statement not covered" > );</span>
1737
+ <span class="cstat-no" title="statement not covered" > } else if (</span>
1738
+ <span class="cstat-no" title="statement not covered" > details?.reason ===</span>
1739
+ <span class="cstat-no" title="statement not covered" > SwapProvider.NO_SWAPS_REASONS.NO_FIXED_BUT_HAVE_FLOATING</span>
1740
+ <span class="cstat-no" title="statement not covered" > ) {</span>
1741
+ <span class="cstat-no" title="statement not covered" > return composeFailResult(</span>
1742
+ <span class="cstat-no" title="statement not covered" > PublicSwapService.PUBLIC_SWAP_DETAILS_FAIL_REASONS</span>
1743
+ <span class="cstat-no" title="statement not covered" > .NO_FIXED_BUT_HAVE_FLOATING_PUBLIC_SWAP_OPTION</span>
1744
+ <span class="cstat-no" title="statement not covered" > );</span>
1745
+ <span class="cstat-no" title="statement not covered" > }</span>
1746
+ <span class="cstat-no" title="statement not covered" > }</span>
1747
+ <span class="cstat-no" title="statement not covered" ></span>
1748
+ <span class="cstat-no" title="statement not covered" > const fromAmountBigNumber = BigNumber(fromAmountCoins);</span>
1749
+ <span class="cstat-no" title="statement not covered" > if (typeof min === "string" &amp;&amp; fromAmountBigNumber.lt(min)) {</span>
1750
+ <span class="cstat-no" title="statement not covered" > return composeFailResult(</span>
1751
+ <span class="cstat-no" title="statement not covered" > PublicSwapService.PUBLIC_SWAP_DETAILS_FAIL_REASONS</span>
1752
+ <span class="cstat-no" title="statement not covered" > .AMOUNT_LESS_THAN_MIN_SWAPPABLE</span>
1753
+ <span class="cstat-no" title="statement not covered" > );</span>
1754
+ <span class="cstat-no" title="statement not covered" > } else if (typeof max === "string" &amp;&amp; fromAmountBigNumber.gt(max)) {</span>
1755
+ <span class="cstat-no" title="statement not covered" > return composeFailResult(</span>
1756
+ <span class="cstat-no" title="statement not covered" > PublicSwapService.PUBLIC_SWAP_DETAILS_FAIL_REASONS</span>
1757
+ <span class="cstat-no" title="statement not covered" > .AMOUNT_HIGHER_THAN_MAX_SWAPPABLE</span>
1758
+ <span class="cstat-no" title="statement not covered" > );</span>
1759
+ <span class="cstat-no" title="statement not covered" > }</span>
1760
+ <span class="cstat-no" title="statement not covered" ></span>
1761
+ <span class="cstat-no" title="statement not covered" > const toAmountCoins = AmountUtils.trim(</span>
1762
+ <span class="cstat-no" title="statement not covered" > fromAmountBigNumber.times(details.rate),</span>
1763
+ <span class="cstat-no" title="statement not covered" > fromCoin.digits</span>
1764
+ <span class="cstat-no" title="statement not covered" > );</span>
1765
+ <span class="cstat-no" title="statement not covered" > const result = {</span>
1766
+ <span class="cstat-no" title="statement not covered" > result: true,</span>
1767
+ <span class="cstat-no" title="statement not covered" > swapCreationInfo: new BaseSwapCreationInfo(</span>
1768
+ <span class="cstat-no" title="statement not covered" > fromCoin,</span>
1769
+ <span class="cstat-no" title="statement not covered" > toCoin,</span>
1770
+ <span class="cstat-no" title="statement not covered" > fromAmountCoins,</span>
1771
+ <span class="cstat-no" title="statement not covered" > toAmountCoins,</span>
1772
+ <span class="cstat-no" title="statement not covered" > details.rate,</span>
1773
+ <span class="cstat-no" title="statement not covered" > details.rawSwapData,</span>
1774
+ <span class="cstat-no" title="statement not covered" > min,</span>
1775
+ <span class="cstat-no" title="statement not covered" > fiatMin,</span>
1776
+ <span class="cstat-no" title="statement not covered" > max,</span>
1777
+ <span class="cstat-no" title="statement not covered" > fiatMax,</span>
1778
+ <span class="cstat-no" title="statement not covered" > details.durationMinutesRange,</span>
1779
+ <span class="cstat-no" title="statement not covered" > details.fixed</span>
1780
+ <span class="cstat-no" title="statement not covered" > ),</span>
1781
+ <span class="cstat-no" title="statement not covered" > };</span>
1782
+ <span class="cstat-no" title="statement not covered" > Logger.log(</span>
1783
+ <span class="cstat-no" title="statement not covered" > `Result: ${safeStringify({</span>
1784
+ <span class="cstat-no" title="statement not covered" > result: result.result,</span>
1785
+ <span class="cstat-no" title="statement not covered" > swapCreationInfo: {</span>
1786
+ <span class="cstat-no" title="statement not covered" > ...result.swapCreationInfo,</span>
1787
+ <span class="cstat-no" title="statement not covered" > fromCoin: result?.swapCreationInfo?.fromCoin?.ticker,</span>
1788
+ <span class="cstat-no" title="statement not covered" > toCoin: result?.swapCreationInfo?.toCoin?.ticker,</span>
1789
+ <span class="cstat-no" title="statement not covered" > },</span>
1790
+ <span class="cstat-no" title="statement not covered" > })}`,</span>
1791
+ <span class="cstat-no" title="statement not covered" > loggerSource</span>
1792
+ <span class="cstat-no" title="statement not covered" > );</span>
1793
+ <span class="cstat-no" title="statement not covered" ></span>
1794
+ <span class="cstat-no" title="statement not covered" > return result;</span>
1795
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
1796
+ <span class="cstat-no" title="statement not covered" > improveAndRethrow(e, loggerSource);</span>
1797
+ <span class="cstat-no" title="statement not covered" > }</span>
1798
+ <span class="cstat-no" title="statement not covered" > }</span>
1799
+ <span class="cstat-no" title="statement not covered" ></span>
1800
+ <span class="cstat-no" title="statement not covered" > /**</span>
1801
+ <span class="cstat-no" title="statement not covered" > * Creates swap by given params.</span>
1802
+ <span class="cstat-no" title="statement not covered" > *</span>
1803
+ <span class="cstat-no" title="statement not covered" > * @param fromCoin {Coin}</span>
1804
+ <span class="cstat-no" title="statement not covered" > * @param toCoin {Coin}</span>
1805
+ <span class="cstat-no" title="statement not covered" > * @param fromAmount {string}</span>
1806
+ <span class="cstat-no" title="statement not covered" > * @param swapCreationInfo {BaseSwapCreationInfo}</span>
1807
+ <span class="cstat-no" title="statement not covered" > * @param toAddress {string}</span>
1808
+ <span class="cstat-no" title="statement not covered" > * @param refundAddress {string}</span>
1809
+ <span class="cstat-no" title="statement not covered" > * @param clientIp {string}</span>
1810
+ <span class="cstat-no" title="statement not covered" > * @param [toCurrencyExtraId] {string}</span>
1811
+ <span class="cstat-no" title="statement not covered" > * @param [refundExtraId] {string}</span>
1812
+ <span class="cstat-no" title="statement not covered" > * @return {Promise&lt;{</span>
1813
+ <span class="cstat-no" title="statement not covered" > * result: true,</span>
1814
+ <span class="cstat-no" title="statement not covered" > * fiatCurrencyCode: string,</span>
1815
+ <span class="cstat-no" title="statement not covered" > * toCoin: Coin,</span>
1816
+ <span class="cstat-no" title="statement not covered" > * fromAmountFiat: (number|null),</span>
1817
+ <span class="cstat-no" title="statement not covered" > * address: string,</span>
1818
+ <span class="cstat-no" title="statement not covered" > * durationMinutesRange: string,</span>
1819
+ <span class="cstat-no" title="statement not covered" > * fromAmount: string,</span>
1820
+ <span class="cstat-no" title="statement not covered" > * toAmount: string,</span>
1821
+ <span class="cstat-no" title="statement not covered" > * toAmountFiat: (number|null),</span>
1822
+ <span class="cstat-no" title="statement not covered" > * fiatCurrencyDecimals: number,</span>
1823
+ <span class="cstat-no" title="statement not covered" > * fromCoin: Coin,</span>
1824
+ <span class="cstat-no" title="statement not covered" > * rate: string,</span>
1825
+ <span class="cstat-no" title="statement not covered" > * swapId: string,</span>
1826
+ <span class="cstat-no" title="statement not covered" > * fromCurrencyExtraId: string,</span>
1827
+ <span class="cstat-no" title="statement not covered" > * fixed: boolean</span>
1828
+ <span class="cstat-no" title="statement not covered" > * }|{</span>
1829
+ <span class="cstat-no" title="statement not covered" > * result: false,</span>
1830
+ <span class="cstat-no" title="statement not covered" > * reason: string</span>
1831
+ <span class="cstat-no" title="statement not covered" > * }&gt;}</span>
1832
+ <span class="cstat-no" title="statement not covered" > */</span>
1833
+ <span class="cstat-no" title="statement not covered" > async createPublicSwap(</span>
1834
+ <span class="cstat-no" title="statement not covered" > fromCoin,</span>
1835
+ <span class="cstat-no" title="statement not covered" > toCoin,</span>
1836
+ <span class="cstat-no" title="statement not covered" > fromAmount,</span>
1837
+ <span class="cstat-no" title="statement not covered" > swapCreationInfo,</span>
1838
+ <span class="cstat-no" title="statement not covered" > toAddress,</span>
1839
+ <span class="cstat-no" title="statement not covered" > refundAddress,</span>
1840
+ <span class="cstat-no" title="statement not covered" > clientIp,</span>
1841
+ <span class="cstat-no" title="statement not covered" > toCurrencyExtraId,</span>
1842
+ <span class="cstat-no" title="statement not covered" > refundExtraId</span>
1843
+ <span class="cstat-no" title="statement not covered" > ) {</span>
1844
+ <span class="cstat-no" title="statement not covered" > const loggerSource = "createPublicSwap";</span>
1845
+ <span class="cstat-no" title="statement not covered" > try {</span>
1846
+ <span class="cstat-no" title="statement not covered" > if (</span>
1847
+ <span class="cstat-no" title="statement not covered" > !(fromCoin instanceof Coin) ||</span>
1848
+ <span class="cstat-no" title="statement not covered" > !(toCoin instanceof Coin) ||</span>
1849
+ <span class="cstat-no" title="statement not covered" > typeof fromAmount !== "string" ||</span>
1850
+ <span class="cstat-no" title="statement not covered" > typeof toAddress !== "string" ||</span>
1851
+ <span class="cstat-no" title="statement not covered" > typeof refundAddress !== "string" ||</span>
1852
+ <span class="cstat-no" title="statement not covered" > !(swapCreationInfo instanceof BaseSwapCreationInfo)</span>
1853
+ <span class="cstat-no" title="statement not covered" > ) {</span>
1854
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
1855
+ <span class="cstat-no" title="statement not covered" > `Wrong input: ${fromCoin.ticker} ${toCoin.ticker} ${fromAmount} ${swapCreationInfo}`</span>
1856
+ <span class="cstat-no" title="statement not covered" > );</span>
1857
+ <span class="cstat-no" title="statement not covered" > }</span>
1858
+ <span class="cstat-no" title="statement not covered" > Logger.log(</span>
1859
+ <span class="cstat-no" title="statement not covered" > `Start: ${fromAmount} ${fromCoin.ticker} -&gt; ${</span>
1860
+ <span class="cstat-no" title="statement not covered" > toCoin.ticker</span>
1861
+ <span class="cstat-no" title="statement not covered" > }. Details: ${safeStringify({</span>
1862
+ <span class="cstat-no" title="statement not covered" > ...swapCreationInfo,</span>
1863
+ <span class="cstat-no" title="statement not covered" > fromCoin: swapCreationInfo?.fromCoin?.ticker,</span>
1864
+ <span class="cstat-no" title="statement not covered" > toCoin: swapCreationInfo?.toCoin?.ticker,</span>
1865
+ <span class="cstat-no" title="statement not covered" > })}`,</span>
1866
+ <span class="cstat-no" title="statement not covered" > loggerSource</span>
1867
+ <span class="cstat-no" title="statement not covered" > );</span>
1868
+ <span class="cstat-no" title="statement not covered" ></span>
1869
+ <span class="cstat-no" title="statement not covered" > const result = await this._swapProvider.createSwap(</span>
1870
+ <span class="cstat-no" title="statement not covered" > fromCoin,</span>
1871
+ <span class="cstat-no" title="statement not covered" > toCoin,</span>
1872
+ <span class="cstat-no" title="statement not covered" > fromAmount,</span>
1873
+ <span class="cstat-no" title="statement not covered" > toAddress,</span>
1874
+ <span class="cstat-no" title="statement not covered" > refundAddress,</span>
1875
+ <span class="cstat-no" title="statement not covered" > swapCreationInfo.rawSwapData,</span>
1876
+ <span class="cstat-no" title="statement not covered" > clientIp,</span>
1877
+ <span class="cstat-no" title="statement not covered" > swapCreationInfo.fixed,</span>
1878
+ <span class="cstat-no" title="statement not covered" > toCurrencyExtraId,</span>
1879
+ <span class="cstat-no" title="statement not covered" > refundExtraId</span>
1880
+ <span class="cstat-no" title="statement not covered" > );</span>
1881
+ <span class="cstat-no" title="statement not covered" > Logger.log(</span>
1882
+ <span class="cstat-no" title="statement not covered" > `Created:${safeStringify({</span>
1883
+ <span class="cstat-no" title="statement not covered" > ...result,</span>
1884
+ <span class="cstat-no" title="statement not covered" > fromCoin: fromCoin?.ticker,</span>
1885
+ <span class="cstat-no" title="statement not covered" > toCoin: toCoin?.ticker,</span>
1886
+ <span class="cstat-no" title="statement not covered" > })}`,</span>
1887
+ <span class="cstat-no" title="statement not covered" > loggerSource</span>
1888
+ <span class="cstat-no" title="statement not covered" > );</span>
1889
+ <span class="cstat-no" title="statement not covered" > if (!result?.result) {</span>
1890
+ <span class="cstat-no" title="statement not covered" > if (</span>
1891
+ <span class="cstat-no" title="statement not covered" > result?.reason ===</span>
1892
+ <span class="cstat-no" title="statement not covered" > SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED</span>
1893
+ <span class="cstat-no" title="statement not covered" > ) {</span>
1894
+ <span class="cstat-no" title="statement not covered" > SwapUtils.safeHandleRequestsLimitExceeding();</span>
1895
+ <span class="cstat-no" title="statement not covered" > return {</span>
1896
+ <span class="cstat-no" title="statement not covered" > result: false,</span>
1897
+ <span class="cstat-no" title="statement not covered" > reason: PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS</span>
1898
+ <span class="cstat-no" title="statement not covered" > .REQUESTS_LIMIT_EXCEEDED,</span>
1899
+ <span class="cstat-no" title="statement not covered" > };</span>
1900
+ <span class="cstat-no" title="statement not covered" > }</span>
1901
+ <span class="cstat-no" title="statement not covered" > if (</span>
1902
+ <span class="cstat-no" title="statement not covered" > result?.reason ===</span>
1903
+ <span class="cstat-no" title="statement not covered" > SwapProvider.CREATION_FAIL_REASONS.RETRIABLE_FAIL</span>
1904
+ <span class="cstat-no" title="statement not covered" > ) {</span>
1905
+ <span class="cstat-no" title="statement not covered" > // TODO: [feature, high] implement retrying if one partner fail and we have another partners task_id=a07e367e488f4a4899613ac9056fa359</span>
1906
+ <span class="cstat-no" title="statement not covered" > // return {</span>
1907
+ <span class="cstat-no" title="statement not covered" > // result: false,</span>
1908
+ <span class="cstat-no" title="statement not covered" > // reason: PublicSwapService.SWAP_CREATION_FAIL_REASONS.RETRIABLE_FAIL,</span>
1909
+ <span class="cstat-no" title="statement not covered" > // };</span>
1910
+ <span class="cstat-no" title="statement not covered" > }</span>
1911
+ <span class="cstat-no" title="statement not covered" > }</span>
1912
+ <span class="cstat-no" title="statement not covered" > if (result.result &amp;&amp; result?.swapId) {</span>
1913
+ <span class="cstat-no" title="statement not covered" > let fromAmountFiat = null,</span>
1914
+ <span class="cstat-no" title="statement not covered" > toAmountFiat = null;</span>
1915
+ <span class="cstat-no" title="statement not covered" > try {</span>
1916
+ <span class="cstat-no" title="statement not covered" > const fromCoinUsdtRate =</span>
1917
+ <span class="cstat-no" title="statement not covered" > (await this._swapProvider.getCoinToUSDTRate(fromCoin))</span>
1918
+ <span class="cstat-no" title="statement not covered" > ?.rate ?? null;</span>
1919
+ <span class="cstat-no" title="statement not covered" > const toCoinUsdtRate =</span>
1920
+ <span class="cstat-no" title="statement not covered" > (await this._swapProvider.getCoinToUSDTRate(fromCoin))</span>
1921
+ <span class="cstat-no" title="statement not covered" > ?.rate ?? null;</span>
1922
+ <span class="cstat-no" title="statement not covered" > if (fromCoinUsdtRate != null &amp;&amp; result.fromAmount != null) {</span>
1923
+ <span class="cstat-no" title="statement not covered" > fromAmountFiat = BigNumber(result.fromAmount)</span>
1924
+ <span class="cstat-no" title="statement not covered" > .times(fromCoinUsdtRate)</span>
1925
+ <span class="cstat-no" title="statement not covered" > .toFixed(PublicSwapService._fiatDecimalsCount);</span>
1926
+ <span class="cstat-no" title="statement not covered" > }</span>
1927
+ <span class="cstat-no" title="statement not covered" > if (toCoinUsdtRate != null &amp;&amp; result.toAmount != null) {</span>
1928
+ <span class="cstat-no" title="statement not covered" > toAmountFiat = BigNumber(result.toAmount)</span>
1929
+ <span class="cstat-no" title="statement not covered" > .times(toCoinUsdtRate)</span>
1930
+ <span class="cstat-no" title="statement not covered" > .toFixed(PublicSwapService._fiatDecimalsCount);</span>
1931
+ <span class="cstat-no" title="statement not covered" > }</span>
1932
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
1933
+ <span class="cstat-no" title="statement not covered" > Logger.logError(</span>
1934
+ <span class="cstat-no" title="statement not covered" > e,</span>
1935
+ <span class="cstat-no" title="statement not covered" > loggerSource,</span>
1936
+ <span class="cstat-no" title="statement not covered" > "Failed to calculate fiat amounts for result"</span>
1937
+ <span class="cstat-no" title="statement not covered" > );</span>
1938
+ <span class="cstat-no" title="statement not covered" > }</span>
1939
+ <span class="cstat-no" title="statement not covered" ></span>
1940
+ <span class="cstat-no" title="statement not covered" > // TODO: feature, cirtical] add GA event. task_id=tbd</span>
1941
+ <span class="cstat-no" title="statement not covered" > EventBusInstance.dispatch(</span>
1942
+ <span class="cstat-no" title="statement not covered" > PublicSwapService.PUBLIC_SWAP_CREATED_EVENT,</span>
1943
+ <span class="cstat-no" title="statement not covered" > null,</span>
1944
+ <span class="cstat-no" title="statement not covered" > fromCoin.ticker,</span>
1945
+ <span class="cstat-no" title="statement not covered" > toCoin.ticker,</span>
1946
+ <span class="cstat-no" title="statement not covered" > fromAmountFiat</span>
1947
+ <span class="cstat-no" title="statement not covered" > );</span>
1948
+ <span class="cstat-no" title="statement not covered" ></span>
1949
+ <span class="cstat-no" title="statement not covered" > const toReturn = {</span>
1950
+ <span class="cstat-no" title="statement not covered" > result: true,</span>
1951
+ <span class="cstat-no" title="statement not covered" > swapId: result.swapId,</span>
1952
+ <span class="cstat-no" title="statement not covered" > fromCoin: fromCoin,</span>
1953
+ <span class="cstat-no" title="statement not covered" > toCoin: toCoin,</span>
1954
+ <span class="cstat-no" title="statement not covered" > fromAmount: result.fromAmount,</span>
1955
+ <span class="cstat-no" title="statement not covered" > toAmount: result.toAmount,</span>
1956
+ <span class="cstat-no" title="statement not covered" > fromAmountFiat: fromAmountFiat,</span>
1957
+ <span class="cstat-no" title="statement not covered" > toAmountFiat: toAmountFiat,</span>
1958
+ <span class="cstat-no" title="statement not covered" > fiatCurrencyCode: "USD",</span>
1959
+ <span class="cstat-no" title="statement not covered" > fiatCurrencyDecimals: PublicSwapService._fiatDecimalsCount,</span>
1960
+ <span class="cstat-no" title="statement not covered" > rate: result.rate,</span>
1961
+ <span class="cstat-no" title="statement not covered" > durationMinutesRange: swapCreationInfo.durationMinutesRange,</span>
1962
+ <span class="cstat-no" title="statement not covered" > address: result.fromAddress, // CRITICAL: this is the address to send coins to swaps provider</span>
1963
+ <span class="cstat-no" title="statement not covered" > fromCurrencyExtraId: result.fromCurrencyExtraId ?? "", // CRITICAL: this is the extra ID for address to send coins to swaps provider</span>
1964
+ <span class="cstat-no" title="statement not covered" > fixed: result.fixed,</span>
1965
+ <span class="cstat-no" title="statement not covered" > };</span>
1966
+ <span class="cstat-no" title="statement not covered" ></span>
1967
+ <span class="cstat-no" title="statement not covered" > this._savePublicSwapIdLocally(result.swapId);</span>
1968
+ <span class="cstat-no" title="statement not covered" ></span>
1969
+ <span class="cstat-no" title="statement not covered" > Logger.log(</span>
1970
+ <span class="cstat-no" title="statement not covered" > `Returning: ${safeStringify({</span>
1971
+ <span class="cstat-no" title="statement not covered" > ...toReturn,</span>
1972
+ <span class="cstat-no" title="statement not covered" > fromCoin: fromCoin?.ticker,</span>
1973
+ <span class="cstat-no" title="statement not covered" > toCoin: toCoin?.ticker,</span>
1974
+ <span class="cstat-no" title="statement not covered" > })}`,</span>
1975
+ <span class="cstat-no" title="statement not covered" > loggerSource</span>
1976
+ <span class="cstat-no" title="statement not covered" > );</span>
1977
+ <span class="cstat-no" title="statement not covered" > return toReturn;</span>
1978
+ <span class="cstat-no" title="statement not covered" > }</span>
1979
+ <span class="cstat-no" title="statement not covered" ></span>
1980
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
1981
+ <span class="cstat-no" title="statement not covered" > `Unexpected result from provider ${safeStringify(result)}`</span>
1982
+ <span class="cstat-no" title="statement not covered" > );</span>
1983
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
1984
+ <span class="cstat-no" title="statement not covered" > improveAndRethrow(e, loggerSource);</span>
1985
+ <span class="cstat-no" title="statement not covered" > }</span>
1986
+ <span class="cstat-no" title="statement not covered" > }</span>
1987
+ <span class="cstat-no" title="statement not covered" ></span>
1988
+ <span class="cstat-no" title="statement not covered" > /**</span>
1989
+ <span class="cstat-no" title="statement not covered" > * Retrieves swap details and status for existing swaps by their ids.</span>
1990
+ <span class="cstat-no" title="statement not covered" > *</span>
1991
+ <span class="cstat-no" title="statement not covered" > * @param swapIds {string[]}</span>
1992
+ <span class="cstat-no" title="statement not covered" > * @return {Promise&lt;{</span>
1993
+ <span class="cstat-no" title="statement not covered" > * result: true,</span>
1994
+ <span class="cstat-no" title="statement not covered" > * swaps: ExistingSwapWithFiatData[]</span>
1995
+ <span class="cstat-no" title="statement not covered" > * }|{</span>
1996
+ <span class="cstat-no" title="statement not covered" > * result: false,</span>
1997
+ <span class="cstat-no" title="statement not covered" > * reason: string</span>
1998
+ <span class="cstat-no" title="statement not covered" > * }&gt;}</span>
1999
+ <span class="cstat-no" title="statement not covered" > * error reason is one of PUBLIC_SWAPS_COMMON_ERRORS</span>
2000
+ <span class="cstat-no" title="statement not covered" > */</span>
2001
+ <span class="cstat-no" title="statement not covered" > async getPublicExistingSwapDetailsAndStatus(swapIds) {</span>
2002
+ <span class="cstat-no" title="statement not covered" > const loggerSource = "getPublicExistingSwapDetailsAndStatus";</span>
2003
+ <span class="cstat-no" title="statement not covered" > try {</span>
2004
+ <span class="cstat-no" title="statement not covered" > const result =</span>
2005
+ <span class="cstat-no" title="statement not covered" > await SwapUtils.getExistingSwapsDetailsWithFiatAmounts(</span>
2006
+ <span class="cstat-no" title="statement not covered" > this._swapProvider,</span>
2007
+ <span class="cstat-no" title="statement not covered" > swapIds</span>
2008
+ <span class="cstat-no" title="statement not covered" > );</span>
2009
+ <span class="cstat-no" title="statement not covered" > if (!result?.result) {</span>
2010
+ <span class="cstat-no" title="statement not covered" > if (</span>
2011
+ <span class="cstat-no" title="statement not covered" > result.reason ===</span>
2012
+ <span class="cstat-no" title="statement not covered" > SwapProvider.COMMON_ERRORS.REQUESTS_LIMIT_EXCEEDED</span>
2013
+ <span class="cstat-no" title="statement not covered" > ) {</span>
2014
+ <span class="cstat-no" title="statement not covered" > SwapUtils.safeHandleRequestsLimitExceeding();</span>
2015
+ <span class="cstat-no" title="statement not covered" > return {</span>
2016
+ <span class="cstat-no" title="statement not covered" > result: false,</span>
2017
+ <span class="cstat-no" title="statement not covered" > reason: PublicSwapService.PUBLIC_SWAPS_COMMON_ERRORS</span>
2018
+ <span class="cstat-no" title="statement not covered" > .REQUESTS_LIMIT_EXCEEDED,</span>
2019
+ <span class="cstat-no" title="statement not covered" > };</span>
2020
+ <span class="cstat-no" title="statement not covered" > }</span>
2021
+ <span class="cstat-no" title="statement not covered" > throw new Error("Unknown reason: " + result?.reason);</span>
2022
+ <span class="cstat-no" title="statement not covered" > }</span>
2023
+ <span class="cstat-no" title="statement not covered" ></span>
2024
+ <span class="cstat-no" title="statement not covered" > return result;</span>
2025
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
2026
+ <span class="cstat-no" title="statement not covered" > improveAndRethrow(e, loggerSource);</span>
2027
+ <span class="cstat-no" title="statement not covered" > }</span>
2028
+ <span class="cstat-no" title="statement not covered" > }</span>
2029
+ <span class="cstat-no" title="statement not covered" ></span>
2030
+ <span class="cstat-no" title="statement not covered" > /**</span>
2031
+ <span class="cstat-no" title="statement not covered" > * Retrieves the whole available swaps history by ids saved locally.</span>
2032
+ <span class="cstat-no" title="statement not covered" > *</span>
2033
+ <span class="cstat-no" title="statement not covered" > * @return {Promise&lt;{</span>
2034
+ <span class="cstat-no" title="statement not covered" > * result: true,</span>
2035
+ <span class="cstat-no" title="statement not covered" > * swaps: ExistingSwapWithFiatData[]</span>
2036
+ <span class="cstat-no" title="statement not covered" > * }|{</span>
2037
+ <span class="cstat-no" title="statement not covered" > * result: false,</span>
2038
+ <span class="cstat-no" title="statement not covered" > * reason: string</span>
2039
+ <span class="cstat-no" title="statement not covered" > * }&gt;}</span>
2040
+ <span class="cstat-no" title="statement not covered" > */</span>
2041
+ <span class="cstat-no" title="statement not covered" > async getPublicSwapsHistory() {</span>
2042
+ <span class="cstat-no" title="statement not covered" > try {</span>
2043
+ <span class="cstat-no" title="statement not covered" > const swapIds = this._getPublicSwapIdsSavedLocally();</span>
2044
+ <span class="cstat-no" title="statement not covered" > if (swapIds.length) {</span>
2045
+ <span class="cstat-no" title="statement not covered" > return await this.getPublicExistingSwapDetailsAndStatus(</span>
2046
+ <span class="cstat-no" title="statement not covered" > swapIds</span>
2047
+ <span class="cstat-no" title="statement not covered" > );</span>
2048
+ <span class="cstat-no" title="statement not covered" > }</span>
2049
+ <span class="cstat-no" title="statement not covered" > return { result: true, swaps: [] };</span>
2050
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
2051
+ <span class="cstat-no" title="statement not covered" > improveAndRethrow(e, "getPublicSwapsHistory");</span>
2052
+ <span class="cstat-no" title="statement not covered" > }</span>
2053
+ <span class="cstat-no" title="statement not covered" > }</span>
2054
+ <span class="cstat-no" title="statement not covered" ></span>
2055
+ <span class="cstat-no" title="statement not covered" > /**</span>
2056
+ <span class="cstat-no" title="statement not covered" > * @param swapId {string}</span>
2057
+ <span class="cstat-no" title="statement not covered" > * @private</span>
2058
+ <span class="cstat-no" title="statement not covered" > */</span>
2059
+ <span class="cstat-no" title="statement not covered" > _savePublicSwapIdLocally(swapId) {</span>
2060
+ <span class="cstat-no" title="statement not covered" > if (typeof window !== "undefined") {</span>
2061
+ <span class="cstat-no" title="statement not covered" > try {</span>
2062
+ <span class="cstat-no" title="statement not covered" > const saved = localStorage.getItem("publicSwapIds");</span>
2063
+ <span class="cstat-no" title="statement not covered" > const ids =</span>
2064
+ <span class="cstat-no" title="statement not covered" > typeof saved === "string" &amp;&amp; saved.length &gt; 0</span>
2065
+ <span class="cstat-no" title="statement not covered" > ? saved.split(",")</span>
2066
+ <span class="cstat-no" title="statement not covered" > : [];</span>
2067
+ <span class="cstat-no" title="statement not covered" > ids.push(swapId);</span>
2068
+ <span class="cstat-no" title="statement not covered" > localStorage.setItem("publicSwapIds", ids.join(","));</span>
2069
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
2070
+ <span class="cstat-no" title="statement not covered" > improveAndRethrow(e, "_savePublicSwapIdLocally");</span>
2071
+ <span class="cstat-no" title="statement not covered" > }</span>
2072
+ <span class="cstat-no" title="statement not covered" > }</span>
2073
+ <span class="cstat-no" title="statement not covered" > }</span>
2074
+ <span class="cstat-no" title="statement not covered" ></span>
2075
+ <span class="cstat-no" title="statement not covered" > /**</span>
2076
+ <span class="cstat-no" title="statement not covered" > * @private</span>
2077
+ <span class="cstat-no" title="statement not covered" > * @return {string[]}</span>
2078
+ <span class="cstat-no" title="statement not covered" > */</span>
2079
+ <span class="cstat-no" title="statement not covered" > _getPublicSwapIdsSavedLocally() {</span>
2080
+ <span class="cstat-no" title="statement not covered" > if (typeof window !== "undefined") {</span>
2081
+ <span class="cstat-no" title="statement not covered" > try {</span>
2082
+ <span class="cstat-no" title="statement not covered" > const saved = localStorage.getItem("publicSwapIds");</span>
2083
+ <span class="cstat-no" title="statement not covered" > return typeof saved === "string" &amp;&amp; saved.length &gt; 0</span>
2084
+ <span class="cstat-no" title="statement not covered" > ? saved.split(",")</span>
2085
+ <span class="cstat-no" title="statement not covered" > : [];</span>
2086
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
2087
+ <span class="cstat-no" title="statement not covered" > improveAndRethrow(e, "_getPublicSwapIdsSavedLocally");</span>
2088
+ <span class="cstat-no" title="statement not covered" > }</span>
2089
+ <span class="cstat-no" title="statement not covered" > }</span>
2090
+ <span class="cstat-no" title="statement not covered" > }</span>
2091
+ <span class="cstat-no" title="statement not covered" ></span>
2092
+ <span class="cstat-no" title="statement not covered" > /**</span>
2093
+ <span class="cstat-no" title="statement not covered" > * @param coinOrTicker {Coin|string}</span>
2094
+ <span class="cstat-no" title="statement not covered" > * @return {string} icon URL (ready to use)</span>
2095
+ <span class="cstat-no" title="statement not covered" > */</span>
2096
+ <span class="cstat-no" title="statement not covered" > getAssetIconUrl(coinOrTicker) {</span>
2097
+ <span class="cstat-no" title="statement not covered" > return this._swapProvider.getIconUrl(coinOrTicker);</span>
2098
+ <span class="cstat-no" title="statement not covered" > }</span>
2099
+ <span class="cstat-no" title="statement not covered" ></span>
2100
+ <span class="cstat-no" title="statement not covered" > /**</span>
2101
+ <span class="cstat-no" title="statement not covered" > * @param ticker {string}</span>
2102
+ <span class="cstat-no" title="statement not covered" > * @return {Coin|null}</span>
2103
+ <span class="cstat-no" title="statement not covered" > */</span>
2104
+ <span class="cstat-no" title="statement not covered" > getCoinByTickerIfPresent(ticker) {</span>
2105
+ <span class="cstat-no" title="statement not covered" > return this._swapProvider.getCoinByTickerIfPresent(ticker);</span>
2106
+ <span class="cstat-no" title="statement not covered" > }</span>
2107
+ <span class="cstat-no" title="statement not covered" ></span>
2108
+ <span class="cstat-no" title="statement not covered" > /**</span>
2109
+ <span class="cstat-no" title="statement not covered" > * TODO: [feature, moderate] add other fiat currencies support. task_id=5490e21b8b9c4f89a2247b28db3c9e0a</span>
2110
+ <span class="cstat-no" title="statement not covered" > * @param asset {Coin}</span>
2111
+ <span class="cstat-no" title="statement not covered" > * @return {Promise&lt;string|null&gt;}</span>
2112
+ <span class="cstat-no" title="statement not covered" > */</span>
2113
+ <span class="cstat-no" title="statement not covered" > async getAssetToUsdtRate(asset) {</span>
2114
+ <span class="cstat-no" title="statement not covered" > try {</span>
2115
+ <span class="cstat-no" title="statement not covered" > const result = await this._swapProvider.getCoinToUSDTRate(asset);</span>
2116
+ <span class="cstat-no" title="statement not covered" > return result?.rate ?? null;</span>
2117
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
2118
+ <span class="cstat-no" title="statement not covered" > improveAndRethrow(e, "getAssetToUsdtRate");</span>
2119
+ <span class="cstat-no" title="statement not covered" > }</span>
2120
+ <span class="cstat-no" title="statement not covered" > }</span>
2121
+ <span class="cstat-no" title="statement not covered" ></span>
2122
+ <span class="cstat-no" title="statement not covered" > /**</span>
2123
+ <span class="cstat-no" title="statement not covered" > * @param asset {Coin}</span>
2124
+ <span class="cstat-no" title="statement not covered" > * @param address {string}</span>
2125
+ <span class="cstat-no" title="statement not covered" > * @return {boolean}</span>
2126
+ <span class="cstat-no" title="statement not covered" > */</span>
2127
+ <span class="cstat-no" title="statement not covered" > isAddressValidForAsset(asset, address) {</span>
2128
+ <span class="cstat-no" title="statement not covered" > try {</span>
2129
+ <span class="cstat-no" title="statement not covered" > return this._swapProvider.isAddressValidForAsset(asset, address);</span>
2130
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
2131
+ <span class="cstat-no" title="statement not covered" > improveAndRethrow(e, "isAddressValidForAsset");</span>
2132
+ <span class="cstat-no" title="statement not covered" > }</span>
2133
+ <span class="cstat-no" title="statement not covered" > }</span>
2134
+ <span class="cstat-no" title="statement not covered" ></span>
2135
+ <span class="cstat-no" title="statement not covered" > /**</span>
2136
+ <span class="cstat-no" title="statement not covered" > * Retrieves token by contract address.</span>
2137
+ <span class="cstat-no" title="statement not covered" > *</span>
2138
+ <span class="cstat-no" title="statement not covered" > * @param addressString {string}</span>
2139
+ <span class="cstat-no" title="statement not covered" > * @return {Promise&lt;Coin|null&gt;}</span>
2140
+ <span class="cstat-no" title="statement not covered" > */</span>
2141
+ <span class="cstat-no" title="statement not covered" > async getTokenByContractAddress(addressString) {</span>
2142
+ <span class="cstat-no" title="statement not covered" > try {</span>
2143
+ <span class="cstat-no" title="statement not covered" > if (!addressString) return null;</span>
2144
+ <span class="cstat-no" title="statement not covered" > const addressLowerCase = addressString.toLowerCase();</span>
2145
+ <span class="cstat-no" title="statement not covered" > const allCoins =</span>
2146
+ <span class="cstat-no" title="statement not covered" > await this._swapProvider.getAllSupportedCurrencies();</span>
2147
+ <span class="cstat-no" title="statement not covered" > if (allCoins.result) {</span>
2148
+ <span class="cstat-no" title="statement not covered" > return allCoins.coins.find(</span>
2149
+ <span class="cstat-no" title="statement not covered" > (coin) =&gt;</span>
2150
+ <span class="cstat-no" title="statement not covered" > coin.tokenAddress &amp;&amp;</span>
2151
+ <span class="cstat-no" title="statement not covered" > coin.tokenAddress.toLowerCase() === addressLowerCase</span>
2152
+ <span class="cstat-no" title="statement not covered" > );</span>
2153
+ <span class="cstat-no" title="statement not covered" > }</span>
2154
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
2155
+ <span class="cstat-no" title="statement not covered" > Logger.logError(e, "getTokenByContractAddress");</span>
2156
+ <span class="cstat-no" title="statement not covered" > }</span>
2157
+ <span class="cstat-no" title="statement not covered" > return null;</span>
2158
+ <span class="cstat-no" title="statement not covered" > }</span>
2159
+ <span class="cstat-no" title="statement not covered" ></span>
2160
+ <span class="cstat-no" title="statement not covered" > /**</span>
2161
+ <span class="cstat-no" title="statement not covered" > * @param asset {Coin}</span>
2162
+ <span class="cstat-no" title="statement not covered" > * @return {string|null}</span>
2163
+ <span class="cstat-no" title="statement not covered" > */</span>
2164
+ <span class="cstat-no" title="statement not covered" > getExtraIdNameIfPresentForAsset(asset) {</span>
2165
+ <span class="cstat-no" title="statement not covered" > try {</span>
2166
+ <span class="cstat-no" title="statement not covered" > return this._swapProvider.getExtraIdNameIfPresent(asset);</span>
2167
+ <span class="cstat-no" title="statement not covered" > } catch (e) {</span>
2168
+ <span class="cstat-no" title="statement not covered" > improveAndRethrow(e, "getExtraIdNameIfPresentForAsset");</span>
2169
+ <span class="cstat-no" title="statement not covered" > }</span>
2170
+ <span class="cstat-no" title="statement not covered" > }</span>
2171
+ <span class="cstat-no" title="statement not covered" >}</span>
2172
+ &nbsp;</pre></td></tr></table></pre>
2173
+
2174
+ <div class='push'></div><!-- for sticky footer -->
2175
+ </div><!-- /wrapper -->
2176
+ <div class='footer quiet pad2 space-top1 center small'>
2177
+ Code coverage generated by
2178
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2179
+ at 2024-05-03T08:51:03.016Z
2180
+ </div>
2181
+ <script src="../../../../prettify.js"></script>
2182
+ <script>
2183
+ window.onload = function () {
2184
+ prettyPrint();
2185
+ };
2186
+ </script>
2187
+ <script src="../../../../sorter.js"></script>
2188
+ <script src="../../../../block-navigation.js"></script>
2189
+ </body>
2190
+ </html>
2191
+