MaxCompilerDesignData.dat 74 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448
  1. #ifdef MAXCOMPILER_VERSION_INFO
  2. #define MAXCOMPILER_VERSION_INFO_PRESENT 1
  3. #define MAXFILE_MAXCOMPILER_VERSION_YEAR 2018
  4. #define MAXFILE_MAXCOMPILER_VERSION_NUM 3
  5. #define MAXFILE_MAXCOMPILER_VERSION_POINT 1
  6. #define MAXFILE_MAXCOMPILER_VERSION_PATCH ""
  7. #define MAXFILE_MAXCOMPILER_VERSION_REV "b189b8e"
  8. #define MAXFILE_MAXCOMPILER_VERSION_RELEASE_DATE "2019-01-09"
  9. #define MAXFILE_MAXCOMPILER_VERSION_RELEASE_MODE true
  10. #endif
  11. #ifdef MAXFILE_BUILD_INFO
  12. #define MAXFILE_BUILD_INFO_PRESENT 1
  13. #define MAXFILE_BUILD_NAME "StreamFMA"
  14. #define MAXFILE_BUILD_DIR "/mnt/beegfs/home/jusers/makni1/jumax/makni3/starpu.git/tests/./StreamFMA_MAX5C_DFE_SIM"
  15. #define MAXFILE_BUILD_DATE 20191029
  16. #define MAXFILE_BUILD_REV 1
  17. #endif
  18. #ifdef PARAM
  19. #define PARAM_PRESENT 1
  20. PARAM(DYNAMIC_CLOCKS_ENABLED, 0)
  21. PARAM(APP_ID, 0)
  22. PARAM(REV_ID, 0)
  23. PARAM(CHAIN_LENGTH, 36)
  24. PARAM(IS_SIMULATION, 1)
  25. PARAM(MEC_SUPPORTED, 1)
  26. PARAM(PCIE_SLAVE_STREAMING, 0)
  27. PARAM(PCIE_ALIGNMENT, 16)
  28. PARAM(NUM_IFPGA_LINKS, 0)
  29. #endif
  30. #ifdef STRING_PARAM
  31. #define STRING_PARAM_PRESENT 1
  32. STRING_PARAM(BOARD_MODEL, "MAX5_LIMA")
  33. #endif
  34. #ifdef INCLUDE_GENERATED_CPP_HEADERS
  35. #include "StreamFMAKernel.h"
  36. #endif
  37. #ifdef ENGINE_PARAMETERS
  38. #define ENGINE_PARAMETERS_PRESENT 1
  39. ENGINE_PARAMETERS(DFEModel, DFEMODEL, MAIA)
  40. ENGINE_PARAMETERS(maxFileName, STRING, "StreamFMA")
  41. ENGINE_PARAMETERS(target, ENUM, DFE_SIM)
  42. ENGINE_PARAMETERS(enableMPCX, BOOL, false)
  43. ENGINE_PARAMETERS(MPPRStartCT, INT, 1)
  44. ENGINE_PARAMETERS(MPPREndCT, INT, 1)
  45. ENGINE_PARAMETERS(MPPRThreads, INT, 1)
  46. ENGINE_PARAMETERS(MPPRRetryThreshold, INT, 0)
  47. #endif
  48. #ifdef MANAGER_NODE
  49. #define MANAGER_NODE_PRESENT 1
  50. MANAGER_NODE(StreamFMAKernel, Kernel)
  51. MANAGER_NODE(a, PCIe_From_Host)
  52. MANAGER_NODE(b, PCIe_From_Host)
  53. MANAGER_NODE(output, PCIe_To_Host)
  54. MANAGER_NODE(Stream_1, DualAspectMux)
  55. MANAGER_NODE(Stream_4, DualAspectMux)
  56. MANAGER_NODE(Stream_8, DualAspectReg)
  57. MANAGER_NODE(Stream_21, StreamPullPushAdapter)
  58. MANAGER_NODE(Stream_11, Fifo)
  59. MANAGER_NODE(Stream_15, Fifo)
  60. MANAGER_NODE(Stream_13, Fifo)
  61. MANAGER_NODE(Stream_17, Fifo)
  62. MANAGER_NODE(Stream_19, Fifo)
  63. #endif
  64. #ifdef MANAGER_NODE_IO
  65. #define MANAGER_NODE_IO_PRESENT 1
  66. MANAGER_NODE_IO(StreamFMAKernel, a, IN, STREAM, 32, PULL)
  67. MANAGER_NODE_IO(StreamFMAKernel, b, IN, STREAM, 32, PULL)
  68. MANAGER_NODE_IO(StreamFMAKernel, output, OUT, STREAM, 32, PUSH)
  69. MANAGER_NODE_IO(a, a, OUT, PCIE, 128, PUSH)
  70. MANAGER_NODE_IO(b, b, OUT, PCIE, 128, PUSH)
  71. MANAGER_NODE_IO(output, output, IN, PCIE, 128, PUSH)
  72. MANAGER_NODE_IO(Stream_1, input, IN, PCIE, 128, PULL)
  73. MANAGER_NODE_IO(Stream_1, output, OUT, PCIE, 32, PUSH)
  74. MANAGER_NODE_IO(Stream_4, input, IN, PCIE, 128, PULL)
  75. MANAGER_NODE_IO(Stream_4, output, OUT, PCIE, 32, PUSH)
  76. MANAGER_NODE_IO(Stream_8, input, IN, PCIE, 32, PULL)
  77. MANAGER_NODE_IO(Stream_8, output, OUT, PCIE, 128, PULL)
  78. MANAGER_NODE_IO(Stream_21, input, IN, PCIE, 128, PULL)
  79. MANAGER_NODE_IO(Stream_21, output, OUT, PCIE, 128, PUSH)
  80. MANAGER_NODE_IO(Stream_11, input, IN, PCIE, 128, PUSH)
  81. MANAGER_NODE_IO(Stream_11, output, OUT, PCIE, 128, PULL)
  82. MANAGER_NODE_IO(Stream_15, input, IN, PCIE, 128, PUSH)
  83. MANAGER_NODE_IO(Stream_15, output, OUT, PCIE, 128, PULL)
  84. MANAGER_NODE_IO(Stream_13, input, IN, PCIE, 32, PUSH)
  85. MANAGER_NODE_IO(Stream_13, output, OUT, STREAM, 32, PULL)
  86. MANAGER_NODE_IO(Stream_17, input, IN, PCIE, 32, PUSH)
  87. MANAGER_NODE_IO(Stream_17, output, OUT, STREAM, 32, PULL)
  88. MANAGER_NODE_IO(Stream_19, input, IN, STREAM, 32, PUSH)
  89. MANAGER_NODE_IO(Stream_19, output, OUT, PCIE, 32, PULL)
  90. #endif
  91. #ifdef MANAGER_STREAM
  92. #define MANAGER_STREAM_PRESENT 1
  93. MANAGER_STREAM(a, a, Stream_11, input, 128)
  94. MANAGER_STREAM(b, b, Stream_15, input, 128)
  95. MANAGER_STREAM(StreamFMAKernel, output, Stream_19, input, 32)
  96. MANAGER_STREAM(Stream_1, output, Stream_13, input, 32)
  97. MANAGER_STREAM(Stream_4, output, Stream_17, input, 32)
  98. MANAGER_STREAM(Stream_8, output, Stream_21, input, 128)
  99. MANAGER_STREAM(Stream_21, output, output, output, 128)
  100. MANAGER_STREAM(Stream_11, output, Stream_1, input, 128)
  101. MANAGER_STREAM(Stream_15, output, Stream_4, input, 128)
  102. MANAGER_STREAM(Stream_13, output, StreamFMAKernel, a, 32)
  103. MANAGER_STREAM(Stream_17, output, StreamFMAKernel, b, 32)
  104. MANAGER_STREAM(Stream_19, output, Stream_8, input, 32)
  105. #endif
  106. #ifdef MANAGER_NODE_STACK_TRACE
  107. #define MANAGER_NODE_STACK_TRACE_PRESENT 1
  108. MANAGER_NODE_STACK_TRACE(StreamFMAKernel, "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  109. MANAGER_NODE_STACK_TRACE(a, "com.maxeler.platform.max5.manager.Max5ManagerBase.addStreamFromCPU(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:14)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  110. MANAGER_NODE_STACK_TRACE(b, "com.maxeler.platform.max5.manager.Max5ManagerBase.addStreamFromCPU(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:15)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  111. MANAGER_NODE_STACK_TRACE(output, "com.maxeler.platform.max5.manager.Max5ManagerBase.addStreamToCPU(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:16)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  112. MANAGER_NODE_STACK_TRACE(Stream_1, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:21)\n")
  113. MANAGER_NODE_STACK_TRACE(Stream_4, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:21)\n")
  114. MANAGER_NODE_STACK_TRACE(Stream_8, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:21)\n")
  115. MANAGER_NODE_STACK_TRACE(Stream_21, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:21)\n")
  116. MANAGER_NODE_STACK_TRACE(Stream_11, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:21)\n")
  117. MANAGER_NODE_STACK_TRACE(Stream_15, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:21)\n")
  118. MANAGER_NODE_STACK_TRACE(Stream_13, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:21)\n")
  119. MANAGER_NODE_STACK_TRACE(Stream_17, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:21)\n")
  120. MANAGER_NODE_STACK_TRACE(Stream_19, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:21)\n")
  121. #endif
  122. #ifdef MANAGER_NODE_PROPERTY
  123. #define MANAGER_NODE_PROPERTY_PRESENT 1
  124. MANAGER_NODE_PROPERTY(StreamFMAKernel, control_pipelining_depth, 2)
  125. #endif
  126. #ifdef KERNEL_CORE
  127. #define KERNEL_CORE_PRESENT 1
  128. KERNEL_CORE(StreamFMAKernel)
  129. #endif
  130. #ifdef KERNEL_HOST_CONTROLLED
  131. #define KERNEL_HOST_CONTROLLED_PRESENT 1
  132. KERNEL_HOST_CONTROLLED(StreamFMAKernel, StreamFMAKernel)
  133. #endif
  134. #ifdef DEBUG_INPUT_BITS
  135. #define DEBUG_INPUT_BITS_PRESENT 1
  136. DEBUG_INPUT_BITS(StreamFMAKernel, a, 0)
  137. DEBUG_INPUT_BITS(StreamFMAKernel, b, 1)
  138. #endif
  139. #ifdef DEBUG_OUTPUT_BITS
  140. #define DEBUG_OUTPUT_BITS_PRESENT 1
  141. DEBUG_OUTPUT_BITS(StreamFMAKernel, output, 0)
  142. #endif
  143. #ifdef MANAGER_NODE_CPP_SIM_MODEL_CTOR
  144. #define MANAGER_NODE_CPP_SIM_MODEL_CTOR_PRESENT 1
  145. MANAGER_NODE_CPP_SIM_MODEL_CTOR(b, PCIePushSourceSync16, "b")
  146. MANAGER_NODE_CPP_SIM_MODEL_CTOR(a, PCIePushSourceSync16, "a")
  147. MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_15, FifoPushToPullSync, "Stream_15", false, 512, 128)
  148. MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_11, FifoPushToPullSync, "Stream_11", false, 512, 128)
  149. MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_1, DualAspectMuxSync, "Stream_1", 32, 4)
  150. MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_4, DualAspectMuxSync, "Stream_4", 32, 4)
  151. MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_17, FifoPushToPullSync, "Stream_17", false, 512, 32)
  152. MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_13, FifoPushToPullSync, "Stream_13", false, 512, 32)
  153. MANAGER_NODE_CPP_SIM_MODEL_CTOR(StreamFMAKernel, StreamFMAKernel, "StreamFMAKernel")
  154. MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_19, FifoPushToPullSync, "Stream_19", false, 512, 32)
  155. MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_8, DualAspectRegSync, "Stream_8", 32, 4)
  156. MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_21, PullToPushAdapterSync, "Stream_21")
  157. MANAGER_NODE_CPP_SIM_MODEL_CTOR(output, PCIePushSinkSync16, "output")
  158. MANAGER_NODE_CPP_SIM_MODEL_CTOR(CapabilityReg, CapRegs, "CapabilityReg", 0, 2, 1, 0, 0, 0, 0, 0, 36)
  159. MANAGER_NODE_CPP_SIM_MODEL_CTOR(ifpga, IFPGARegs)
  160. MANAGER_NODE_CPP_SIM_MODEL_CTOR(sfa, SFARegs)
  161. MANAGER_NODE_CPP_SIM_MODEL_CTOR(ChecksumMemory, ChecksumMem, "ChecksumMemory", "ac5fbbbe6e4b46179c07a7a26c8647de7cec6bb27a42f5ac58fd3d986dbdfa72")
  162. #endif
  163. #ifdef MANAGER_NODE_CPP_SIM_MODEL_SETUP
  164. #define MANAGER_NODE_CPP_SIM_MODEL_SETUP_PRESENT 1
  165. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_ctld_almost_empty, 2, 0)
  166. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_ctld_done, 2, 0)
  167. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_ctld_empty, 2, 0)
  168. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_ctld_read, 2, 0)
  169. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_ctld_read_pipe_dbg, 6, 0)
  170. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_ctld_request, 2, 0)
  171. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_done_out, 1, 0)
  172. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_fill_level, 4, 0)
  173. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_flush_level, 4, 0)
  174. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_flush_start, 1, 0)
  175. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_flush_start_level, 4, 0)
  176. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_flushing, 1, 0)
  177. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_full_level, 4, 0)
  178. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_out_stall, 1, 0)
  179. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_out_valid, 1, 0)
  180. MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_stall_vector, 1, 0)
  181. #endif
  182. #ifdef PCIE_STREAM
  183. #define PCIE_STREAM_PRESENT 1
  184. PCIE_STREAM(b, STREAM_FROM_HOST, 0)
  185. PCIE_STREAM(a, STREAM_FROM_HOST, 1)
  186. PCIE_STREAM(output, STREAM_TO_HOST, 0)
  187. #endif
  188. #ifdef REG
  189. #define REG_PRESENT 1
  190. REG(StreamFMAKernel.io_a_force_disabled, 0x0, 1, hwOffsetFix(1, 0, UNSIGNED))
  191. REG(StreamFMAKernel.io_b_force_disabled, 0x1, 1, hwOffsetFix(1, 0, UNSIGNED))
  192. REG(StreamFMAKernel.io_output_force_disabled, 0x2, 1, hwOffsetFix(1, 0, UNSIGNED))
  193. REG(StreamFMAKernel.run_cycle_count, 0x3, 6, hwOffsetFix(48, 0, UNSIGNED))
  194. REG(StreamFMAKernel.current_run_cycle_count, 0x9, 6, hwOffsetFix(48, 0, UNSIGNED))
  195. REG(StreamFMAKernel.dbg_ctld_almost_empty, 0xf, 1, hwBits(2))
  196. REG(StreamFMAKernel.dbg_ctld_done, 0x10, 1, hwBits(2))
  197. REG(StreamFMAKernel.dbg_ctld_empty, 0x11, 1, hwBits(2))
  198. REG(StreamFMAKernel.dbg_ctld_read, 0x12, 1, hwBits(2))
  199. REG(StreamFMAKernel.dbg_ctld_read_pipe_dbg, 0x13, 1, hwBits(6))
  200. REG(StreamFMAKernel.dbg_ctld_request, 0x14, 1, hwBits(2))
  201. REG(StreamFMAKernel.dbg_done_out, 0x15, 1, hwBits(1))
  202. REG(StreamFMAKernel.dbg_fill_level, 0x16, 1, hwBits(4))
  203. REG(StreamFMAKernel.dbg_flush_level, 0x17, 1, hwBits(4))
  204. REG(StreamFMAKernel.dbg_flush_start, 0x18, 1, hwBits(1))
  205. REG(StreamFMAKernel.dbg_flush_start_level, 0x19, 1, hwBits(4))
  206. REG(StreamFMAKernel.dbg_flushing, 0x1a, 1, hwBits(1))
  207. REG(StreamFMAKernel.dbg_full_level, 0x1b, 1, hwBits(4))
  208. REG(StreamFMAKernel.dbg_out_stall, 0x1c, 1, hwBits(1))
  209. REG(StreamFMAKernel.dbg_out_valid, 0x1d, 1, hwBits(1))
  210. REG(StreamFMAKernel.dbg_stall_vector, 0x1e, 1, hwBits(1))
  211. REG(ifpga.ifpga_ctrl, 0x1f, 1, hwBits(8))
  212. REG(SignalForwardingAdapter.SFA_FORWARD_EN, 0x20, 4, hwBits(32))
  213. #endif
  214. #ifdef REG_V2
  215. #define REG_V2_PRESENT 1
  216. REG_V2(StreamFMAKernel.io_a_force_disabled, 0x0, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, true)
  217. REG_V2(StreamFMAKernel.io_b_force_disabled, 0x1, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, true)
  218. REG_V2(StreamFMAKernel.io_output_force_disabled, 0x2, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, true)
  219. REG_V2(StreamFMAKernel.run_cycle_count, 0x3, 6, hwOffsetFix(48, 0, UNSIGNED), HOST_WRITE_ONLY, false)
  220. REG_V2(StreamFMAKernel.current_run_cycle_count, 0x9, 6, hwOffsetFix(48, 0, UNSIGNED), HOST_READ_ONLY, false)
  221. REG_V2(StreamFMAKernel.dbg_ctld_almost_empty, 0xf, 1, hwBits(2), HOST_READ_ONLY, false)
  222. REG_V2(StreamFMAKernel.dbg_ctld_done, 0x10, 1, hwBits(2), HOST_READ_ONLY, false)
  223. REG_V2(StreamFMAKernel.dbg_ctld_empty, 0x11, 1, hwBits(2), HOST_READ_ONLY, false)
  224. REG_V2(StreamFMAKernel.dbg_ctld_read, 0x12, 1, hwBits(2), HOST_READ_ONLY, false)
  225. REG_V2(StreamFMAKernel.dbg_ctld_read_pipe_dbg, 0x13, 1, hwBits(6), HOST_READ_ONLY, false)
  226. REG_V2(StreamFMAKernel.dbg_ctld_request, 0x14, 1, hwBits(2), HOST_READ_ONLY, false)
  227. REG_V2(StreamFMAKernel.dbg_done_out, 0x15, 1, hwBits(1), HOST_READ_ONLY, false)
  228. REG_V2(StreamFMAKernel.dbg_fill_level, 0x16, 1, hwBits(4), HOST_READ_ONLY, false)
  229. REG_V2(StreamFMAKernel.dbg_flush_level, 0x17, 1, hwBits(4), HOST_READ_ONLY, false)
  230. REG_V2(StreamFMAKernel.dbg_flush_start, 0x18, 1, hwBits(1), HOST_READ_ONLY, false)
  231. REG_V2(StreamFMAKernel.dbg_flush_start_level, 0x19, 1, hwBits(4), HOST_READ_ONLY, false)
  232. REG_V2(StreamFMAKernel.dbg_flushing, 0x1a, 1, hwBits(1), HOST_READ_ONLY, false)
  233. REG_V2(StreamFMAKernel.dbg_full_level, 0x1b, 1, hwBits(4), HOST_READ_ONLY, false)
  234. REG_V2(StreamFMAKernel.dbg_out_stall, 0x1c, 1, hwBits(1), HOST_READ_ONLY, false)
  235. REG_V2(StreamFMAKernel.dbg_out_valid, 0x1d, 1, hwBits(1), HOST_READ_ONLY, false)
  236. REG_V2(StreamFMAKernel.dbg_stall_vector, 0x1e, 1, hwBits(1), HOST_READ_ONLY, false)
  237. REG_V2(ifpga.ifpga_ctrl, 0x1f, 1, hwBits(8), HOST_READ_WRITE, false)
  238. REG_V2(SignalForwardingAdapter.SFA_FORWARD_EN, 0x20, 4, hwBits(32), HOST_READ_WRITE, false)
  239. #endif
  240. #ifdef CHECKSUM
  241. #define CHECKSUM_PRESENT 1
  242. CHECKSUM("ac5fbbbe6e4b46179c07a7a26c8647de7cec6bb27a42f5ac58fd3d986dbdfa72")
  243. #endif
  244. #ifdef CAPABILITY
  245. #define CAPABILITY_PRESENT 1
  246. CAPABILITY(LIMAREV, LIMAREVA)
  247. CAPABILITY(LIMARAM, DDR4_48GB)
  248. CAPABILITY(LIMAFPGA, xcVU9P_FLGB2104_2_E)
  249. #endif
  250. #ifdef DEFINE_DESIGN_NAME
  251. #define DESIGN_NAME StreamFMA
  252. #endif /* DEFINE_DESIGN_NAME */
  253. #ifndef SLIC_NO_DECLARATIONS
  254. /**\file */
  255. #ifndef SLIC_DECLARATIONS_StreamFMA_H
  256. #define SLIC_DECLARATIONS_StreamFMA_H
  257. #include "MaxSLiCInterface.h"
  258. #ifdef __cplusplus
  259. extern "C" {
  260. #endif /* __cplusplus */
  261. #define StreamFMA_DYNAMIC_CLOCKS_ENABLED (0)
  262. #define StreamFMA_PCIE_ALIGNMENT (16)
  263. /*----------------------------------------------------------------------------*/
  264. /*---------------------------- Interface default -----------------------------*/
  265. /*----------------------------------------------------------------------------*/
  266. /**
  267. * \brief Basic static function for the interface 'default'.
  268. *
  269. * \param [in] ticks_StreamFMAKernel The number of ticks for which kernel "StreamFMAKernel" will run.
  270. * \param [in] instream_a Stream "a".
  271. * \param [in] instream_size_a The size of the stream instream_a in bytes.
  272. * \param [in] instream_b Stream "b".
  273. * \param [in] instream_size_b The size of the stream instream_b in bytes.
  274. * \param [out] outstream_output Stream "output".
  275. * \param [in] outstream_size_output The size of the stream outstream_output in bytes.
  276. */
  277. void StreamFMA(
  278. uint64_t ticks_StreamFMAKernel,
  279. const void *instream_a,
  280. size_t instream_size_a,
  281. const void *instream_b,
  282. size_t instream_size_b,
  283. void *outstream_output,
  284. size_t outstream_size_output);
  285. /**
  286. * \brief Basic static non-blocking function for the interface 'default'.
  287. *
  288. * Schedule to run on an engine and return immediately.
  289. * The status of the run can be checked either by ::max_wait or ::max_nowait;
  290. * note that one of these *must* be called, so that associated memory can be released.
  291. *
  292. *
  293. * \param [in] ticks_StreamFMAKernel The number of ticks for which kernel "StreamFMAKernel" will run.
  294. * \param [in] instream_a Stream "a".
  295. * \param [in] instream_size_a The size of the stream instream_a in bytes.
  296. * \param [in] instream_b Stream "b".
  297. * \param [in] instream_size_b The size of the stream instream_b in bytes.
  298. * \param [out] outstream_output Stream "output".
  299. * \param [in] outstream_size_output The size of the stream outstream_output in bytes.
  300. * \return A handle on the execution status, or NULL in case of error.
  301. */
  302. max_run_t *StreamFMA_nonblock(
  303. uint64_t ticks_StreamFMAKernel,
  304. const void *instream_a,
  305. size_t instream_size_a,
  306. const void *instream_b,
  307. size_t instream_size_b,
  308. void *outstream_output,
  309. size_t outstream_size_output);
  310. /**
  311. * \brief Advanced static interface, structure for the engine interface 'default'
  312. *
  313. */
  314. typedef struct {
  315. uint64_t ticks_StreamFMAKernel; /**< [in] The number of ticks for which kernel "StreamFMAKernel" will run. */
  316. const void *instream_a; /**< [in] Stream "a". */
  317. size_t instream_size_a; /**< [in] The size of the stream instream_a in bytes. */
  318. const void *instream_b; /**< [in] Stream "b". */
  319. size_t instream_size_b; /**< [in] The size of the stream instream_b in bytes. */
  320. void *outstream_output; /**< [out] Stream "output". */
  321. size_t outstream_size_output; /**< [in] The size of the stream outstream_output in bytes. */
  322. } StreamFMA_actions_t;
  323. /**
  324. * \brief Advanced static function for the interface 'default'.
  325. *
  326. * \param [in] engine The engine on which the actions will be executed.
  327. * \param [in,out] interface_actions Actions to be executed.
  328. */
  329. void StreamFMA_run(
  330. max_engine_t *engine,
  331. StreamFMA_actions_t *interface_actions);
  332. /**
  333. * \brief Advanced static non-blocking function for the interface 'default'.
  334. *
  335. * Schedule the actions to run on the engine and return immediately.
  336. * The status of the run can be checked either by ::max_wait or ::max_nowait;
  337. * note that one of these *must* be called, so that associated memory can be released.
  338. *
  339. *
  340. * \param [in] engine The engine on which the actions will be executed.
  341. * \param [in] interface_actions Actions to be executed.
  342. * \return A handle on the execution status of the actions, or NULL in case of error.
  343. */
  344. max_run_t *StreamFMA_run_nonblock(
  345. max_engine_t *engine,
  346. StreamFMA_actions_t *interface_actions);
  347. /**
  348. * \brief Group run advanced static function for the interface 'default'.
  349. *
  350. * \param [in] group Group to use.
  351. * \param [in,out] interface_actions Actions to run.
  352. *
  353. * Run the actions on the first device available in the group.
  354. */
  355. void StreamFMA_run_group(max_group_t *group, StreamFMA_actions_t *interface_actions);
  356. /**
  357. * \brief Group run advanced static non-blocking function for the interface 'default'.
  358. *
  359. *
  360. * Schedule the actions to run on the first device available in the group and return immediately.
  361. * The status of the run must be checked with ::max_wait.
  362. * Note that use of ::max_nowait is prohibited with non-blocking running on groups:
  363. * see the ::max_run_group_nonblock documentation for more explanation.
  364. *
  365. * \param [in] group Group to use.
  366. * \param [in] interface_actions Actions to run.
  367. * \return A handle on the execution status of the actions, or NULL in case of error.
  368. */
  369. max_run_t *StreamFMA_run_group_nonblock(max_group_t *group, StreamFMA_actions_t *interface_actions);
  370. /**
  371. * \brief Array run advanced static function for the interface 'default'.
  372. *
  373. * \param [in] engarray The array of devices to use.
  374. * \param [in,out] interface_actions The array of actions to run.
  375. *
  376. * Run the array of actions on the array of engines. The length of interface_actions
  377. * must match the size of engarray.
  378. */
  379. void StreamFMA_run_array(max_engarray_t *engarray, StreamFMA_actions_t *interface_actions[]);
  380. /**
  381. * \brief Array run advanced static non-blocking function for the interface 'default'.
  382. *
  383. *
  384. * Schedule to run the array of actions on the array of engines, and return immediately.
  385. * The length of interface_actions must match the size of engarray.
  386. * The status of the run can be checked either by ::max_wait or ::max_nowait;
  387. * note that one of these *must* be called, so that associated memory can be released.
  388. *
  389. * \param [in] engarray The array of devices to use.
  390. * \param [in] interface_actions The array of actions to run.
  391. * \return A handle on the execution status of the actions, or NULL in case of error.
  392. */
  393. max_run_t *StreamFMA_run_array_nonblock(max_engarray_t *engarray, StreamFMA_actions_t *interface_actions[]);
  394. /**
  395. * \brief Converts a static-interface action struct into a dynamic-interface max_actions_t struct.
  396. *
  397. * Note that this is an internal utility function used by other functions in the static interface.
  398. *
  399. * \param [in] maxfile The maxfile to use.
  400. * \param [in] interface_actions The interface-specific actions to run.
  401. * \return The dynamic-interface actions to run, or NULL in case of error.
  402. */
  403. max_actions_t* StreamFMA_convert(max_file_t *maxfile, StreamFMA_actions_t *interface_actions);
  404. /**
  405. * \brief Initialise a maxfile.
  406. */
  407. max_file_t* StreamFMA_init(void);
  408. /* Error handling functions */
  409. int StreamFMA_has_errors(void);
  410. const char* StreamFMA_get_errors(void);
  411. void StreamFMA_clear_errors(void);
  412. /* Free statically allocated maxfile data */
  413. void StreamFMA_free(void);
  414. /* returns: -1 = error running command; 0 = no error reported */
  415. int StreamFMA_simulator_start(void);
  416. /* returns: -1 = error running command; 0 = no error reported */
  417. int StreamFMA_simulator_stop(void);
  418. #ifdef __cplusplus
  419. }
  420. #endif /* __cplusplus */
  421. #endif /* SLIC_DECLARATIONS_StreamFMA_H */
  422. #endif /* SLIC_NO_DECLARATIONS */
  423. #ifdef PHOTON_NODE_DATA
  424. #define PHOTON_NODE_DATA_PRESENT 1
  425. PHOTON_NODE_DATA(StreamFMAKernel, 8, NodeInputMappedReg, "Scalar input (io_output_force_disabled)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.output(IO.java:836)\nperfmodels.StreamFMAKernel.<init>(StreamFMAKernel.maxj:21)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  426. PHOTON_NODE_DATA(StreamFMAKernel, 9, NodeNot, "~", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.output(IO.java:836)\nperfmodels.StreamFMAKernel.<init>(StreamFMAKernel.maxj:21)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  427. PHOTON_NODE_DATA(StreamFMAKernel, 0, NodeInputMappedReg, "Scalar input (io_a_force_disabled)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.<init>(StreamFMAKernel.maxj:15)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  428. PHOTON_NODE_DATA(StreamFMAKernel, 1, NodeNot, "~", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.<init>(StreamFMAKernel.maxj:15)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  429. PHOTON_NODE_DATA(StreamFMAKernel, 2, NodeInput, "Input(a)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.<init>(StreamFMAKernel.maxj:15)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  430. PHOTON_NODE_DATA(StreamFMAKernel, 3, NodeInputMappedReg, "Scalar input (io_b_force_disabled)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.<init>(StreamFMAKernel.maxj:16)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  431. PHOTON_NODE_DATA(StreamFMAKernel, 4, NodeNot, "~", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.<init>(StreamFMAKernel.maxj:16)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  432. PHOTON_NODE_DATA(StreamFMAKernel, 5, NodeInput, "Input(b)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.<init>(StreamFMAKernel.maxj:16)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  433. PHOTON_NODE_DATA(StreamFMAKernel, 6, NodeAdd, "+", "com.maxeler.maxcompiler.v2.kernelcompiler.types.base.DFEVar.add(DFEVar.java:1010)\nperfmodels.StreamFMAKernel.<init>(StreamFMAKernel.maxj:19)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  434. PHOTON_NODE_DATA(StreamFMAKernel, 11, NodeOutput, "Output(output)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.output(IO.java:836)\nperfmodels.StreamFMAKernel.<init>(StreamFMAKernel.maxj:21)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  435. PHOTON_NODE_DATA(StreamFMAKernel, 16, NodeConstantRawBits, "{HWOffsetFix:1, 0, UNSIGNED}\n0x1; 1.0", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  436. PHOTON_NODE_DATA(StreamFMAKernel, 26, NodeConstantRawBits, "{HWOffsetFix:1, 0, UNSIGNED}\n0x1; 1.0", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  437. PHOTON_NODE_DATA(StreamFMAKernel, 13, NodeConstantRawBits, "{HWOffsetFix:49, 0, UNSIGNED}\n0x1000000000000; 2.81474976710656E14", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  438. PHOTON_NODE_DATA(StreamFMAKernel, 14, NodeCounter, "Counter(NUMERIC_INCREMENTING)\nInc: 1\nReset: 0\nInit: 0", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  439. PHOTON_NODE_DATA(StreamFMAKernel, 15, NodeStreamOffset, "stream offset: 1", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  440. PHOTON_NODE_DATA(StreamFMAKernel, 17, NodeOutputMappedReg, "Scalar output (current_run_cycle_count)", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  441. PHOTON_NODE_DATA(StreamFMAKernel, 25, NodeConstantRawBits, "{HWOffsetFix:1, 0, UNSIGNED}\n0x1; 1.0", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  442. PHOTON_NODE_DATA(StreamFMAKernel, 19, NodeConstantRawBits, "{HWOffsetFix:49, 0, UNSIGNED}\n0x1000000000000; 2.81474976710656E14", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  443. PHOTON_NODE_DATA(StreamFMAKernel, 20, NodeCounter, "Counter(NUMERIC_INCREMENTING)\nInc: 1\nReset: 0\nInit: 0", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  444. PHOTON_NODE_DATA(StreamFMAKernel, 22, NodeInputMappedReg, "Scalar input (run_cycle_count)", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  445. PHOTON_NODE_DATA(StreamFMAKernel, 24, NodeEqInlined, "==", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  446. PHOTON_NODE_DATA(StreamFMAKernel, 21, NodeFlush, "flush on trigger", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.<init>(StreamFMAManager.maxj:13)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:20)\n")
  447. #endif
  448. #ifdef SLIC_USE_DEFINITIONS
  449. #include <stdio.h>
  450. #include <math.h>
  451. #include <pthread.h>
  452. #include <string.h>
  453. #include <unistd.h>
  454. #include <stdlib.h>
  455. static max_file_t *stored_maxfile = NULL;
  456. static max_engine_t *stored_engine = NULL;
  457. static char *stored_error = NULL;
  458. static int stored_has_error = 0;
  459. static pthread_once_t slic_bs_is_initialised = PTHREAD_ONCE_INIT;
  460. static void set_error(const char *error_str)
  461. {
  462. stored_has_error = 1;
  463. if(stored_error == NULL) {
  464. stored_error = strdup(error_str);
  465. } else {
  466. char *nerr = malloc(strlen(stored_error) + strlen(error_str) + 2);
  467. sprintf(nerr, "%s\n%s", stored_error, error_str);
  468. free(stored_error);
  469. stored_error = nerr;
  470. }
  471. }
  472. static void set_error_and_free(char *error_str){
  473. set_error(error_str);
  474. free(error_str);
  475. }
  476. int StreamFMA_has_errors(void)
  477. { return stored_has_error; }
  478. const char* StreamFMA_get_errors(void)
  479. { return stored_error; }
  480. void StreamFMA_clear_errors(void)
  481. {
  482. free(stored_error);
  483. stored_error = NULL;
  484. stored_has_error = 0;
  485. }
  486. static char StreamFMA_use_simulation[16];
  487. static void StreamFMA_def_use_simulation(void)
  488. {
  489. long pid = ((long) getpid()) % 100000;
  490. snprintf(StreamFMA_use_simulation, 16, "StreamFM_%05ld_", pid);
  491. }
  492. static const char *StreamFMA_check_use_simulation(void)
  493. {
  494. StreamFMA_def_use_simulation();
  495. const char *use_sim = max_config_get_string(MAX_CONFIG_USE_SIMULATION);
  496. if (use_sim == NULL) {
  497. use_sim = StreamFMA_use_simulation;
  498. max_config_set_string(MAX_CONFIG_USE_SIMULATION, use_sim);
  499. }
  500. return use_sim;
  501. }
  502. static int StreamFMA_simulation_launch = 0;
  503. int StreamFMA_simulator_start(void)
  504. {
  505. int retval = 0;
  506. const char *use_sim = StreamFMA_check_use_simulation();
  507. char buff[1024];
  508. snprintf(buff, 1024, "PATH=simutils:$PATH maxcompilersim -d 1 -n %s -c MAX5C -S simutils restart", use_sim);
  509. FILE *pipe_fp = popen(buff, "r");
  510. if (pipe_fp == NULL) {
  511. strncat(buff, " : failed to execute.", (1024 - strlen(buff)));
  512. set_error(buff);
  513. return -1;
  514. }
  515. while (fgets(buff, 1024, pipe_fp) != NULL) {
  516. /* Uncomment this to get simulator command output */
  517. /* fprintf(stderr, buff); */
  518. if (strstr(buff, "Error")) {
  519. set_error(buff);
  520. retval = -1;
  521. }
  522. }
  523. pclose(pipe_fp);
  524. return retval;
  525. }
  526. int StreamFMA_simulator_stop(void)
  527. {
  528. const char *use_sim = StreamFMA_check_use_simulation();
  529. char buff[1024];
  530. snprintf(buff, 1024, "PATH=simutils:$PATH maxcompilersim -d 1 -n %s -c MAX5C -S simutils stop", use_sim);
  531. FILE *pipe_fp = popen(buff, "r");
  532. if (pipe_fp == NULL) {
  533. strncat(buff, " : failed to execute.", (1024 - strlen(buff)));
  534. set_error(buff);
  535. return -1;
  536. }
  537. while (fgets(buff, 1024, pipe_fp) != NULL) {
  538. /* Uncomment this to get simulator command output */
  539. /* fprintf(stderr, buff); */
  540. ;
  541. }
  542. pclose(pipe_fp);
  543. return 0;
  544. }
  545. static void StreamFMA_static_init(void)
  546. {
  547. stored_maxfile = StreamFMA_init();
  548. if (stored_maxfile == NULL || !max_ok(stored_maxfile->errors)) {
  549. stored_maxfile = NULL;
  550. if(max_config_get_bool(MAX_CONFIG_STATIC_INTERFACE_ABORT_ON_ERROR)) abort();
  551. else { set_error("Unable to load maxfile"); return; }
  552. }
  553. if(!max_ok(max_global_errors())) {
  554. set_error_and_free(max_errors_trace(max_global_errors()));
  555. return;
  556. }
  557. if(!max_config_get_bool(MAX_CONFIG_STATIC_INTERFACE_ABORT_ON_ERROR))
  558. max_errors_mode(stored_maxfile->errors, 0);
  559. time_t timeout_previous = max_load_timeout(stored_maxfile, 30);
  560. const char *use_sim = StreamFMA_check_use_simulation();
  561. if (max_ping_daemon(stored_maxfile, use_sim) == 0) {
  562. int sim_stat = StreamFMA_simulator_start();
  563. if ((sim_stat == 0) && (max_ping_daemon(stored_maxfile, use_sim) == 1)) {
  564. StreamFMA_simulation_launch = 1;
  565. } else {
  566. set_error("Error: An error occurred while trying to start the simulation infrastructure automatically.");
  567. set_error("Error: Check that 'use_simulation=<simulator_name>' is set correctly in your SLiC configuration");
  568. set_error("Error: and that the associated simulated system daemon is running.");
  569. max_file_free(stored_maxfile);
  570. stored_maxfile = NULL;
  571. return;
  572. }
  573. }
  574. stored_engine = max_load(stored_maxfile, "*");
  575. if (!max_ok(stored_maxfile->errors)) {
  576. if(max_config_get_bool(MAX_CONFIG_STATIC_INTERFACE_ABORT_ON_ERROR)) {
  577. fprintf(stderr, "\nUnable to load engine: aborting now.\n\n");
  578. fflush(stderr);
  579. abort();
  580. } else {
  581. set_error_and_free(max_errors_trace(stored_maxfile->errors));
  582. max_file_free(stored_maxfile);
  583. stored_maxfile = NULL;
  584. return;
  585. }
  586. }
  587. max_load_timeout(stored_maxfile, timeout_previous);
  588. }
  589. void StreamFMA_free(void)
  590. {
  591. if (stored_engine != NULL) {
  592. max_unload(stored_engine);
  593. stored_engine = NULL;
  594. }
  595. if (stored_maxfile != NULL) {
  596. max_file_free(stored_maxfile);
  597. stored_maxfile = NULL;
  598. }
  599. if (stored_error != NULL) {
  600. free(stored_error);
  601. stored_error = NULL;
  602. }
  603. if (StreamFMA_simulation_launch == 1) {
  604. int sim_stat = StreamFMA_simulator_stop();
  605. if (sim_stat != 0 ) {
  606. fprintf(stderr, "Error stopping simulator.");
  607. }
  608. StreamFMA_simulation_launch = 0;
  609. }
  610. }
  611. static int StreamFMA_get_pcie_alignment(void)
  612. {
  613. #ifdef StreamFMA_PCIE_ALIGNMENT
  614. return ((StreamFMA_PCIE_ALIGNMENT < 1) ? 16 : StreamFMA_PCIE_ALIGNMENT);
  615. #else
  616. return 16;
  617. #endif
  618. }
  619. static int StreamFMA_check_aligned(const void *data)
  620. {
  621. uintptr_t pointer = (uintptr_t) data;
  622. int alignment = StreamFMA_get_pcie_alignment();
  623. return (pointer % alignment) ? 1 : 0;
  624. }
  625. static void *StreamFMA_malloc_aligned(const size_t size)
  626. {
  627. void *ptr;
  628. int alignment = StreamFMA_get_pcie_alignment();
  629. posix_memalign(&ptr, alignment, size);
  630. return ptr;
  631. }
  632. /*----------------------------------------------------------------------------*/
  633. /*---------------------------- Interface default -----------------------------*/
  634. /*----------------------------------------------------------------------------*/
  635. #define CHECK_ERRORS_ST(ST, RET) if(!max_ok(ST->errors)) { if(max_config_get_bool(MAX_CONFIG_STATIC_INTERFACE_ABORT_ON_ERROR)) { fprintf(stderr, "%s\n", max_errors_trace(ST->errors)); abort(); } set_error_and_free(max_errors_trace(ST->errors)); return RET; }
  636. #define CHECK_NULL(VALUE, MESSAGE, RET) if(VALUE == NULL) { if (max_config_get_bool(MAX_CONFIG_STATIC_INTERFACE_ABORT_ON_ERROR)) { fprintf(stderr, "%s\n%s\n", (stored_error == NULL) ? "" : stored_error, MESSAGE); abort(); } set_error(MESSAGE); return RET; }
  637. typedef struct StreamFMA_callback_stream {
  638. uint8_t *user_ptr;
  639. uint8_t *aligned_ptr;
  640. size_t size;
  641. int is_output;
  642. } StreamFMA_callback_stream_t;
  643. typedef struct StreamFMA_callback_data {
  644. StreamFMA_callback_stream_t stream[3];
  645. int count;
  646. int max_count;
  647. } StreamFMA_callback_data_t;
  648. static void StreamFMA_callback_internal(void *cb_data)
  649. {
  650. StreamFMA_callback_data_t *data = (StreamFMA_callback_data_t*) cb_data;
  651. for (int i = 0 ; i < data->count ; i++ ) {
  652. StreamFMA_callback_stream_t *s = &data->stream[i];
  653. if (s->is_output && (s->size > 0)) {
  654. memcpy(s->user_ptr, s->aligned_ptr, s->size);
  655. }
  656. free(s->aligned_ptr);
  657. }
  658. free(data);
  659. }
  660. static max_actions_t* StreamFMA_convert_internal(
  661. max_file_t *maxfile,
  662. StreamFMA_actions_t *interface_actions,
  663. int is_internal_call,
  664. void (**callback_func)(void*),
  665. void **callback_data)
  666. {
  667. max_actions_t *actions = max_actions_init(maxfile, NULL);
  668. if(actions == NULL) return NULL;
  669. #define CHECK_ERRORS if(!max_ok(actions->errors)) { set_error_and_free(max_errors_trace(actions->errors)); return NULL; }
  670. StreamFMA_callback_data_t *cb_data = NULL;
  671. int use_callback = (callback_func != NULL) && (callback_data != NULL);
  672. if (use_callback) {
  673. cb_data = malloc(sizeof(StreamFMA_callback_data_t));
  674. if (cb_data == NULL) {
  675. fprintf(stderr, "Unable to allocate memory for stream callback data in function StreamFMA_convert_internal\n");
  676. return NULL;
  677. }
  678. cb_data->max_count = 3;
  679. cb_data->count = 0;
  680. *callback_data = cb_data;
  681. *callback_func = &StreamFMA_callback_internal;
  682. }
  683. /* code for scalar StreamFMAKernel.run_cycle_count */
  684. uint64_t ticks_StreamFMAKernel = interface_actions->ticks_StreamFMAKernel;
  685. max_set_ticks(actions, "StreamFMAKernel", ticks_StreamFMAKernel);
  686. CHECK_ERRORS;
  687. /* end of code for scalar StreamFMAKernel.run_cycle_count*/
  688. /* code for stream a */
  689. size_t instream_size_a = interface_actions->instream_size_a;
  690. if (instream_size_a > 0) {
  691. const void *stream_ptr = interface_actions->instream_a;
  692. if (use_callback && (1 == StreamFMA_check_aligned(interface_actions->instream_a))) {
  693. void *aligned_instream_a = malloc(instream_size_a);
  694. if (aligned_instream_a == NULL) {
  695. max_report_error_slic(actions->errors, __FILE__, __LINE__, 526, "Failed to allocate aligned memory for stream 'a'");
  696. CHECK_ERRORS;
  697. }
  698. (&cb_data->stream[cb_data->count])->user_ptr = (uint8_t*) interface_actions->instream_a;
  699. (&cb_data->stream[cb_data->count])->aligned_ptr = (uint8_t*) aligned_instream_a;
  700. (&cb_data->stream[cb_data->count])->size = instream_size_a;
  701. (&cb_data->stream[cb_data->count])->is_output = 0;
  702. cb_data->count += 1;
  703. memcpy(aligned_instream_a, interface_actions->instream_a, instream_size_a);
  704. stream_ptr = aligned_instream_a;
  705. }
  706. max_queue_input(actions, "a", stream_ptr, instream_size_a);
  707. CHECK_ERRORS;
  708. }
  709. /* end of code for stream a */
  710. /* code for stream b */
  711. size_t instream_size_b = interface_actions->instream_size_b;
  712. if (instream_size_b > 0) {
  713. const void *stream_ptr = interface_actions->instream_b;
  714. if (use_callback && (1 == StreamFMA_check_aligned(interface_actions->instream_b))) {
  715. void *aligned_instream_b = malloc(instream_size_b);
  716. if (aligned_instream_b == NULL) {
  717. max_report_error_slic(actions->errors, __FILE__, __LINE__, 526, "Failed to allocate aligned memory for stream 'b'");
  718. CHECK_ERRORS;
  719. }
  720. (&cb_data->stream[cb_data->count])->user_ptr = (uint8_t*) interface_actions->instream_b;
  721. (&cb_data->stream[cb_data->count])->aligned_ptr = (uint8_t*) aligned_instream_b;
  722. (&cb_data->stream[cb_data->count])->size = instream_size_b;
  723. (&cb_data->stream[cb_data->count])->is_output = 0;
  724. cb_data->count += 1;
  725. memcpy(aligned_instream_b, interface_actions->instream_b, instream_size_b);
  726. stream_ptr = aligned_instream_b;
  727. }
  728. max_queue_input(actions, "b", stream_ptr, instream_size_b);
  729. CHECK_ERRORS;
  730. }
  731. /* end of code for stream b */
  732. /* code for stream output */
  733. size_t outstream_size_output = interface_actions->outstream_size_output;
  734. if (outstream_size_output > 0) {
  735. void *stream_ptr = interface_actions->outstream_output;
  736. if (use_callback && (1 == StreamFMA_check_aligned(interface_actions->outstream_output))) {
  737. void *aligned_outstream_output = malloc(outstream_size_output);
  738. if (aligned_outstream_output == NULL) {
  739. max_report_error_slic(actions->errors, __FILE__, __LINE__, 526, "Failed to allocate aligned memory for stream 'output'");
  740. CHECK_ERRORS;
  741. }
  742. (&cb_data->stream[cb_data->count])->user_ptr = (uint8_t*) interface_actions->outstream_output;
  743. (&cb_data->stream[cb_data->count])->aligned_ptr = (uint8_t*) aligned_outstream_output;
  744. (&cb_data->stream[cb_data->count])->size = outstream_size_output;
  745. (&cb_data->stream[cb_data->count])->is_output = 1;
  746. cb_data->count += 1;
  747. stream_ptr = aligned_outstream_output;
  748. }
  749. max_queue_output(actions, "output", stream_ptr, outstream_size_output);
  750. CHECK_ERRORS;
  751. }
  752. /* end of code for stream output */
  753. if (use_callback && cb_data->count == 0) {
  754. *callback_data = NULL;
  755. *callback_func = NULL;
  756. free(cb_data);
  757. }
  758. return actions;
  759. #undef CHECK_ERRORS
  760. }
  761. void StreamFMA(
  762. uint64_t ticks_StreamFMAKernel,
  763. const void *instream_a,
  764. size_t instream_size_a,
  765. const void *instream_b,
  766. size_t instream_size_b,
  767. void *outstream_output,
  768. size_t outstream_size_output)
  769. {
  770. (void) pthread_once(&slic_bs_is_initialised, StreamFMA_static_init);
  771. CHECK_NULL(stored_maxfile, "Maxfile was not loaded", );
  772. max_run_t *run = StreamFMA_nonblock(ticks_StreamFMAKernel, instream_a, instream_size_a, instream_b, instream_size_b, outstream_output, outstream_size_output);
  773. CHECK_NULL(run, "Unable to run actions", );
  774. max_wait(run);
  775. }
  776. max_run_t *StreamFMA_nonblock(
  777. uint64_t ticks_StreamFMAKernel,
  778. const void *instream_a,
  779. size_t instream_size_a,
  780. const void *instream_b,
  781. size_t instream_size_b,
  782. void *outstream_output,
  783. size_t outstream_size_output)
  784. {
  785. StreamFMA_actions_t interface_actions;
  786. interface_actions.ticks_StreamFMAKernel = ticks_StreamFMAKernel;
  787. interface_actions.instream_a = instream_a;
  788. interface_actions.instream_size_a = instream_size_a;
  789. interface_actions.instream_b = instream_b;
  790. interface_actions.instream_size_b = instream_size_b;
  791. interface_actions.outstream_output = outstream_output;
  792. interface_actions.outstream_size_output = outstream_size_output;
  793. (void) pthread_once(&slic_bs_is_initialised, StreamFMA_static_init);
  794. CHECK_NULL(stored_maxfile, "Maxfile was not loaded", NULL);
  795. void (*cb_func)(void*) = NULL;
  796. void *cb_data = NULL;
  797. max_actions_t *actions = StreamFMA_convert_internal(stored_maxfile, &interface_actions, 1, &cb_func, &cb_data);
  798. CHECK_NULL(actions, "Unable to build actions", NULL);
  799. max_validate(actions);
  800. CHECK_ERRORS_ST(actions, NULL);
  801. CHECK_ERRORS_ST(stored_engine, NULL);
  802. max_run_t *run;
  803. if (cb_func == NULL) {
  804. run = max_run_nonblock(stored_engine, actions);
  805. } else {
  806. run = max_run_nonblock_with_cb(stored_engine, actions, cb_func, cb_data);
  807. }
  808. CHECK_NULL(run, "Unable to run actions", NULL);
  809. CHECK_ERRORS_ST(actions, NULL);
  810. max_actions_free(actions);
  811. return run;
  812. }
  813. void StreamFMA_run(
  814. max_engine_t *engine,
  815. StreamFMA_actions_t *interface_actions)
  816. {
  817. max_run_t *run = StreamFMA_run_nonblock(engine, interface_actions);
  818. CHECK_NULL(run, "Unable to run actions", );
  819. max_wait(run);
  820. }
  821. max_run_t *StreamFMA_run_nonblock(
  822. max_engine_t *engine,
  823. StreamFMA_actions_t *interface_actions)
  824. {
  825. max_file_t *maxfile = max_engine_get_max_file(engine);
  826. void (*cb_func)(void*) = NULL;
  827. void *cb_data = NULL;
  828. max_actions_t *actions = StreamFMA_convert_internal(maxfile, interface_actions, 1, &cb_func, &cb_data);
  829. CHECK_NULL(actions, "Unable to build actions", NULL);
  830. max_validate(actions);
  831. CHECK_ERRORS_ST(actions, NULL);
  832. max_run_t *run;
  833. if (cb_func == NULL) {
  834. run = max_run_nonblock(engine, actions);
  835. } else {
  836. run = max_run_nonblock_with_cb(engine, actions, cb_func, cb_data);
  837. }
  838. CHECK_NULL(run, "Unable to run actions", NULL);
  839. max_actions_free(actions);
  840. return run;
  841. }
  842. /**
  843. * \brief Group run advanced static function for the interface 'default'.
  844. *
  845. * \param [in] group Group to use.
  846. * \param [in,out] interface_actions Actions to run.
  847. *
  848. * Run the actions on the first device available in the group.
  849. */
  850. void StreamFMA_run_group(max_group_t *group, StreamFMA_actions_t *interface_actions)
  851. {
  852. max_run_t *run = StreamFMA_run_group_nonblock(group, interface_actions);
  853. CHECK_NULL(run, "Unable to run actions", );
  854. max_wait(run);
  855. }
  856. /**
  857. * \brief Group run advanced static non-blocking function for the interface 'default'.
  858. *
  859. *
  860. * Schedule the actions to run on the first device available in the group and return immediately.
  861. * The status of the run must be checked with ::max_wait.
  862. * Note that use of ::max_nowait is prohibited with non-blocking running on groups:
  863. * see the ::max_run_group_nonblock documentation for more explanation.
  864. *
  865. * \param [in] group Group to use.
  866. * \param [in] interface_actions Actions to run.
  867. * \return A handle on the execution status of the actions, or NULL in case of error.
  868. */
  869. max_run_t *StreamFMA_run_group_nonblock(max_group_t *group, StreamFMA_actions_t *interface_actions)
  870. {
  871. max_file_t *maxfile = max_group_get_max_file(group);
  872. max_actions_t *actions = StreamFMA_convert_internal(maxfile, interface_actions, 1, NULL, NULL);
  873. if(actions == NULL) return NULL;
  874. if(!max_ok(actions->errors)) return NULL;
  875. max_validate(actions);
  876. max_run_t *run = max_run_group_nonblock(group, actions);
  877. max_actions_free(actions);
  878. return run;
  879. }
  880. /**
  881. * \brief Array run advanced static function for the interface 'default'.
  882. *
  883. * \param [in] engarray The array of devices to use.
  884. * \param [in,out] interface_actions The array of actions to run.
  885. *
  886. * Run the array of actions on the array of engines. The length of interface_actions
  887. * must match the size of engarray.
  888. */
  889. void StreamFMA_run_array(max_engarray_t *engarray, StreamFMA_actions_t *interface_actions[])
  890. {
  891. max_run_t *run = StreamFMA_run_array_nonblock(engarray, interface_actions);
  892. CHECK_NULL(run, "Unable to run actions", );
  893. max_wait(run);
  894. }
  895. /**
  896. * \brief Array run advanced static non-blocking function for the interface 'default'.
  897. *
  898. *
  899. * Schedule to run the array of actions on the array of engines, and return immediately.
  900. * The length of interface_actions must match the size of engarray.
  901. * The status of the run can be checked either by ::max_wait or ::max_nowait;
  902. * note that one of these *must* be called, so that associated memory can be released.
  903. *
  904. * \param [in] engarray The array of devices to use.
  905. * \param [in] interface_actions The array of actions to run.
  906. * \return A handle on the execution status of the actions, or NULL in case of error.
  907. */
  908. max_run_t *StreamFMA_run_array_nonblock(max_engarray_t *engarray, StreamFMA_actions_t *interface_actions[])
  909. {
  910. max_file_t *maxfile = max_engarray_get_max_file(engarray, 0);
  911. int i;
  912. max_actarray_t *actarray = max_actarray_init(maxfile, engarray->size);
  913. if (actarray == NULL) return NULL;
  914. max_actions_t **arr_actions = malloc(engarray->size * sizeof(max_actions_t*));
  915. for ( i = 0 ; i < actarray->size; i++ ) {
  916. max_actions_t *actions = StreamFMA_convert_internal(maxfile, interface_actions[i], 1, NULL, NULL);
  917. if (actions == NULL) return NULL;
  918. arr_actions[i] = actions;
  919. max_set_action(actarray, i, actions);
  920. }
  921. max_run_t *run = max_run_array_nonblock(engarray, actarray);
  922. for ( i = 0 ; i < actarray->size ; i++ ) { max_actions_free(arr_actions[i]); }
  923. max_actarray_free(actarray);
  924. free(arr_actions);
  925. return run;
  926. }
  927. /**
  928. * \brief Converts a static-interface action struct into a dynamic-interface max_actions_t struct.
  929. *
  930. * Note that this is an internal utility function used by other functions in the static interface.
  931. *
  932. * \param [in] maxfile The maxfile to use.
  933. * \param [in] interface_actions The interface-specific actions to run.
  934. * \return The dynamic-interface actions to run, or NULL in case of error.
  935. */
  936. max_actions_t* StreamFMA_convert(max_file_t *maxfile, StreamFMA_actions_t *interface_actions)
  937. {
  938. return StreamFMA_convert_internal(maxfile, interface_actions, 0, NULL, NULL);
  939. }
  940. #undef CHECK_ERRORS_ST
  941. #undef CHECK_NULL
  942. #endif /* SLIC_USE_DEFINITIONS */
  943. #ifdef SLIC_DYNAMIC_CODE
  944. SLIC_MODE_START(default)
  945. SLIC_MODE_END(default)
  946. #endif /* SLIC_DYNAMIC_CODE */
  947. #ifdef SKIN_META_DATA
  948. PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PG1h
  949. eGZpbGUgZm9ybWF0LXZlcnNpb249IjIwMTIwMjAwIiBoZWFkZXI9IlN0cmVhbUZNQS5oIiBuYW1l
  950. PSJTdHJlYW1GTUEiPjxjb25zdGFudCBuYW1lPSJEWU5BTUlDX0NMT0NLU19FTkFCTEVEIiB0eXBl
  951. PSJsb25nIiB2YWx1ZT0iMCIvPjxjb25zdGFudCBuYW1lPSJQQ0lFX0FMSUdOTUVOVCIgdHlwZT0i
  952. bG9uZyIgdmFsdWU9IjE2Ii8+PGVuZ2luZW1vZGUgbmFtZT0iZGVmYXVsdCI+PGZ1bmN0aW9uIG5h
  953. bWU9IlN0cmVhbUZNQSIgcmV0dXJuLXZhbHVlPSJ2b2lkIj48c2NhbGFyIGRlc2M9IlRoZSBudW1i
  954. ZXIgb2YgdGlja3MgZm9yIHdoaWNoIGtlcm5lbCAmcXVvdDtTdHJlYW1GTUFLZXJuZWwmcXVvdDsg
  955. d2lsbCBydW4uIiBkaXJlY3Rpb249IklucHV0IiBuYW1lPSJ0aWNrc19TdHJlYW1GTUFLZXJuZWwi
  956. IHR5cGU9InVpbnQ2NF90Ii8+PGFycmF5IGRlc2M9IlN0cmVhbSAmcXVvdDthJnF1b3Q7LiIgZGly
  957. ZWN0aW9uPSJJbnB1dCIgbmFtZT0iaW5zdHJlYW1fYSIgc2l6ZT0iaW5zdHJlYW1fc2l6ZV9hIiB0
  958. cmFuc3Bvc2U9ImZhbHNlIiB0eXBlPSJ2b2lkIi8+PHNjYWxhciBkZXNjPSJUaGUgc2l6ZSBvZiB0
  959. aGUgc3RyZWFtIGluc3RyZWFtX2EgaW4gYnl0ZXMuIiBkaXJlY3Rpb249IklucHV0IiBuYW1lPSJp
  960. bnN0cmVhbV9zaXplX2EiIHR5cGU9InVpbnQ2NF90Ii8+PGFycmF5IGRlc2M9IlN0cmVhbSAmcXVv
  961. dDtiJnF1b3Q7LiIgZGlyZWN0aW9uPSJJbnB1dCIgbmFtZT0iaW5zdHJlYW1fYiIgc2l6ZT0iaW5z
  962. dHJlYW1fc2l6ZV9iIiB0cmFuc3Bvc2U9ImZhbHNlIiB0eXBlPSJ2b2lkIi8+PHNjYWxhciBkZXNj
  963. PSJUaGUgc2l6ZSBvZiB0aGUgc3RyZWFtIGluc3RyZWFtX2IgaW4gYnl0ZXMuIiBkaXJlY3Rpb249
  964. IklucHV0IiBuYW1lPSJpbnN0cmVhbV9zaXplX2IiIHR5cGU9InVpbnQ2NF90Ii8+PGFycmF5IGRl
  965. c2M9IlN0cmVhbSAmcXVvdDtvdXRwdXQmcXVvdDsuIiBkaXJlY3Rpb249Ik91dHB1dCIgbmFtZT0i
  966. b3V0c3RyZWFtX291dHB1dCIgc2l6ZT0ib3V0c3RyZWFtX3NpemVfb3V0cHV0IiB0cmFuc3Bvc2U9
  967. ImZhbHNlIiB0eXBlPSJ2b2lkIi8+PHNjYWxhciBkZXNjPSJUaGUgc2l6ZSBvZiB0aGUgc3RyZWFt
  968. IG91dHN0cmVhbV9vdXRwdXQgaW4gYnl0ZXMuIiBkaXJlY3Rpb249IklucHV0IiBuYW1lPSJvdXRz
  969. dHJlYW1fc2l6ZV9vdXRwdXQiIHR5cGU9InVpbnQ2NF90Ii8+PC9mdW5jdGlvbj48L2VuZ2luZW1v
  970. ZGU+PC9tYXhmaWxlPg==
  971. #endif /* SKIN_META_DATA */
  972. #ifdef SLIC_B64_DEFINITIONS
  973. I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxwdGhyZWFkLmg+
  974. CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3RkbGli
  975. Lmg+CnN0YXRpYyBtYXhfZmlsZV90ICpzdG9yZWRfbWF4ZmlsZSA9IE5VTEw7CnN0YXRpYyBtYXhf
  976. ZW5naW5lX3QgKnN0b3JlZF9lbmdpbmUgPSBOVUxMOwpzdGF0aWMgY2hhciAqc3RvcmVkX2Vycm9y
  977. ID0gTlVMTDsKc3RhdGljIGludCBzdG9yZWRfaGFzX2Vycm9yID0gMDsKc3RhdGljIHB0aHJlYWRf
  978. b25jZV90IHNsaWNfYnNfaXNfaW5pdGlhbGlzZWQgPSBQVEhSRUFEX09OQ0VfSU5JVDsKCnN0YXRp
  979. YyB2b2lkIHNldF9lcnJvcihjb25zdCBjaGFyICplcnJvcl9zdHIpCnsKCXN0b3JlZF9oYXNfZXJy
  980. b3IgPSAxOyAKCWlmKHN0b3JlZF9lcnJvciA9PSBOVUxMKSB7CgkJc3RvcmVkX2Vycm9yID0gc3Ry
  981. ZHVwKGVycm9yX3N0cik7Cgl9IGVsc2UgewoJCWNoYXIgKm5lcnIgPSBtYWxsb2Moc3RybGVuKHN0
  982. b3JlZF9lcnJvcikgKyBzdHJsZW4oZXJyb3Jfc3RyKSArIDIpOwoJCXNwcmludGYobmVyciwgIiVz
  983. XG4lcyIsIHN0b3JlZF9lcnJvciwgZXJyb3Jfc3RyKTsKCQlmcmVlKHN0b3JlZF9lcnJvcik7CgkJ
  984. c3RvcmVkX2Vycm9yID0gbmVycjsKCX0KfQpzdGF0aWMgdm9pZCBzZXRfZXJyb3JfYW5kX2ZyZWUo
  985. Y2hhciAqZXJyb3Jfc3RyKXsKCXNldF9lcnJvcihlcnJvcl9zdHIpOwoJZnJlZShlcnJvcl9zdHIp
  986. Owp9CmludCBTdHJlYW1GTUFfaGFzX2Vycm9ycyh2b2lkKQp7CXJldHVybiBzdG9yZWRfaGFzX2Vy
  987. cm9yOyB9CmNvbnN0IGNoYXIqIFN0cmVhbUZNQV9nZXRfZXJyb3JzKHZvaWQpCnsJcmV0dXJuIHN0
  988. b3JlZF9lcnJvcjsgfQp2b2lkIFN0cmVhbUZNQV9jbGVhcl9lcnJvcnModm9pZCkKewoJZnJlZShz
  989. dG9yZWRfZXJyb3IpOwoJc3RvcmVkX2Vycm9yID0gTlVMTDsKCXN0b3JlZF9oYXNfZXJyb3IgPSAw
  990. Owp9CgpzdGF0aWMgY2hhciBTdHJlYW1GTUFfdXNlX3NpbXVsYXRpb25bMTZdOwpzdGF0aWMgdm9p
  991. ZCBTdHJlYW1GTUFfZGVmX3VzZV9zaW11bGF0aW9uKHZvaWQpCnsKCWxvbmcgcGlkID0gKChsb25n
  992. KSBnZXRwaWQoKSkgJSAxMDAwMDA7CglzbnByaW50ZihTdHJlYW1GTUFfdXNlX3NpbXVsYXRpb24s
  993. IDE2LCAiU3RyZWFtRk1fJTA1bGRfIiwgcGlkKTsKfQpzdGF0aWMgY29uc3QgY2hhciAqU3RyZWFt
  994. Rk1BX2NoZWNrX3VzZV9zaW11bGF0aW9uKHZvaWQpCnsKCVN0cmVhbUZNQV9kZWZfdXNlX3NpbXVs
  995. YXRpb24oKTsKCWNvbnN0IGNoYXIgKnVzZV9zaW0gPSBtYXhfY29uZmlnX2dldF9zdHJpbmcoTUFY
  996. X0NPTkZJR19VU0VfU0lNVUxBVElPTik7CglpZiAodXNlX3NpbSA9PSBOVUxMKSB7CgkJdXNlX3Np
  997. bSA9IFN0cmVhbUZNQV91c2Vfc2ltdWxhdGlvbjsKCQltYXhfY29uZmlnX3NldF9zdHJpbmcoTUFY
  998. X0NPTkZJR19VU0VfU0lNVUxBVElPTiwgdXNlX3NpbSk7Cgl9CglyZXR1cm4gdXNlX3NpbTsKfQoK
  999. c3RhdGljIGludCBTdHJlYW1GTUFfc2ltdWxhdGlvbl9sYXVuY2ggPSAwOwppbnQgU3RyZWFtRk1B
  1000. X3NpbXVsYXRvcl9zdGFydCh2b2lkKQp7CglpbnQgcmV0dmFsID0gMDsKCWNvbnN0IGNoYXIgKnVz
  1001. ZV9zaW0gPSBTdHJlYW1GTUFfY2hlY2tfdXNlX3NpbXVsYXRpb24oKTsKCWNoYXIgYnVmZlsxMDI0
  1002. XTsKCXNucHJpbnRmKGJ1ZmYsIDEwMjQsICJQQVRIPXNpbXV0aWxzOiRQQVRIIG1heGNvbXBpbGVy
  1003. c2ltIC1kIDEgLW4gJXMgLWMgTUFYNUMgLVMgc2ltdXRpbHMgcmVzdGFydCIsIHVzZV9zaW0pOwoJ
  1004. RklMRSAqcGlwZV9mcCA9IHBvcGVuKGJ1ZmYsICJyIik7CglpZiAocGlwZV9mcCA9PSBOVUxMKSB7
  1005. CgkJc3RybmNhdChidWZmLCAiIDogZmFpbGVkIHRvIGV4ZWN1dGUuIiwgKDEwMjQgLSBzdHJsZW4o
  1006. YnVmZikpKTsKCQlzZXRfZXJyb3IoYnVmZik7CgkJcmV0dXJuIC0xOwoJfQoJd2hpbGUgKGZnZXRz
  1007. KGJ1ZmYsIDEwMjQsIHBpcGVfZnApICE9IE5VTEwpIHsKCQkvKiBVbmNvbW1lbnQgdGhpcyB0byBn
  1008. ZXQgc2ltdWxhdG9yIGNvbW1hbmQgb3V0cHV0ICovCgkJLyogZnByaW50ZihzdGRlcnIsIGJ1ZmYp
  1009. OyAqLwoJCWlmIChzdHJzdHIoYnVmZiwgIkVycm9yIikpIHsKCQkJc2V0X2Vycm9yKGJ1ZmYpOwoJ
  1010. CQlyZXR2YWwgPSAtMTsKCQl9Cgl9CglwY2xvc2UocGlwZV9mcCk7CglyZXR1cm4gcmV0dmFsOwp9
  1011. CgppbnQgU3RyZWFtRk1BX3NpbXVsYXRvcl9zdG9wKHZvaWQpCnsKCWNvbnN0IGNoYXIgKnVzZV9z
  1012. aW0gPSBTdHJlYW1GTUFfY2hlY2tfdXNlX3NpbXVsYXRpb24oKTsKCWNoYXIgYnVmZlsxMDI0XTsK
  1013. CXNucHJpbnRmKGJ1ZmYsIDEwMjQsICJQQVRIPXNpbXV0aWxzOiRQQVRIIG1heGNvbXBpbGVyc2lt
  1014. IC1kIDEgLW4gJXMgLWMgTUFYNUMgLVMgc2ltdXRpbHMgc3RvcCIsIHVzZV9zaW0pOwoJRklMRSAq
  1015. cGlwZV9mcCA9IHBvcGVuKGJ1ZmYsICJyIik7CglpZiAocGlwZV9mcCA9PSBOVUxMKSB7CgkJc3Ry
  1016. bmNhdChidWZmLCAiIDogZmFpbGVkIHRvIGV4ZWN1dGUuIiwgKDEwMjQgLSBzdHJsZW4oYnVmZikp
  1017. KTsKCQlzZXRfZXJyb3IoYnVmZik7CgkJcmV0dXJuIC0xOwoJfQoJd2hpbGUgKGZnZXRzKGJ1ZmYs
  1018. IDEwMjQsIHBpcGVfZnApICE9IE5VTEwpIHsKCQkvKiBVbmNvbW1lbnQgdGhpcyB0byBnZXQgc2lt
  1019. dWxhdG9yIGNvbW1hbmQgb3V0cHV0ICovCgkJLyogZnByaW50ZihzdGRlcnIsIGJ1ZmYpOyAqLwoJ
  1020. CTsKCX0KCXBjbG9zZShwaXBlX2ZwKTsKCXJldHVybiAwOwp9CgpzdGF0aWMgdm9pZCBTdHJlYW1G
  1021. TUFfc3RhdGljX2luaXQodm9pZCkgCnsKCXN0b3JlZF9tYXhmaWxlID0gU3RyZWFtRk1BX2luaXQo
  1022. KTsKCWlmIChzdG9yZWRfbWF4ZmlsZSA9PSBOVUxMIHx8ICFtYXhfb2soc3RvcmVkX21heGZpbGUt
  1023. PmVycm9ycykpIHsKCQlzdG9yZWRfbWF4ZmlsZSA9IE5VTEw7CgkJaWYobWF4X2NvbmZpZ19nZXRf
  1024. Ym9vbChNQVhfQ09ORklHX1NUQVRJQ19JTlRFUkZBQ0VfQUJPUlRfT05fRVJST1IpKSBhYm9ydCgp
  1025. OwoJCWVsc2UgeyBzZXRfZXJyb3IoIlVuYWJsZSB0byBsb2FkIG1heGZpbGUiKTsgcmV0dXJuOyB9
  1026. Cgl9CglpZighbWF4X29rKG1heF9nbG9iYWxfZXJyb3JzKCkpKSB7CgkJc2V0X2Vycm9yX2FuZF9m
  1027. cmVlKG1heF9lcnJvcnNfdHJhY2UobWF4X2dsb2JhbF9lcnJvcnMoKSkpOwoJCXJldHVybjsKCX0K
  1028. CWlmKCFtYXhfY29uZmlnX2dldF9ib29sKE1BWF9DT05GSUdfU1RBVElDX0lOVEVSRkFDRV9BQk9S
  1029. VF9PTl9FUlJPUikpCgkJbWF4X2Vycm9yc19tb2RlKHN0b3JlZF9tYXhmaWxlLT5lcnJvcnMsIDAp
  1030. OwoJdGltZV90IHRpbWVvdXRfcHJldmlvdXMgPSBtYXhfbG9hZF90aW1lb3V0KHN0b3JlZF9tYXhm
  1031. aWxlLCAzMCk7Cgljb25zdCBjaGFyICp1c2Vfc2ltID0gU3RyZWFtRk1BX2NoZWNrX3VzZV9zaW11
  1032. bGF0aW9uKCk7CglpZiAobWF4X3BpbmdfZGFlbW9uKHN0b3JlZF9tYXhmaWxlLCB1c2Vfc2ltKSA9
  1033. PSAwKSB7CgkJaW50IHNpbV9zdGF0ID0gU3RyZWFtRk1BX3NpbXVsYXRvcl9zdGFydCgpOwoJCWlm
  1034. ICgoc2ltX3N0YXQgPT0gMCkgJiYgKG1heF9waW5nX2RhZW1vbihzdG9yZWRfbWF4ZmlsZSwgdXNl
  1035. X3NpbSkgPT0gMSkpIHsKCQkJU3RyZWFtRk1BX3NpbXVsYXRpb25fbGF1bmNoID0gMTsKCQl9IGVs
  1036. c2UgewoJCQlzZXRfZXJyb3IoIkVycm9yOiBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcg
  1037. dG8gc3RhcnQgdGhlIHNpbXVsYXRpb24gaW5mcmFzdHJ1Y3R1cmUgYXV0b21hdGljYWxseS4iKTsK
  1038. CQkJc2V0X2Vycm9yKCJFcnJvcjogQ2hlY2sgdGhhdCAndXNlX3NpbXVsYXRpb249PHNpbXVsYXRv
  1039. cl9uYW1lPicgaXMgc2V0IGNvcnJlY3RseSBpbiB5b3VyIFNMaUMgY29uZmlndXJhdGlvbiIpOwoJ
  1040. CQlzZXRfZXJyb3IoIkVycm9yOiBhbmQgdGhhdCB0aGUgYXNzb2NpYXRlZCBzaW11bGF0ZWQgc3lz
  1041. dGVtIGRhZW1vbiBpcyBydW5uaW5nLiIpOwoJCQltYXhfZmlsZV9mcmVlKHN0b3JlZF9tYXhmaWxl
  1042. KTsKCQkJc3RvcmVkX21heGZpbGUgPSBOVUxMOwoJCQlyZXR1cm47CgkJfQoJfQoJc3RvcmVkX2Vu
  1043. Z2luZSA9IG1heF9sb2FkKHN0b3JlZF9tYXhmaWxlLCAiKiIpOwoJaWYgKCFtYXhfb2soc3RvcmVk
  1044. X21heGZpbGUtPmVycm9ycykpIHsKCQlpZihtYXhfY29uZmlnX2dldF9ib29sKE1BWF9DT05GSUdf
  1045. U1RBVElDX0lOVEVSRkFDRV9BQk9SVF9PTl9FUlJPUikpIHsKCQkJZnByaW50ZihzdGRlcnIsICJc
  1046. blVuYWJsZSB0byBsb2FkIGVuZ2luZTogYWJvcnRpbmcgbm93LlxuXG4iKTsKCQkJZmZsdXNoKHN0
  1047. ZGVycik7CgkJCWFib3J0KCk7CgkJfSBlbHNlIHsKCQkJc2V0X2Vycm9yX2FuZF9mcmVlKG1heF9l
  1048. cnJvcnNfdHJhY2Uoc3RvcmVkX21heGZpbGUtPmVycm9ycykpOwoJCQltYXhfZmlsZV9mcmVlKHN0
  1049. b3JlZF9tYXhmaWxlKTsKCQkJc3RvcmVkX21heGZpbGUgPSBOVUxMOwoJCQlyZXR1cm47CgkJfSAK
  1050. CX0gCgltYXhfbG9hZF90aW1lb3V0KHN0b3JlZF9tYXhmaWxlLCB0aW1lb3V0X3ByZXZpb3VzKTsK
  1051. fQp2b2lkIFN0cmVhbUZNQV9mcmVlKHZvaWQpCnsKCWlmIChzdG9yZWRfZW5naW5lICE9IE5VTEwp
  1052. IHsKCQltYXhfdW5sb2FkKHN0b3JlZF9lbmdpbmUpOwoJCXN0b3JlZF9lbmdpbmUgPSBOVUxMOwoJ
  1053. fQoJaWYgKHN0b3JlZF9tYXhmaWxlICE9IE5VTEwpIHsKCQltYXhfZmlsZV9mcmVlKHN0b3JlZF9t
  1054. YXhmaWxlKTsKCQlzdG9yZWRfbWF4ZmlsZSA9IE5VTEw7Cgl9CglpZiAoc3RvcmVkX2Vycm9yICE9
  1055. IE5VTEwpIHsKCQlmcmVlKHN0b3JlZF9lcnJvcik7CgkJc3RvcmVkX2Vycm9yID0gTlVMTDsKCX0K
  1056. CWlmIChTdHJlYW1GTUFfc2ltdWxhdGlvbl9sYXVuY2ggPT0gMSkgewoJCWludCBzaW1fc3RhdCA9
  1057. IFN0cmVhbUZNQV9zaW11bGF0b3Jfc3RvcCgpOwoJCWlmIChzaW1fc3RhdCAhPSAwICkgewoJCQlm
  1058. cHJpbnRmKHN0ZGVyciwgIkVycm9yIHN0b3BwaW5nIHNpbXVsYXRvci4iKTsKCQl9CgkJU3RyZWFt
  1059. Rk1BX3NpbXVsYXRpb25fbGF1bmNoID0gMDsKCX0KfQoKc3RhdGljIGludCBTdHJlYW1GTUFfZ2V0
  1060. X3BjaWVfYWxpZ25tZW50KHZvaWQpCnsKI2lmZGVmIFN0cmVhbUZNQV9QQ0lFX0FMSUdOTUVOVAoJ
  1061. cmV0dXJuICgoU3RyZWFtRk1BX1BDSUVfQUxJR05NRU5UIDwgMSkgPyAxNiA6IFN0cmVhbUZNQV9Q
  1062. Q0lFX0FMSUdOTUVOVCk7CiNlbHNlCglyZXR1cm4gMTY7CiNlbmRpZgp9CgpzdGF0aWMgaW50IFN0
  1063. cmVhbUZNQV9jaGVja19hbGlnbmVkKGNvbnN0IHZvaWQgKmRhdGEpCnsKCXVpbnRwdHJfdCBwb2lu
  1064. dGVyID0gKHVpbnRwdHJfdCkgZGF0YTsKCWludCBhbGlnbm1lbnQgPSBTdHJlYW1GTUFfZ2V0X3Bj
  1065. aWVfYWxpZ25tZW50KCk7CglyZXR1cm4gKHBvaW50ZXIgJSBhbGlnbm1lbnQpID8gMSA6IDA7Cn0K
  1066. CnN0YXRpYyB2b2lkICpTdHJlYW1GTUFfbWFsbG9jX2FsaWduZWQoY29uc3Qgc2l6ZV90IHNpemUp
  1067. CnsKCXZvaWQgKnB0cjsKCWludCBhbGlnbm1lbnQgPSBTdHJlYW1GTUFfZ2V0X3BjaWVfYWxpZ25t
  1068. ZW50KCk7Cglwb3NpeF9tZW1hbGlnbigmcHRyLCBhbGlnbm1lbnQsIHNpemUpOwoJcmV0dXJuIHB0
  1069. cjsKfQoKCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
  1070. LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
  1071. LS0tLS0gSW50ZXJmYWNlIGRlZmF1bHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwov
  1072. Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
  1073. LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKCgojZGVmaW5lIENIRUNLX0VSUk9SU19TVChTVCwgUkVU
  1074. KSBpZighbWF4X29rKFNULT5lcnJvcnMpKSB7IGlmKG1heF9jb25maWdfZ2V0X2Jvb2woTUFYX0NP
  1075. TkZJR19TVEFUSUNfSU5URVJGQUNFX0FCT1JUX09OX0VSUk9SKSkgeyBmcHJpbnRmKHN0ZGVyciwg
  1076. IiVzXG4iLCBtYXhfZXJyb3JzX3RyYWNlKFNULT5lcnJvcnMpKTsgYWJvcnQoKTsgfSBzZXRfZXJy
  1077. b3JfYW5kX2ZyZWUobWF4X2Vycm9yc190cmFjZShTVC0+ZXJyb3JzKSk7IHJldHVybiBSRVQ7IH0g
  1078. CiNkZWZpbmUgQ0hFQ0tfTlVMTChWQUxVRSwgTUVTU0FHRSwgUkVUKSBpZihWQUxVRSA9PSBOVUxM
  1079. KSB7IGlmIChtYXhfY29uZmlnX2dldF9ib29sKE1BWF9DT05GSUdfU1RBVElDX0lOVEVSRkFDRV9B
  1080. Qk9SVF9PTl9FUlJPUikpIHsgZnByaW50ZihzdGRlcnIsICIlc1xuJXNcbiIsIChzdG9yZWRfZXJy
  1081. b3IgPT0gTlVMTCkgPyAiIiA6IHN0b3JlZF9lcnJvciwgTUVTU0FHRSk7IGFib3J0KCk7IH0gc2V0
  1082. X2Vycm9yKE1FU1NBR0UpOyByZXR1cm4gUkVUOyB9CgogCnR5cGVkZWYgc3RydWN0IFN0cmVhbUZN
  1083. QV9jYWxsYmFja19zdHJlYW0gewoJdWludDhfdCAqdXNlcl9wdHI7Cgl1aW50OF90ICphbGlnbmVk
  1084. X3B0cjsKCXNpemVfdCAgIHNpemU7CglpbnQgICAgICBpc19vdXRwdXQ7Cn0gU3RyZWFtRk1BX2Nh
  1085. bGxiYWNrX3N0cmVhbV90OwoKdHlwZWRlZiBzdHJ1Y3QgU3RyZWFtRk1BX2NhbGxiYWNrX2RhdGEg
  1086. ewoJU3RyZWFtRk1BX2NhbGxiYWNrX3N0cmVhbV90IHN0cmVhbVszXTsgCglpbnQgY291bnQ7Cglp
  1087. bnQgbWF4X2NvdW50Owp9IFN0cmVhbUZNQV9jYWxsYmFja19kYXRhX3Q7CgpzdGF0aWMgdm9pZCBT
  1088. dHJlYW1GTUFfY2FsbGJhY2tfaW50ZXJuYWwodm9pZCAqY2JfZGF0YSkKewoJU3RyZWFtRk1BX2Nh
  1089. bGxiYWNrX2RhdGFfdCAqZGF0YSA9IChTdHJlYW1GTUFfY2FsbGJhY2tfZGF0YV90KikgY2JfZGF0
  1090. YTsKCWZvciAoaW50IGkgPSAwIDsgaSA8IGRhdGEtPmNvdW50IDsgaSsrICkgewoJCVN0cmVhbUZN
  1091. QV9jYWxsYmFja19zdHJlYW1fdCAqcyA9ICZkYXRhLT5zdHJlYW1baV07CgkJaWYgKHMtPmlzX291
  1092. dHB1dCAmJiAocy0+c2l6ZSA+IDApKSB7CgkJCW1lbWNweShzLT51c2VyX3B0ciwgcy0+YWxpZ25l
  1093. ZF9wdHIsIHMtPnNpemUpOwoJCX0KCQlmcmVlKHMtPmFsaWduZWRfcHRyKTsKCX0KCWZyZWUoZGF0
  1094. YSk7Cn0KCnN0YXRpYyBtYXhfYWN0aW9uc190KiBTdHJlYW1GTUFfY29udmVydF9pbnRlcm5hbCgK
  1095. CW1heF9maWxlX3QgKm1heGZpbGUsCglTdHJlYW1GTUFfYWN0aW9uc190ICppbnRlcmZhY2VfYWN0
  1096. aW9ucywKCWludCAgaXNfaW50ZXJuYWxfY2FsbCwKCXZvaWQgKCoqY2FsbGJhY2tfZnVuYykodm9p
  1097. ZCopLAoJdm9pZCAqKmNhbGxiYWNrX2RhdGEpCnsKCW1heF9hY3Rpb25zX3QgKmFjdGlvbnMgPSBt
  1098. YXhfYWN0aW9uc19pbml0KG1heGZpbGUsIE5VTEwpOwoJaWYoYWN0aW9ucyA9PSBOVUxMKSByZXR1
  1099. cm4gTlVMTDsKCiNkZWZpbmUgQ0hFQ0tfRVJST1JTIGlmKCFtYXhfb2soYWN0aW9ucy0+ZXJyb3Jz
  1100. KSkgeyBzZXRfZXJyb3JfYW5kX2ZyZWUobWF4X2Vycm9yc190cmFjZShhY3Rpb25zLT5lcnJvcnMp
  1101. KTsgcmV0dXJuIE5VTEw7IH0gCgoJU3RyZWFtRk1BX2NhbGxiYWNrX2RhdGFfdCAqY2JfZGF0YSA9
  1102. IE5VTEw7CglpbnQgdXNlX2NhbGxiYWNrID0gKGNhbGxiYWNrX2Z1bmMgIT0gTlVMTCkgJiYgKGNh
  1103. bGxiYWNrX2RhdGEgIT0gTlVMTCk7CglpZiAodXNlX2NhbGxiYWNrKSB7CgkJY2JfZGF0YSA9IG1h
  1104. bGxvYyhzaXplb2YoU3RyZWFtRk1BX2NhbGxiYWNrX2RhdGFfdCkpOwoJCWlmIChjYl9kYXRhID09
  1105. IE5VTEwpIHsKCQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZv
  1106. ciBzdHJlYW0gY2FsbGJhY2sgZGF0YSBpbiBmdW5jdGlvbiBTdHJlYW1GTUFfY29udmVydF9pbnRl
  1107. cm5hbFxuIik7CgkJCXJldHVybiBOVUxMOwoJCX0KCQljYl9kYXRhLT5tYXhfY291bnQgPSAzOwoJ
  1108. CWNiX2RhdGEtPmNvdW50ICAgICA9IDA7CgkJKmNhbGxiYWNrX2RhdGEgICAgID0gY2JfZGF0YTsK
  1109. CQkqY2FsbGJhY2tfZnVuYyAgICAgPSAmU3RyZWFtRk1BX2NhbGxiYWNrX2ludGVybmFsOwoJfQoK
  1110. CS8qIGNvZGUgZm9yIHNjYWxhciBTdHJlYW1GTUFLZXJuZWwucnVuX2N5Y2xlX2NvdW50ICovCgl1
  1111. aW50NjRfdCB0aWNrc19TdHJlYW1GTUFLZXJuZWwgPSBpbnRlcmZhY2VfYWN0aW9ucy0+dGlja3Nf
  1112. U3RyZWFtRk1BS2VybmVsOwoJbWF4X3NldF90aWNrcyhhY3Rpb25zLCAiU3RyZWFtRk1BS2VybmVs
  1113. IiwgdGlja3NfU3RyZWFtRk1BS2VybmVsKTsKCUNIRUNLX0VSUk9SUzsKCS8qIGVuZCBvZiBjb2Rl
  1114. IGZvciBzY2FsYXIgU3RyZWFtRk1BS2VybmVsLnJ1bl9jeWNsZV9jb3VudCovCgkKCS8qIGNvZGUg
  1115. Zm9yIHN0cmVhbSBhICovCglzaXplX3QgaW5zdHJlYW1fc2l6ZV9hID0gaW50ZXJmYWNlX2FjdGlv
  1116. bnMtPmluc3RyZWFtX3NpemVfYTsKCWlmIChpbnN0cmVhbV9zaXplX2EgPiAwKSB7CgkJY29uc3Qg
  1117. dm9pZCAqc3RyZWFtX3B0ciA9IGludGVyZmFjZV9hY3Rpb25zLT5pbnN0cmVhbV9hOwoJCWlmICh1
  1118. c2VfY2FsbGJhY2sgJiYgKDEgPT0gU3RyZWFtRk1BX2NoZWNrX2FsaWduZWQoaW50ZXJmYWNlX2Fj
  1119. dGlvbnMtPmluc3RyZWFtX2EpKSkgewoJCQl2b2lkICphbGlnbmVkX2luc3RyZWFtX2EgPSBtYWxs
  1120. b2MoaW5zdHJlYW1fc2l6ZV9hKTsKCQkJaWYgKGFsaWduZWRfaW5zdHJlYW1fYSA9PSBOVUxMKSB7
  1121. CgkJCQltYXhfcmVwb3J0X2Vycm9yX3NsaWMoYWN0aW9ucy0+ZXJyb3JzLCBfX0ZJTEVfXywgX19M
  1122. SU5FX18sIDUyNiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBhbGlnbmVkIG1lbW9yeSBmb3Igc3RyZWFt
  1123. ICdhJyIpOwoJCQkJQ0hFQ0tfRVJST1JTOwoJCQl9CgkJCSgmY2JfZGF0YS0+c3RyZWFtW2NiX2Rh
  1124. dGEtPmNvdW50XSktPnVzZXJfcHRyICAgID0gKHVpbnQ4X3QqKSBpbnRlcmZhY2VfYWN0aW9ucy0+
  1125. aW5zdHJlYW1fYTsKCQkJKCZjYl9kYXRhLT5zdHJlYW1bY2JfZGF0YS0+Y291bnRdKS0+YWxpZ25l
  1126. ZF9wdHIgPSAodWludDhfdCopIGFsaWduZWRfaW5zdHJlYW1fYTsKCQkJKCZjYl9kYXRhLT5zdHJl
  1127. YW1bY2JfZGF0YS0+Y291bnRdKS0+c2l6ZSAgICAgICAgPSBpbnN0cmVhbV9zaXplX2E7CgkJCSgm
  1128. Y2JfZGF0YS0+c3RyZWFtW2NiX2RhdGEtPmNvdW50XSktPmlzX291dHB1dCAgID0gMDsKCQkJY2Jf
  1129. ZGF0YS0+Y291bnQgKz0gMTsKCQkJbWVtY3B5KGFsaWduZWRfaW5zdHJlYW1fYSwgaW50ZXJmYWNl
  1130. X2FjdGlvbnMtPmluc3RyZWFtX2EsIGluc3RyZWFtX3NpemVfYSk7CgkJCXN0cmVhbV9wdHIgPSBh
  1131. bGlnbmVkX2luc3RyZWFtX2E7CgkJfQoJCW1heF9xdWV1ZV9pbnB1dChhY3Rpb25zLCAiYSIsIHN0
  1132. cmVhbV9wdHIsIGluc3RyZWFtX3NpemVfYSk7CgkJQ0hFQ0tfRVJST1JTOwoJfQoJLyogZW5kIG9m
  1133. IGNvZGUgZm9yIHN0cmVhbSBhICovCgkKCS8qIGNvZGUgZm9yIHN0cmVhbSBiICovCglzaXplX3Qg
  1134. aW5zdHJlYW1fc2l6ZV9iID0gaW50ZXJmYWNlX2FjdGlvbnMtPmluc3RyZWFtX3NpemVfYjsKCWlm
  1135. IChpbnN0cmVhbV9zaXplX2IgPiAwKSB7CgkJY29uc3Qgdm9pZCAqc3RyZWFtX3B0ciA9IGludGVy
  1136. ZmFjZV9hY3Rpb25zLT5pbnN0cmVhbV9iOwoJCWlmICh1c2VfY2FsbGJhY2sgJiYgKDEgPT0gU3Ry
  1137. ZWFtRk1BX2NoZWNrX2FsaWduZWQoaW50ZXJmYWNlX2FjdGlvbnMtPmluc3RyZWFtX2IpKSkgewoJ
  1138. CQl2b2lkICphbGlnbmVkX2luc3RyZWFtX2IgPSBtYWxsb2MoaW5zdHJlYW1fc2l6ZV9iKTsKCQkJ
  1139. aWYgKGFsaWduZWRfaW5zdHJlYW1fYiA9PSBOVUxMKSB7CgkJCQltYXhfcmVwb3J0X2Vycm9yX3Ns
  1140. aWMoYWN0aW9ucy0+ZXJyb3JzLCBfX0ZJTEVfXywgX19MSU5FX18sIDUyNiwgIkZhaWxlZCB0byBh
  1141. bGxvY2F0ZSBhbGlnbmVkIG1lbW9yeSBmb3Igc3RyZWFtICdiJyIpOwoJCQkJQ0hFQ0tfRVJST1JT
  1142. OwoJCQl9CgkJCSgmY2JfZGF0YS0+c3RyZWFtW2NiX2RhdGEtPmNvdW50XSktPnVzZXJfcHRyICAg
  1143. ID0gKHVpbnQ4X3QqKSBpbnRlcmZhY2VfYWN0aW9ucy0+aW5zdHJlYW1fYjsKCQkJKCZjYl9kYXRh
  1144. LT5zdHJlYW1bY2JfZGF0YS0+Y291bnRdKS0+YWxpZ25lZF9wdHIgPSAodWludDhfdCopIGFsaWdu
  1145. ZWRfaW5zdHJlYW1fYjsKCQkJKCZjYl9kYXRhLT5zdHJlYW1bY2JfZGF0YS0+Y291bnRdKS0+c2l6
  1146. ZSAgICAgICAgPSBpbnN0cmVhbV9zaXplX2I7CgkJCSgmY2JfZGF0YS0+c3RyZWFtW2NiX2RhdGEt
  1147. PmNvdW50XSktPmlzX291dHB1dCAgID0gMDsKCQkJY2JfZGF0YS0+Y291bnQgKz0gMTsKCQkJbWVt
  1148. Y3B5KGFsaWduZWRfaW5zdHJlYW1fYiwgaW50ZXJmYWNlX2FjdGlvbnMtPmluc3RyZWFtX2IsIGlu
  1149. c3RyZWFtX3NpemVfYik7CgkJCXN0cmVhbV9wdHIgPSBhbGlnbmVkX2luc3RyZWFtX2I7CgkJfQoJ
  1150. CW1heF9xdWV1ZV9pbnB1dChhY3Rpb25zLCAiYiIsIHN0cmVhbV9wdHIsIGluc3RyZWFtX3NpemVf
  1151. Yik7CgkJQ0hFQ0tfRVJST1JTOwoJfQoJLyogZW5kIG9mIGNvZGUgZm9yIHN0cmVhbSBiICovCgkK
  1152. CS8qIGNvZGUgZm9yIHN0cmVhbSBvdXRwdXQgKi8KCXNpemVfdCBvdXRzdHJlYW1fc2l6ZV9vdXRw
  1153. dXQgPSBpbnRlcmZhY2VfYWN0aW9ucy0+b3V0c3RyZWFtX3NpemVfb3V0cHV0OwoJaWYgKG91dHN0
  1154. cmVhbV9zaXplX291dHB1dCA+IDApIHsKCQl2b2lkICpzdHJlYW1fcHRyID0gaW50ZXJmYWNlX2Fj
  1155. dGlvbnMtPm91dHN0cmVhbV9vdXRwdXQ7CgkJaWYgKHVzZV9jYWxsYmFjayAmJiAoMSA9PSBTdHJl
  1156. YW1GTUFfY2hlY2tfYWxpZ25lZChpbnRlcmZhY2VfYWN0aW9ucy0+b3V0c3RyZWFtX291dHB1dCkp
  1157. KSB7CgkJCXZvaWQgKmFsaWduZWRfb3V0c3RyZWFtX291dHB1dCA9IG1hbGxvYyhvdXRzdHJlYW1f
  1158. c2l6ZV9vdXRwdXQpOwoJCQlpZiAoYWxpZ25lZF9vdXRzdHJlYW1fb3V0cHV0ID09IE5VTEwpIHsK
  1159. CQkJCW1heF9yZXBvcnRfZXJyb3Jfc2xpYyhhY3Rpb25zLT5lcnJvcnMsIF9fRklMRV9fLCBfX0xJ
  1160. TkVfXywgNTI2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGFsaWduZWQgbWVtb3J5IGZvciBzdHJlYW0g
  1161. J291dHB1dCciKTsKCQkJCUNIRUNLX0VSUk9SUzsKCQkJfQoJCQkoJmNiX2RhdGEtPnN0cmVhbVtj
  1162. Yl9kYXRhLT5jb3VudF0pLT51c2VyX3B0ciAgICA9ICh1aW50OF90KikgaW50ZXJmYWNlX2FjdGlv
  1163. bnMtPm91dHN0cmVhbV9vdXRwdXQ7CgkJCSgmY2JfZGF0YS0+c3RyZWFtW2NiX2RhdGEtPmNvdW50
  1164. XSktPmFsaWduZWRfcHRyID0gKHVpbnQ4X3QqKSBhbGlnbmVkX291dHN0cmVhbV9vdXRwdXQ7CgkJ
  1165. CSgmY2JfZGF0YS0+c3RyZWFtW2NiX2RhdGEtPmNvdW50XSktPnNpemUgICAgICAgID0gb3V0c3Ry
  1166. ZWFtX3NpemVfb3V0cHV0OwoJCQkoJmNiX2RhdGEtPnN0cmVhbVtjYl9kYXRhLT5jb3VudF0pLT5p
  1167. c19vdXRwdXQgICA9IDE7CgkJCWNiX2RhdGEtPmNvdW50ICs9IDE7CgkJCXN0cmVhbV9wdHIgPSBh
  1168. bGlnbmVkX291dHN0cmVhbV9vdXRwdXQ7CgkJfQoJCW1heF9xdWV1ZV9vdXRwdXQoYWN0aW9ucywg
  1169. Im91dHB1dCIsIHN0cmVhbV9wdHIsIG91dHN0cmVhbV9zaXplX291dHB1dCk7CgkJQ0hFQ0tfRVJS
  1170. T1JTOwoJfQoJLyogZW5kIG9mIGNvZGUgZm9yIHN0cmVhbSBvdXRwdXQgKi8KCQoJaWYgKHVzZV9j
  1171. YWxsYmFjayAmJiBjYl9kYXRhLT5jb3VudCA9PSAwKSB7CgkJKmNhbGxiYWNrX2RhdGEgPSBOVUxM
  1172. OwoJCSpjYWxsYmFja19mdW5jID0gTlVMTDsKCQlmcmVlKGNiX2RhdGEpOwoJfQoJcmV0dXJuIGFj
  1173. dGlvbnM7CiN1bmRlZiBDSEVDS19FUlJPUlMKfQoKdm9pZCBTdHJlYW1GTUEoCgl1aW50NjRfdCB0
  1174. aWNrc19TdHJlYW1GTUFLZXJuZWwsCgljb25zdCB2b2lkICppbnN0cmVhbV9hLAoJc2l6ZV90IGlu
  1175. c3RyZWFtX3NpemVfYSwKCWNvbnN0IHZvaWQgKmluc3RyZWFtX2IsCglzaXplX3QgaW5zdHJlYW1f
  1176. c2l6ZV9iLAoJdm9pZCAqb3V0c3RyZWFtX291dHB1dCwKCXNpemVfdCBvdXRzdHJlYW1fc2l6ZV9v
  1177. dXRwdXQpCnsKCSh2b2lkKSBwdGhyZWFkX29uY2UoJnNsaWNfYnNfaXNfaW5pdGlhbGlzZWQsIFN0
  1178. cmVhbUZNQV9zdGF0aWNfaW5pdCk7CglDSEVDS19OVUxMKHN0b3JlZF9tYXhmaWxlLCAiTWF4Zmls
  1179. ZSB3YXMgbm90IGxvYWRlZCIsICk7CgltYXhfcnVuX3QgKnJ1biA9IFN0cmVhbUZNQV9ub25ibG9j
  1180. ayh0aWNrc19TdHJlYW1GTUFLZXJuZWwsIGluc3RyZWFtX2EsIGluc3RyZWFtX3NpemVfYSwgaW5z
  1181. dHJlYW1fYiwgaW5zdHJlYW1fc2l6ZV9iLCBvdXRzdHJlYW1fb3V0cHV0LCBvdXRzdHJlYW1fc2l6
  1182. ZV9vdXRwdXQpOwoJQ0hFQ0tfTlVMTChydW4sICJVbmFibGUgdG8gcnVuIGFjdGlvbnMiLCApOwoJ
  1183. bWF4X3dhaXQocnVuKTsKfQoKbWF4X3J1bl90ICpTdHJlYW1GTUFfbm9uYmxvY2soCgl1aW50NjRf
  1184. dCB0aWNrc19TdHJlYW1GTUFLZXJuZWwsCgljb25zdCB2b2lkICppbnN0cmVhbV9hLAoJc2l6ZV90
  1185. IGluc3RyZWFtX3NpemVfYSwKCWNvbnN0IHZvaWQgKmluc3RyZWFtX2IsCglzaXplX3QgaW5zdHJl
  1186. YW1fc2l6ZV9iLAoJdm9pZCAqb3V0c3RyZWFtX291dHB1dCwKCXNpemVfdCBvdXRzdHJlYW1fc2l6
  1187. ZV9vdXRwdXQpCnsKCVN0cmVhbUZNQV9hY3Rpb25zX3QgaW50ZXJmYWNlX2FjdGlvbnM7CglpbnRl
  1188. cmZhY2VfYWN0aW9ucy50aWNrc19TdHJlYW1GTUFLZXJuZWwgPSB0aWNrc19TdHJlYW1GTUFLZXJu
  1189. ZWw7CglpbnRlcmZhY2VfYWN0aW9ucy5pbnN0cmVhbV9hID0gaW5zdHJlYW1fYTsKCWludGVyZmFj
  1190. ZV9hY3Rpb25zLmluc3RyZWFtX3NpemVfYSA9IGluc3RyZWFtX3NpemVfYTsKCWludGVyZmFjZV9h
  1191. Y3Rpb25zLmluc3RyZWFtX2IgPSBpbnN0cmVhbV9iOwoJaW50ZXJmYWNlX2FjdGlvbnMuaW5zdHJl
  1192. YW1fc2l6ZV9iID0gaW5zdHJlYW1fc2l6ZV9iOwoJaW50ZXJmYWNlX2FjdGlvbnMub3V0c3RyZWFt
  1193. X291dHB1dCA9IG91dHN0cmVhbV9vdXRwdXQ7CglpbnRlcmZhY2VfYWN0aW9ucy5vdXRzdHJlYW1f
  1194. c2l6ZV9vdXRwdXQgPSBvdXRzdHJlYW1fc2l6ZV9vdXRwdXQ7Cgkodm9pZCkgcHRocmVhZF9vbmNl
  1195. KCZzbGljX2JzX2lzX2luaXRpYWxpc2VkLCBTdHJlYW1GTUFfc3RhdGljX2luaXQpOwoJQ0hFQ0tf
  1196. TlVMTChzdG9yZWRfbWF4ZmlsZSwgIk1heGZpbGUgd2FzIG5vdCBsb2FkZWQiLCBOVUxMKTsKCXZv
  1197. aWQgKCpjYl9mdW5jKSh2b2lkKikgPSBOVUxMOwoJdm9pZCAgKmNiX2RhdGEgICAgICAgICA9IE5V
  1198. TEw7CgltYXhfYWN0aW9uc190ICphY3Rpb25zID0gU3RyZWFtRk1BX2NvbnZlcnRfaW50ZXJuYWwo
  1199. c3RvcmVkX21heGZpbGUsICZpbnRlcmZhY2VfYWN0aW9ucywgMSwgJmNiX2Z1bmMsICZjYl9kYXRh
  1200. KTsKCUNIRUNLX05VTEwoYWN0aW9ucywgIlVuYWJsZSB0byBidWlsZCBhY3Rpb25zIiwgTlVMTCk7
  1201. CgltYXhfdmFsaWRhdGUoYWN0aW9ucyk7CglDSEVDS19FUlJPUlNfU1QoYWN0aW9ucywgTlVMTCk7
  1202. CglDSEVDS19FUlJPUlNfU1Qoc3RvcmVkX2VuZ2luZSwgTlVMTCk7CgltYXhfcnVuX3QgKnJ1bjsK
  1203. CWlmIChjYl9mdW5jID09IE5VTEwpIHsKCQlydW4gPSBtYXhfcnVuX25vbmJsb2NrKHN0b3JlZF9l
  1204. bmdpbmUsIGFjdGlvbnMpOwoJfSBlbHNlIHsKCQlydW4gPSBtYXhfcnVuX25vbmJsb2NrX3dpdGhf
  1205. Y2Ioc3RvcmVkX2VuZ2luZSwgYWN0aW9ucywgY2JfZnVuYywgY2JfZGF0YSk7Cgl9CglDSEVDS19O
  1206. VUxMKHJ1biwgIlVuYWJsZSB0byBydW4gYWN0aW9ucyIsIE5VTEwpOwoJQ0hFQ0tfRVJST1JTX1NU
  1207. KGFjdGlvbnMsIE5VTEwpOwoJbWF4X2FjdGlvbnNfZnJlZShhY3Rpb25zKTsKCXJldHVybiBydW47
  1208. Cn0KCnZvaWQgU3RyZWFtRk1BX3J1bigKCW1heF9lbmdpbmVfdCAqZW5naW5lLAoJU3RyZWFtRk1B
  1209. X2FjdGlvbnNfdCAqaW50ZXJmYWNlX2FjdGlvbnMpCnsKCW1heF9ydW5fdCAqcnVuID0gU3RyZWFt
  1210. Rk1BX3J1bl9ub25ibG9jayhlbmdpbmUsIGludGVyZmFjZV9hY3Rpb25zKTsKCUNIRUNLX05VTEwo
  1211. cnVuLCAiVW5hYmxlIHRvIHJ1biBhY3Rpb25zIiwgKTsKCW1heF93YWl0KHJ1bik7Cn0KCm1heF9y
  1212. dW5fdCAqU3RyZWFtRk1BX3J1bl9ub25ibG9jaygKCW1heF9lbmdpbmVfdCAqZW5naW5lLAoJU3Ry
  1213. ZWFtRk1BX2FjdGlvbnNfdCAqaW50ZXJmYWNlX2FjdGlvbnMpCnsKCW1heF9maWxlX3QgKm1heGZp
  1214. bGUgPSBtYXhfZW5naW5lX2dldF9tYXhfZmlsZShlbmdpbmUpOyAKCXZvaWQgKCpjYl9mdW5jKSh2
  1215. b2lkKikgPSBOVUxMOwoJdm9pZCAgKmNiX2RhdGEgICAgICAgICA9IE5VTEw7CgltYXhfYWN0aW9u
  1216. c190ICphY3Rpb25zID0gU3RyZWFtRk1BX2NvbnZlcnRfaW50ZXJuYWwobWF4ZmlsZSwgaW50ZXJm
  1217. YWNlX2FjdGlvbnMsIDEsICZjYl9mdW5jLCAmY2JfZGF0YSk7CglDSEVDS19OVUxMKGFjdGlvbnMs
  1218. ICJVbmFibGUgdG8gYnVpbGQgYWN0aW9ucyIsIE5VTEwpOwoJbWF4X3ZhbGlkYXRlKGFjdGlvbnMp
  1219. OwoJQ0hFQ0tfRVJST1JTX1NUKGFjdGlvbnMsIE5VTEwpOwoJbWF4X3J1bl90ICpydW47CglpZiAo
  1220. Y2JfZnVuYyA9PSBOVUxMKSB7CgkJcnVuID0gbWF4X3J1bl9ub25ibG9jayhlbmdpbmUsIGFjdGlv
  1221. bnMpOwoJfSBlbHNlIHsKCQlydW4gPSBtYXhfcnVuX25vbmJsb2NrX3dpdGhfY2IoZW5naW5lLCBh
  1222. Y3Rpb25zLCBjYl9mdW5jLCBjYl9kYXRhKTsKCX0KCUNIRUNLX05VTEwocnVuLCAiVW5hYmxlIHRv
  1223. IHJ1biBhY3Rpb25zIiwgTlVMTCk7CgltYXhfYWN0aW9uc19mcmVlKGFjdGlvbnMpOwoJcmV0dXJu
  1224. IHJ1bjsKfQoKCi8qKgogKiBcYnJpZWYgR3JvdXAgcnVuIGFkdmFuY2VkIHN0YXRpYyBmdW5jdGlv
  1225. biBmb3IgdGhlIGludGVyZmFjZSAnZGVmYXVsdCcuCiAqIAogKiBccGFyYW0gW2luXSBncm91cCBH
  1226. cm91cCB0byB1c2UuCiAqIFxwYXJhbSBbaW4sb3V0XSBpbnRlcmZhY2VfYWN0aW9ucyBBY3Rpb25z
  1227. IHRvIHJ1bi4KICoKICogUnVuIHRoZSBhY3Rpb25zIG9uIHRoZSBmaXJzdCBkZXZpY2UgYXZhaWxh
  1228. YmxlIGluIHRoZSBncm91cC4KICovCnZvaWQgU3RyZWFtRk1BX3J1bl9ncm91cChtYXhfZ3JvdXBf
  1229. dCAqZ3JvdXAsIFN0cmVhbUZNQV9hY3Rpb25zX3QgKmludGVyZmFjZV9hY3Rpb25zKQp7CgltYXhf
  1230. cnVuX3QgKnJ1biA9IFN0cmVhbUZNQV9ydW5fZ3JvdXBfbm9uYmxvY2soZ3JvdXAsIGludGVyZmFj
  1231. ZV9hY3Rpb25zKTsKCUNIRUNLX05VTEwocnVuLCAiVW5hYmxlIHRvIHJ1biBhY3Rpb25zIiwgKTsK
  1232. CW1heF93YWl0KHJ1bik7Cn0KCgovKioKICogXGJyaWVmIEdyb3VwIHJ1biBhZHZhbmNlZCBzdGF0
  1233. aWMgbm9uLWJsb2NraW5nIGZ1bmN0aW9uIGZvciB0aGUgaW50ZXJmYWNlICdkZWZhdWx0Jy4KICog
  1234. CiAqCiAqIFNjaGVkdWxlIHRoZSBhY3Rpb25zIHRvIHJ1biBvbiB0aGUgZmlyc3QgZGV2aWNlIGF2
  1235. YWlsYWJsZSBpbiB0aGUgZ3JvdXAgYW5kIHJldHVybiBpbW1lZGlhdGVseS4KICogVGhlIHN0YXR1
  1236. cyBvZiB0aGUgcnVuIG11c3QgYmUgY2hlY2tlZCB3aXRoIDo6bWF4X3dhaXQuIAogKiBOb3RlIHRo
  1237. YXQgdXNlIG9mIDo6bWF4X25vd2FpdCBpcyBwcm9oaWJpdGVkIHdpdGggbm9uLWJsb2NraW5nIHJ1
  1238. bm5pbmcgb24gZ3JvdXBzOgogKiBzZWUgdGhlIDo6bWF4X3J1bl9ncm91cF9ub25ibG9jayBkb2N1
  1239. bWVudGF0aW9uIGZvciBtb3JlIGV4cGxhbmF0aW9uLgogKgogKiBccGFyYW0gW2luXSBncm91cCBH
  1240. cm91cCB0byB1c2UuCiAqIFxwYXJhbSBbaW5dIGludGVyZmFjZV9hY3Rpb25zIEFjdGlvbnMgdG8g
  1241. cnVuLgogKiBccmV0dXJuIEEgaGFuZGxlIG9uIHRoZSBleGVjdXRpb24gc3RhdHVzIG9mIHRoZSBh
  1242. Y3Rpb25zLCBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuCiAqLwptYXhfcnVuX3QgKlN0cmVhbUZN
  1243. QV9ydW5fZ3JvdXBfbm9uYmxvY2sobWF4X2dyb3VwX3QgKmdyb3VwLCBTdHJlYW1GTUFfYWN0aW9u
  1244. c190ICppbnRlcmZhY2VfYWN0aW9ucykKewoJbWF4X2ZpbGVfdCAqbWF4ZmlsZSA9IG1heF9ncm91
  1245. cF9nZXRfbWF4X2ZpbGUoZ3JvdXApOwoJbWF4X2FjdGlvbnNfdCAqYWN0aW9ucyA9IFN0cmVhbUZN
  1246. QV9jb252ZXJ0X2ludGVybmFsKG1heGZpbGUsIGludGVyZmFjZV9hY3Rpb25zLCAxLCBOVUxMLCBO
  1247. VUxMKTsKCWlmKGFjdGlvbnMgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CglpZighbWF4X29rKGFjdGlv
  1248. bnMtPmVycm9ycykpIHJldHVybiBOVUxMOwoJbWF4X3ZhbGlkYXRlKGFjdGlvbnMpOwoJbWF4X3J1
  1249. bl90ICpydW4gPSBtYXhfcnVuX2dyb3VwX25vbmJsb2NrKGdyb3VwLCBhY3Rpb25zKTsKCW1heF9h
  1250. Y3Rpb25zX2ZyZWUoYWN0aW9ucyk7CglyZXR1cm4gcnVuOwp9CgoKLyoqCiAqIFxicmllZiBBcnJh
  1251. eSBydW4gYWR2YW5jZWQgc3RhdGljIGZ1bmN0aW9uIGZvciB0aGUgaW50ZXJmYWNlICdkZWZhdWx0
  1252. Jy4KICogCiAqIFxwYXJhbSBbaW5dIGVuZ2FycmF5IFRoZSBhcnJheSBvZiBkZXZpY2VzIHRvIHVz
  1253. ZS4KICogXHBhcmFtIFtpbixvdXRdIGludGVyZmFjZV9hY3Rpb25zIFRoZSBhcnJheSBvZiBhY3Rp
  1254. b25zIHRvIHJ1bi4KICoKICogUnVuIHRoZSBhcnJheSBvZiBhY3Rpb25zIG9uIHRoZSBhcnJheSBv
  1255. ZiBlbmdpbmVzLiAgVGhlIGxlbmd0aCBvZiBpbnRlcmZhY2VfYWN0aW9ucwogKiBtdXN0IG1hdGNo
  1256. IHRoZSBzaXplIG9mIGVuZ2FycmF5LgogKi8Kdm9pZCBTdHJlYW1GTUFfcnVuX2FycmF5KG1heF9l
  1257. bmdhcnJheV90ICplbmdhcnJheSwgU3RyZWFtRk1BX2FjdGlvbnNfdCAqaW50ZXJmYWNlX2FjdGlv
  1258. bnNbXSkKewoJbWF4X3J1bl90ICpydW4gPSBTdHJlYW1GTUFfcnVuX2FycmF5X25vbmJsb2NrKGVu
  1259. Z2FycmF5LCBpbnRlcmZhY2VfYWN0aW9ucyk7CglDSEVDS19OVUxMKHJ1biwgIlVuYWJsZSB0byBy
  1260. dW4gYWN0aW9ucyIsICk7CgltYXhfd2FpdChydW4pOwp9CgoKLyoqCiAqIFxicmllZiBBcnJheSBy
  1261. dW4gYWR2YW5jZWQgc3RhdGljIG5vbi1ibG9ja2luZyBmdW5jdGlvbiBmb3IgdGhlIGludGVyZmFj
  1262. ZSAnZGVmYXVsdCcuCiAqIAogKgogKiBTY2hlZHVsZSB0byBydW4gdGhlIGFycmF5IG9mIGFjdGlv
  1263. bnMgb24gdGhlIGFycmF5IG9mIGVuZ2luZXMsIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkuCiAqIFRo
  1264. ZSBsZW5ndGggb2YgaW50ZXJmYWNlX2FjdGlvbnMgbXVzdCBtYXRjaCB0aGUgc2l6ZSBvZiBlbmdh
  1265. cnJheS4KICogVGhlIHN0YXR1cyBvZiB0aGUgcnVuIGNhbiBiZSBjaGVja2VkIGVpdGhlciBieSA6
  1266. Om1heF93YWl0IG9yIDo6bWF4X25vd2FpdDsKICogbm90ZSB0aGF0IG9uZSBvZiB0aGVzZSAqbXVz
  1267. dCogYmUgY2FsbGVkLCBzbyB0aGF0IGFzc29jaWF0ZWQgbWVtb3J5IGNhbiBiZSByZWxlYXNlZC4K
  1268. ICoKICogXHBhcmFtIFtpbl0gZW5nYXJyYXkgVGhlIGFycmF5IG9mIGRldmljZXMgdG8gdXNlLgog
  1269. KiBccGFyYW0gW2luXSBpbnRlcmZhY2VfYWN0aW9ucyBUaGUgYXJyYXkgb2YgYWN0aW9ucyB0byBy
  1270. dW4uCiAqIFxyZXR1cm4gQSBoYW5kbGUgb24gdGhlIGV4ZWN1dGlvbiBzdGF0dXMgb2YgdGhlIGFj
  1271. dGlvbnMsIG9yIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4KICovCm1heF9ydW5fdCAqU3RyZWFtRk1B
  1272. X3J1bl9hcnJheV9ub25ibG9jayhtYXhfZW5nYXJyYXlfdCAqZW5nYXJyYXksIFN0cmVhbUZNQV9h
  1273. Y3Rpb25zX3QgKmludGVyZmFjZV9hY3Rpb25zW10pCnsKCW1heF9maWxlX3QgKm1heGZpbGUgPSBt
  1274. YXhfZW5nYXJyYXlfZ2V0X21heF9maWxlKGVuZ2FycmF5LCAwKTsKCWludCBpOwoJbWF4X2FjdGFy
  1275. cmF5X3QgKmFjdGFycmF5ID0gbWF4X2FjdGFycmF5X2luaXQobWF4ZmlsZSwgZW5nYXJyYXktPnNp
  1276. emUpOwoJaWYgKGFjdGFycmF5ID09IE5VTEwpIHJldHVybiBOVUxMOwoJbWF4X2FjdGlvbnNfdCAq
  1277. KmFycl9hY3Rpb25zID0gbWFsbG9jKGVuZ2FycmF5LT5zaXplICogc2l6ZW9mKG1heF9hY3Rpb25z
  1278. X3QqKSk7Cglmb3IgKCBpID0gMCA7IGkgPCBhY3RhcnJheS0+c2l6ZTsgaSsrICkgewoJCW1heF9h
  1279. Y3Rpb25zX3QgKmFjdGlvbnMgPSBTdHJlYW1GTUFfY29udmVydF9pbnRlcm5hbChtYXhmaWxlLCBp
  1280. bnRlcmZhY2VfYWN0aW9uc1tpXSwgMSwgTlVMTCwgTlVMTCk7CgkJaWYgKGFjdGlvbnMgPT0gTlVM
  1281. TCkgcmV0dXJuIE5VTEw7CgkJYXJyX2FjdGlvbnNbaV0gPSBhY3Rpb25zOwoJCW1heF9zZXRfYWN0
  1282. aW9uKGFjdGFycmF5LCBpLCBhY3Rpb25zKTsKCX0KCW1heF9ydW5fdCAqcnVuID0gbWF4X3J1bl9h
  1283. cnJheV9ub25ibG9jayhlbmdhcnJheSwgYWN0YXJyYXkpOwoJZm9yICggaSA9IDAgOyBpIDwgYWN0
  1284. YXJyYXktPnNpemUgOyBpKysgKSB7IG1heF9hY3Rpb25zX2ZyZWUoYXJyX2FjdGlvbnNbaV0pOyB9
  1285. CgltYXhfYWN0YXJyYXlfZnJlZShhY3RhcnJheSk7CglmcmVlKGFycl9hY3Rpb25zKTsKCXJldHVy
  1286. biBydW47Cn0KCgovKioKICogXGJyaWVmIENvbnZlcnRzIGEgc3RhdGljLWludGVyZmFjZSBhY3Rp
  1287. b24gc3RydWN0IGludG8gYSBkeW5hbWljLWludGVyZmFjZSBtYXhfYWN0aW9uc190IHN0cnVjdC4K
  1288. ICoKICogTm90ZSB0aGF0IHRoaXMgaXMgYW4gaW50ZXJuYWwgdXRpbGl0eSBmdW5jdGlvbiB1c2Vk
  1289. IGJ5IG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgc3RhdGljIGludGVyZmFjZS4KICoKICogXHBhcmFt
  1290. IFtpbl0gbWF4ZmlsZSBUaGUgbWF4ZmlsZSB0byB1c2UuCiAqIFxwYXJhbSBbaW5dIGludGVyZmFj
  1291. ZV9hY3Rpb25zIFRoZSBpbnRlcmZhY2Utc3BlY2lmaWMgYWN0aW9ucyB0byBydW4uCiAqIFxyZXR1
  1292. cm4gVGhlIGR5bmFtaWMtaW50ZXJmYWNlIGFjdGlvbnMgdG8gcnVuLCBvciBOVUxMIGluIGNhc2Ug
  1293. b2YgZXJyb3IuCiAqLwptYXhfYWN0aW9uc190KiBTdHJlYW1GTUFfY29udmVydChtYXhfZmlsZV90
  1294. ICptYXhmaWxlLCBTdHJlYW1GTUFfYWN0aW9uc190ICppbnRlcmZhY2VfYWN0aW9ucykKewoJcmV0
  1295. dXJuIFN0cmVhbUZNQV9jb252ZXJ0X2ludGVybmFsKG1heGZpbGUsIGludGVyZmFjZV9hY3Rpb25z
  1296. LCAwLCBOVUxMLCBOVUxMKTsKfQoKI3VuZGVmIENIRUNLX0VSUk9SU19TVAojdW5kZWYgQ0hFQ0tf
  1297. TlVMTAoKCg==
  1298. #endif /* SLIC_B64_DEFINITIONS */
  1299. #ifdef SLIC_EXTRA_FILES
  1300. PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHVz
  1301. ZXJmaWxlcyBmb3JtYXQtdmVyc2lvbj0iMjAxMjAyMDAiLz4=
  1302. #endif /* SLIC_EXTRA_FILES */
  1303. #ifdef PHOTON_NODE_ADD_DATA
  1304. #define PHOTON_NODE_ADD_DATA_PRESENT 1
  1305. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 8, "SquashFactor", 0.0)
  1306. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 9, "SquashFactor", 1.0)
  1307. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 0, "SquashFactor", 0.0)
  1308. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 1, "SquashFactor", 1.0)
  1309. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 2, "SquashFactor", 0.0)
  1310. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 3, "SquashFactor", 0.0)
  1311. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 4, "SquashFactor", 1.0)
  1312. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 5, "SquashFactor", 0.0)
  1313. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 6, "SquashFactor", 0.0)
  1314. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 11, "SquashFactor", 0.0)
  1315. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 16, "SquashFactor", 0.0)
  1316. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 26, "SquashFactor", 0.0)
  1317. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 13, "SquashFactor", 0.0)
  1318. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 14, "SquashFactor", 0.0)
  1319. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 15, "SquashFactor", 0.0)
  1320. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 17, "SquashFactor", 0.0)
  1321. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 25, "SquashFactor", 0.0)
  1322. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 19, "SquashFactor", 0.0)
  1323. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 20, "SquashFactor", 0.0)
  1324. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 22, "SquashFactor", 0.0)
  1325. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 24, "SquashFactor", 0.0)
  1326. PHOTON_NODE_ADD_DATA(StreamFMAKernel, 21, "SquashFactor", 0.0)
  1327. #endif
  1328. #ifdef MAXFILE_SIGNATURE
  1329. #define MAXFILE_SIGNATURE_PRESENT 1
  1330. MAXFILE_SIGNATURE("302c02143578f5aee3b838f55f88f02510321eee5917f7ab021400efececa243f79c7dc512190b3fd86bf70d0c0f")
  1331. #endif