blockly 9.3.3 → 10.0.0-beta.0

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 (160) hide show
  1. package/README.md +9 -7
  2. package/blockly.min.js +1314 -1415
  3. package/blockly_compressed.js +1067 -1110
  4. package/blockly_compressed.js.map +1 -1
  5. package/blocks_compressed.js +120 -136
  6. package/blocks_compressed.js.map +1 -1
  7. package/core/block.d.ts +59 -32
  8. package/core/block_dragger.d.ts +2 -2
  9. package/core/block_svg.d.ts +38 -67
  10. package/core/blockly.d.ts +18 -112
  11. package/core/browser_events.d.ts +1 -2
  12. package/core/bubble_dragger.d.ts +1 -2
  13. package/core/{bubble.d.ts → bubble_old.d.ts} +3 -7
  14. package/core/bubbles/bubble.d.ts +174 -0
  15. package/core/bubbles/mini_workspace_bubble.d.ts +80 -0
  16. package/core/bubbles/text_bubble.d.ts +35 -0
  17. package/core/bubbles/textinput_bubble.d.ts +89 -0
  18. package/core/bump_objects.d.ts +6 -4
  19. package/core/connection.d.ts +19 -9
  20. package/core/connection_db.d.ts +4 -4
  21. package/core/contextmenu.d.ts +1 -2
  22. package/core/events/events.d.ts +1 -4
  23. package/core/events/events_abstract.d.ts +0 -6
  24. package/core/events/events_block_base.d.ts +0 -6
  25. package/core/events/events_block_change.d.ts +0 -6
  26. package/core/events/events_block_create.d.ts +0 -6
  27. package/core/events/events_block_delete.d.ts +0 -6
  28. package/core/events/events_block_drag.d.ts +0 -6
  29. package/core/events/events_block_move.d.ts +21 -7
  30. package/core/events/events_bubble_open.d.ts +0 -6
  31. package/core/events/events_click.d.ts +0 -6
  32. package/core/events/events_comment_base.d.ts +0 -6
  33. package/core/events/events_comment_change.d.ts +0 -6
  34. package/core/events/events_comment_create.d.ts +0 -6
  35. package/core/events/events_comment_move.d.ts +0 -6
  36. package/core/events/events_marker_move.d.ts +0 -6
  37. package/core/events/events_selected.d.ts +0 -6
  38. package/core/events/events_theme_change.d.ts +0 -6
  39. package/core/events/events_toolbox_item_select.d.ts +0 -6
  40. package/core/events/events_trashcan_open.d.ts +0 -6
  41. package/core/events/events_var_base.d.ts +0 -6
  42. package/core/events/events_var_create.d.ts +0 -6
  43. package/core/events/events_var_delete.d.ts +0 -6
  44. package/core/events/events_var_rename.d.ts +0 -6
  45. package/core/events/events_viewport.d.ts +0 -6
  46. package/core/events/utils.d.ts +1 -1
  47. package/core/events/workspace_events.d.ts +1 -16
  48. package/core/field.d.ts +31 -5
  49. package/core/field_checkbox.d.ts +1 -1
  50. package/core/field_colour.d.ts +0 -2
  51. package/core/field_dropdown.d.ts +11 -13
  52. package/core/field_image.d.ts +5 -5
  53. package/core/field_input.d.ts +9 -2
  54. package/core/field_label.d.ts +3 -1
  55. package/core/field_number.d.ts +4 -4
  56. package/core/field_variable.d.ts +5 -5
  57. package/core/flyout_base.d.ts +23 -25
  58. package/core/flyout_button.d.ts +9 -9
  59. package/core/flyout_horizontal.d.ts +1 -1
  60. package/core/flyout_vertical.d.ts +1 -1
  61. package/core/generator.d.ts +15 -2
  62. package/core/gesture.d.ts +58 -41
  63. package/core/icons/comment_icon.d.ts +108 -0
  64. package/core/icons/exceptions.d.ts +14 -0
  65. package/core/icons/icon.d.ts +38 -0
  66. package/core/icons/icon_types.d.ts +22 -0
  67. package/core/icons/mutator_icon.d.ts +90 -0
  68. package/core/icons/registry.d.ts +23 -0
  69. package/core/icons/warning_icon.d.ts +67 -0
  70. package/core/icons.d.ts +12 -0
  71. package/core/inputs/dummy_input.d.ts +20 -0
  72. package/core/{input.d.ts → inputs/input.d.ts} +20 -13
  73. package/core/{input_types.d.ts → inputs/input_types.d.ts} +2 -1
  74. package/core/inputs/statement_input.d.ts +22 -0
  75. package/core/inputs/value_input.d.ts +20 -0
  76. package/core/interfaces/i_block_dragger.d.ts +1 -1
  77. package/core/interfaces/i_bounded_element.d.ts +2 -1
  78. package/core/interfaces/i_bubble.d.ts +2 -14
  79. package/core/interfaces/i_has_bubble.d.ts +14 -0
  80. package/core/interfaces/i_icon.d.ts +75 -0
  81. package/core/interfaces/i_serializable.d.ts +24 -0
  82. package/core/keyboard_nav/ast_node.d.ts +15 -15
  83. package/core/keyboard_nav/basic_cursor.d.ts +2 -2
  84. package/core/keyboard_nav/marker.d.ts +2 -2
  85. package/core/main.d.ts +0 -10
  86. package/core/marker_manager.d.ts +0 -1
  87. package/core/names.d.ts +4 -4
  88. package/core/options.d.ts +3 -3
  89. package/core/procedures.d.ts +1 -4
  90. package/core/registry.d.ts +5 -0
  91. package/core/render_management.d.ts +9 -1
  92. package/core/rendered_connection.d.ts +7 -7
  93. package/core/renderers/common/block_rendering.d.ts +0 -10
  94. package/core/renderers/common/constants.d.ts +5 -7
  95. package/core/renderers/common/drawer.d.ts +7 -2
  96. package/core/renderers/common/info.d.ts +1 -4
  97. package/core/renderers/common/marker_svg.d.ts +4 -4
  98. package/core/renderers/common/renderer.d.ts +0 -9
  99. package/core/renderers/geras/highlighter.d.ts +1 -1
  100. package/core/renderers/geras/info.d.ts +1 -1
  101. package/core/renderers/geras/measurables/inline_input.d.ts +1 -1
  102. package/core/renderers/geras/measurables/statement_input.d.ts +1 -1
  103. package/core/renderers/geras/renderer.d.ts +1 -1
  104. package/core/renderers/measurables/external_value_input.d.ts +1 -1
  105. package/core/renderers/measurables/field.d.ts +1 -1
  106. package/core/renderers/measurables/icon.d.ts +5 -1
  107. package/core/renderers/measurables/inline_input.d.ts +1 -1
  108. package/core/renderers/measurables/input_connection.d.ts +1 -1
  109. package/core/renderers/measurables/statement_input.d.ts +1 -1
  110. package/core/renderers/zelos/constants.d.ts +2 -2
  111. package/core/renderers/zelos/info.d.ts +2 -2
  112. package/core/renderers/zelos/marker_svg.d.ts +3 -3
  113. package/core/renderers/zelos/measurables/inputs.d.ts +1 -1
  114. package/core/renderers/zelos/path_object.d.ts +3 -3
  115. package/core/scrollbar.d.ts +0 -2
  116. package/core/scrollbar_pair.d.ts +0 -2
  117. package/core/serialization/blocks.d.ts +3 -3
  118. package/core/serialization/exceptions.d.ts +11 -0
  119. package/core/shortcut_registry.d.ts +2 -2
  120. package/core/theme_manager.d.ts +0 -1
  121. package/core/touch.d.ts +0 -43
  122. package/core/trashcan.d.ts +19 -21
  123. package/core/utils/dom.d.ts +2 -2
  124. package/core/utils/object.d.ts +0 -25
  125. package/core/utils/rect.d.ts +2 -0
  126. package/core/utils/style.d.ts +0 -12
  127. package/core/utils/svg_math.d.ts +0 -8
  128. package/core/utils/xml.d.ts +15 -22
  129. package/core/utils.d.ts +0 -138
  130. package/core/widgetdiv.d.ts +5 -0
  131. package/core/workspace.d.ts +9 -3
  132. package/core/workspace_comment.d.ts +3 -3
  133. package/core/workspace_comment_svg.d.ts +31 -44
  134. package/core/workspace_dragger.d.ts +1 -4
  135. package/core/workspace_svg.d.ts +13 -50
  136. package/core/xml.d.ts +0 -12
  137. package/core-browser.js +0 -1
  138. package/core.js +0 -1
  139. package/dart_compressed.js +124 -159
  140. package/dart_compressed.js.map +1 -1
  141. package/javascript_compressed.js +127 -169
  142. package/javascript_compressed.js.map +1 -1
  143. package/lua_compressed.js +119 -142
  144. package/lua_compressed.js.map +1 -1
  145. package/msg/constants.d.ts +1 -3
  146. package/msg/msg.d.ts +1 -2
  147. package/msg/qqq.d.ts +1 -3
  148. package/msg/synonyms.d.ts +1 -3
  149. package/package.json +12 -13
  150. package/php_compressed.js +131 -161
  151. package/php_compressed.js.map +1 -1
  152. package/python_compressed.js +118 -149
  153. package/python_compressed.js.map +1 -1
  154. package/core/comment.d.ts +0 -115
  155. package/core/events/events_ui.d.ts +0 -40
  156. package/core/icon.d.ts +0 -89
  157. package/core/mutator.d.ts +0 -142
  158. package/core/renderers/common/debug.d.ts +0 -29
  159. package/core/renderers/common/debugger.d.ts +0 -117
  160. package/core/warning.d.ts +0 -53
@@ -1 +1 @@
1
- {"version":3,"sources":["generators/php.js","generators/php/colour.js","generators/php/lists.js","generators/php/logic.js","generators/php/loops.js","generators/php/math.js","generators/php/procedures.js","generators/php/text.js","generators/php/variables.js","generators/php/variables_dynamic.js","generators/php/all.js"],"names":["stringUtils","CodeGenerator","inputTypes","Names","PHP","addReservedWords","ORDER_ATOMIC","ORDER_CLONE","ORDER_NEW","ORDER_MEMBER","ORDER_FUNCTION_CALL","ORDER_POWER","ORDER_INCREMENT","ORDER_DECREMENT","ORDER_BITWISE_NOT","ORDER_CAST","ORDER_SUPPRESS_ERROR","ORDER_INSTANCEOF","ORDER_LOGICAL_NOT","ORDER_UNARY_PLUS","ORDER_UNARY_NEGATION","ORDER_MULTIPLICATION","ORDER_DIVISION","ORDER_MODULUS","ORDER_ADDITION","ORDER_SUBTRACTION","ORDER_STRING_CONCAT","ORDER_BITWISE_SHIFT","ORDER_RELATIONAL","ORDER_EQUALITY","ORDER_REFERENCE","ORDER_BITWISE_AND","ORDER_BITWISE_XOR","ORDER_BITWISE_OR","ORDER_LOGICAL_AND","ORDER_LOGICAL_OR","ORDER_IF_NULL","ORDER_CONDITIONAL","ORDER_ASSIGNMENT","ORDER_LOGICAL_AND_WEAK","ORDER_LOGICAL_XOR","ORDER_LOGICAL_OR_WEAK","ORDER_NONE","ORDER_OVERRIDES","isInitialized","init","PHP.init","workspace","Object","getPrototypeOf","call","nameDB_","reset","RESERVED_WORDS_","setVariableMap","getVariableMap","populateVariables","populateProcedures","finish","PHP.finish","code","definitions","values","definitions_","join","scrubNakedValue","PHP.scrubNakedValue","line","quote_","PHP.quote_","string","replace","multiline_quote_","PHP.multiline_quote_","split","map","lines","scrub_","PHP.scrub_","block","opt_thisOnly","commentCode","outputConnection","targetConnection","comment","getCommentText","wrap","COMMENT_WRAP","prefixLines","i","inputList","length","type","VALUE","childBlock","connection","targetBlock","allNestedComments","nextBlock","nextConnection","nextCode","blockToCode","getAdjusted","PHP.getAdjusted","atId","opt_delta","opt_negate","opt_order","delta","order","options","oneBasedIndex","defaultAtIndex","outerOrder","innerOrder","at","valueToCode","isNumber","Number","Math","floor","getFieldValue","provideFunction_","functionName","FUNCTION_NAME_PLACEHOLDER_","red","green","blue","c1","c2","ratio","NameType","Array","itemCount_","element","repeatCount","list","argument0","argument1","errorIndex","indexAdjustment","mode","Error","where","value","cachedList","match","listVar","getDistinctName","VARIABLE","xVar","where1","where2","at1","at2","String","listCode","direction","value_input","value_delim","n","branchCode","conditionCode","STATEMENT_PREFIX","injectId","statementToCode","STATEMENT_SUFFIX","INDENT","getInput","operator","OPERATORS","defaultArgument","value_if","value_then","value_else","repeats","getField","branch","addLoopTrap","loopVar","endVar","until","variable0","getName","increment","up","step","abs","startVar","incVar","xfix","loop","getSurroundLoop","suppressPrefixSuffix","Infinity","tuple","arg","CONSTANTS","PROPERTIES","dropdownProperty","prefix","suffix","inputOrder","outputOrder","numberToCheck","divisor","varName","func","argument2","Variables","globals","usedVariables","allUsedVarModels","variable","name","getVars","indexOf","push","devVarList","allDeveloperVariables","DEVELOPER_VARIABLE","globalStr","funcName","PROCEDURE","xfix1","loopTrap","INFINITE_LOOP_TRAP","returnValue","xfix2","args","variables","hasReturnValue_","element0","element1","elements","text","substring","msg","sub","from","to","exports","moduleExports"],"mappings":"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","file":"php_compressed.js","sourcesContent":["/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Helper functions for generating PHP for blocks.\n * @suppress {checkTypes|globalThis}\n */\n'use strict';\n\ngoog.module('Blockly.PHP');\n\nconst stringUtils = goog.require('Blockly.utils.string');\nconst {Block} = goog.requireType('Blockly.Block');\nconst {CodeGenerator} = goog.require('Blockly.CodeGenerator');\nconst {inputTypes} = goog.require('Blockly.inputTypes');\nconst {Names} = goog.require('Blockly.Names');\nconst {Workspace} = goog.requireType('Blockly.Workspace');\n\n\n/**\n * PHP code generator.\n * @type {!CodeGenerator}\n */\nconst PHP = new CodeGenerator('PHP');\n\n/**\n * List of illegal variable names.\n * This is not intended to be a security feature. Blockly is 100% client-side,\n * so bypassing this list is trivial. This is intended to prevent users from\n * accidentally clobbering a built-in object or function.\n */\nPHP.addReservedWords(\n // http://php.net/manual/en/reserved.keywords.php\n '__halt_compiler,abstract,and,array,as,break,callable,case,catch,class,' +\n 'clone,const,continue,declare,default,die,do,echo,else,elseif,empty,' +\n 'enddeclare,endfor,endforeach,endif,endswitch,endwhile,eval,exit,extends,' +\n 'final,for,foreach,function,global,goto,if,implements,include,' +\n 'include_once,instanceof,insteadof,interface,isset,list,namespace,new,or,' +\n 'print,private,protected,public,require,require_once,return,static,' +\n 'switch,throw,trait,try,unset,use,var,while,xor,' +\n // http://php.net/manual/en/reserved.constants.php\n 'PHP_VERSION,PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,' +\n 'PHP_VERSION_ID,PHP_EXTRA_VERSION,PHP_ZTS,PHP_DEBUG,PHP_MAXPATHLEN,' +\n 'PHP_OS,PHP_SAPI,PHP_EOL,PHP_INT_MAX,PHP_INT_SIZE,DEFAULT_INCLUDE_PATH,' +\n 'PEAR_INSTALL_DIR,PEAR_EXTENSION_DIR,PHP_EXTENSION_DIR,PHP_PREFIX,' +\n 'PHP_BINDIR,PHP_BINARY,PHP_MANDIR,PHP_LIBDIR,PHP_DATADIR,PHP_SYSCONFDIR,' +\n 'PHP_LOCALSTATEDIR,PHP_CONFIG_FILE_PATH,PHP_CONFIG_FILE_SCAN_DIR,' +\n 'PHP_SHLIB_SUFFIX,E_ERROR,E_WARNING,E_PARSE,E_NOTICE,E_CORE_ERROR,' +\n 'E_CORE_WARNING,E_COMPILE_ERROR,E_COMPILE_WARNING,E_USER_ERROR,' +\n 'E_USER_WARNING,E_USER_NOTICE,E_DEPRECATED,E_USER_DEPRECATED,E_ALL,' +\n 'E_STRICT,__COMPILER_HALT_OFFSET__,TRUE,FALSE,NULL,__CLASS__,__DIR__,' +\n '__FILE__,__FUNCTION__,__LINE__,__METHOD__,__NAMESPACE__,__TRAIT__');\n\n/**\n * Order of operation ENUMs.\n * http://php.net/manual/en/language.operators.precedence.php\n */\nPHP.ORDER_ATOMIC = 0; // 0 \"\" ...\nPHP.ORDER_CLONE = 1; // clone\nPHP.ORDER_NEW = 1; // new\nPHP.ORDER_MEMBER = 2.1; // []\nPHP.ORDER_FUNCTION_CALL = 2.2; // ()\nPHP.ORDER_POWER = 3; // **\nPHP.ORDER_INCREMENT = 4; // ++\nPHP.ORDER_DECREMENT = 4; // --\nPHP.ORDER_BITWISE_NOT = 4; // ~\nPHP.ORDER_CAST = 4; // (int) (float) (string) (array) ...\nPHP.ORDER_SUPPRESS_ERROR = 4; // @\nPHP.ORDER_INSTANCEOF = 5; // instanceof\nPHP.ORDER_LOGICAL_NOT = 6; // !\nPHP.ORDER_UNARY_PLUS = 7.1; // +\nPHP.ORDER_UNARY_NEGATION = 7.2; // -\nPHP.ORDER_MULTIPLICATION = 8.1; // *\nPHP.ORDER_DIVISION = 8.2; // /\nPHP.ORDER_MODULUS = 8.3; // %\nPHP.ORDER_ADDITION = 9.1; // +\nPHP.ORDER_SUBTRACTION = 9.2; // -\nPHP.ORDER_STRING_CONCAT = 9.3; // .\nPHP.ORDER_BITWISE_SHIFT = 10; // << >>\nPHP.ORDER_RELATIONAL = 11; // < <= > >=\nPHP.ORDER_EQUALITY = 12; // == != === !== <> <=>\nPHP.ORDER_REFERENCE = 13; // &\nPHP.ORDER_BITWISE_AND = 13; // &\nPHP.ORDER_BITWISE_XOR = 14; // ^\nPHP.ORDER_BITWISE_OR = 15; // |\nPHP.ORDER_LOGICAL_AND = 16; // &&\nPHP.ORDER_LOGICAL_OR = 17; // ||\nPHP.ORDER_IF_NULL = 18; // ??\nPHP.ORDER_CONDITIONAL = 19; // ?:\nPHP.ORDER_ASSIGNMENT = 20; // = += -= *= /= %= <<= >>= ...\nPHP.ORDER_LOGICAL_AND_WEAK = 21; // and\nPHP.ORDER_LOGICAL_XOR = 22; // xor\nPHP.ORDER_LOGICAL_OR_WEAK = 23; // or\nPHP.ORDER_NONE = 99; // (...)\n\n/**\n * List of outer-inner pairings that do NOT require parentheses.\n * @type {!Array<!Array<number>>}\n */\nPHP.ORDER_OVERRIDES = [\n // (foo()).bar() -> foo().bar()\n // (foo())[0] -> foo()[0]\n [PHP.ORDER_MEMBER, PHP.ORDER_FUNCTION_CALL],\n // (foo[0])[1] -> foo[0][1]\n // (foo.bar).baz -> foo.bar.baz\n [PHP.ORDER_MEMBER, PHP.ORDER_MEMBER],\n // !(!foo) -> !!foo\n [PHP.ORDER_LOGICAL_NOT, PHP.ORDER_LOGICAL_NOT],\n // a * (b * c) -> a * b * c\n [PHP.ORDER_MULTIPLICATION, PHP.ORDER_MULTIPLICATION],\n // a + (b + c) -> a + b + c\n [PHP.ORDER_ADDITION, PHP.ORDER_ADDITION],\n // a && (b && c) -> a && b && c\n [PHP.ORDER_LOGICAL_AND, PHP.ORDER_LOGICAL_AND],\n // a || (b || c) -> a || b || c\n [PHP.ORDER_LOGICAL_OR, PHP.ORDER_LOGICAL_OR]\n];\n\n/**\n * Whether the init method has been called.\n * @type {?boolean}\n */\nPHP.isInitialized = false;\n\n/**\n * Initialise the database of variable names.\n * @param {!Workspace} workspace Workspace to generate code from.\n */\nPHP.init = function(workspace) {\n // Call Blockly.CodeGenerator's init.\n Object.getPrototypeOf(this).init.call(this);\n\n if (!this.nameDB_) {\n this.nameDB_ = new Names(this.RESERVED_WORDS_, '$');\n } else {\n this.nameDB_.reset();\n }\n\n this.nameDB_.setVariableMap(workspace.getVariableMap());\n this.nameDB_.populateVariables(workspace);\n this.nameDB_.populateProcedures(workspace);\n\n this.isInitialized = true;\n};\n\n/**\n * Prepend the generated code with the variable definitions.\n * @param {string} code Generated code.\n * @return {string} Completed code.\n */\nPHP.finish = function(code) {\n // Convert the definitions dictionary into a list.\n const definitions = Object.values(this.definitions_);\n // Call Blockly.CodeGenerator's finish.\n code = Object.getPrototypeOf(this).finish.call(this, code);\n this.isInitialized = false;\n\n this.nameDB_.reset();\n return definitions.join('\\n\\n') + '\\n\\n\\n' + code;\n};\n\n/**\n * Naked values are top-level blocks with outputs that aren't plugged into\n * anything. A trailing semicolon is needed to make this legal.\n * @param {string} line Line of generated code.\n * @return {string} Legal line of code.\n */\nPHP.scrubNakedValue = function(line) {\n return line + ';\\n';\n};\n\n/**\n * Encode a string as a properly escaped PHP string, complete with\n * quotes.\n * @param {string} string Text to encode.\n * @return {string} PHP string.\n * @protected\n */\nPHP.quote_ = function(string) {\n string = string.replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\n/g, '\\\\\\n')\n .replace(/'/g, '\\\\\\'');\n return '\\'' + string + '\\'';\n};\n\n/**\n * Encode a string as a properly escaped multiline PHP string, complete with\n * quotes.\n * @param {string} string Text to encode.\n * @return {string} PHP string.\n * @protected\n */\nPHP.multiline_quote_ = function(string) {\n const lines = string.split(/\\n/g).map(this.quote_);\n // Join with the following, plus a newline:\n // . \"\\n\" .\n // Newline escaping only works in double-quoted strings.\n return lines.join(' . \\\"\\\\n\\\" .\\n');\n};\n\n/**\n * Common tasks for generating PHP from blocks.\n * Handles comments for the specified block and any connected value blocks.\n * Calls any statements following this block.\n * @param {!Block} block The current block.\n * @param {string} code The PHP code created for this block.\n * @param {boolean=} opt_thisOnly True to generate code for only this statement.\n * @return {string} PHP code with comments and subsequent blocks added.\n * @protected\n */\nPHP.scrub_ = function(block, code, opt_thisOnly) {\n let commentCode = '';\n // Only collect comments for blocks that aren't inline.\n if (!block.outputConnection || !block.outputConnection.targetConnection) {\n // Collect comment for this block.\n let comment = block.getCommentText();\n if (comment) {\n comment = stringUtils.wrap(comment, this.COMMENT_WRAP - 3);\n commentCode += this.prefixLines(comment, '// ') + '\\n';\n }\n // Collect comments for all value arguments.\n // Don't collect comments for nested statements.\n for (let i = 0; i < block.inputList.length; i++) {\n if (block.inputList[i].type === inputTypes.VALUE) {\n const childBlock = block.inputList[i].connection.targetBlock();\n if (childBlock) {\n comment = this.allNestedComments(childBlock);\n if (comment) {\n commentCode += this.prefixLines(comment, '// ');\n }\n }\n }\n }\n }\n const nextBlock = block.nextConnection && block.nextConnection.targetBlock();\n const nextCode = opt_thisOnly ? '' : this.blockToCode(nextBlock);\n return commentCode + code + nextCode;\n};\n\n/**\n * Gets a property and adjusts the value while taking into account indexing.\n * @param {!Block} block The block.\n * @param {string} atId The property ID of the element to get.\n * @param {number=} opt_delta Value to add.\n * @param {boolean=} opt_negate Whether to negate the value.\n * @param {number=} opt_order The highest order acting on this value.\n * @return {string|number}\n */\nPHP.getAdjusted = function(block, atId, opt_delta, opt_negate, opt_order) {\n let delta = opt_delta || 0;\n let order = opt_order || this.ORDER_NONE;\n if (block.workspace.options.oneBasedIndex) {\n delta--;\n }\n let defaultAtIndex = block.workspace.options.oneBasedIndex ? '1' : '0';\n let outerOrder = order;\n let innerOrder;\n if (delta > 0) {\n outerOrder = this.ORDER_ADDITION;\n innerOrder = this.ORDER_ADDITION;\n } else if (delta < 0) {\n outerOrder = this.ORDER_SUBTRACTION;\n innerOrder = this.ORDER_SUBTRACTION;\n } else if (opt_negate) {\n outerOrder = this.ORDER_UNARY_NEGATION;\n innerOrder = this.ORDER_UNARY_NEGATION;\n }\n let at = this.valueToCode(block, atId, outerOrder) || defaultAtIndex;\n\n if (stringUtils.isNumber(at)) {\n // If the index is a naked number, adjust it right now.\n at = Number(at) + delta;\n if (opt_negate) {\n at = -at;\n }\n } else {\n // If the index is dynamic, adjust it in code.\n if (delta > 0) {\n at = at + ' + ' + delta;\n } else if (delta < 0) {\n at = at + ' - ' + -delta;\n }\n if (opt_negate) {\n if (delta) {\n at = '-(' + at + ')';\n } else {\n at = '-' + at;\n }\n }\n innerOrder = Math.floor(innerOrder);\n order = Math.floor(order);\n if (innerOrder && order >= innerOrder) {\n at = '(' + at + ')';\n }\n }\n return at;\n};\n\nexports.phpGenerator = PHP;\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for colour blocks.\n */\n'use strict';\n\ngoog.module('Blockly.PHP.colour');\n\nconst {phpGenerator: PHP} = goog.require('Blockly.PHP');\n\n\nPHP['colour_picker'] = function(block) {\n // Colour picker.\n const code = PHP.quote_(block.getFieldValue('COLOUR'));\n return [code, PHP.ORDER_ATOMIC];\n};\n\nPHP['colour_random'] = function(block) {\n // Generate a random colour.\n const functionName = PHP.provideFunction_('colour_random', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}() {\n return '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT);\n}\n`);\n const code = functionName + '()';\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['colour_rgb'] = function(block) {\n // Compose a colour from RGB components expressed as percentages.\n const red = PHP.valueToCode(block, 'RED', PHP.ORDER_NONE) || 0;\n const green = PHP.valueToCode(block, 'GREEN', PHP.ORDER_NONE) || 0;\n const blue = PHP.valueToCode(block, 'BLUE', PHP.ORDER_NONE) || 0;\n const functionName = PHP.provideFunction_('colour_rgb', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($r, $g, $b) {\n $r = round(max(min($r, 100), 0) * 2.55);\n $g = round(max(min($g, 100), 0) * 2.55);\n $b = round(max(min($b, 100), 0) * 2.55);\n $hex = '#';\n $hex .= str_pad(dechex($r), 2, '0', STR_PAD_LEFT);\n $hex .= str_pad(dechex($g), 2, '0', STR_PAD_LEFT);\n $hex .= str_pad(dechex($b), 2, '0', STR_PAD_LEFT);\n return $hex;\n}\n`);\n const code = functionName + '(' + red + ', ' + green + ', ' + blue + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['colour_blend'] = function(block) {\n // Blend two colours together.\n const c1 = PHP.valueToCode(block, 'COLOUR1', PHP.ORDER_NONE) || \"'#000000'\";\n const c2 = PHP.valueToCode(block, 'COLOUR2', PHP.ORDER_NONE) || \"'#000000'\";\n const ratio = PHP.valueToCode(block, 'RATIO', PHP.ORDER_NONE) || 0.5;\n const functionName = PHP.provideFunction_('colour_blend', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($c1, $c2, $ratio) {\n $ratio = max(min($ratio, 1), 0);\n $r1 = hexdec(substr($c1, 1, 2));\n $g1 = hexdec(substr($c1, 3, 2));\n $b1 = hexdec(substr($c1, 5, 2));\n $r2 = hexdec(substr($c2, 1, 2));\n $g2 = hexdec(substr($c2, 3, 2));\n $b2 = hexdec(substr($c2, 5, 2));\n $r = round($r1 * (1 - $ratio) + $r2 * $ratio);\n $g = round($g1 * (1 - $ratio) + $g2 * $ratio);\n $b = round($b1 * (1 - $ratio) + $b2 * $ratio);\n $hex = '#';\n $hex .= str_pad(dechex($r), 2, '0', STR_PAD_LEFT);\n $hex .= str_pad(dechex($g), 2, '0', STR_PAD_LEFT);\n $hex .= str_pad(dechex($b), 2, '0', STR_PAD_LEFT);\n return $hex;\n}\n`);\n const code = functionName + '(' + c1 + ', ' + c2 + ', ' + ratio + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for list blocks.\n */\n\n/**\n * Lists in PHP are known to break when non-variables are passed into blocks\n * that require a list. PHP, unlike other languages, passes arrays as reference\n * value instead of value so we are unable to support it to the extent we can\n * for the other languages.\n * For example, a ternary operator with two arrays will return the array by\n * value and that cannot be passed into any of the built-in array functions for\n * PHP (because only variables can be passed by reference).\n * ex: end(true ? list1 : list2)\n */\n'use strict';\n\ngoog.module('Blockly.PHP.lists');\n\nconst stringUtils = goog.require('Blockly.utils.string');\nconst {NameType} = goog.require('Blockly.Names');\nconst {phpGenerator: PHP} = goog.require('Blockly.PHP');\n\nPHP['lists_create_empty'] = function(block) {\n // Create an empty list.\n return ['array()', PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['lists_create_with'] = function(block) {\n // Create a list with any number of elements of any type.\n let code = new Array(block.itemCount_);\n for (let i = 0; i < block.itemCount_; i++) {\n code[i] = PHP.valueToCode(block, 'ADD' + i, PHP.ORDER_NONE) || 'null';\n }\n code = 'array(' + code.join(', ') + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['lists_repeat'] = function(block) {\n // Create a list with one element repeated.\n const functionName = PHP.provideFunction_('lists_repeat', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($value, $count) {\n $array = array();\n for ($index = 0; $index < $count; $index++) {\n $array[] = $value;\n }\n return $array;\n}\n`);\n const element = PHP.valueToCode(block, 'ITEM', PHP.ORDER_NONE) || 'null';\n const repeatCount = PHP.valueToCode(block, 'NUM', PHP.ORDER_NONE) || '0';\n const code = functionName + '(' + element + ', ' + repeatCount + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['lists_length'] = function(block) {\n // String or array length.\n const functionName = PHP.provideFunction_('length', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($value) {\n if (is_string($value)) {\n return strlen($value);\n } else {\n return count($value);\n }\n}\n`);\n const list = PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || \"''\";\n return [functionName + '(' + list + ')', PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['lists_isEmpty'] = function(block) {\n // Is the string null or array empty?\n const argument0 =\n PHP.valueToCode(block, 'VALUE', PHP.ORDER_FUNCTION_CALL) || 'array()';\n return ['empty(' + argument0 + ')', PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['lists_indexOf'] = function(block) {\n // Find an item in the list.\n const argument0 = PHP.valueToCode(block, 'FIND', PHP.ORDER_NONE) || \"''\";\n const argument1 = PHP.valueToCode(block, 'VALUE', PHP.ORDER_MEMBER) || '[]';\n let errorIndex = ' -1';\n let indexAdjustment = '';\n if (block.workspace.options.oneBasedIndex) {\n errorIndex = ' 0';\n indexAdjustment = ' + 1';\n }\n let functionName;\n if (block.getFieldValue('END') === 'FIRST') {\n // indexOf\n functionName = PHP.provideFunction_('indexOf', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($haystack, $needle) {\n for ($index = 0; $index < count($haystack); $index++) {\n if ($haystack[$index] == $needle) return $index${indexAdjustment};\n }\n return ${errorIndex};\n}\n`);\n } else {\n // lastIndexOf\n functionName = PHP.provideFunction_('lastIndexOf', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($haystack, $needle) {\n $last = ${errorIndex};\n for ($index = 0; $index < count($haystack); $index++) {\n if ($haystack[$index] == $needle) $last = $index${indexAdjustment};\n }\n return $last;\n}\n`);\n }\n\n const code = functionName + '(' + argument1 + ', ' + argument0 + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['lists_getIndex'] = function(block) {\n // Get element at index.\n const mode = block.getFieldValue('MODE') || 'GET';\n const where = block.getFieldValue('WHERE') || 'FROM_START';\n switch (where) {\n case 'FIRST':\n if (mode === 'GET') {\n const list =\n PHP.valueToCode(block, 'VALUE', PHP.ORDER_MEMBER) || 'array()';\n const code = list + '[0]';\n return [code, PHP.ORDER_MEMBER];\n } else if (mode === 'GET_REMOVE') {\n const list =\n PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || 'array()';\n const code = 'array_shift(' + list + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n } else if (mode === 'REMOVE') {\n const list =\n PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || 'array()';\n return 'array_shift(' + list + ');\\n';\n }\n break;\n case 'LAST':\n if (mode === 'GET') {\n const list =\n PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || 'array()';\n const code = 'end(' + list + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n } else if (mode === 'GET_REMOVE') {\n const list =\n PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || 'array()';\n const code = 'array_pop(' + list + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n } else if (mode === 'REMOVE') {\n const list =\n PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || 'array()';\n return 'array_pop(' + list + ');\\n';\n }\n break;\n case 'FROM_START': {\n const at = PHP.getAdjusted(block, 'AT');\n if (mode === 'GET') {\n const list =\n PHP.valueToCode(block, 'VALUE', PHP.ORDER_MEMBER) || 'array()';\n const code = list + '[' + at + ']';\n return [code, PHP.ORDER_MEMBER];\n } else if (mode === 'GET_REMOVE') {\n const list =\n PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || 'array()';\n const code = 'array_splice(' + list + ', ' + at + ', 1)[0]';\n return [code, PHP.ORDER_FUNCTION_CALL];\n } else if (mode === 'REMOVE') {\n const list =\n PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || 'array()';\n return 'array_splice(' + list + ', ' + at + ', 1);\\n';\n }\n break;\n }\n case 'FROM_END':\n if (mode === 'GET') {\n const list =\n PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || 'array()';\n const at = PHP.getAdjusted(block, 'AT', 1, true);\n const code = 'array_slice(' + list + ', ' + at + ', 1)[0]';\n return [code, PHP.ORDER_FUNCTION_CALL];\n } else if (mode === 'GET_REMOVE' || mode === 'REMOVE') {\n const list =\n PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || 'array()';\n const at =\n PHP.getAdjusted(block, 'AT', 1, false, PHP.ORDER_SUBTRACTION);\n const code = 'array_splice(' + list + ', count(' + list + ') - ' + at +\n ', 1)[0]';\n if (mode === 'GET_REMOVE') {\n return [code, PHP.ORDER_FUNCTION_CALL];\n } else if (mode === 'REMOVE') {\n return code + ';\\n';\n }\n }\n break;\n case 'RANDOM': {\n const list = PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || 'array()';\n if (mode === 'GET') {\n const functionName = PHP.provideFunction_('lists_get_random_item', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($list) {\n return $list[rand(0,count($list)-1)];\n}\n`);\n const code = functionName + '(' + list + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n } else if (mode === 'GET_REMOVE') {\n const functionName =\n PHP.provideFunction_('lists_get_remove_random_item', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}(&$list) {\n $x = rand(0,count($list)-1);\n unset($list[$x]);\n return array_values($list);\n}\n`);\n const code = functionName + '(' + list + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n } else if (mode === 'REMOVE') {\n const functionName = PHP.provideFunction_('lists_remove_random_item', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}(&$list) {\n unset($list[rand(0,count($list)-1)]);\n}\n`);\n return functionName + '(' + list + ');\\n';\n }\n break;\n }\n }\n throw Error('Unhandled combination (lists_getIndex).');\n};\n\nPHP['lists_setIndex'] = function(block) {\n // Set element at index.\n // Note: Until February 2013 this block did not have MODE or WHERE inputs.\n const mode = block.getFieldValue('MODE') || 'GET';\n const where = block.getFieldValue('WHERE') || 'FROM_START';\n const value = PHP.valueToCode(block, 'TO', PHP.ORDER_ASSIGNMENT) || 'null';\n // Cache non-trivial values to variables to prevent repeated look-ups.\n // Closure, which accesses and modifies 'list'.\n let cachedList;\n function cacheList() {\n if (cachedList.match(/^\\$\\w+$/)) {\n return '';\n }\n const listVar = PHP.nameDB_.getDistinctName('tmp_list', NameType.VARIABLE);\n const code = listVar + ' = &' + cachedList + ';\\n';\n cachedList = listVar;\n return code;\n }\n switch (where) {\n case 'FIRST':\n if (mode === 'SET') {\n const list =\n PHP.valueToCode(block, 'LIST', PHP.ORDER_MEMBER) || 'array()';\n return list + '[0] = ' + value + ';\\n';\n } else if (mode === 'INSERT') {\n const list =\n PHP.valueToCode(block, 'LIST', PHP.ORDER_NONE) || 'array()';\n return 'array_unshift(' + list + ', ' + value + ');\\n';\n }\n break;\n case 'LAST': {\n const list = PHP.valueToCode(block, 'LIST', PHP.ORDER_NONE) || 'array()';\n if (mode === 'SET') {\n const functionName = PHP.provideFunction_('lists_set_last_item', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}(&$list, $value) {\n $list[count($list) - 1] = $value;\n}\n`);\n return functionName + '(' + list + ', ' + value + ');\\n';\n } else if (mode === 'INSERT') {\n return 'array_push(' + list + ', ' + value + ');\\n';\n }\n break;\n }\n case 'FROM_START': {\n const at = PHP.getAdjusted(block, 'AT');\n if (mode === 'SET') {\n const list =\n PHP.valueToCode(block, 'LIST', PHP.ORDER_MEMBER) || 'array()';\n return list + '[' + at + '] = ' + value + ';\\n';\n } else if (mode === 'INSERT') {\n const list =\n PHP.valueToCode(block, 'LIST', PHP.ORDER_NONE) || 'array()';\n return 'array_splice(' + list + ', ' + at + ', 0, ' + value + ');\\n';\n }\n break;\n }\n case 'FROM_END': {\n const list = PHP.valueToCode(block, 'LIST', PHP.ORDER_NONE) || 'array()';\n const at = PHP.getAdjusted(block, 'AT', 1);\n if (mode === 'SET') {\n const functionName = PHP.provideFunction_('lists_set_from_end', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}(&$list, $at, $value) {\n $list[count($list) - $at] = $value;\n}\n`);\n return functionName + '(' + list + ', ' + at + ', ' + value + ');\\n';\n } else if (mode === 'INSERT') {\n const functionName = PHP.provideFunction_('lists_insert_from_end', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}(&$list, $at, $value) {\n return array_splice($list, count($list) - $at, 0, $value);\n}\n`);\n return functionName + '(' + list + ', ' + at + ', ' + value + ');\\n';\n }\n break;\n }\n case 'RANDOM':\n cachedList =\n PHP.valueToCode(block, 'LIST', PHP.ORDER_REFERENCE) || 'array()';\n let code = cacheList();\n const list = cachedList;\n const xVar = PHP.nameDB_.getDistinctName('tmp_x', NameType.VARIABLE);\n code += xVar + ' = rand(0, count(' + list + ')-1);\\n';\n if (mode === 'SET') {\n code += list + '[' + xVar + '] = ' + value + ';\\n';\n return code;\n } else if (mode === 'INSERT') {\n code += 'array_splice(' + list + ', ' + xVar + ', 0, ' + value + ');\\n';\n return code;\n }\n break;\n }\n throw Error('Unhandled combination (lists_setIndex).');\n};\n\nPHP['lists_getSublist'] = function(block) {\n // Get sublist.\n const list = PHP.valueToCode(block, 'LIST', PHP.ORDER_NONE) || 'array()';\n const where1 = block.getFieldValue('WHERE1');\n const where2 = block.getFieldValue('WHERE2');\n let code;\n if (where1 === 'FIRST' && where2 === 'LAST') {\n code = list;\n } else if (\n list.match(/^\\$\\w+$/) ||\n (where1 !== 'FROM_END' && where2 === 'FROM_START')) {\n // If the list is a simple value or doesn't require a call for length, don't\n // generate a helper function.\n let at1;\n switch (where1) {\n case 'FROM_START':\n at1 = PHP.getAdjusted(block, 'AT1');\n break;\n case 'FROM_END':\n at1 = PHP.getAdjusted(block, 'AT1', 1, false, PHP.ORDER_SUBTRACTION);\n at1 = 'count(' + list + ') - ' + at1;\n break;\n case 'FIRST':\n at1 = '0';\n break;\n default:\n throw Error('Unhandled option (lists_getSublist).');\n }\n let at2;\n let length;\n switch (where2) {\n case 'FROM_START':\n at2 = PHP.getAdjusted(block, 'AT2', 0, false, PHP.ORDER_SUBTRACTION);\n length = at2 + ' - ';\n if (stringUtils.isNumber(String(at1)) ||\n String(at1).match(/^\\(.+\\)$/)) {\n length += at1;\n } else {\n length += '(' + at1 + ')';\n }\n length += ' + 1';\n break;\n case 'FROM_END':\n at2 = PHP.getAdjusted(block, 'AT2', 0, false, PHP.ORDER_SUBTRACTION);\n length = 'count(' + list + ') - ' + at2 + ' - ';\n if (stringUtils.isNumber(String(at1)) ||\n String(at1).match(/^\\(.+\\)$/)) {\n length += at1;\n } else {\n length += '(' + at1 + ')';\n }\n break;\n case 'LAST':\n length = 'count(' + list + ') - ';\n if (stringUtils.isNumber(String(at1)) ||\n String(at1).match(/^\\(.+\\)$/)) {\n length += at1;\n } else {\n length += '(' + at1 + ')';\n }\n break;\n default:\n throw Error('Unhandled option (lists_getSublist).');\n }\n code = 'array_slice(' + list + ', ' + at1 + ', ' + length + ')';\n } else {\n const at1 = PHP.getAdjusted(block, 'AT1');\n const at2 = PHP.getAdjusted(block, 'AT2');\n const functionName = PHP.provideFunction_('lists_get_sublist', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($list, $where1, $at1, $where2, $at2) {\n if ($where1 == 'FROM_END') {\n $at1 = count($list) - 1 - $at1;\n } else if ($where1 == 'FIRST') {\n $at1 = 0;\n } else if ($where1 != 'FROM_START') {\n throw new Exception('Unhandled option (lists_get_sublist).');\n }\n $length = 0;\n if ($where2 == 'FROM_START') {\n $length = $at2 - $at1 + 1;\n } else if ($where2 == 'FROM_END') {\n $length = count($list) - $at1 - $at2;\n } else if ($where2 == 'LAST') {\n $length = count($list) - $at1;\n } else {\n throw new Exception('Unhandled option (lists_get_sublist).');\n }\n return array_slice($list, $at1, $length);\n}\n`);\n code = functionName + '(' + list + ', \\'' + where1 + '\\', ' + at1 + ', \\'' +\n where2 + '\\', ' + at2 + ')';\n }\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['lists_sort'] = function(block) {\n // Block for sorting a list.\n const listCode = PHP.valueToCode(block, 'LIST', PHP.ORDER_NONE) || 'array()';\n const direction = block.getFieldValue('DIRECTION') === '1' ? 1 : -1;\n const type = block.getFieldValue('TYPE');\n const functionName = PHP.provideFunction_('lists_sort', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($list, $type, $direction) {\n $sortCmpFuncs = array(\n 'NUMERIC' => 'strnatcasecmp',\n 'TEXT' => 'strcmp',\n 'IGNORE_CASE' => 'strcasecmp'\n );\n $sortCmp = $sortCmpFuncs[$type];\n $list2 = $list;\n usort($list2, $sortCmp);\n if ($direction == -1) {\n $list2 = array_reverse($list2);\n }\n return $list2;\n}\n`);\n const sortCode =\n functionName + '(' + listCode + ', \"' + type + '\", ' + direction + ')';\n return [sortCode, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['lists_split'] = function(block) {\n // Block for splitting text into a list, or joining a list into text.\n let value_input = PHP.valueToCode(block, 'INPUT', PHP.ORDER_NONE);\n const value_delim = PHP.valueToCode(block, 'DELIM', PHP.ORDER_NONE) || \"''\";\n const mode = block.getFieldValue('MODE');\n let functionName;\n if (mode === 'SPLIT') {\n if (!value_input) {\n value_input = \"''\";\n }\n functionName = 'explode';\n } else if (mode === 'JOIN') {\n if (!value_input) {\n value_input = 'array()';\n }\n functionName = 'implode';\n } else {\n throw Error('Unknown mode: ' + mode);\n }\n const code = functionName + '(' + value_delim + ', ' + value_input + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['lists_reverse'] = function(block) {\n // Block for reversing a list.\n const list = PHP.valueToCode(block, 'LIST', PHP.ORDER_NONE) || '[]';\n const code = 'array_reverse(' + list + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for logic blocks.\n */\n'use strict';\n\ngoog.module('Blockly.PHP.logic');\n\nconst {phpGenerator: PHP} = goog.require('Blockly.PHP');\n\n\nPHP['controls_if'] = function(block) {\n // If/elseif/else condition.\n let n = 0;\n let code = '', branchCode, conditionCode;\n if (PHP.STATEMENT_PREFIX) {\n // Automatic prefix insertion is switched off for this block. Add manually.\n code += PHP.injectId(PHP.STATEMENT_PREFIX, block);\n }\n do {\n conditionCode = PHP.valueToCode(block, 'IF' + n, PHP.ORDER_NONE) || 'false';\n branchCode = PHP.statementToCode(block, 'DO' + n);\n if (PHP.STATEMENT_SUFFIX) {\n branchCode = PHP.prefixLines(\n PHP.injectId(PHP.STATEMENT_SUFFIX, block), PHP.INDENT) +\n branchCode;\n }\n code += (n > 0 ? ' else ' : '') + 'if (' + conditionCode + ') {\\n' +\n branchCode + '}';\n n++;\n } while (block.getInput('IF' + n));\n\n if (block.getInput('ELSE') || PHP.STATEMENT_SUFFIX) {\n branchCode = PHP.statementToCode(block, 'ELSE');\n if (PHP.STATEMENT_SUFFIX) {\n branchCode = PHP.prefixLines(\n PHP.injectId(PHP.STATEMENT_SUFFIX, block), PHP.INDENT) +\n branchCode;\n }\n code += ' else {\\n' + branchCode + '}';\n }\n return code + '\\n';\n};\n\nPHP['controls_ifelse'] = PHP['controls_if'];\n\nPHP['logic_compare'] = function(block) {\n // Comparison operator.\n const OPERATORS =\n {'EQ': '==', 'NEQ': '!=', 'LT': '<', 'LTE': '<=', 'GT': '>', 'GTE': '>='};\n const operator = OPERATORS[block.getFieldValue('OP')];\n const order = (operator === '==' || operator === '!=') ? PHP.ORDER_EQUALITY :\n PHP.ORDER_RELATIONAL;\n const argument0 = PHP.valueToCode(block, 'A', order) || '0';\n const argument1 = PHP.valueToCode(block, 'B', order) || '0';\n const code = argument0 + ' ' + operator + ' ' + argument1;\n return [code, order];\n};\n\nPHP['logic_operation'] = function(block) {\n // Operations 'and', 'or'.\n const operator = (block.getFieldValue('OP') === 'AND') ? '&&' : '||';\n const order =\n (operator === '&&') ? PHP.ORDER_LOGICAL_AND : PHP.ORDER_LOGICAL_OR;\n let argument0 = PHP.valueToCode(block, 'A', order);\n let argument1 = PHP.valueToCode(block, 'B', order);\n if (!argument0 && !argument1) {\n // If there are no arguments, then the return value is false.\n argument0 = 'false';\n argument1 = 'false';\n } else {\n // Single missing arguments have no effect on the return value.\n const defaultArgument = (operator === '&&') ? 'true' : 'false';\n if (!argument0) {\n argument0 = defaultArgument;\n }\n if (!argument1) {\n argument1 = defaultArgument;\n }\n }\n const code = argument0 + ' ' + operator + ' ' + argument1;\n return [code, order];\n};\n\nPHP['logic_negate'] = function(block) {\n // Negation.\n const order = PHP.ORDER_LOGICAL_NOT;\n const argument0 = PHP.valueToCode(block, 'BOOL', order) || 'true';\n const code = '!' + argument0;\n return [code, order];\n};\n\nPHP['logic_boolean'] = function(block) {\n // Boolean values true and false.\n const code = (block.getFieldValue('BOOL') === 'TRUE') ? 'true' : 'false';\n return [code, PHP.ORDER_ATOMIC];\n};\n\nPHP['logic_null'] = function(block) {\n // Null data type.\n return ['null', PHP.ORDER_ATOMIC];\n};\n\nPHP['logic_ternary'] = function(block) {\n // Ternary operator.\n const value_if =\n PHP.valueToCode(block, 'IF', PHP.ORDER_CONDITIONAL) || 'false';\n const value_then =\n PHP.valueToCode(block, 'THEN', PHP.ORDER_CONDITIONAL) || 'null';\n const value_else =\n PHP.valueToCode(block, 'ELSE', PHP.ORDER_CONDITIONAL) || 'null';\n const code = value_if + ' ? ' + value_then + ' : ' + value_else;\n return [code, PHP.ORDER_CONDITIONAL];\n};\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for loop blocks.\n */\n'use strict';\n\ngoog.module('Blockly.PHP.loops');\n\nconst stringUtils = goog.require('Blockly.utils.string');\nconst {NameType} = goog.require('Blockly.Names');\nconst {phpGenerator: PHP} = goog.require('Blockly.PHP');\n\n\nPHP['controls_repeat_ext'] = function(block) {\n // Repeat n times.\n let repeats;\n if (block.getField('TIMES')) {\n // Internal number.\n repeats = String(Number(block.getFieldValue('TIMES')));\n } else {\n // External number.\n repeats = PHP.valueToCode(block, 'TIMES', PHP.ORDER_ASSIGNMENT) || '0';\n }\n let branch = PHP.statementToCode(block, 'DO');\n branch = PHP.addLoopTrap(branch, block);\n let code = '';\n const loopVar = PHP.nameDB_.getDistinctName('count', NameType.VARIABLE);\n let endVar = repeats;\n if (!repeats.match(/^\\w+$/) && !stringUtils.isNumber(repeats)) {\n endVar = PHP.nameDB_.getDistinctName('repeat_end', NameType.VARIABLE);\n code += endVar + ' = ' + repeats + ';\\n';\n }\n code += 'for (' + loopVar + ' = 0; ' + loopVar + ' < ' + endVar + '; ' +\n loopVar + '++) {\\n' + branch + '}\\n';\n return code;\n};\n\nPHP['controls_repeat'] = PHP['controls_repeat_ext'];\n\nPHP['controls_whileUntil'] = function(block) {\n // Do while/until loop.\n const until = block.getFieldValue('MODE') === 'UNTIL';\n let argument0 =\n PHP.valueToCode(\n block, 'BOOL', until ? PHP.ORDER_LOGICAL_NOT : PHP.ORDER_NONE) ||\n 'false';\n let branch = PHP.statementToCode(block, 'DO');\n branch = PHP.addLoopTrap(branch, block);\n if (until) {\n argument0 = '!' + argument0;\n }\n return 'while (' + argument0 + ') {\\n' + branch + '}\\n';\n};\n\nPHP['controls_for'] = function(block) {\n // For loop.\n const variable0 =\n PHP.nameDB_.getName(block.getFieldValue('VAR'), NameType.VARIABLE);\n const argument0 = PHP.valueToCode(block, 'FROM', PHP.ORDER_ASSIGNMENT) || '0';\n const argument1 = PHP.valueToCode(block, 'TO', PHP.ORDER_ASSIGNMENT) || '0';\n const increment = PHP.valueToCode(block, 'BY', PHP.ORDER_ASSIGNMENT) || '1';\n let branch = PHP.statementToCode(block, 'DO');\n branch = PHP.addLoopTrap(branch, block);\n let code;\n if (stringUtils.isNumber(argument0) && stringUtils.isNumber(argument1) &&\n stringUtils.isNumber(increment)) {\n // All arguments are simple numbers.\n const up = Number(argument0) <= Number(argument1);\n code = 'for (' + variable0 + ' = ' + argument0 + '; ' + variable0 +\n (up ? ' <= ' : ' >= ') + argument1 + '; ' + variable0;\n const step = Math.abs(Number(increment));\n if (step === 1) {\n code += up ? '++' : '--';\n } else {\n code += (up ? ' += ' : ' -= ') + step;\n }\n code += ') {\\n' + branch + '}\\n';\n } else {\n code = '';\n // Cache non-trivial values to variables to prevent repeated look-ups.\n let startVar = argument0;\n if (!argument0.match(/^\\w+$/) && !stringUtils.isNumber(argument0)) {\n startVar =\n PHP.nameDB_.getDistinctName(variable0 + '_start', NameType.VARIABLE);\n code += startVar + ' = ' + argument0 + ';\\n';\n }\n let endVar = argument1;\n if (!argument1.match(/^\\w+$/) && !stringUtils.isNumber(argument1)) {\n endVar =\n PHP.nameDB_.getDistinctName(variable0 + '_end', NameType.VARIABLE);\n code += endVar + ' = ' + argument1 + ';\\n';\n }\n // Determine loop direction at start, in case one of the bounds\n // changes during loop execution.\n const incVar =\n PHP.nameDB_.getDistinctName(variable0 + '_inc', NameType.VARIABLE);\n code += incVar + ' = ';\n if (stringUtils.isNumber(increment)) {\n code += Math.abs(increment) + ';\\n';\n } else {\n code += 'abs(' + increment + ');\\n';\n }\n code += 'if (' + startVar + ' > ' + endVar + ') {\\n';\n code += PHP.INDENT + incVar + ' = -' + incVar + ';\\n';\n code += '}\\n';\n code += 'for (' + variable0 + ' = ' + startVar + '; ' + incVar +\n ' >= 0 ? ' + variable0 + ' <= ' + endVar + ' : ' + variable0 +\n ' >= ' + endVar + '; ' + variable0 + ' += ' + incVar + ') {\\n' +\n branch + '}\\n';\n }\n return code;\n};\n\nPHP['controls_forEach'] = function(block) {\n // For each loop.\n const variable0 =\n PHP.nameDB_.getName(block.getFieldValue('VAR'), NameType.VARIABLE);\n const argument0 =\n PHP.valueToCode(block, 'LIST', PHP.ORDER_ASSIGNMENT) || '[]';\n let branch = PHP.statementToCode(block, 'DO');\n branch = PHP.addLoopTrap(branch, block);\n let code = '';\n code +=\n 'foreach (' + argument0 + ' as ' + variable0 + ') {\\n' + branch + '}\\n';\n return code;\n};\n\nPHP['controls_flow_statements'] = function(block) {\n // Flow statements: continue, break.\n let xfix = '';\n if (PHP.STATEMENT_PREFIX) {\n // Automatic prefix insertion is switched off for this block. Add manually.\n xfix += PHP.injectId(PHP.STATEMENT_PREFIX, block);\n }\n if (PHP.STATEMENT_SUFFIX) {\n // Inject any statement suffix here since the regular one at the end\n // will not get executed if the break/continue is triggered.\n xfix += PHP.injectId(PHP.STATEMENT_SUFFIX, block);\n }\n if (PHP.STATEMENT_PREFIX) {\n const loop = block.getSurroundLoop();\n if (loop && !loop.suppressPrefixSuffix) {\n // Inject loop's statement prefix here since the regular one at the end\n // of the loop will not get executed if 'continue' is triggered.\n // In the case of 'break', a prefix is needed due to the loop's suffix.\n xfix += PHP.injectId(PHP.STATEMENT_PREFIX, loop);\n }\n }\n switch (block.getFieldValue('FLOW')) {\n case 'BREAK':\n return xfix + 'break;\\n';\n case 'CONTINUE':\n return xfix + 'continue;\\n';\n }\n throw Error('Unknown flow statement.');\n};\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for math blocks.\n */\n'use strict';\n\ngoog.module('Blockly.PHP.math');\n\nconst {NameType} = goog.require('Blockly.Names');\nconst {phpGenerator: PHP} = goog.require('Blockly.PHP');\n\n\nPHP['math_number'] = function(block) {\n // Numeric value.\n let code = Number(block.getFieldValue('NUM'));\n const order = code >= 0 ? PHP.ORDER_ATOMIC : PHP.ORDER_UNARY_NEGATION;\n if (code === Infinity) {\n code = 'INF';\n } else if (code === -Infinity) {\n code = '-INF';\n }\n return [code, order];\n};\n\nPHP['math_arithmetic'] = function(block) {\n // Basic arithmetic operators, and power.\n const OPERATORS = {\n 'ADD': [' + ', PHP.ORDER_ADDITION],\n 'MINUS': [' - ', PHP.ORDER_SUBTRACTION],\n 'MULTIPLY': [' * ', PHP.ORDER_MULTIPLICATION],\n 'DIVIDE': [' / ', PHP.ORDER_DIVISION],\n 'POWER': [' ** ', PHP.ORDER_POWER],\n };\n const tuple = OPERATORS[block.getFieldValue('OP')];\n const operator = tuple[0];\n const order = tuple[1];\n const argument0 = PHP.valueToCode(block, 'A', order) || '0';\n const argument1 = PHP.valueToCode(block, 'B', order) || '0';\n const code = argument0 + operator + argument1;\n return [code, order];\n};\n\nPHP['math_single'] = function(block) {\n // Math operators with single operand.\n const operator = block.getFieldValue('OP');\n let code;\n let arg;\n if (operator === 'NEG') {\n // Negation is a special case given its different operator precedence.\n arg = PHP.valueToCode(block, 'NUM', PHP.ORDER_UNARY_NEGATION) || '0';\n if (arg[0] === '-') {\n // --3 is not legal in JS.\n arg = ' ' + arg;\n }\n code = '-' + arg;\n return [code, PHP.ORDER_UNARY_NEGATION];\n }\n if (operator === 'SIN' || operator === 'COS' || operator === 'TAN') {\n arg = PHP.valueToCode(block, 'NUM', PHP.ORDER_DIVISION) || '0';\n } else {\n arg = PHP.valueToCode(block, 'NUM', PHP.ORDER_NONE) || '0';\n }\n // First, handle cases which generate values that don't need parentheses\n // wrapping the code.\n switch (operator) {\n case 'ABS':\n code = 'abs(' + arg + ')';\n break;\n case 'ROOT':\n code = 'sqrt(' + arg + ')';\n break;\n case 'LN':\n code = 'log(' + arg + ')';\n break;\n case 'EXP':\n code = 'exp(' + arg + ')';\n break;\n case 'POW10':\n code = 'pow(10,' + arg + ')';\n break;\n case 'ROUND':\n code = 'round(' + arg + ')';\n break;\n case 'ROUNDUP':\n code = 'ceil(' + arg + ')';\n break;\n case 'ROUNDDOWN':\n code = 'floor(' + arg + ')';\n break;\n case 'SIN':\n code = 'sin(' + arg + ' / 180 * pi())';\n break;\n case 'COS':\n code = 'cos(' + arg + ' / 180 * pi())';\n break;\n case 'TAN':\n code = 'tan(' + arg + ' / 180 * pi())';\n break;\n }\n if (code) {\n return [code, PHP.ORDER_FUNCTION_CALL];\n }\n // Second, handle cases which generate values that may need parentheses\n // wrapping the code.\n switch (operator) {\n case 'LOG10':\n code = 'log(' + arg + ') / log(10)';\n break;\n case 'ASIN':\n code = 'asin(' + arg + ') / pi() * 180';\n break;\n case 'ACOS':\n code = 'acos(' + arg + ') / pi() * 180';\n break;\n case 'ATAN':\n code = 'atan(' + arg + ') / pi() * 180';\n break;\n default:\n throw Error('Unknown math operator: ' + operator);\n }\n return [code, PHP.ORDER_DIVISION];\n};\n\nPHP['math_constant'] = function(block) {\n // Constants: PI, E, the Golden Ratio, sqrt(2), 1/sqrt(2), INFINITY.\n const CONSTANTS = {\n 'PI': ['M_PI', PHP.ORDER_ATOMIC],\n 'E': ['M_E', PHP.ORDER_ATOMIC],\n 'GOLDEN_RATIO': ['(1 + sqrt(5)) / 2', PHP.ORDER_DIVISION],\n 'SQRT2': ['M_SQRT2', PHP.ORDER_ATOMIC],\n 'SQRT1_2': ['M_SQRT1_2', PHP.ORDER_ATOMIC],\n 'INFINITY': ['INF', PHP.ORDER_ATOMIC],\n };\n return CONSTANTS[block.getFieldValue('CONSTANT')];\n};\n\nPHP['math_number_property'] = function(block) {\n // Check if a number is even, odd, prime, whole, positive, or negative\n // or if it is divisible by certain number. Returns true or false.\n const PROPERTIES = {\n 'EVEN': ['', ' % 2 == 0', PHP.ORDER_MODULUS, PHP.ORDER_EQUALITY],\n 'ODD': ['', ' % 2 == 1', PHP.ORDER_MODULUS, PHP.ORDER_EQUALITY],\n 'WHOLE': ['is_int(', ')', PHP.ORDER_NONE, PHP.ORDER_FUNCTION_CALL],\n 'POSITIVE': ['', ' > 0', PHP.ORDER_RELATIONAL, PHP.ORDER_RELATIONAL],\n 'NEGATIVE': ['', ' < 0', PHP.ORDER_RELATIONAL, PHP.ORDER_RELATIONAL],\n 'DIVISIBLE_BY': [null, null, PHP.ORDER_MODULUS, PHP.ORDER_EQUALITY],\n 'PRIME': [null, null, PHP.ORDER_NONE, PHP.ORDER_FUNCTION_CALL],\n };\n const dropdownProperty = block.getFieldValue('PROPERTY');\n const [prefix, suffix, inputOrder, outputOrder] = PROPERTIES[dropdownProperty];\n const numberToCheck = PHP.valueToCode(block, 'NUMBER_TO_CHECK',\n inputOrder) || '0';\n let code;\n if (dropdownProperty === 'PRIME') {\n // Prime is a special case as it is not a one-liner test.\n const functionName = PHP.provideFunction_('math_isPrime', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($n) {\n // https://en.wikipedia.org/wiki/Primality_test#Naive_methods\n if ($n == 2 || $n == 3) {\n return true;\n }\n // False if n is NaN, negative, is 1, or not whole.\n // And false if n is divisible by 2 or 3.\n if (!is_numeric($n) || $n <= 1 || $n % 1 != 0 || $n % 2 == 0 || $n % 3 == 0) {\n return false;\n }\n // Check all the numbers of form 6k +/- 1, up to sqrt(n).\n for ($x = 6; $x <= sqrt($n) + 1; $x += 6) {\n if ($n % ($x - 1) == 0 || $n % ($x + 1) == 0) {\n return false;\n }\n }\n return true;\n}\n`);\n code = functionName + '(' + numberToCheck + ')';\n } else if (dropdownProperty === 'DIVISIBLE_BY') {\n const divisor = PHP.valueToCode(block, 'DIVISOR',\n PHP.ORDER_MODULUS) || '0';\n if (divisor === '0') {\n return ['false', PHP.ORDER_ATOMIC];\n\n }\n code = numberToCheck + ' % ' + divisor + ' == 0';\n } else {\n code = prefix + numberToCheck + suffix;\n }\n return [code, outputOrder];\n};\n\nPHP['math_change'] = function(block) {\n // Add to a variable in place.\n const argument0 = PHP.valueToCode(block, 'DELTA', PHP.ORDER_ADDITION) || '0';\n const varName =\n PHP.nameDB_.getName(block.getFieldValue('VAR'), NameType.VARIABLE);\n return varName + ' += ' + argument0 + ';\\n';\n};\n\n// Rounding functions have a single operand.\nPHP['math_round'] = PHP['math_single'];\n// Trigonometry functions have a single operand.\nPHP['math_trig'] = PHP['math_single'];\n\nPHP['math_on_list'] = function(block) {\n // Math functions for lists.\n const func = block.getFieldValue('OP');\n let list;\n let code;\n switch (func) {\n case 'SUM':\n list =\n PHP.valueToCode(block, 'LIST', PHP.ORDER_FUNCTION_CALL) || 'array()';\n code = 'array_sum(' + list + ')';\n break;\n case 'MIN':\n list =\n PHP.valueToCode(block, 'LIST', PHP.ORDER_FUNCTION_CALL) || 'array()';\n code = 'min(' + list + ')';\n break;\n case 'MAX':\n list =\n PHP.valueToCode(block, 'LIST', PHP.ORDER_FUNCTION_CALL) || 'array()';\n code = 'max(' + list + ')';\n break;\n case 'AVERAGE': {\n const functionName = PHP.provideFunction_('math_mean', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($myList) {\n return array_sum($myList) / count($myList);\n}\n`);\n list = PHP.valueToCode(block, 'LIST', PHP.ORDER_NONE) || 'array()';\n code = functionName + '(' + list + ')';\n break;\n }\n case 'MEDIAN': {\n const functionName = PHP.provideFunction_('math_median', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($arr) {\n sort($arr,SORT_NUMERIC);\n return (count($arr) % 2) ? $arr[floor(count($arr) / 2)] :\n ($arr[floor(count($arr) / 2)] + $arr[floor(count($arr) / 2) - 1]) / 2;\n}\n`);\n list = PHP.valueToCode(block, 'LIST', PHP.ORDER_NONE) || '[]';\n code = functionName + '(' + list + ')';\n break;\n }\n case 'MODE': {\n // As a list of numbers can contain more than one mode,\n // the returned result is provided as an array.\n // Mode of [3, 'x', 'x', 1, 1, 2, '3'] -> ['x', 1].\n const functionName = PHP.provideFunction_('math_modes', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($values) {\n if (empty($values)) return array();\n $counts = array_count_values($values);\n arsort($counts); // Sort counts in descending order\n $modes = array_keys($counts, current($counts), true);\n return $modes;\n}\n`);\n list = PHP.valueToCode(block, 'LIST', PHP.ORDER_NONE) || '[]';\n code = functionName + '(' + list + ')';\n break;\n }\n case 'STD_DEV': {\n const functionName = PHP.provideFunction_('math_standard_deviation', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($numbers) {\n $n = count($numbers);\n if (!$n) return null;\n $mean = array_sum($numbers) / count($numbers);\n foreach($numbers as $key => $num) $devs[$key] = pow($num - $mean, 2);\n return sqrt(array_sum($devs) / (count($devs) - 1));\n}\n`);\n list = PHP.valueToCode(block, 'LIST', PHP.ORDER_NONE) || '[]';\n code = functionName + '(' + list + ')';\n break;\n }\n case 'RANDOM': {\n const functionName = PHP.provideFunction_('math_random_list', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($list) {\n $x = rand(0, count($list)-1);\n return $list[$x];\n}\n`);\n list = PHP.valueToCode(block, 'LIST', PHP.ORDER_NONE) || '[]';\n code = functionName + '(' + list + ')';\n break;\n }\n default:\n throw Error('Unknown operator: ' + func);\n }\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['math_modulo'] = function(block) {\n // Remainder computation.\n const argument0 =\n PHP.valueToCode(block, 'DIVIDEND', PHP.ORDER_MODULUS) || '0';\n const argument1 = PHP.valueToCode(block, 'DIVISOR', PHP.ORDER_MODULUS) || '0';\n const code = argument0 + ' % ' + argument1;\n return [code, PHP.ORDER_MODULUS];\n};\n\nPHP['math_constrain'] = function(block) {\n // Constrain a number between two limits.\n const argument0 = PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || '0';\n const argument1 = PHP.valueToCode(block, 'LOW', PHP.ORDER_NONE) || '0';\n const argument2 =\n PHP.valueToCode(block, 'HIGH', PHP.ORDER_NONE) || 'Infinity';\n const code =\n 'min(max(' + argument0 + ', ' + argument1 + '), ' + argument2 + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['math_random_int'] = function(block) {\n // Random integer between [X] and [Y].\n const argument0 = PHP.valueToCode(block, 'FROM', PHP.ORDER_NONE) || '0';\n const argument1 = PHP.valueToCode(block, 'TO', PHP.ORDER_NONE) || '0';\n const functionName = PHP.provideFunction_('math_random_int', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($a, $b) {\n if ($a > $b) {\n return rand($b, $a);\n }\n return rand($a, $b);\n}\n`);\n const code = functionName + '(' + argument0 + ', ' + argument1 + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['math_random_float'] = function(block) {\n // Random fraction between 0 and 1.\n return ['(float)rand()/(float)getrandmax()', PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['math_atan2'] = function(block) {\n // Arctangent of point (X, Y) in degrees from -180 to 180.\n const argument0 = PHP.valueToCode(block, 'X', PHP.ORDER_NONE) || '0';\n const argument1 = PHP.valueToCode(block, 'Y', PHP.ORDER_NONE) || '0';\n return [\n 'atan2(' + argument1 + ', ' + argument0 + ') / pi() * 180',\n PHP.ORDER_DIVISION\n ];\n};\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for procedure blocks.\n */\n'use strict';\n\ngoog.module('Blockly.PHP.procedures');\n\nconst Variables = goog.require('Blockly.Variables');\nconst {NameType} = goog.require('Blockly.Names');\nconst {phpGenerator: PHP} = goog.require('Blockly.PHP');\n\n\nPHP['procedures_defreturn'] = function(block) {\n // Define a procedure with a return value.\n // First, add a 'global' statement for every variable that is not shadowed by\n // a local parameter.\n const globals = [];\n const workspace = block.workspace;\n const usedVariables = Variables.allUsedVarModels(workspace) || [];\n for (let i = 0, variable; variable = usedVariables[i]; i++) {\n const varName = variable.name;\n if (block.getVars().indexOf(varName) === -1) {\n globals.push(PHP.nameDB_.getName(varName, NameType.VARIABLE));\n }\n }\n // Add developer variables.\n const devVarList = Variables.allDeveloperVariables(workspace);\n for (let i = 0; i < devVarList.length; i++) {\n globals.push(\n PHP.nameDB_.getName(devVarList[i], NameType.DEVELOPER_VARIABLE));\n }\n const globalStr =\n globals.length ? PHP.INDENT + 'global ' + globals.join(', ') + ';\\n' : '';\n\n const funcName =\n PHP.nameDB_.getName(block.getFieldValue('NAME'), NameType.PROCEDURE);\n let xfix1 = '';\n if (PHP.STATEMENT_PREFIX) {\n xfix1 += PHP.injectId(PHP.STATEMENT_PREFIX, block);\n }\n if (PHP.STATEMENT_SUFFIX) {\n xfix1 += PHP.injectId(PHP.STATEMENT_SUFFIX, block);\n }\n if (xfix1) {\n xfix1 = PHP.prefixLines(xfix1, PHP.INDENT);\n }\n let loopTrap = '';\n if (PHP.INFINITE_LOOP_TRAP) {\n loopTrap = PHP.prefixLines(\n PHP.injectId(PHP.INFINITE_LOOP_TRAP, block), PHP.INDENT);\n }\n const branch = PHP.statementToCode(block, 'STACK');\n let returnValue = PHP.valueToCode(block, 'RETURN', PHP.ORDER_NONE) || '';\n let xfix2 = '';\n if (branch && returnValue) {\n // After executing the function body, revisit this block for the return.\n xfix2 = xfix1;\n }\n if (returnValue) {\n returnValue = PHP.INDENT + 'return ' + returnValue + ';\\n';\n }\n const args = [];\n const variables = block.getVars();\n for (let i = 0; i < variables.length; i++) {\n args[i] = PHP.nameDB_.getName(variables[i], NameType.VARIABLE);\n }\n let code = 'function ' + funcName + '(' + args.join(', ') + ') {\\n' +\n globalStr + xfix1 + loopTrap + branch + xfix2 + returnValue + '}';\n code = PHP.scrub_(block, code);\n // Add % so as not to collide with helper functions in definitions list.\n PHP.definitions_['%' + funcName] = code;\n return null;\n};\n\n// Defining a procedure without a return value uses the same generator as\n// a procedure with a return value.\nPHP['procedures_defnoreturn'] = PHP['procedures_defreturn'];\n\nPHP['procedures_callreturn'] = function(block) {\n // Call a procedure with a return value.\n const funcName =\n PHP.nameDB_.getName(block.getFieldValue('NAME'), NameType.PROCEDURE);\n const args = [];\n const variables = block.getVars();\n for (let i = 0; i < variables.length; i++) {\n args[i] = PHP.valueToCode(block, 'ARG' + i, PHP.ORDER_NONE) || 'null';\n }\n const code = funcName + '(' + args.join(', ') + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['procedures_callnoreturn'] = function(block) {\n // Call a procedure with no return value.\n // Generated code is for a function call as a statement is the same as a\n // function call as a value, with the addition of line ending.\n const tuple = PHP['procedures_callreturn'](block);\n return tuple[0] + ';\\n';\n};\n\nPHP['procedures_ifreturn'] = function(block) {\n // Conditionally return value from a procedure.\n const condition =\n PHP.valueToCode(block, 'CONDITION', PHP.ORDER_NONE) || 'false';\n let code = 'if (' + condition + ') {\\n';\n if (PHP.STATEMENT_SUFFIX) {\n // Inject any statement suffix here since the regular one at the end\n // will not get executed if the return is triggered.\n code +=\n PHP.prefixLines(PHP.injectId(PHP.STATEMENT_SUFFIX, block), PHP.INDENT);\n }\n if (block.hasReturnValue_) {\n const value = PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || 'null';\n code += PHP.INDENT + 'return ' + value + ';\\n';\n } else {\n code += PHP.INDENT + 'return;\\n';\n }\n code += '}\\n';\n return code;\n};\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for text blocks.\n */\n'use strict';\n\ngoog.module('Blockly.PHP.texts');\n\nconst {NameType} = goog.require('Blockly.Names');\nconst {phpGenerator: PHP} = goog.require('Blockly.PHP');\n\n\nPHP['text'] = function(block) {\n // Text value.\n const code = PHP.quote_(block.getFieldValue('TEXT'));\n return [code, PHP.ORDER_ATOMIC];\n};\n\nPHP['text_multiline'] = function(block) {\n // Text value.\n const code = PHP.multiline_quote_(block.getFieldValue('TEXT'));\n const order =\n code.indexOf('.') !== -1 ? PHP.ORDER_STRING_CONCAT : PHP.ORDER_ATOMIC;\n return [code, order];\n};\n\nPHP['text_join'] = function(block) {\n // Create a string made up of any number of elements of any type.\n if (block.itemCount_ === 0) {\n return [\"''\", PHP.ORDER_ATOMIC];\n } else if (block.itemCount_ === 1) {\n const element = PHP.valueToCode(block, 'ADD0', PHP.ORDER_NONE) || \"''\";\n const code = element;\n return [code, PHP.ORDER_NONE];\n } else if (block.itemCount_ === 2) {\n const element0 =\n PHP.valueToCode(block, 'ADD0', PHP.ORDER_STRING_CONCAT) || \"''\";\n const element1 =\n PHP.valueToCode(block, 'ADD1', PHP.ORDER_STRING_CONCAT) || \"''\";\n const code = element0 + ' . ' + element1;\n return [code, PHP.ORDER_STRING_CONCAT];\n } else {\n const elements = new Array(block.itemCount_);\n for (let i = 0; i < block.itemCount_; i++) {\n elements[i] = PHP.valueToCode(block, 'ADD' + i, PHP.ORDER_NONE) || \"''\";\n }\n const code = 'implode(\\'\\', array(' + elements.join(',') + '))';\n return [code, PHP.ORDER_FUNCTION_CALL];\n }\n};\n\nPHP['text_append'] = function(block) {\n // Append to a variable in place.\n const varName =\n PHP.nameDB_.getName(block.getFieldValue('VAR'), NameType.VARIABLE);\n const value = PHP.valueToCode(block, 'TEXT', PHP.ORDER_ASSIGNMENT) || \"''\";\n return varName + ' .= ' + value + ';\\n';\n};\n\nPHP['text_length'] = function(block) {\n // String or array length.\n const functionName = PHP.provideFunction_('length', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($value) {\n if (is_string($value)) {\n return strlen($value);\n }\n return count($value);\n}\n`);\n const text = PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || \"''\";\n return [functionName + '(' + text + ')', PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['text_isEmpty'] = function(block) {\n // Is the string null or array empty?\n const text = PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || \"''\";\n return ['empty(' + text + ')', PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['text_indexOf'] = function(block) {\n // Search the text for a substring.\n const operator =\n block.getFieldValue('END') === 'FIRST' ? 'strpos' : 'strrpos';\n const substring = PHP.valueToCode(block, 'FIND', PHP.ORDER_NONE) || \"''\";\n const text = PHP.valueToCode(block, 'VALUE', PHP.ORDER_NONE) || \"''\";\n let errorIndex = ' -1';\n let indexAdjustment = '';\n if (block.workspace.options.oneBasedIndex) {\n errorIndex = ' 0';\n indexAdjustment = ' + 1';\n }\n const functionName = PHP.provideFunction_(\n block.getFieldValue('END') === 'FIRST' ? 'text_indexOf' :\n 'text_lastIndexOf',\n `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($text, $search) {\n $pos = ${operator}($text, $search);\n return $pos === false ? ${errorIndex} : $pos${indexAdjustment};\n}\n`);\n const code = functionName + '(' + text + ', ' + substring + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['text_charAt'] = function(block) {\n // Get letter at index.\n const where = block.getFieldValue('WHERE') || 'FROM_START';\n const textOrder = (where === 'RANDOM') ? PHP.ORDER_NONE : PHP.ORDER_NONE;\n const text = PHP.valueToCode(block, 'VALUE', textOrder) || \"''\";\n switch (where) {\n case 'FIRST': {\n const code = 'substr(' + text + ', 0, 1)';\n return [code, PHP.ORDER_FUNCTION_CALL];\n }\n case 'LAST': {\n const code = 'substr(' + text + ', -1)';\n return [code, PHP.ORDER_FUNCTION_CALL];\n }\n case 'FROM_START': {\n const at = PHP.getAdjusted(block, 'AT');\n const code = 'substr(' + text + ', ' + at + ', 1)';\n return [code, PHP.ORDER_FUNCTION_CALL];\n }\n case 'FROM_END': {\n const at = PHP.getAdjusted(block, 'AT', 1, true);\n const code = 'substr(' + text + ', ' + at + ', 1)';\n return [code, PHP.ORDER_FUNCTION_CALL];\n }\n case 'RANDOM': {\n const functionName = PHP.provideFunction_('text_random_letter', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($text) {\n return $text[rand(0, strlen($text) - 1)];\n}\n`);\n const code = functionName + '(' + text + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n }\n }\n throw Error('Unhandled option (text_charAt).');\n};\n\nPHP['text_getSubstring'] = function(block) {\n // Get substring.\n const where1 = block.getFieldValue('WHERE1');\n const where2 = block.getFieldValue('WHERE2');\n const text = PHP.valueToCode(block, 'STRING', PHP.ORDER_NONE) || \"''\";\n if (where1 === 'FIRST' && where2 === 'LAST') {\n const code = text;\n return [code, PHP.ORDER_NONE];\n } else {\n const at1 = PHP.getAdjusted(block, 'AT1');\n const at2 = PHP.getAdjusted(block, 'AT2');\n const functionName = PHP.provideFunction_('text_get_substring', `\nfunction ${PHP.FUNCTION_NAME_PLACEHOLDER_}($text, $where1, $at1, $where2, $at2) {\n if ($where1 == 'FROM_END') {\n $at1 = strlen($text) - 1 - $at1;\n } else if ($where1 == 'FIRST') {\n $at1 = 0;\n } else if ($where1 != 'FROM_START') {\n throw new Exception('Unhandled option (text_get_substring).');\n }\n $length = 0;\n if ($where2 == 'FROM_START') {\n $length = $at2 - $at1 + 1;\n } else if ($where2 == 'FROM_END') {\n $length = strlen($text) - $at1 - $at2;\n } else if ($where2 == 'LAST') {\n $length = strlen($text) - $at1;\n } else {\n throw new Exception('Unhandled option (text_get_substring).');\n }\n return substr($text, $at1, $length);\n}\n`);\n const code = functionName + '(' + text + ', \\'' + where1 + '\\', ' + at1 +\n ', \\'' + where2 + '\\', ' + at2 + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n }\n};\n\nPHP['text_changeCase'] = function(block) {\n // Change capitalization.\n const text = PHP.valueToCode(block, 'TEXT', PHP.ORDER_NONE) || \"''\";\n let code;\n if (block.getFieldValue('CASE') === 'UPPERCASE') {\n code = 'strtoupper(' + text + ')';\n } else if (block.getFieldValue('CASE') === 'LOWERCASE') {\n code = 'strtolower(' + text + ')';\n } else if (block.getFieldValue('CASE') === 'TITLECASE') {\n code = 'ucwords(strtolower(' + text + '))';\n }\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['text_trim'] = function(block) {\n // Trim spaces.\n const OPERATORS = {'LEFT': 'ltrim', 'RIGHT': 'rtrim', 'BOTH': 'trim'};\n const operator = OPERATORS[block.getFieldValue('MODE')];\n const text = PHP.valueToCode(block, 'TEXT', PHP.ORDER_NONE) || \"''\";\n return [operator + '(' + text + ')', PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['text_print'] = function(block) {\n // Print statement.\n const msg = PHP.valueToCode(block, 'TEXT', PHP.ORDER_NONE) || \"''\";\n return 'print(' + msg + ');\\n';\n};\n\nPHP['text_prompt_ext'] = function(block) {\n // Prompt function.\n let msg;\n if (block.getField('TEXT')) {\n // Internal message.\n msg = PHP.quote_(block.getFieldValue('TEXT'));\n } else {\n // External message.\n msg = PHP.valueToCode(block, 'TEXT', PHP.ORDER_NONE) || \"''\";\n }\n let code = 'readline(' + msg + ')';\n const toNumber = block.getFieldValue('TYPE') === 'NUMBER';\n if (toNumber) {\n code = 'floatval(' + code + ')';\n }\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['text_prompt'] = PHP['text_prompt_ext'];\n\nPHP['text_count'] = function(block) {\n const text = PHP.valueToCode(block, 'TEXT', PHP.ORDER_NONE) || \"''\";\n const sub = PHP.valueToCode(block, 'SUB', PHP.ORDER_NONE) || \"''\";\n const code = 'strlen(' + sub + ') === 0' +\n ' ? strlen(' + text + ') + 1' +\n ' : substr_count(' + text + ', ' + sub + ')';\n return [code, PHP.ORDER_CONDITIONAL];\n};\n\nPHP['text_replace'] = function(block) {\n const text = PHP.valueToCode(block, 'TEXT', PHP.ORDER_NONE) || \"''\";\n const from = PHP.valueToCode(block, 'FROM', PHP.ORDER_NONE) || \"''\";\n const to = PHP.valueToCode(block, 'TO', PHP.ORDER_NONE) || \"''\";\n const code = 'str_replace(' + from + ', ' + to + ', ' + text + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n\nPHP['text_reverse'] = function(block) {\n const text = PHP.valueToCode(block, 'TEXT', PHP.ORDER_NONE) || \"''\";\n const code = 'strrev(' + text + ')';\n return [code, PHP.ORDER_FUNCTION_CALL];\n};\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for variable blocks.\n */\n'use strict';\n\ngoog.module('Blockly.PHP.variables');\n\nconst {NameType} = goog.require('Blockly.Names');\nconst {phpGenerator: PHP} = goog.require('Blockly.PHP');\n\n\nPHP['variables_get'] = function(block) {\n // Variable getter.\n const code =\n PHP.nameDB_.getName(block.getFieldValue('VAR'), NameType.VARIABLE);\n return [code, PHP.ORDER_ATOMIC];\n};\n\nPHP['variables_set'] = function(block) {\n // Variable setter.\n const argument0 =\n PHP.valueToCode(block, 'VALUE', PHP.ORDER_ASSIGNMENT) || '0';\n const varName =\n PHP.nameDB_.getName(block.getFieldValue('VAR'), NameType.VARIABLE);\n return varName + ' = ' + argument0 + ';\\n';\n};\n","/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for dynamic variable blocks.\n */\n'use strict';\n\ngoog.module('Blockly.PHP.variablesDynamic');\n\nconst {phpGenerator: PHP} = goog.require('Blockly.PHP');\n/** @suppress {extraRequire} */\ngoog.require('Blockly.PHP.variables');\n\n\n// PHP is dynamically typed.\nPHP['variables_get_dynamic'] = PHP['variables_get'];\nPHP['variables_set_dynamic'] = PHP['variables_set'];\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Complete helper functions for generating PHP for\n * blocks. This is the entrypoint for php_compressed.js.\n * @suppress {extraRequire}\n */\n'use strict';\n\ngoog.module('Blockly.PHP.all');\n\nconst moduleExports = goog.require('Blockly.PHP');\ngoog.require('Blockly.PHP.colour');\ngoog.require('Blockly.PHP.lists');\ngoog.require('Blockly.PHP.logic');\ngoog.require('Blockly.PHP.loops');\ngoog.require('Blockly.PHP.math');\ngoog.require('Blockly.PHP.procedures');\ngoog.require('Blockly.PHP.texts');\ngoog.require('Blockly.PHP.variables');\ngoog.require('Blockly.PHP.variablesDynamic');\n\nexports = moduleExports;\n"]}
1
+ {"version":3,"sources":["generators/php.js","generators/php/colour.js","generators/php/lists.js","generators/php/logic.js","generators/php/loops.js","generators/php/math.js","generators/php/procedures.js","generators/php/text.js","generators/php/variables.js","generators/php/variables_dynamic.js","generators/php/all.js"],"names":["Order","ATOMIC","CLONE","NEW","MEMBER","FUNCTION_CALL","POWER","INCREMENT","DECREMENT","BITWISE_NOT","CAST","SUPPRESS_ERROR","INSTANCEOF","LOGICAL_NOT","UNARY_PLUS","UNARY_NEGATION","MULTIPLICATION","DIVISION","MODULUS","ADDITION","SUBTRACTION","STRING_CONCAT","BITWISE_SHIFT","RELATIONAL","EQUALITY","REFERENCE","BITWISE_AND","BITWISE_XOR","BITWISE_OR","LOGICAL_AND","LOGICAL_OR","IF_NULL","CONDITIONAL","ASSIGNMENT","LOGICAL_AND_WEAK","LOGICAL_XOR","LOGICAL_OR_WEAK","NONE","PhpGenerator","CodeGenerator","constructor","name","ORDER_OVERRIDES","isInitialized","key","addReservedWords","init","workspace","nameDB_","reset","Names","RESERVED_WORDS_","setVariableMap","getVariableMap","populateVariables","populateProcedures","finish","code","definitions","Object","values","definitions_","join","scrubNakedValue","line","quote_","string","replace","multiline_quote_","split","map","lines","scrub_","block","opt_thisOnly","commentCode","outputConnection","targetConnection","comment","getCommentText","wrap","COMMENT_WRAP","prefixLines","i","inputList","length","type","inputTypes","VALUE","childBlock","connection","targetBlock","allNestedComments","nextBlock","nextConnection","nextCode","blockToCode","getAdjusted","atId","opt_delta","opt_negate","opt_order","delta","order","ORDER_NONE","options","oneBasedIndex","defaultAtIndex","outerOrder","innerOrder","ORDER_ADDITION","ORDER_SUBTRACTION","ORDER_UNARY_NEGATION","at","valueToCode","isNumber","Number","Math","floor","phpGenerator","$jscomp$tmp$exports$module$name","forBlock","generator","getFieldValue","provideFunction_","functionName","FUNCTION_NAME_PLACEHOLDER_","red","green","blue","c1","c2","ratio","Array","itemCount_","element","repeatCount","list","argument0","argument1","errorIndex","indexAdjustment","mode","Error","where","value","cachedList","match","listVar","getDistinctName","NameType","VARIABLE","xVar","where1","where2","at1","at2","String","listCode","direction","value_input","value_delim","n","branchCode","conditionCode","STATEMENT_PREFIX","injectId","statementToCode","STATEMENT_SUFFIX","INDENT","getInput","operator","OPERATORS","defaultArgument","value_if","value_then","value_else","repeats","getField","branch","addLoopTrap","loopVar","endVar","until","variable0","getName","increment","up","step","abs","startVar","incVar","xfix","loop","getSurroundLoop","suppressPrefixSuffix","Infinity","tuple","arg","CONSTANTS","PROPERTIES","dropdownProperty","prefix","suffix","inputOrder","outputOrder","numberToCheck","divisor","varName","func","argument2","globals","usedVariables","allUsedVarModels","variable","getVars","indexOf","push","devVarList","allDeveloperVariables","DEVELOPER_VARIABLE","globalStr","funcName","PROCEDURE","xfix1","loopTrap","INFINITE_LOOP_TRAP","returnValue","xfix2","args","variables","hasReturnValue_","element0","element1","elements","text","substring","msg","sub","from","to"],"mappings":"A;;;;;;;;;;;;;;AA2BO,IAAMA,uCAAQ,CACnBC,OAAQ,CADW,CAEnBC,MAAO,CAFY,CAGnBC,IAAK,CAHc,CAInBC,OAAQ,GAJW,CAKnBC,cAAe,GALI,CAMnBC,MAAO,CANY,CAOnBC,UAAW,CAPQ,CAQnBC,UAAW,CARQ,CASnBC,YAAa,CATM,CAUnBC,KAAM,CAVa,CAWnBC,eAAgB,CAXG,CAYnBC,WAAY,CAZO,CAanBC,YAAa,CAbM,CAcnBC,WAAY,GAdO,CAenBC,eAAgB,GAfG,CAgBnBC,eAAgB,GAhBG,CAiBnBC,SAAU,GAjBS,CAkBnBC,QAAS,GAlBU,CAmBnBC,SAAU,GAnBS,CAoBnBC,YAAa,GApBM,CAqBnBC,cAAe,GArBI,CAsBnBC,cAAe,EAtBI,CAuBnBC,WAAY,EAvBO,CAwBnBC,SAAU,EAxBS,CAyBnBC,UAAW,EAzBQ,CA0BnBC,YAAa,EA1BM,CA2BnBC,YAAa,EA3BM,CA4BnBC,WAAY,EA5BO,CA6BnBC,YAAa,EA7BM,CA8BnBC,WAAY,EA9BO,CA+BnBC,QAAS,EA/BU,CAgCnBC,YAAa,EAhCM,CAiCnBC,WAAY,EAjCO,CAkCnBC,iBAAkB,EAlCC;AAmCnBC,YAAa,EAnCM,CAoCnBC,gBAAiB,EApCE,CAqCnBC,KAAM,EArCa,CAAd,CAwCDC,8CAAN,aAA2BC,EAAAA,CAAAA,8CAA3B,CAwBEC,WAAA,CAAYC,CAAZ,CAAgB,CACd,KAAA,CAAMA,IAAA,EAAAA,CAAA,CAAAA,CAAA,CAAQ,KAAd,CApBF,KAAAC,CAAAA,eAAA,CAAkB,CAGhB,CAAC1C,sCAAMI,CAAAA,MAAP,CAAeJ,sCAAMK,CAAAA,aAArB,CAHgB,CAMhB,CAACL,sCAAMI,CAAAA,MAAP,CAAeJ,sCAAMI,CAAAA,MAArB,CANgB,CAQhB,CAACJ,sCAAMa,CAAAA,WAAP,CAAoBb,sCAAMa,CAAAA,WAA1B,CARgB;AAUhB,CAACb,sCAAMgB,CAAAA,cAAP,CAAuBhB,sCAAMgB,CAAAA,cAA7B,CAVgB,CAYhB,CAAChB,sCAAMmB,CAAAA,QAAP,CAAiBnB,sCAAMmB,CAAAA,QAAvB,CAZgB,CAchB,CAACnB,sCAAM6B,CAAAA,WAAP,CAAoB7B,sCAAM6B,CAAAA,WAA1B,CAdgB,CAgBhB,CAAC7B,sCAAM8B,CAAAA,UAAP,CAAmB9B,sCAAM8B,CAAAA,UAAzB,CAhBgB,CAqBhB,KAAKa,CAAAA,aAAL,CAAqB,CAAA,CASrB,KAAK,MAAMC,CAAX,GAAkB5C,uCAAlB,CACE,IAAA,CAAK,QAAL;AAAgB4C,CAAhB,CAAA,CAAuB5C,sCAAA,CAAM4C,CAAN,CAOzB,KAAKC,CAAAA,gBAAL,CAEE,mqCAFF,CAnBc,CAgDhBC,IAAI,CAACC,CAAD,CAAU,CACZ,KAAMD,CAAAA,IAAN,CAAWC,CAAX,CAEK;IAAKC,CAAAA,OAAV,CAGE,IAAKA,CAAAA,OAAQC,CAAAA,KAAb,EAHF,CACE,IAAKD,CAAAA,OADP,CACiB,IAAIE,CAAAA,CAAAA,kCAAJ,CAAU,IAAKC,CAAAA,eAAf,CAAgC,GAAhC,CAKjB,KAAKH,CAAAA,OAAQI,CAAAA,cAAb,CAA4BL,CAAUM,CAAAA,cAAV,EAA5B,CACA,KAAKL,CAAAA,OAAQM,CAAAA,iBAAb,CAA+BP,CAA/B,CACA,KAAKC,CAAAA,OAAQO,CAAAA,kBAAb,CAAgCR,CAAhC,CAEA,KAAKJ,CAAAA,aAAL,CAAqB,CAAA,CAbT,CAqBda,MAAM,CAACC,CAAD,CAAK,CAET,MAAMC,EAAcC,MAAOC,CAAAA,MAAP,CAAc,IAAKC,CAAAA,YAAnB,CAEpBJ,EAAA,CAAO,KAAMD,CAAAA,MAAN,CAAaC,CAAb,CACP,KAAKd,CAAAA,aAAL,CAAqB,CAAA,CAErB,KAAKK,CAAAA,OAAQC,CAAAA,KAAb,EACA,OAAOS,EAAYI,CAAAA,IAAZ,CAAiB,MAAjB,CAAP,CAAkC,QAAlC,CAA6CL,CARpC,CAiBXM,eAAe,CAACC,CAAD,CAAK,CAClB,MAAOA,EAAP,CAAc,KADI,CAWpBC,MAAM,CAACC,CAAD,CAAO,CACXA,CAAA,CAASA,CAAOC,CAAAA,OAAP,CAAe,KAAf,CAAsB,MAAtB,CACJA,CAAAA,OADI,CACI,KADJ,CACW,MADX,CAEJA,CAAAA,OAFI,CAEI,IAFJ;AAEU,KAFV,CAGT,OAAO,GAAP,CAAcD,CAAd,CAAuB,GAJZ,CAcbE,gBAAgB,CAACF,CAAD,CAAO,CAKrB,MAJcA,EAAOG,CAAAA,KAAP,CAAa,KAAb,CAAoBC,CAAAA,GAApBC,CAAwB,IAAKN,CAAAA,MAA7BM,CAIDT,CAAAA,IAAN,CAAW,cAAX,CALc,CAmBvBU,MAAM,CAACC,CAAD,CAAQhB,CAAR,CAAciB,CAAd,CAA0B,CAC9B,IAAIC,EAAc,EAElB,IAAI,CAACF,CAAMG,CAAAA,gBAAX,EAA+B,CAACH,CAAMG,CAAAA,gBAAiBC,CAAAA,gBAAvD,CAAyE,CAEvE,IAAIC,EAAUL,CAAMM,CAAAA,cAAN,EACVD,EAAJ,GACEA,CACA,CADsBE,CAAAA,CAAAA,wCAAZ,CAAiBF,CAAjB,CAA0B,IAAKG,CAAAA,YAA/B,CAA8C,CAA9C,CACV,CAAAN,CAAA,EAAe,IAAKO,CAAAA,WAAL,CAAiBJ,CAAjB,CAA0B,KAA1B,CAAf,CAAkD,IAFpD,CAMA,KAAK,IAAIK,EAAI,CAAb,CAAgBA,CAAhB,CAAoBV,CAAMW,CAAAA,SAAUC,CAAAA,MAApC,CAA4CF,CAAA,EAA5C,CACMV,CAAMW,CAAAA,SAAN,CAAgBD,CAAhB,CAAmBG,CAAAA,IAAvB,GAAgCC,CAAAA,CAAAA,oDAAWC,CAAAA,KAA3C,GACQC,CADR,CACqBhB,CAAMW,CAAAA,SAAN,CAAgBD,CAAhB,CAAmBO,CAAAA,UAAWC,CAAAA,WAA9B,EADrB,IAGIb,CAHJ,CAGc,IAAKc,CAAAA,iBAAL,CAAuBH,CAAvB,CAHd;CAKMd,CALN,EAKqB,IAAKO,CAAAA,WAAL,CAAiBJ,CAAjB,CAA0B,KAA1B,CALrB,CAVqE,CAqBnEe,CAAAA,CACFpB,CAAMqB,CAAAA,cADJD,EACsBpB,CAAMqB,CAAAA,cAAeH,CAAAA,WAArB,EACtBI,EAAAA,CAAWrB,CAAA,CAAe,EAAf,CAAoB,IAAKsB,CAAAA,WAAL,CAAiBH,CAAjB,CACrC,OAAOlB,EAAP,CAAqBlB,CAArB,CAA4BsC,CA3BE,CAuChCE,WAAW,CAACxB,CAAD,CAAQyB,CAAR,CAAcC,CAAd,CAAyBC,CAAzB,CAAqCC,CAArC,CAA8C,CACnDC,CAAAA,CAAQH,CAARG,EAAqB,CACrBC,EAAAA,CAAQF,CAARE,EAAqB,IAAKC,CAAAA,UAC1B/B,EAAM1B,CAAAA,SAAU0D,CAAAA,OAAQC,CAAAA,aAA5B,EACEJ,CAAA,EAEF,KAAIK,EAAiBlC,CAAM1B,CAAAA,SAAU0D,CAAAA,OAAQC,CAAAA,aAAxB,CAAwC,GAAxC,CAA8C,GAAnE,CACIE,EAAaL,CADjB,CAEIM,CACQ,EAAZ,CAAIP,CAAJ,CAEEO,CAFF,CACED,CADF,CACe,IAAKE,CAAAA,cADpB,CAGmB,CAAZ,CAAIR,CAAJ,CAELO,CAFK,CACLD,CADK,CACQ,IAAKG,CAAAA,iBADb,CAGIX,CAHJ,GAKLS,CALK,CAILD,CAJK,CAIQ,IAAKI,CAAAA,oBAJb,CAOHC,EAAAA,CAAK,IAAKC,CAAAA,WAAL,CAAiBzC,CAAjB,CAAwByB,CAAxB,CAA8BU,CAA9B,CAALK,EAAkDN,CAEtCQ,EAAAA,CAAAA,4CAAZ,CAAqBF,CAArB,CAAJ,EAEEA,CACA,CADKG,MAAA,CAAOH,CAAP,CACL,CADkBX,CAClB,CAAIF,CAAJ,GACEa,CADF,CACO,CAACA,CADR,CAHF,GAQc,CAAZ,CAAIX,CAAJ,CACEW,CADF,CACOA,CADP,CACY,KADZ,CACoBX,CADpB,CAEmB,CAFnB,CAEWA,CAFX,GAGEW,CAHF,CAGOA,CAHP,CAGY,KAHZ,CAGoB,CAACX,CAHrB,CAcA;AATIF,CASJ,GAPIa,CAOJ,CARMX,CAAJ,CACO,IADP,CACcW,CADd,CACmB,GADnB,CAGO,GAHP,CAGaA,CAKf,EAFAJ,CAEA,CAFaQ,IAAKC,CAAAA,KAAL,CAAWT,CAAX,CAEb,CADAN,CACA,CADQc,IAAKC,CAAAA,KAAL,CAAWf,CAAX,CACR,CAAIM,CAAJ,EAAkBN,CAAlB,EAA2BM,CAA3B,GACEI,CADF,CACO,GADP,CACaA,CADb,CACkB,GADlB,CAtBF,CA0BA,OAAOA,EA/CgD,CAjM3D,CAxCO,CAgSMM,8CAAe,IAAIjF,6CAhSzB,CA3BPkF,gCAAA,EA2BaxH,gCAAAA,CAAAA,KAAAA,CAAAA,sCAgSAuH,gCAAAA,CAAAA,YAAAA,CAAAA,6C,CC3SbA,6CAAaE,CAAAA,QAAb,CAAA,aAAA,CAAyC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAGhE,MAAO,CADMA,CAAUzD,CAAAA,MAAVR,CAAiBgB,CAAMkD,CAAAA,aAAN,CAAoB,QAApB,CAAjBlE,CACN,CAAOzD,sCAAMC,CAAAA,MAAb,CAHyD,CAMlEsH,8CAAaE,CAAAA,QAAb,CAAA,aAAA,CAAyC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAQhE,MAAO,CANcA,CAAUE,CAAAA,gBAAVC,CAA2B,eAA3BA,CAA4C;WACxDH,CAAUI,CAAAA,0BAD8C;;;CAA5CD,CAMd,CADqB,IACrB,CAAO7H,sCAAMK,CAAAA,aAAb,CARyD,CAWlEkH,8CAAaE,CAAAA,QAAb,CAAA,UAAA,CAAsC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE7D,MAAMK,EAAML,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,KAA7B,CAAoCzE,sCAAMqC,CAAAA,IAA1C,CAAN0F,EAAyD,CAA/D,CACMC,EAAQN,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CAAR2F,EAA6D,CAC7DC,EAAAA,CAAOP,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAP4F,EAA2D,CAcjE,OAAO,CAbcP,CAAUE,CAAAA,gBAAVC,CAA2B,YAA3BA,CAAyC;WACrDH,CAAUI,CAAAA,0BAD2C;;;;;;;;;;CAAzCD,CAad,CADqB,GACrB,CAD2BE,CAC3B,CADiC,IACjC,CADwCC,CACxC,CADgD,IAChD,CADuDC,CACvD,CAD8D,GAC9D,CAAOjI,sCAAMK,CAAAA,aAAb,CAlBsD,CAqB/DkH,8CAAaE,CAAAA,QAAb,CAAA,YAAA,CAAwC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE/D,MAAMQ,EACFR,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,SAA7B,CAAwCzE,sCAAMqC,CAAAA,IAA9C,CADE6F,EACqD,WAD3D,CAEMC,EACFT,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,SAA7B,CAAwCzE,sCAAMqC,CAAAA,IAA9C,CADE8F,EACqD,WACrDC,EAAAA,CAAQV,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CAAR+F,EAA6D,EAqBnE,OAAO,CApBcV,CAAUE,CAAAA,gBAAVC,CAA2B,cAA3BA,CAA2C;WACvDH,CAAUI,CAAAA,0BAD6C;;;;;;;;;;;;;;;;;CAA3CD,CAoBd,CADqB,GACrB,CAD2BK,CAC3B,CADgC,IAChC,CADuCC,CACvC,CAD4C,IAC5C,CADmDC,CACnD,CAD2D,GAC3D,CAAOpI,sCAAMK,CAAAA,aAAb,CA3BwD,CAtDjE,KAAAmH,uCAAA,E,CC4BAD,6CAAaE,CAAAA,QAAb,CAAA,kBAAA,CAA8C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAErE,MAAO,CAAC,SAAD,CAAY1H,sCAAMK,CAAAA,aAAlB,CAF8D,CAKvEkH,8CAAaE,CAAAA,QAAb,CAAA,iBAAA,CAA6C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAEpE,IAAIjE,EAAW4E,KAAJ,CAAU5D,CAAM6D,CAAAA,UAAhB,CACX,KAAK,IAAInD,EAAI,CAAb,CAAgBA,CAAhB,CAAoBV,CAAM6D,CAAAA,UAA1B,CAAsCnD,CAAA,EAAtC,CACE1B,CAAA,CAAK0B,CAAL,CAAA,CAAUuC,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,KAA7B,CAAqCU,CAArC,CAAwCnF,sCAAMqC,CAAAA,IAA9C,CAAV,EAAiE,MAEnEoB,EAAA,CAAO,QAAP,CAAkBA,CAAKK,CAAAA,IAAL,CAAU,IAAV,CAAlB,CAAoC,GACpC,OAAO,CAACL,CAAD,CAAOzD,sCAAMK,CAAAA,aAAb,CAP6D,CAUtEkH;6CAAaE,CAAAA,QAAb,CAAA,YAAA,CAAwC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE/D,MAAMG,EAAeH,CAAUE,CAAAA,gBAAV,CAA2B,cAA3B,CAA2C;WACvDF,CAAUI,CAAAA,0BAD6C;;;;;;;CAA3C,CAArB,CASMS,EAAUb,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAVkG,EAA8D,MAC9DC,EAAAA,CAAcd,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,KAA7B,CAAoCzE,sCAAMqC,CAAAA,IAA1C,CAAdmG,EAAiE,GAEvE,OAAO,CADMX,CACN,CADqB,GACrB,CAD2BU,CAC3B,CADqC,IACrC,CAD4CC,CAC5C,CAD0D,GAC1D,CAAOxI,sCAAMK,CAAAA,aAAb,CAdwD,CAiBjEkH,8CAAaE,CAAAA,QAAb,CAAA,YAAA,CAAwC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE/D,MAAMG,EAAeH,CAAUE,CAAAA,gBAAV,CAA2B,QAA3B,CAAqC;WACjDF,CAAUI,CAAAA,0BADuC;;;;;;;CAArC,CASfW,EAAAA,CAAOf,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CAAPoG,EAA4D,IAClE,OAAO,CAACZ,CAAD,CAAgB,GAAhB,CAAsBY,CAAtB,CAA6B,GAA7B,CAAkCzI,sCAAMK,CAAAA,aAAxC,CAZwD,CAejEkH,8CAAaE,CAAAA,QAAb,CAAA,aAAA,CAAyC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAKhE,MAAO,CAAC,QAAD,EAFHA,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMK,CAAAA,aAA5C,CAEG,EADA,SACA,EAAwB,GAAxB,CAA6BL,sCAAMK,CAAAA,aAAnC,CALyD,CAQlEkH;6CAAaE,CAAAA,QAAb,CAAA,aAAA,CAAyC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAEhE,MAAMgB,EAAYhB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAZqG,EAAgE,IAAtE,CACMC,EACFjB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMI,CAAAA,MAA5C,CADEuI,EACqD,IAC3D,KAAIC,EAAa,KAAjB,CACIC,EAAkB,EAClBpE,EAAM1B,CAAAA,SAAU0D,CAAAA,OAAQC,CAAAA,aAA5B,GACEkC,CACA,CADa,IACb,CAAAC,CAAA,CAAkB,MAFpB,CA6BA,OAAO,EAxB4B,OAAnChB,GAAIpD,CAAMkD,CAAAA,aAAN,CAAoB,KAApB,CAAJE,CAEiBH,CAAUE,CAAAA,gBAAV,CAA2B,SAA3B,CAAsC;WAC9CF,CAAUI,CAAAA,0BADoC;;qDAGJe,CAHI;;WAK9CD,CAL8C;;CAAtC,CAFjBf,CAYiBH,CAAUE,CAAAA,gBAAV,CAA2B,aAA3B,CAA0C;WAClDF,CAAUI,CAAAA,0BADwC;YAEjDc,CAFiD;;sDAIPC,CAJO;;;;CAA1C,CAYV,EADqB,GACrB,CAD2BF,CAC3B,CADuC,IACvC,CAD8CD,CAC9C,CAD0D,GAC1D,CAAO1I,sCAAMK,CAAAA,aAAb,CApCyD,CAuClEkH;6CAAaE,CAAAA,QAAb,CAAA,cAAA,CAA0C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAEjE,IAAMoB,EAAOrE,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CAAPmB,EAAsC,KAE5C,QADcrE,CAAMkD,CAAAA,aAAN,CAAoB,OAApB,CACd,EAD8C,YAC9C,EACE,KAAK,OAAL,CACE,GAAa,KAAb,GAAImB,CAAJ,CAIE,MAAO,EAFHpB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMI,CAAAA,MAA5C,CAEG,EAFoD,SAEpD,EADa,KACb,CAAOJ,sCAAMI,CAAAA,MAAb,CACF,IAAa,YAAb,GAAI0I,CAAJ,CAIL,MAAO,CADM,cACN,EAFHpB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CAEG,EAFkD,SAElD,EAD8B,GAC9B,CAAOrC,sCAAMK,CAAAA,aAAb,CACF;GAAa,QAAb,GAAIyI,CAAJ,CAGL,MAAO,cAAP,EADIpB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CACJ,EADyD,SACzD,EAA+B,MAEjC,MACF,MAAK,MAAL,CACE,GAAa,KAAb,GAAIyG,CAAJ,CAIE,MAAO,CADM,MACN,EAFHpB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CAEG,EAFkD,SAElD,EADsB,GACtB,CAAOrC,sCAAMK,CAAAA,aAAb,CACF,IAAa,YAAb,GAAIyI,CAAJ,CAIL,MAAO,CADM,YACN,EAFHpB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CAEG,EAFkD,SAElD,EAD4B,GAC5B,CAAOrC,sCAAMK,CAAAA,aAAb,CACF,IAAa,QAAb;AAAIyI,CAAJ,CAGL,MAAO,YAAP,EADIpB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CACJ,EADyD,SACzD,EAA6B,MAE/B,MACF,MAAK,YAAL,CACE,IAAM4E,EAAKS,CAAUzB,CAAAA,WAAV,CAAsBxB,CAAtB,CAA6B,IAA7B,CACX,IAAa,KAAb,GAAIqE,CAAJ,CAIE,MAAO,EAFHpB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMI,CAAAA,MAA5C,CAEG,EAFoD,SAEpD,EADa,GACb,CADmB6G,CACnB,CADwB,GACxB,CAAOjH,sCAAMI,CAAAA,MAAb,CACF,IAAa,YAAb,GAAI0I,CAAJ,CAIL,MAAO,CADM,eACN,EAFHpB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CAEG,EAFkD,SAElD,EAD+B,IAC/B,CADsC4E,CACtC,CAD2C,SAC3C,CAAOjH,sCAAMK,CAAAA,aAAb,CACF;GAAa,QAAb,GAAIyI,CAAJ,CAGL,MAAO,eAAP,EADIpB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CACJ,EADyD,SACzD,EAAgC,IAAhC,CAAuC4E,CAAvC,CAA4C,SAE9C,MAEF,MAAK,UAAL,CACE,GAAa,KAAb,GAAI6B,CAAJ,CAKE,MAJML,EAIC,CAHHf,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CAGG,EAHkD,SAGlD,CAFD4E,CAEC,CAFIS,CAAUzB,CAAAA,WAAV,CAAsBxB,CAAtB,CAA6B,IAA7B,CAAmC,CAAnC,CAAsC,CAAA,CAAtC,CAEJ,CAAA,CADM,cACN,CADuBgE,CACvB,CAD8B,IAC9B,CADqCxB,CACrC,CAD0C,SAC1C,CAAOjH,sCAAMK,CAAAA,aAAb,CACF,IAAa,YAAb,GAAIyI,CAAJ,EAAsC,QAAtC,GAA6BA,CAA7B,CAAgD,CAC/CL,CAAAA,CACFf,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CADEoG,EACmD,SACnDxB,EAAAA,CACFS,CAAUzB,CAAAA,WAAV,CAAsBxB,CAAtB;AAA6B,IAA7B,CAAmC,CAAnC,CAAsC,CAAA,CAAtC,CAA6CzE,sCAAMoB,CAAAA,WAAnD,CACEqC,EAAAA,CAAO,eAAPA,CAAyBgF,CAAzBhF,CAAgC,UAAhCA,CAA6CgF,CAA7ChF,CAAoD,MAApDA,CAA6DwD,CAA7DxD,CACF,SACJ,IAAa,YAAb,GAAIqF,CAAJ,CACE,MAAO,CAACrF,CAAD,CAAOzD,sCAAMK,CAAAA,aAAb,CACF,IAAa,QAAb,GAAIyI,CAAJ,CACL,MAAOrF,EAAP,CAAc,KAVqC,CAavD,KACF,MAAK,QAAL,CACQgF,CAAAA,CACFf,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CADEoG,EACmD,SACzD,IAAa,KAAb,GAAIK,CAAJ,CAQE,MAAO,CANHpB,CAAUE,CAAAA,gBAAVC,CAA2B,uBAA3BA,CAAoD;WACrDH,CAAUI,CAAAA,0BAD2C;;;CAApDD,CAMG,CADqB,GACrB,CAD2BY,CAC3B,CADkC,GAClC,CAAOzI,sCAAMK,CAAAA,aAAb,CACF,IAAa,YAAb,GAAIyI,CAAJ,CAUL,MAAO,CARHpB,CAAUE,CAAAA,gBAAVC,CAA2B,8BAA3BA,CAA2D;WAC5DH,CAAUI,CAAAA,0BADkD;;;;;CAA3DD,CAQG,CADqB,GACrB,CAD2BY,CAC3B,CADkC,GAClC,CAAOzI,sCAAMK,CAAAA,aAAb,CACF,IAAa,QAAb,GAAIyI,CAAJ,CAOL,MALIpB,EAAUE,CAAAA,gBAAVC,CAA2B,0BAA3BA,CAAuD;WACxDH,CAAUI,CAAAA,0BAD8C;;;CAAvDD,CAKJ,CAAsB,GAAtB,CAA4BY,CAA5B,CAAmC,MAzGzC,CA8GA,KAAMM,MAAA,CAAM,yCAAN,CAAN,CAlHiE,CAqHnExB;6CAAaE,CAAAA,QAAb,CAAA,cAAA,CAA0C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAGjE,MAAMoB,EAAOrE,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CAAPmB,EAAsC,KAC5C,KAAME,EAAQvE,CAAMkD,CAAAA,aAAN,CAAoB,OAApB,CAARqB,EAAwC,YAC9C,OAAMC,EACFvB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,IAA7B,CAAmCzE,sCAAMiC,CAAAA,UAAzC,CADEgH,EACsD,MAc5D,QAAQD,CAAR,EACE,KAAK,OAAL,CACE,GAAa,KAAb,GAAIF,CAAJ,CAGE,OADIpB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMI,CAAAA,MAA3C,CACJ,EAD0D,SAC1D,EAAc,QAAd,CAAyB6I,CAAzB,CAAiC,KAC5B,IAAa,QAAb,GAAIH,CAAJ,CAGL,MAAO,gBAAP,EADIpB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CACJ;AADwD,SACxD,EAAiC,IAAjC,CAAwC4G,CAAxC,CAAgD,MAElD,MACF,MAAK,MAAL,CACQR,CAAAA,CACFf,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CADEoG,EACkD,SACxD,IAAa,KAAb,GAAIK,CAAJ,CAOE,MALIpB,EAAUE,CAAAA,gBAAVC,CAA2B,qBAA3BA,CAAkD;WACnDH,CAAUI,CAAAA,0BADyC;;;CAAlDD,CAKJ,CAAsB,GAAtB,CAA4BY,CAA5B,CAAmC,IAAnC,CAA0CQ,CAA1C,CAAkD,MAC7C,IAAa,QAAb,GAAIH,CAAJ,CACL,MAAO,aAAP,CAAuBL,CAAvB,CAA8B,IAA9B,CAAqCQ,CAArC,CAA6C,MAE/C,MAEF,MAAK,YAAL,CACQhC,CAAAA,CAAKS,CAAUzB,CAAAA,WAAV,CAAsBxB,CAAtB,CAA6B,IAA7B,CACX,IAAa,KAAb,GAAIqE,CAAJ,CAGE,OADIpB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMI,CAAAA,MAA3C,CACJ,EAD0D,SAC1D,EAAc,GAAd,CAAoB6G,CAApB,CAAyB,MAAzB,CAAkCgC,CAAlC,CAA0C,KACrC,IAAa,QAAb,GAAIH,CAAJ,CAGL,MAAO,eAAP,EADIpB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CACJ,EADwD,SACxD,EAAgC,IAAhC,CAAuC4E,CAAvC,CAA4C,OAA5C,CAAsDgC,CAAtD,CAA8D,MAEhE,MAEF,MAAK,UAAL,CACQR,CAAAA,CACFf,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CADEoG,EACkD,SAClDxB,EAAAA,CAAKS,CAAUzB,CAAAA,WAAV,CAAsBxB,CAAtB;AAA6B,IAA7B,CAAmC,CAAnC,CACX,IAAa,KAAb,GAAIqE,CAAJ,CAOE,MALIpB,EAAUE,CAAAA,gBAAVC,CAA2B,oBAA3BA,CAAiD;WAClDH,CAAUI,CAAAA,0BADwC;;;CAAjDD,CAKJ,CAAsB,GAAtB,CAA4BY,CAA5B,CAAmC,IAAnC,CAA0CxB,CAA1C,CAA+C,IAA/C,CAAsDgC,CAAtD,CAA8D,MACzD,IAAa,QAAb,GAAIH,CAAJ,CAOL,MALIpB,EAAUE,CAAAA,gBAAVC,CAA2B,uBAA3BA,CAAoD;WACrDH,CAAUI,CAAAA,0BAD2C;;;CAApDD,CAKJ,CAAsB,GAAtB,CAA4BY,CAA5B,CAAmC,IAAnC,CAA0CxB,CAA1C,CAA+C,IAA/C,CAAsDgC,CAAtD,CAA8D,MAEhE,MAEF,MAAK,QAAL,CACEC,CAAA,CACIxB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMyB,CAAAA,SAA3C,CADJ,EAC6D,SA3E/D,IAAIyH,CAAWC,CAAAA,KAAX,CAAiB,SAAjB,CAAJ,CACE,CAAA,CAAO,EADT,KAAA,CAGMC,CAAAA,CACF1B,CAAU1E,CAAAA,OAAQqG,CAAAA,eAAlB,CAAkC,UAAlC,CAA8CC,CAAAA,CAAAA,qCAASC,CAAAA,QAAvD,CACJ,KAAM9F,EAAO2F,CAAP3F,CAAiB,MAAjBA,CAA0ByF,CAA1BzF,CAAuC,KAC7CyF,EAAA,CAAaE,CACb,EAAA,CAAO3F,CAPP,CA8EQ+F,CAAAA,CACF9B,CAAU1E,CAAAA,OAAQqG,CAAAA,eAAlB,CAAkC,OAAlC,CAA2CC,CAAAA,CAAAA,qCAASC,CAAAA,QAApD,CACJ9F,EAAA,EAAQ+F,CAAR,CAAe,mBAAf,CAAqCf,CAArC,CAA4C,SAC5C,IAAa,KAAb,GAAIK,CAAJ,CAEE,MADArF,EACA,EADQgF,CACR,CADe,GACf,CADqBe,CACrB,CAD4B,MAC5B,CADqCP,CACrC,CAD6C,KAC7C,CACK,IAAa,QAAb,GAAIH,CAAJ,CAEL,MADArF,EACA,EADQ,eACR,CAD0BgF,CAC1B;AADiC,IACjC,CADwCe,CACxC,CAD+C,OAC/C,CADyDP,CACzD,CADiE,MACjE,CA7EN,CAiFA,KAAMF,MAAA,CAAM,yCAAN,CAAN,CArGiE,CAwGnExB;6CAAaE,CAAAA,QAAb,CAAA,gBAAA,CAA4C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAEnE,IAAMe,EAAOf,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAPoG,EAA2D,SAAjE,CACMgB,EAAShF,CAAMkD,CAAAA,aAAN,CAAoB,QAApB,CACf,OAAM+B,EAASjF,CAAMkD,CAAAA,aAAN,CAAoB,QAApB,CAEf,IAAe,OAAf,GAAI8B,CAAJ,EAAqC,MAArC,GAA0BC,CAA1B,CAEO,GACHjB,CAAKU,CAAAA,KAAL,CAAW,SAAX,CADG,EAES,UAFT,GAEFM,CAFE,EAEkC,YAFlC,GAEuBC,CAFvB,CAEiD,CAItD,OAAQD,CAAR,EACE,KAAK,YAAL,CACEE,CAAA,CAAMjC,CAAUzB,CAAAA,WAAV,CAAsBxB,CAAtB,CAA6B,KAA7B,CACN,MACF,MAAK,UAAL,CACEkF,CAAA,CACIjC,CAAUzB,CAAAA,WAAV,CAAsBxB,CAAtB,CAA6B,KAA7B,CAAoC,CAApC,CAAuC,CAAA,CAAvC,CAA8CzE,sCAAMoB,CAAAA,WAApD,CACJuI,EAAA,CAAM,QAAN,CAAiBlB,CAAjB,CAAwB,MAAxB,CAAiCkB,CACjC,MACF;KAAK,OAAL,CACEA,CAAA,CAAM,GACN,MACF,SACE,KAAMZ,MAAA,CAAM,sCAAN,CAAN,CAbJ,CAiBA,OAAQW,CAAR,EACE,KAAK,YAAL,CACEE,CAAA,CACIlC,CAAUzB,CAAAA,WAAV,CAAsBxB,CAAtB,CAA6B,KAA7B,CAAoC,CAApC,CAAuC,CAAA,CAAvC,CAA8CzE,sCAAMoB,CAAAA,WAApD,CACKwI,EAAT,EAAe,KAGbvE,EAAA,CAFc8B,CAAAA,CAAAA,4CAAZ,CAAqB0C,MAAA,CAAOF,CAAP,CAArB,CAAJ,EACIE,MAAA,CAAOF,CAAP,CAAYR,CAAAA,KAAZ,CAAkB,UAAlB,CADJ,CAEE9D,CAFF,CAEYsE,CAFZ,CAIEtE,CAJF,EAIY,GAJZ,CAIkBsE,CAJlB,CAIwB,GAJxB,CAMAtE,EAAA,EAAU,MACV,MACF,MAAK,UAAL,CACEuE,CAAA,CACIlC,CAAUzB,CAAAA,WAAV,CAAsBxB,CAAtB,CAA6B,KAA7B,CAAoC,CAApC,CAAuC,CAAA,CAAvC,CAA8CzE,sCAAMoB,CAAAA,WAApD,CACJiE,EAAA,CAAS,QAAT,CAAoBoD,CAApB,CAA2B,MAA3B,CAAoCmB,CAApC,CAA0C,KAGxCvE,EAAA,CAFc8B,CAAAA,CAAAA,4CAAZ,CAAqB0C,MAAA,CAAOF,CAAP,CAArB,CAAJ;AACIE,MAAA,CAAOF,CAAP,CAAYR,CAAAA,KAAZ,CAAkB,UAAlB,CADJ,CAEE9D,CAFF,CAEYsE,CAFZ,CAIEtE,CAJF,EAIY,GAJZ,CAIkBsE,CAJlB,CAIwB,GAJxB,CAMA,MACF,MAAK,MAAL,CACEtE,CAAA,CAAS,QAAT,CAAoBoD,CAApB,CAA2B,MAGzBpD,EAAA,CAFc8B,CAAAA,CAAAA,4CAAZ,CAAqB0C,MAAA,CAAOF,CAAP,CAArB,CAAJ,EACIE,MAAA,CAAOF,CAAP,CAAYR,CAAAA,KAAZ,CAAkB,UAAlB,CADJ,CAEE9D,CAFF,CAEYsE,CAFZ,CAIEtE,CAJF,EAIY,GAJZ,CAIkBsE,CAJlB,CAIwB,GAJxB,CAMA,MACF,SACE,KAAMZ,MAAA,CAAM,sCAAN,CAAN,CAlCJ,CAoCAtF,CAAA,CAAO,cAAP,CAAwBgF,CAAxB,CAA+B,IAA/B,CAAsCkB,CAAtC,CAA4C,IAA5C,CAAmDtE,CAAnD,CAA4D,GAzDN,CAFjD,IA4DA,CACL,MAAMsE,EAAMjC,CAAUzB,CAAAA,WAAV,CAAsBxB,CAAtB,CAA6B,KAA7B,CACNmF,EAAAA,CAAMlC,CAAUzB,CAAAA,WAAV,CAAsBxB,CAAtB,CAA6B,KAA7B,CAwBZhB,EAAA,CAtBIiE,CAAUE,CAAAA,gBAAVC,CAA2B,mBAA3BA,CAAgD;WAC7CH,CAAUI,CAAAA,0BADmC;;;;;;;;;;;;;;;;;;;;CAAhDD,CAsBJ,CAAsB,GAAtB,CAA4BY,CAA5B,CAAmC,KAAnC,CAA4CgB,CAA5C,CAAqD,KAArD,CAA8DE,CAA9D,CAAoE,KAApE,CACID,CADJ,CACa,KADb,CACsBE,CADtB,CAC4B,GA3BvB,CA6BP,MAAO,CAACnG,CAAD,CAAOzD,sCAAMK,CAAAA,aAAb,CAjG4D,CAoGrEkH,8CAAaE,CAAAA,QAAb,CAAA,UAAA,CAAsC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE7D,MAAMoC,EACFpC,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CADEyH,EACkD,SADxD,CAEMC,EAAiD,GAArC,GAAAtF,CAAMkD,CAAAA,aAAN,CAAoB,WAApB,CAAA,CAA2C,CAA3C,CAA+C,CAAC,CAC5DrC,EAAAA,CAAOb,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CAmBb,OAAO,CAlBcD,CAAUE,CAAAA,gBAAVC,CAA2B,YAA3BA,CAAyC;WACrDH,CAAUI,CAAAA,0BAD2C;;;;;;;;;;;;;;CAAzCD,CAkBd,CADY,GACZ,CADkBiC,CAClB,CAD6B,KAC7B,CADqCxE,CACrC,CAD4C,KAC5C,CADoDyE,CACpD,CADgE,GAChE,CAAW/J,sCAAMK,CAAAA,aAAjB,CAxBsD,CA2B/DkH,8CAAaE,CAAAA,QAAb,CAAA,WAAA,CAAuC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE9D,IAAIsC,EAActC,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CACZ4H,EAAAA,CACFvC,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CADE4H,EACmD,IACnDnB,EAAAA,CAAOrE,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CAEb,IAAa,OAAb,GAAImB,CAAJ,CACOkB,CAGL,GAFEA,CAEF,CAFgB,IAEhB,EAAAnC,CAAA,CAAe,SAJjB,KAKO,IAAa,MAAb,GAAIiB,CAAJ,CACAkB,CAGL,GAFEA,CAEF,CAFgB,SAEhB,EAAAnC,CAAA,CAAe,SAJV,KAML,MAAMkB,MAAA,CAAM,gBAAN,CAAyBD,CAAzB,CAAN,CAGF,MAAO,CADMjB,CACN,CADqB,GACrB,CAD2BoC,CAC3B,CADyC,IACzC,CADgDD,CAChD,CAD8D,GAC9D,CAAOhK,sCAAMK,CAAAA,aAAb,CArBuD,CAwBhEkH;6CAAaE,CAAAA,QAAb,CAAA,aAAA,CAAyC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAIhE,MAAO,CADM,gBACN,EAFMA,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAEN,EAF0D,IAE1D,EADgC,GAChC,CAAOrC,sCAAMK,CAAAA,aAAb,CAJyD,CA9elE,KAAAmH,sCAAA,E,CCgBAD,6CAAaE,CAAAA,QAAb,CAAA,WAAA,CAAuC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE9D,IAAIwC,EAAI,CAAR,CACIzG,EAAO,EADX,CACe0G,CADf,CAC2BC,CACvB1C,EAAU2C,CAAAA,gBAAd,GAEE5G,CAFF,EAEUiE,CAAU4C,CAAAA,QAAV,CAAmB5C,CAAU2C,CAAAA,gBAA7B,CAA+C5F,CAA/C,CAFV,CAIA,GACE2F,EAYA,CAXI1C,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,IAA7B,CAAoCyF,CAApC,CAAuClK,sCAAMqC,CAAAA,IAA7C,CAWJ,EAX0D,OAW1D,CAVA8H,CAUA,CAVazC,CAAU6C,CAAAA,eAAV,CAA0B9F,CAA1B,CAAiC,IAAjC,CAAwCyF,CAAxC,CAUb,CATIxC,CAAU8C,CAAAA,gBASd,GAREL,CAQF,CAPMzC,CAAUxC,CAAAA,WAAV,CACEwC,CAAU4C,CAAAA,QAAV,CAAmB5C,CAAU8C,CAAAA,gBAA7B,CAA+C/F,CAA/C,CADF,CAEEiD,CAAU+C,CAAAA,MAFZ,CAON,CAJMN,CAIN,EAFA1G,CAEA,GAFa,CAAJ,CAAAyG,CAAA,CAAQ,QAAR,CAAmB,EAE5B,EAFkC,MAElC,CAF2CE,CAE3C,CAF2D,OAE3D,CADID,CACJ,CADiB,GACjB,CAAAD,CAAA,EAbF,OAcSzF,CAAMiG,CAAAA,QAAN,CAAe,IAAf,CAAsBR,CAAtB,CAdT,CAgBA,IAAIzF,CAAMiG,CAAAA,QAAN,CAAe,MAAf,CAAJ,EAA8BhD,CAAU8C,CAAAA,gBAAxC,CACEL,CAQA,CARazC,CAAU6C,CAAAA,eAAV,CAA0B9F,CAA1B,CAAiC,MAAjC,CAQb,CAPIiD,CAAU8C,CAAAA,gBAOd;CANEL,CAMF,CALMzC,CAAUxC,CAAAA,WAAV,CACEwC,CAAU4C,CAAAA,QAAV,CAAmB5C,CAAU8C,CAAAA,gBAA7B,CAA+C/F,CAA/C,CADF,CAEEiD,CAAU+C,CAAAA,MAFZ,CAKN,CAFMN,CAEN,EAAA1G,CAAA,EAAQ,WAAR,CAAsB0G,CAAtB,CAAmC,GAErC,OAAO1G,EAAP,CAAc,IAnCgD,CAsChE8D,8CAAaE,CAAAA,QAAb,CAAA,eAAA,CAA2CF,6CAAaE,CAAAA,QAAb,CAAA,WAE3CF;6CAAaE,CAAAA,QAAb,CAAA,aAAA,CAAyC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAIhE,MAAMiD,EADFC,CAAC,GAAM,IAAPA,CAAa,IAAO,IAApBA,CAA0B,GAAM,GAAhCA,CAAqC,IAAO,IAA5CA,CAAkD,GAAM,GAAxDA,CAA6D,IAAO,IAApEA,CACa,CAAUnG,CAAMkD,CAAAA,aAAN,CAAoB,IAApB,CAAV,CAAjB,CACMpB,EAAsB,IAAd,GAACoE,CAAD,EAAmC,IAAnC,GAAsBA,CAAtB,CAA2C3K,sCAAMwB,CAAAA,QAAjD,CAC2CxB,sCAAMuB,CAAAA,UAF/D,CAGMmH,EAAYhB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,GAA7B,CAAkC8B,CAAlC,CAAZmC,EAAwD,GACxDC,EAAAA,CAAYjB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,GAA7B,CAAkC8B,CAAlC,CAAZoC,EAAwD,GAE9D,OAAO,CADMD,CACN,CADkB,GAClB,CADwBiC,CACxB,CADmC,GACnC,CADyChC,CACzC,CAAOpC,CAAP,CAVyD,CAalEgB;6CAAaE,CAAAA,QAAb,CAAA,eAAA,CAA2C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAElE,MAAMiD,EAA0C,KAA/B,GAAClG,CAAMkD,CAAAA,aAAN,CAAoB,IAApB,CAAD,CAAwC,IAAxC,CAA+C,IAAhE,CACMpB,EACY,IAAd,GAACoE,CAAD,CAAsB3K,sCAAM6B,CAAAA,WAA5B,CAA0C7B,sCAAM8B,CAAAA,UACpD,KAAI4G,EAAYhB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,GAA7B,CAAkC8B,CAAlC,CACZoC,EAAAA,CAAYjB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,GAA7B,CAAkC8B,CAAlC,CACXmC,EAAL,EAAmBC,CAAnB,EAMQkC,CAIN,CAJsC,IAAd,GAACF,CAAD,CAAsB,MAAtB,CAA+B,OAIvD,CAHKjC,CAGL,GAFEA,CAEF,CAFcmC,CAEd,EAAKlC,CAAL,GACEA,CADF,CACckC,CADd,CAVF,EAGElC,CAHF,CAEED,CAFF,CAEc,OAad,OAAO,CADMA,CACN,CADkB,GAClB,CADwBiC,CACxB,CADmC,GACnC,CADyChC,CACzC,CAAOpC,CAAP,CAtB2D,CAyBpEgB;6CAAaE,CAAAA,QAAb,CAAA,YAAA,CAAwC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE/D,MAAMnB,EAAQvG,sCAAMa,CAAAA,WAGpB,OAAO,CADM,GACN,EAFW6G,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqC8B,CAArC,CAEX,EAF0D,MAE1D,EAAOA,CAAP,CALwD,CAQjEgB,8CAAaE,CAAAA,QAAb,CAAA,aAAA,CAAyC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAGhE,MAAO,CADuC,MAAjCjE,GAACgB,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CAADlE,CAA2C,MAA3CA,CAAoD,OAC1D,CAAOzD,sCAAMC,CAAAA,MAAb,CAHyD,CAMlEsH,8CAAaE,CAAAA,QAAb,CAAA,UAAA,CAAsC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE7D,MAAO,CAAC,MAAD,CAAS1H,sCAAMC,CAAAA,MAAf,CAFsD,CAK/DsH;6CAAaE,CAAAA,QAAb,CAAA,aAAA,CAAyC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAEhE,MAAMoD,EACFpD,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,IAA7B,CAAmCzE,sCAAMgC,CAAAA,WAAzC,CADE8I,EACuD,OAD7D,CAEMC,EACFrD,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMgC,CAAAA,WAA3C,CADE+I,EACyD,MACzDC,EAAAA,CACFtD,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMgC,CAAAA,WAA3C,CADEgJ,EACyD,MAE/D,OAAO,CADMF,CACN,CADiB,KACjB,CADyBC,CACzB,CADsC,KACtC,CAD8CC,CAC9C,CAAOhL,sCAAMgC,CAAAA,WAAb,CATyD,CAjHlE,KAAAwF,sCAAA,E,CCkBAD,6CAAaE,CAAAA,QAAb,CAAA,mBAAA,CAA+C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAEtE,IAAIuD,CAGFA,EAAA,CAFExG,CAAMyG,CAAAA,QAAN,CAAe,OAAf,CAAJ,CAEYrB,MAAA,CAAOzC,MAAA,CAAO3C,CAAMkD,CAAAA,aAAN,CAAoB,OAApB,CAAP,CAAP,CAFZ,CAKYD,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMiC,CAAAA,UAA5C,CALZ,EAKuE,GAEvE,KAAIkJ,EAASzD,CAAU6C,CAAAA,eAAV,CAA0B9F,CAA1B,CAAiC,IAAjC,CACb0G,EAAA,CAASzD,CAAU0D,CAAAA,WAAV,CAAsBD,CAAtB,CAA8B1G,CAA9B,CACLhB,EAAAA,CAAO,EACX,OAAM4H,EACA3D,CAAU1E,CAAAA,OAAQqG,CAAAA,eAAlB,CAAkC,OAAlC,CAA2CC,CAAAA,CAAAA,qCAASC,CAAAA,QAApD,CACN,KAAI+B,EAASL,CACRA,EAAQ9B,CAAAA,KAAR,CAAc,OAAd,CAAL,EAA4ChC,CAAAA,CAAAA,4CAAZ,CAAqB8D,CAArB,CAAhC,GACEK,CAEA,CADI5D,CAAU1E,CAAAA,OAAQqG,CAAAA,eAAlB,CAAkC,YAAlC;AAAgDC,CAAAA,CAAAA,qCAASC,CAAAA,QAAzD,CACJ,CAAA9F,CAAA,EAAQ6H,CAAR,CAAiB,KAAjB,CAAyBL,CAAzB,CAAmC,KAHrC,CAOA,OAFAxH,EAEA,EAFQ,OAER,CAFkB4H,CAElB,CAF4B,QAE5B,CAFuCA,CAEvC,CAFiD,KAEjD,CAFyDC,CAEzD,CAFkE,IAElE,CADID,CACJ,CADc,SACd,CAD0BF,CAC1B,CADmC,KACnC,CAvBsE,CA0BxE5D,8CAAaE,CAAAA,QAAb,CAAA,eAAA,CACIF,6CAAaE,CAAAA,QAAb,CAAA,mBAEJF;6CAAaE,CAAAA,QAAb,CAAA,mBAAA,CAA+C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAEtE,MAAM6D,EAAwC,OAAxCA,GAAQ9G,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CACd,KAAIe,EACAhB,CAAUR,CAAAA,WAAV,CACIzC,CADJ,CACW,MADX,CACmB8G,CAAA,CAAQvL,sCAAMa,CAAAA,WAAd,CAA4Bb,sCAAMqC,CAAAA,IADrD,CADAqG,EAGA,OAHJ,CAIIyC,EAASzD,CAAU6C,CAAAA,eAAV,CAA0B9F,CAA1B,CAAiC,IAAjC,CACb0G,EAAA,CAASzD,CAAU0D,CAAAA,WAAV,CAAsBD,CAAtB,CAA8B1G,CAA9B,CACL8G,EAAJ,GACE7C,CADF,CACc,GADd,CACoBA,CADpB,CAGA,OAAO,SAAP,CAAmBA,CAAnB,CAA+B,OAA/B,CAAyCyC,CAAzC,CAAkD,KAZoB,CAexE5D;6CAAaE,CAAAA,QAAb,CAAA,YAAA,CAAwC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE/D,IAAM8D,EACF9D,CAAU1E,CAAAA,OAAQyI,CAAAA,OAAlB,CAA0BhH,CAAMkD,CAAAA,aAAN,CAAoB,KAApB,CAA1B,CAAsD2B,CAAAA,CAAAA,qCAASC,CAAAA,QAA/D,CADJ,CAEMb,EACAhB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMiC,CAAAA,UAA3C,CADAyG,EAC0D,GAHhE,CAIMC,EACAjB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,IAA7B,CAAmCzE,sCAAMiC,CAAAA,UAAzC,CADA0G,EACwD,GAC9D,OAAM+C,EACAhE,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,IAA7B,CAAmCzE,sCAAMiC,CAAAA,UAAzC,CADAyJ,EACwD,GAC9D,KAAIP,EAASzD,CAAU6C,CAAAA,eAAV,CAA0B9F,CAA1B,CAAiC,IAAjC,CACb0G,EAAA,CAASzD,CAAU0D,CAAAA,WAAV,CAAsBD,CAAtB,CAA8B1G,CAA9B,CAET,IAAgB0C,CAAAA,CAAAA,4CAAZ,CAAqBuB,CAArB,CAAJ;AAAmDvB,CAAAA,CAAAA,4CAAZ,CAAqBwB,CAArB,CAAvC,EACgBxB,CAAAA,CAAAA,4CAAZ,CAAqBuE,CAArB,CADJ,CAGQC,CASN,CATWvE,MAAA,CAAOsB,CAAP,CASX,EATgCtB,MAAA,CAAOuB,CAAP,CAShC,CARAlF,CAQA,CARO,OAQP,CARiB+H,CAQjB,CAR6B,KAQ7B,CARqC9C,CAQrC,CARiD,IAQjD,CARwD8C,CAQxD,EAPKG,CAAA,CAAK,MAAL,CAAc,MAOnB,EAP6BhD,CAO7B,CAPyC,IAOzC,CAPgD6C,CAOhD,CANMI,CAMN,CANavE,IAAKwE,CAAAA,GAAL,CAASzE,MAAA,CAAOsE,CAAP,CAAT,CAMb,CAJEjI,CAIF,CALa,CAAb,GAAImI,CAAJ,CACEnI,CADF,EACUkI,CAAA,CAAK,IAAL,CAAY,IADtB,EAGElI,CAHF,GAGWkI,CAAA,CAAK,MAAL,CAAc,MAHzB,EAGmCC,CAHnC,CAKA,CAAAnI,CAAA,EAAQ,OAAR,CAAkB0H,CAAlB,CAA2B,KAZ7B,KAaO,CACL1H,CAAA,CAAO,EAEP,KAAIqI,EAAWpD,CACVA,EAAUS,CAAAA,KAAV,CAAgB,OAAhB,CAAL,EAA8ChC,CAAAA,CAAAA,4CAAZ,CAAqBuB,CAArB,CAAlC,GACEoD,CAGA,CAFIpE,CAAU1E,CAAAA,OAAQqG,CAAAA,eAAlB,CACEmC,CADF,CACc,QADd,CACwBlC,CAAAA,CAAAA,qCAASC,CAAAA,QADjC,CAEJ,CAAA9F,CAAA,EAAQqI,CAAR,CAAmB,KAAnB,CAA2BpD,CAA3B,CAAuC,KAJzC,CAMI4C,EAAAA,CAAS3C,CACRA,EAAUQ,CAAAA,KAAV,CAAgB,OAAhB,CAAL,EAA8ChC,CAAAA,CAAAA,4CAAZ,CAAqBwB,CAArB,CAAlC;CACE2C,CAGA,CAFI5D,CAAU1E,CAAAA,OAAQqG,CAAAA,eAAlB,CACEmC,CADF,CACc,MADd,CACsBlC,CAAAA,CAAAA,qCAASC,CAAAA,QAD/B,CAEJ,CAAA9F,CAAA,EAAQ6H,CAAR,CAAiB,KAAjB,CAAyB3C,CAAzB,CAAqC,KAJvC,CAQMoD,EAAAA,CACFrE,CAAU1E,CAAAA,OAAQqG,CAAAA,eAAlB,CACEmC,CADF,CACc,MADd,CACsBlC,CAAAA,CAAAA,qCAASC,CAAAA,QAD/B,CAEJ9F,EAAA,EAAQsI,CAAR,CAAiB,KAEftI,EAAA,CADc0D,CAAAA,CAAAA,4CAAZ,CAAqBuE,CAArB,CAAJ,CACEjI,CADF,EACU4D,IAAKwE,CAAAA,GAAL,CAASH,CAAT,CADV,CACgC,KADhC,EAGEjI,CAHF,EAGU,MAHV,CAGmBiI,CAHnB,CAG+B,MAH/B,CAKAjI,EAAA,EAAQ,MAAR,CAAiBqI,CAAjB,CAA4B,KAA5B,CAAoCR,CAApC,CAA6C,OAC7C7H,EAAA,EAAQiE,CAAU+C,CAAAA,MAAlB,CAA2BsB,CAA3B,CAAoC,MAApC,CAA6CA,CAA7C,CAAsD,KAEtDtI,EAAA,CADAA,CACA,CADQ,UACR,EAAkB+H,CAAlB,CAA8B,KAA9B,CAAsCM,CAAtC,CAAiD,IAAjD,CAAwDC,CAAxD,CACI,UADJ,CACiBP,CADjB,CAC6B,MAD7B,CACsCF,CADtC,CAC+C,KAD/C,CACuDE,CADvD,CAEI,MAFJ,CAEaF,CAFb,CAEsB,IAFtB,CAE6BE,CAF7B,CAEyC,MAFzC,CAEkDO,CAFlD,CAE2D,OAF3D,CAGIZ,CAHJ,CAGa,KAHb,CA/BK,CAoCP,MAAO1H,EA9DwD,CAiEjE8D;6CAAaE,CAAAA,QAAb,CAAA,gBAAA,CAA4C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAEnE,MAAM8D,EACF9D,CAAU1E,CAAAA,OAAQyI,CAAAA,OAAlB,CACEhH,CAAMkD,CAAAA,aAAN,CAAoB,KAApB,CADF,CAC8B2B,CAAAA,CAAAA,qCAASC,CAAAA,QADvC,CADJ,CAGMb,EACFhB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMiC,CAAAA,UAA3C,CADEyG,EACwD,IAC9D,KAAIyC,EAASzD,CAAU6C,CAAAA,eAAV,CAA0B9F,CAA1B,CAAiC,IAAjC,CACb0G,EAAA,CAASzD,CAAU0D,CAAAA,WAAV,CAAsBD,CAAtB,CAA8B1G,CAA9B,CAIT,OADI,WACJ,CADkBiE,CAClB,CAD8B,MAC9B,CADuC8C,CACvC,CADmD,OACnD,CAD6DL,CAC7D,CADsE,KAXH,CAerE5D;6CAAaE,CAAAA,QAAb,CAAA,wBAAA,CAAoD,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE3E,IAAIsE,EAAO,EACPtE,EAAU2C,CAAAA,gBAAd,GAEE2B,CAFF,EAEUtE,CAAU4C,CAAAA,QAAV,CAAmB5C,CAAU2C,CAAAA,gBAA7B,CAA+C5F,CAA/C,CAFV,CAIIiD,EAAU8C,CAAAA,gBAAd,GAGEwB,CAHF,EAGUtE,CAAU4C,CAAAA,QAAV,CAAmB5C,CAAU8C,CAAAA,gBAA7B,CAA+C/F,CAA/C,CAHV,CAKA,IAAIiD,CAAU2C,CAAAA,gBAAd,CAAgC,CAC9B,MAAM4B,EAAOxH,CAAMyH,CAAAA,eAAN,EACTD,EAAJ,EAAY,CAACA,CAAKE,CAAAA,oBAAlB,GAIEH,CAJF,EAIUtE,CAAU4C,CAAAA,QAAV,CAAmB5C,CAAU2C,CAAAA,gBAA7B,CAA+C4B,CAA/C,CAJV,CAF8B,CAShC,OAAQxH,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CAAR,EACE,KAAK,OAAL,CACE,MAAOqE,EAAP,CAAc,UAChB,MAAK,UAAL,CACE,MAAOA,EAAP,CAAc,aAJlB,CAMA,KAAMjD,MAAA,CAAM,yBAAN,CAAN,CA3B2E,CA9I7E;IAAAvB,sCAAA,E,CCiBAD,6CAAaE,CAAAA,QAAb,CAAA,WAAA,CAAuC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE1DjE,CAAAA,CAAO2D,MAAA,CAAO3C,CAAMkD,CAAAA,aAAN,CAAoB,KAApB,CAAP,CACLpB,EAAAA,CAAgB,CAAR,EAAA9C,CAAA,CAAYzD,sCAAMC,CAAAA,MAAlB,CAA2BD,sCAAMe,CAAAA,cAClCqL,SAAb,GAAI3I,CAAJ,CACEA,CADF,CACS,KADT,CAEoB,CAAC2I,QAFrB,GAEW3I,CAFX,GAGEA,CAHF,CAGS,MAHT,CAKA,OAAO,CAACA,CAAD,CAAO8C,CAAP,CATuD,CAYhEgB;6CAAaE,CAAAA,QAAb,CAAA,eAAA,CAA2C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CASlE,IAAM2E,EAPYzB,CAChB,IAAO,CAAC,KAAD,CAAQ5K,sCAAMmB,CAAAA,QAAd,CADSyJ,CAEhB,MAAS,CAAC,KAAD,CAAQ5K,sCAAMoB,CAAAA,WAAd,CAFOwJ,CAGhB,SAAY,CAAC,KAAD,CAAQ5K,sCAAMgB,CAAAA,cAAd,CAHI4J,CAIhB,OAAU,CAAC,KAAD,CAAQ5K,sCAAMiB,CAAAA,QAAd,CAJM2J,CAKhB,MAAS,CAAC,MAAD,CAAS5K,sCAAMM,CAAAA,KAAf,CALOsK,CAOJ,CAAUnG,CAAMkD,CAAAA,aAAN,CAAoB,IAApB,CAAV,CACd,OAAMgD,EAAW0B,CAAA,CAAM,CAAN,CACX9F,EAAAA,CAAQ8F,CAAA,CAAM,CAAN,CACd,OAAM3D,EAAYhB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,GAA7B,CAAkC8B,CAAlC,CAAZmC,EAAwD,GACxDC,EAAAA,CAAYjB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB;AAA6B,GAA7B,CAAkC8B,CAAlC,CAAZoC,EAAwD,GAE9D,OAAO,CADMD,CACN,CADkBiC,CAClB,CAD6BhC,CAC7B,CAAOpC,CAAP,CAf2D,CAkBpEgB;6CAAaE,CAAAA,QAAb,CAAA,WAAA,CAAuC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE9D,MAAMiD,EAAWlG,CAAMkD,CAAAA,aAAN,CAAoB,IAApB,CACjB,KAAIlE,CAEJ,IAAiB,KAAjB,GAAIkH,CAAJ,CAQE,MANA2B,EAMO,CAND5E,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,KAA7B,CAAoCzE,sCAAMe,CAAAA,cAA1C,CAMC,EAN4D,GAM5D,CALQ,GAKR,GALHuL,CAAA,CAAI,CAAJ,CAKG,GAHLA,CAGK,CAHC,GAGD,CAHOA,CAGP,EAAA,CADA,GACA,CADMA,CACN,CAAOtM,sCAAMe,CAAAA,cAAb,CAGPuL,EAAA,CADe,KAAjB,GAAI3B,CAAJ,EAAuC,KAAvC,GAA0BA,CAA1B,EAA6D,KAA7D,GAAgDA,CAAhD,CACQjD,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,KAA7B,CAAoCzE,sCAAMiB,CAAAA,QAA1C,CADR,EAC+D,GAD/D,CAGQyG,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,KAA7B,CAAoCzE,sCAAMqC,CAAAA,IAA1C,CAHR,EAG2D,GAI3D,QAAQsI,CAAR,EACE,KAAK,KAAL,CACElH,CAAA;AAAO,MAAP,CAAgB6I,CAAhB,CAAsB,GACtB,MACF,MAAK,MAAL,CACE7I,CAAA,CAAO,OAAP,CAAiB6I,CAAjB,CAAuB,GACvB,MACF,MAAK,IAAL,CACE7I,CAAA,CAAO,MAAP,CAAgB6I,CAAhB,CAAsB,GACtB,MACF,MAAK,KAAL,CACE7I,CAAA,CAAO,MAAP,CAAgB6I,CAAhB,CAAsB,GACtB,MACF,MAAK,OAAL,CACE7I,CAAA,CAAO,SAAP,CAAmB6I,CAAnB,CAAyB,GACzB,MACF,MAAK,OAAL,CACE7I,CAAA,CAAO,QAAP,CAAkB6I,CAAlB,CAAwB,GACxB,MACF,MAAK,SAAL,CACE7I,CAAA,CAAO,OAAP,CAAiB6I,CAAjB,CAAuB,GACvB,MACF,MAAK,WAAL,CACE7I,CAAA,CAAO,QAAP,CAAkB6I,CAAlB,CAAwB,GACxB,MACF,MAAK,KAAL,CACE7I,CAAA,CAAO,MAAP,CAAgB6I,CAAhB,CAAsB,gBACtB,MACF,MAAK,KAAL,CACE7I,CAAA,CAAO,MAAP,CAAgB6I,CAAhB,CAAsB,gBACtB,MACF,MAAK,KAAL,CACE7I,CAAA,CAAO,MAAP,CAAgB6I,CAAhB,CAAsB,gBAhC1B,CAmCA,GAAI7I,CAAJ,CACE,MAAO,CAACA,CAAD,CAAOzD,sCAAMK,CAAAA,aAAb,CAIT,QAAQsK,CAAR,EACE,KAAK,OAAL,CACElH,CAAA,CAAO,MAAP,CAAgB6I,CAAhB,CAAsB,aACtB;KACF,MAAK,MAAL,CACE7I,CAAA,CAAO,OAAP,CAAiB6I,CAAjB,CAAuB,gBACvB,MACF,MAAK,MAAL,CACE7I,CAAA,CAAO,OAAP,CAAiB6I,CAAjB,CAAuB,gBACvB,MACF,MAAK,MAAL,CACE7I,CAAA,CAAO,OAAP,CAAiB6I,CAAjB,CAAuB,gBACvB,MACF,SACE,KAAMvD,MAAA,CAAM,yBAAN,CAAkC4B,CAAlC,CAAN,CAdJ,CAgBA,MAAO,CAAClH,CAAD,CAAOzD,sCAAMiB,CAAAA,QAAb,CA9EuD,CAiFhEsG;6CAAaE,CAAAA,QAAb,CAAA,aAAA,CAAyC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAUhE,MARkB6E,CAChB,GAAM,CAAC,MAAD,CAASvM,sCAAMC,CAAAA,MAAf,CADUsM,CAEhB,EAAK,CAAC,KAAD,CAAQvM,sCAAMC,CAAAA,MAAd,CAFWsM,CAGhB,aAAgB,CAAC,mBAAD,CAAsBvM,sCAAMiB,CAAAA,QAA5B,CAHAsL,CAIhB,MAAS,CAAC,SAAD,CAAYvM,sCAAMC,CAAAA,MAAlB,CAJOsM,CAKhB,QAAW,CAAC,WAAD,CAAcvM,sCAAMC,CAAAA,MAApB,CALKsM,CAMhB,SAAY,CAAC,KAAD,CAAQvM,sCAAMC,CAAAA,MAAd,CANIsM,CAQX,CAAU9H,CAAMkD,CAAAA,aAAN,CAAoB,UAApB,CAAV,CAVyD,CAalEJ;6CAAaE,CAAAA,QAAb,CAAA,oBAAA,CAAgD,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAGvE,IAAM8E,EAAa,CACjB,KAAQ,CAAC,EAAD,CAAK,WAAL,CAAkBxM,sCAAMkB,CAAAA,OAAxB,CAAiClB,sCAAMwB,CAAAA,QAAvC,CADS,CAEjB,IAAO,CAAC,EAAD,CAAK,WAAL,CAAkBxB,sCAAMkB,CAAAA,OAAxB,CAAiClB,sCAAMwB,CAAAA,QAAvC,CAFU,CAGjB,MAAS,CAAC,SAAD,CAAY,GAAZ,CAAiBxB,sCAAMqC,CAAAA,IAAvB,CAA6BrC,sCAAMK,CAAAA,aAAnC,CAHQ,CAIjB,SAAY,CAAC,EAAD,CAAK,MAAL,CAAaL,sCAAMuB,CAAAA,UAAnB;AAA+BvB,sCAAMuB,CAAAA,UAArC,CAJK,CAKjB,SAAY,CAAC,EAAD,CAAK,MAAL,CAAavB,sCAAMuB,CAAAA,UAAnB,CAA+BvB,sCAAMuB,CAAAA,UAArC,CALK,CAMjB,aAAgB,CAAC,IAAD,CAAO,IAAP,CAAavB,sCAAMkB,CAAAA,OAAnB,CAA4BlB,sCAAMwB,CAAAA,QAAlC,CANC,CAOjB,MAAS,CAAC,IAAD,CAAO,IAAP,CAAaxB,sCAAMqC,CAAAA,IAAnB,CAAyBrC,sCAAMK,CAAAA,aAA/B,CAPQ,CASnB,OAAMoM,EAAmBhI,CAAMkD,CAAAA,aAAN,CAAoB,UAApB,CAAzB,CACM,CAAC+E,CAAD,CAASC,CAAT,CAAiBC,CAAjB,CAA6BC,CAA7B,CAAA,CACFL,CAAA,CAAWC,CAAX,CACEK,EAAAA,CAAgBpF,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,iBAA7B,CAClBmI,CADkB,CAAhBE,EACa,GAEnB;GAAyB,OAAzB,GAAIL,CAAJ,CAsBEhJ,CAAA,CApBqBiE,CAAUE,CAAAA,gBAAVC,CAA2B,cAA3BA,CAA2C;WACzDH,CAAUI,CAAAA,0BAD+C;;;;;;;;;;;;;;;;;;CAA3CD,CAoBrB,CAAsB,GAAtB,CAA4BiF,CAA5B,CAA4C,GAtB9C,KAuBO,IAAyB,cAAzB,GAAIL,CAAJ,CAAyC,CACxCM,CAAAA,CAAUrF,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,SAA7B,CACZzE,sCAAMkB,CAAAA,OADM,CAAV6L,EACgB,GACtB,IAAgB,GAAhB,GAAIA,CAAJ,CACE,MAAO,CAAC,OAAD,CAAU/M,sCAAMC,CAAAA,MAAhB,CAGTwD,EAAA,CAAOqJ,CAAP,CAAuB,KAAvB,CAA+BC,CAA/B,CAAyC,OAPK,CAAzC,IASLtJ,EAAA,CAAOiJ,CAAP,CAAgBI,CAAhB,CAAgCH,CAElC,OAAO,CAAClJ,CAAD,CAAOoJ,CAAP,CApDgE,CAuDzEtF;6CAAaE,CAAAA,QAAb,CAAA,WAAA,CAAuC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE9D,MAAMgB,EACFhB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMmB,CAAAA,QAA5C,CADEuH,EACuD,GAI7D,OAFIhB,EAAU1E,CAAAA,OAAQyI,CAAAA,OAAlBuB,CACEvI,CAAMkD,CAAAA,aAAN,CAAoB,KAApB,CADFqF,CAC8B1D,CAAAA,CAAAA,qCAASC,CAAAA,QADvCyD,CAEJ,CAAiB,MAAjB,CAA0BtE,CAA1B,CAAsC,KAPwB,CAWhEnB,8CAAaE,CAAAA,QAAb,CAAA,UAAA,CAAsCF,6CAAaE,CAAAA,QAAb,CAAA,WAEtCF,8CAAaE,CAAAA,QAAb,CAAA,SAAA,CAAqCF,6CAAaE,CAAAA,QAAb,CAAA,WAErCF;6CAAaE,CAAAA,QAAb,CAAA,YAAA,CAAwC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE/D,IAAMuF,EAAOxI,CAAMkD,CAAAA,aAAN,CAAoB,IAApB,CAGb,QAAQsF,CAAR,EACE,KAAK,KAAL,CACExE,CAAA,CACIf,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMK,CAAAA,aAA3C,CADJ,EAEO,SACPoD,EAAA,CAAO,YAAP,CAAsBgF,CAAtB,CAA6B,GAC7B,MACF,MAAK,KAAL,CACEA,CAAA,CACIf,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMK,CAAAA,aAA3C,CADJ,EAEO,SACPoD,EAAA,CAAO,MAAP,CAAgBgF,CAAhB,CAAuB,GACvB,MACF,MAAK,KAAL,CACEA,CAAA,CACIf,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMK,CAAAA,aAA3C,CADJ,EAEO,SACPoD,EAAA,CAAO,MAAP,CAAgBgF,CAAhB,CAAuB,GACvB,MACF,MAAK,SAAL,CACQZ,CAAAA;AAAeH,CAAUE,CAAAA,gBAAV,CAA2B,WAA3B,CAAwC;WACxDF,CAAUI,CAAAA,0BAD8C;;;CAAxC,CAKrBW,EAAA,CAAOf,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAP,EAA2D,SAC3DoB,EAAA,CAAOoE,CAAP,CAAsB,GAAtB,CAA4BY,CAA5B,CAAmC,GACnC,MAEF,MAAK,QAAL,CACQZ,CAAAA,CAAeH,CAAUE,CAAAA,gBAAV,CAA2B,aAA3B,CAA0C;WAC1DF,CAAUI,CAAAA,0BADgD;;;;;CAA1C,CAOrBW,EAAA,CAAOf,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAP,EAA2D,IAC3DoB,EAAA,CAAOoE,CAAP,CAAsB,GAAtB,CAA4BY,CAA5B,CAAmC,GACnC,MAEF,MAAK,MAAL,CAIQZ,CAAAA,CAAeH,CAAUE,CAAAA,gBAAV,CAA2B,YAA3B,CAAyC;WACzDF,CAAUI,CAAAA,0BAD+C;;;;;;;CAAzC,CASrBW,EAAA,CAAOf,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAP,EAA2D,IAC3DoB,EAAA,CAAOoE,CAAP,CAAsB,GAAtB,CAA4BY,CAA5B,CAAmC,GACnC,MAEF,MAAK,SAAL,CACQZ,CAAAA,CACFH,CAAUE,CAAAA,gBAAV,CAA2B,yBAA3B,CAAsD;WACrDF,CAAUI,CAAAA,0BAD2C;;;;;;;CAAtD,CASJW,EAAA,CAAOf,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAP,EAA2D,IAC3DoB,EAAA,CAAOoE,CAAP,CAAsB,GAAtB,CAA4BY,CAA5B,CAAmC,GACnC,MAEF,MAAK,QAAL,CACQZ,CAAAA,CAAeH,CAAUE,CAAAA,gBAAV,CAA2B,kBAA3B,CAA+C;WAC/DF,CAAUI,CAAAA,0BADqD;;;;CAA/C,CAMrBW,EAAA,CAAOf,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAP,EAA2D,IAC3DoB,EAAA,CAAOoE,CAAP,CAAsB,GAAtB,CAA4BY,CAA5B,CAAmC,GACnC,MAEF,SACE,KAAMM,MAAA,CAAM,oBAAN,CAA6BkE,CAA7B,CAAN,CArFJ,CAuFA,MAAO,CAACxJ,CAAD,CAAOzD,sCAAMK,CAAAA,aAAb,CA5FwD,CA+FjEkH,8CAAaE,CAAAA,QAAb,CAAA,WAAA,CAAuC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE9D,MAAMgB,EACFhB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,UAA7B,CAAyCzE,sCAAMkB,CAAAA,OAA/C,CADEwH,EACyD,GACzDC,EAAAA,CACFjB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,SAA7B,CAAwCzE,sCAAMkB,CAAAA,OAA9C,CADEyH,EACwD,GAE9D,OAAO,CADMD,CACN,CADkB,KAClB,CAD0BC,CAC1B,CAAO3I,sCAAMkB,CAAAA,OAAb,CAPuD,CAUhEqG;6CAAaE,CAAAA,QAAb,CAAA,cAAA,CAA0C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAEjE,MAAMgB,EAAYhB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CAAZqG,EAAiE,GAAvE,CACMC,EAAYjB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,KAA7B,CAAoCzE,sCAAMqC,CAAAA,IAA1C,CAAZsG,EAA+D,GAC/DuE,EAAAA,CACFxF,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CADE6K,EACkD,UAGxD,OAAO,CADH,UACG,CADUxE,CACV,CADsB,IACtB,CAD6BC,CAC7B,CADyC,KACzC,CADiDuE,CACjD,CAD6D,GAC7D,CAAOlN,sCAAMK,CAAAA,aAAb,CAR0D,CAWnEkH;6CAAaE,CAAAA,QAAb,CAAA,eAAA,CAA2C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAElE,MAAMgB,EAAYhB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAZqG,EAAgE,GAChEC,EAAAA,CAAYjB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,IAA7B,CAAmCzE,sCAAMqC,CAAAA,IAAzC,CAAZsG,EAA8D,GAUpE,OAAO,CATcjB,CAAUE,CAAAA,gBAAVC,CAA2B,iBAA3BA,CAA8C;WAC1DH,CAAUI,CAAAA,0BADgD;;;;;;CAA9CD,CASd,CADqB,GACrB,CAD2Ba,CAC3B,CADuC,IACvC,CAD8CC,CAC9C,CAD0D,GAC1D,CAAO3I,sCAAMK,CAAAA,aAAb,CAb2D,CAgBpEkH,8CAAaE,CAAAA,QAAb,CAAA,iBAAA,CAA6C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAEpE,MAAO,CAAC,mCAAD,CAAsC1H,sCAAMK,CAAAA,aAA5C,CAF6D,CAKtEkH;6CAAaE,CAAAA,QAAb,CAAA,UAAA,CAAsC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE7D,MAAMgB,EAAYhB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,GAA7B,CAAkCzE,sCAAMqC,CAAAA,IAAxC,CAAZqG,EAA6D,GAEnE,OAAO,CACL,QADK,EADWhB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,GAA7B,CAAkCzE,sCAAMqC,CAAAA,IAAxC,CACX,EAD4D,GAC5D,EACkB,IADlB,CACyBqG,CADzB,CACqC,gBADrC,CAEL1I,sCAAMiB,CAAAA,QAFD,CAJsD,CA5V/D,KAAAuG,qCAAA,E,CCkBAD,6CAAaE,CAAAA,QAAb,CAAA,oBAAA,CAAgD,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAIvE,IAAMyF,EAAU,EAAhB,CACMpK,EAAY0B,CAAM1B,CAAAA,SADxB,CAEMqK,EAA0BC,CAAAA,CAAAA,iDAAV,CAA2BtK,CAA3B,CAAhBqK,EAAyD,EAC/D,KAAK,IAAIjI,EAAI,CAAR,CAAWmI,CAAhB,CAA0BA,CAA1B,CAAqCF,CAAA,CAAcjI,CAAd,CAArC,CAAuDA,CAAA,EAAvD,CAA4D,CAC1D,IAAM6H,EAAUM,CAAS7K,CAAAA,IACgB,EAAC,CAA1C,GAAIgC,CAAM8I,CAAAA,OAAN,EAAgBC,CAAAA,OAAhB,CAAwBR,CAAxB,CAAJ,EACEG,CAAQM,CAAAA,IAAR,CAAa/F,CAAU1E,CAAAA,OAAQyI,CAAAA,OAAlB,CAA0BuB,CAA1B,CAAmC1D,CAAAA,CAAAA,qCAASC,CAAAA,QAA5C,CAAb,CAHwD,CAOtDmE,CAAAA,CAAuBC,CAAAA,CAAAA,sDAAV,CAAgC5K,CAAhC,CACnB,KAASoC,CAAT,CAAa,CAAb,CAAgBA,CAAhB,CAAoBuI,CAAWrI,CAAAA,MAA/B,CAAuCF,CAAA,EAAvC,CACEgI,CAAQM,CAAAA,IAAR,CACI/F,CAAU1E,CAAAA,OAAQyI,CAAAA,OAAlB,CACEiC,CAAA,CAAWvI,CAAX,CADF,CACiBmE,CAAAA,CAAAA,qCAASsE,CAAAA,kBAD1B,CADJ,CAIIC,EAAAA,CACFV,CAAQ9H,CAAAA,MAAR;AACAqC,CAAU+C,CAAAA,MADV,CACmB,SADnB,CAC+B0C,CAAQrJ,CAAAA,IAAR,CAAa,IAAb,CAD/B,CACoD,KADpD,CAC4D,EAE1DgK,EAAAA,CACFpG,CAAU1E,CAAAA,OAAQyI,CAAAA,OAAlB,CACEhH,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CADF,CAC+B2B,CAAAA,CAAAA,qCAASyE,CAAAA,SADxC,CAEAC,EAAAA,CAAQ,EACRtG,EAAU2C,CAAAA,gBAAd,GACE2D,CADF,EACWtG,CAAU4C,CAAAA,QAAV,CAAmB5C,CAAU2C,CAAAA,gBAA7B,CAA+C5F,CAA/C,CADX,CAGIiD,EAAU8C,CAAAA,gBAAd,GACEwD,CADF,EACWtG,CAAU4C,CAAAA,QAAV,CAAmB5C,CAAU8C,CAAAA,gBAA7B,CAA+C/F,CAA/C,CADX,CAGIuJ,EAAJ,GACEA,CADF,CACUtG,CAAUxC,CAAAA,WAAV,CAAsB8I,CAAtB,CAA6BtG,CAAU+C,CAAAA,MAAvC,CADV,CAGIwD,EAAAA,CAAW,EACXvG,EAAUwG,CAAAA,kBAAd,GACED,CADF,CACavG,CAAUxC,CAAAA,WAAV,CACPwC,CAAU4C,CAAAA,QAAV,CAAmB5C,CAAUwG,CAAAA,kBAA7B,CAAiDzJ,CAAjD,CADO,CAEPiD,CAAU+C,CAAAA,MAFH,CADb,CAKA,OAAMU,EAASzD,CAAU6C,CAAAA,eAAV,CAA0B9F,CAA1B,CAAiC,OAAjC,CACf,KAAI0J,EAAczG,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,QAA7B,CAAuCzE,sCAAMqC,CAAAA,IAA7C,CAAd8L,EAAoE,EAAxE,CACIC,EAAQ,EACRjD;CAAJ,EAAcgD,CAAd,GAEEC,CAFF,CAEUJ,CAFV,CAIIG,EAAJ,GACEA,CADF,CACgBzG,CAAU+C,CAAAA,MAD1B,CACmC,SADnC,CAC+C0D,CAD/C,CAC6D,KAD7D,CAGA,OAAME,EAAO,EAAb,CACMC,EAAY7J,CAAM8I,CAAAA,OAAN,EAClB,KAAK,IAAIpI,EAAI,CAAb,CAAgBA,CAAhB,CAAoBmJ,CAAUjJ,CAAAA,MAA9B,CAAsCF,CAAA,EAAtC,CACEkJ,CAAA,CAAKlJ,CAAL,CAAA,CAAUuC,CAAU1E,CAAAA,OAAQyI,CAAAA,OAAlB,CAA0B6C,CAAA,CAAUnJ,CAAV,CAA1B,CAAwCmE,CAAAA,CAAAA,qCAASC,CAAAA,QAAjD,CAER9F,EAAAA,CAAO,WAAPA,CAAqBqK,CAArBrK,CAAgC,GAAhCA,CAAsC4K,CAAKvK,CAAAA,IAAL,CAAU,IAAV,CAAtCL,CAAwD,OAAxDA,CACAoK,CADApK,CACYuK,CADZvK,CACoBwK,CADpBxK,CAC+B0H,CAD/B1H,CACwC2K,CADxC3K,CACgD0K,CADhD1K,CAC8D,GAClEA,EAAA,CAAOiE,CAAUlD,CAAAA,MAAV,CAAiBC,CAAjB,CAAwBhB,CAAxB,CAEPiE,EAAU7D,CAAAA,YAAV,CAAuB,GAAvB,CAA6BiK,CAA7B,CAAA,CAAyCrK,CACzC,OAAO,KA/DgE,CAoEzE8D,8CAAaE,CAAAA,QAAb,CAAA,sBAAA,CACIF,6CAAaE,CAAAA,QAAb,CAAA,oBAEJF;6CAAaE,CAAAA,QAAb,CAAA,qBAAA,CAAiD,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAExE,MAAMoG,EACFpG,CAAU1E,CAAAA,OAAQyI,CAAAA,OAAlB,CACEhH,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CADF,CAC+B2B,CAAAA,CAAAA,qCAASyE,CAAAA,SADxC,CADJ,CAGMM,EAAO,EAHb,CAIMC,EAAY7J,CAAM8I,CAAAA,OAAN,EAClB,KAAK,IAAIpI,EAAI,CAAb,CAAgBA,CAAhB,CAAoBmJ,CAAUjJ,CAAAA,MAA9B,CAAsCF,CAAA,EAAtC,CACEkJ,CAAA,CAAKlJ,CAAL,CAAA,CAAUuC,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,KAA7B,CAAqCU,CAArC,CAAwCnF,sCAAMqC,CAAAA,IAA9C,CAAV,EAAiE,MAGnE,OAAO,CADMyL,CACN,CADiB,GACjB,CADuBO,CAAKvK,CAAAA,IAAL,CAAU,IAAV,CACvB,CADyC,GACzC,CAAO9D,sCAAMK,CAAAA,aAAb,CAXiE,CAc1EkH;6CAAaE,CAAAA,QAAb,CAAA,uBAAA,CAAmD,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAK1E,MADcA,EAAUD,CAAAA,QAAV,CAAA,qBAAA4E,CAA4C5H,CAA5C4H,CAAmD3E,CAAnD2E,CACP,CAAM,CAAN,CAAP,CAAkB,KALwD,CAQ5E9E;6CAAaE,CAAAA,QAAb,CAAA,mBAAA,CAA+C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAItE,IAAIjE,EAAO,MAAPA,EADAiE,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,WAA7B,CAA0CzE,sCAAMqC,CAAAA,IAAhD,CACAoB,EADyD,OACzDA,EAA4B,OAC5BiE,EAAU8C,CAAAA,gBAAd,GAGE/G,CAHF,EAIMiE,CAAUxC,CAAAA,WAAV,CACEwC,CAAU4C,CAAAA,QAAV,CAAmB5C,CAAU8C,CAAAA,gBAA7B,CAA+C/F,CAA/C,CADF,CAEEiD,CAAU+C,CAAAA,MAFZ,CAJN,CAQIhG,EAAM8J,CAAAA,eAAV,EACQtF,CACN,CADcvB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CACd,EADmE,MACnE,CAAAoB,CAAA,EAAQiE,CAAU+C,CAAAA,MAAlB,CAA2B,SAA3B,CAAuCxB,CAAvC,CAA+C,KAFjD,EAIExF,CAJF,EAIUiE,CAAU+C,CAAAA,MAJpB,CAI6B,WAG7B,OADAhH,EACA,CADQ,KAnB8D,CA/GxE,KAAA+D,2CAAA,E,CCiBAD,6CAAaE,CAAAA,QAAb,CAAA,IAAA,CAAgC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAGvD,MAAO,CADMA,CAAUzD,CAAAA,MAAVR,CAAiBgB,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CAAjBlE,CACN,CAAOzD,sCAAMC,CAAAA,MAAb,CAHgD,CAMzDsH,8CAAaE,CAAAA,QAAb,CAAA,cAAA,CAA0C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE3DjE,CAAAA,CAAOiE,CAAUtD,CAAAA,gBAAV,CAA2BK,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CAA3B,CACPpB,EAAAA,CACoB,CAAC,CAAvB,GAAA9C,CAAK+J,CAAAA,OAAL,CAAa,GAAb,CAAA,CAA2BxN,sCAAMqB,CAAAA,aAAjC,CAAiDrB,sCAAMC,CAAAA,MAC3D,OAAO,CAACwD,CAAD,CAAO8C,CAAP,CAL0D,CAQnEgB;6CAAaE,CAAAA,QAAb,CAAA,SAAA,CAAqC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE5D,GAAyB,CAAzB,GAAIjD,CAAM6D,CAAAA,UAAV,CACE,MAAO,CAAC,IAAD,CAAOtI,sCAAMC,CAAAA,MAAb,CACF,IAAyB,CAAzB,GAAIwE,CAAM6D,CAAAA,UAAV,CAGL,MAAO,CAFSZ,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAET,EAF6D,IAE7D,CAAOrC,sCAAMqC,CAAAA,IAAb,CACF,IAAyB,CAAzB,GAAIoC,CAAM6D,CAAAA,UAAV,CAA4B,CACjC,IAAMkG,EACF9G,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqB,CAAAA,aAA3C,CADEmN,EAC2D,IAC3DC,EAAAA,CACF/G,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqB,CAAAA,aAA3C,CADEoN,EAC2D,IAEjE,OAAO,CADMD,CACN;AADiB,KACjB,CADyBC,CACzB,CAAOzO,sCAAMqB,CAAAA,aAAb,CAN0B,CAQ3BqN,CAAAA,CAAerG,KAAJ,CAAU5D,CAAM6D,CAAAA,UAAhB,CACjB,KAAK,IAAInD,EAAI,CAAb,CAAgBA,CAAhB,CAAoBV,CAAM6D,CAAAA,UAA1B,CAAsCnD,CAAA,EAAtC,CACEuJ,CAAA,CAASvJ,CAAT,CAAA,CACIuC,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,KAA7B,CAAqCU,CAArC,CAAwCnF,sCAAMqC,CAAAA,IAA9C,CADJ,EAC2D,IAG7D,OAAO,CADM,oBACN,CAD+BqM,CAAS5K,CAAAA,IAAT,CAAc,GAAd,CAC/B,CADoD,IACpD,CAAO9D,sCAAMK,CAAAA,aAAb,CAtBmD,CA0B9DkH;6CAAaE,CAAAA,QAAb,CAAA,WAAA,CAAuC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE9D,MAAMsF,EACFtF,CAAU1E,CAAAA,OAAQyI,CAAAA,OAAlB,CACEhH,CAAMkD,CAAAA,aAAN,CAAoB,KAApB,CADF,CAC8B2B,CAAAA,CAAAA,qCAASC,CAAAA,QADvC,CAEEN,EAAAA,CACFvB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMiC,CAAAA,UAA3C,CADEgH,EACwD,IAC9D,OAAO+D,EAAP,CAAiB,MAAjB,CAA0B/D,CAA1B,CAAkC,KAP4B,CAUhE1B,8CAAaE,CAAAA,QAAb,CAAA,WAAA,CAAuC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE9D,MAAMG,EAAeH,CAAUE,CAAAA,gBAAV,CAA2B,QAA3B,CAAqC;WACjDF,CAAUI,CAAAA,0BADuC;;;;;;CAArC,CAQf6G,EAAAA,CAAOjH,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CAAPsM,EAA4D,IAClE,OAAO,CAAC9G,CAAD,CAAgB,GAAhB,CAAsB8G,CAAtB,CAA6B,GAA7B,CAAkC3O,sCAAMK,CAAAA,aAAxC,CAXuD,CAchEkH,8CAAaE,CAAAA,QAAb,CAAA,YAAA,CAAwC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAG/D,MAAO,CAAC,QAAD,EADMA,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CACN,EAD2D,IAC3D,EAAmB,GAAnB,CAAwBrC,sCAAMK,CAAAA,aAA9B,CAHwD,CAMjEkH;6CAAaE,CAAAA,QAAb,CAAA,YAAA,CAAwC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE/D,MAAMiD,EAC6B,OAA/B,GAAAlG,CAAMkD,CAAAA,aAAN,CAAoB,KAApB,CAAA,CAAyC,QAAzC,CAAoD,SADxD,CAEMiH,EAAYlH,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAZuM,EAAgE,IAFtE,CAGMD,EAAOjH,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMqC,CAAAA,IAA5C,CAAPsM,EAA4D,IAClE,KAAI/F,EAAa,KAAjB,CACIC,EAAkB,EAClBpE,EAAM1B,CAAAA,SAAU0D,CAAAA,OAAQC,CAAAA,aAA5B,GACEkC,CACA,CADa,IACb,CAAAC,CAAA,CAAkB,MAFpB,CAcA,OAAO,CAVcnB,CAAUE,CAAAA,gBAAVC,CACc,OAA/B,GAAApD,CAAMkD,CAAAA,aAAN,CAAoB,KAApB,CAAA,CAAyC,cAAzC,CACyC,kBAFxBE,CAGjB;WACKH,CAAUI,CAAAA,0BADf;WAEK6C,CAFL;4BAGsB/B,CAHtB,UAG0CC,CAH1C;;CAHiBhB,CAUd,CADqB,GACrB,CAD2B8G,CAC3B,CADkC,IAClC,CADyCC,CACzC,CADqD,GACrD,CAAO5O,sCAAMK,CAAAA,aAAb,CAtBwD,CAyBjEkH;6CAAaE,CAAAA,QAAb,CAAA,WAAA,CAAuC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE9D,MAAMsB,EAAQvE,CAAMkD,CAAAA,aAAN,CAAoB,OAApB,CAARqB,EAAwC,YAA9C,CAEM2F,EAAOjH,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAD4BzE,sCAAMqC,CAAAA,IAClC,CAAPsM,EAA2D,IACjE,QAAQ3F,CAAR,EACE,KAAK,OAAL,CAEE,MAAO,CADM,SACN,CADkB2F,CAClB,CADyB,SACzB,CAAO3O,sCAAMK,CAAAA,aAAb,CAET,MAAK,MAAL,CAEE,MAAO,CADM,SACN,CADkBsO,CAClB,CADyB,OACzB,CAAO3O,sCAAMK,CAAAA,aAAb,CAET,MAAK,YAAL,CAGE,MAFM4G,EAEC,CAFIS,CAAUzB,CAAAA,WAAV,CAAsBxB,CAAtB,CAA6B,IAA7B,CAEJ,CAAA,CADM,SACN,CADkBkK,CAClB,CADyB,IACzB,CADgC1H,CAChC,CADqC,MACrC,CAAOjH,sCAAMK,CAAAA,aAAb,CAET;KAAK,UAAL,CAGE,MAFM4G,EAEC,CAFIS,CAAUzB,CAAAA,WAAV,CAAsBxB,CAAtB,CAA6B,IAA7B,CAAmC,CAAnC,CAAsC,CAAA,CAAtC,CAEJ,CAAA,CADM,SACN,CADkBkK,CAClB,CADyB,IACzB,CADgC1H,CAChC,CADqC,MACrC,CAAOjH,sCAAMK,CAAAA,aAAb,CAET,MAAK,QAAL,CAOE,MAAO,CANcqH,CAAUE,CAAAA,gBAAVC,CAA2B,oBAA3BA,CAAiD;WACjEH,CAAUI,CAAAA,0BADuD;;;CAAjDD,CAMd,CADqB,GACrB,CAD2B8G,CAC3B,CADkC,GAClC,CAAO3O,sCAAMK,CAAAA,aAAb,CA1BX,CA6BA,KAAM0I,MAAA,CAAM,iCAAN,CAAN,CAlC8D,CAqChExB;6CAAaE,CAAAA,QAAb,CAAA,iBAAA,CAA6C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAEpE,MAAM+B,EAAShF,CAAMkD,CAAAA,aAAN,CAAoB,QAApB,CAAf,CACM+B,EAASjF,CAAMkD,CAAAA,aAAN,CAAoB,QAApB,CADf,CAEMgH,EAAOjH,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,QAA7B,CAAuCzE,sCAAMqC,CAAAA,IAA7C,CAAPsM,EAA6D,IACnE,IAAe,OAAf,GAAIlF,CAAJ,EAAqC,MAArC,GAA0BC,CAA1B,CAEE,MAAO,CADMiF,CACN,CAAO3O,sCAAMqC,CAAAA,IAAb,CAEP,OAAMsH,EAAMjC,CAAUzB,CAAAA,WAAV,CAAsBxB,CAAtB,CAA6B,KAA7B,CACNmF,EAAAA,CAAMlC,CAAUzB,CAAAA,WAAV,CAAsBxB,CAAtB,CAA6B,KAA7B,CAyBZ,OAAO,CAxBciD,CAAUE,CAAAA,gBAAVC,CAA2B,oBAA3BA,CAAiD;WAC/DH,CAAUI,CAAAA,0BADqD;;;;;;;;;;;;;;;;;;;;CAAjDD,CAwBd,CAFqB,GAErB,CAF2B8G,CAE3B,CAFkC,KAElC,CAF2ClF,CAE3C,CAFoD,KAEpD,CAF6DE,CAE7D,CADH,KACG,CADMD,CACN,CADe,KACf,CADwBE,CACxB,CAD8B,GAC9B,CAAO5J,sCAAMK,CAAAA,aAAb,CAnC2D,CAuCtEkH,8CAAaE,CAAAA,QAAb,CAAA,eAAA,CAA2C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAE5DiH,CAAAA,CAAOjH,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAPsM,EAA2D,IACjE,KAAIlL,CACgC,YAApC,GAAIgB,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CAAJ,CACElE,CADF,CACS,aADT,CACyBkL,CADzB,CACgC,GADhC,CAE2C,WAApC,GAAIlK,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CAAJ,CACLlE,CADK,CACE,aADF,CACkBkL,CADlB,CACyB,GADzB,CAEoC,WAFpC,GAEIlK,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CAFJ,GAGLlE,CAHK,CAGE,qBAHF,CAG0BkL,CAH1B,CAGiC,IAHjC,CAKP,OAAO,CAAClL,CAAD,CAAOzD,sCAAMK,CAAAA,aAAb,CAX2D,CAcpEkH;6CAAaE,CAAAA,QAAb,CAAA,SAAA,CAAqC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAG5D,MAAMiD,EADYC,CAAC,KAAQ,OAATA,CAAkB,MAAS,OAA3BA,CAAoC,KAAQ,MAA5CA,CACD,CAAUnG,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CAAV,CACXgH,EAAAA,CAAOjH,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAPsM,EAA2D,IACjE,OAAO,CAAChE,CAAD,CAAY,GAAZ,CAAkBgE,CAAlB,CAAyB,GAAzB,CAA8B3O,sCAAMK,CAAAA,aAApC,CALqD,CAQ9DkH,8CAAaE,CAAAA,QAAb,CAAA,UAAA,CAAsC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAG7D,MAAO,QAAP,EADYA,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CACZ,EADgE,IAChE,EAAwB,MAHqC,CAM/DkF;6CAAaE,CAAAA,QAAb,CAAA,eAAA,CAA2C,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAU9DjE,CAAAA,CAAO,WAAPA,EAPAgB,CAAMyG,CAAAA,QAAN,CAAe,MAAf,CAAJ2D,CAEQnH,CAAUzD,CAAAA,MAAV,CAAiBQ,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CAAjB,CAFRkH,CAKQnH,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CALRwM,EAK4D,IAExDpL,EAA2B,GACkB,SACjD,GADiBgB,CAAMkD,CAAAA,aAAN,CAAoB,MAApB,CACjB,GACElE,CADF,CACS,WADT,CACuBA,CADvB,CAC8B,GAD9B,CAGA,OAAO,CAACA,CAAD,CAAOzD,sCAAMK,CAAAA,aAAb,CAf2D,CAkBpEkH,8CAAaE,CAAAA,QAAb,CAAA,WAAA,CAAuCF,6CAAaE,CAAAA,QAAb,CAAA,eAEvCF;6CAAaE,CAAAA,QAAb,CAAA,UAAA,CAAsC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAC7D,MAAMiH,EAAOjH,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAPsM,EAA2D,IAC3DG,EAAAA,CAAMpH,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,KAA7B,CAAoCzE,sCAAMqC,CAAAA,IAA1C,CAANyM,EAAyD,IAI/D,OAAO,CAHM,SAGN,CAHkBA,CAGlB,CAHwB,mBAGxB,CAFYH,CAEZ,CAFmB,uBAEnB,CADkBA,CAClB,CADyB,IACzB,CADgCG,CAChC,CADsC,GACtC,CAAO9O,sCAAMgC,CAAAA,WAAb,CANsD,CAS/DuF;6CAAaE,CAAAA,QAAb,CAAA,YAAA,CAAwC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAC/D,MAAMiH,EAAOjH,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAPsM,EAA2D,IAAjE,CACMI,EAAOrH,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAAP0M,EAA2D,IAC3DC,EAAAA,CAAKtH,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,IAA7B,CAAmCzE,sCAAMqC,CAAAA,IAAzC,CAAL2M,EAAuD,IAE7D,OAAO,CADM,cACN,CADuBD,CACvB,CAD8B,IAC9B,CADqCC,CACrC,CAD0C,IAC1C,CADiDL,CACjD,CADwD,GACxD,CAAO3O,sCAAMK,CAAAA,aAAb,CALwD,CAQjEkH;6CAAaE,CAAAA,QAAb,CAAA,YAAA,CAAwC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAG/D,MAAO,CADM,SACN,EAFMA,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,MAA7B,CAAqCzE,sCAAMqC,CAAAA,IAA3C,CAEN,EAF0D,IAE1D,EADyB,GACzB,CAAOrC,sCAAMK,CAAAA,aAAb,CAHwD,CA7PjE,KAAAmH,qCAAA,E,CCiBAD,6CAAaE,CAAAA,QAAb,CAAA,aAAA,CAAyC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAKhE,MAAO,CAFHA,CAAU1E,CAAAA,OAAQyI,CAAAA,OAAlBhI,CACEgB,CAAMkD,CAAAA,aAAN,CAAoB,KAApB,CADFlE,CAC8B6F,CAAAA,CAAAA,qCAASC,CAAAA,QADvC9F,CAEG,CAAOzD,sCAAMC,CAAAA,MAAb,CALyD,CAQlEsH;6CAAaE,CAAAA,QAAb,CAAA,aAAA,CAAyC,QAAA,CAAShD,CAAT,CAAgBiD,CAAhB,CAAyB,CAEhE,MAAMgB,EACFhB,CAAUR,CAAAA,WAAV,CAAsBzC,CAAtB,CAA6B,OAA7B,CAAsCzE,sCAAMiC,CAAAA,UAA5C,CADEyG,EACyD,GAI/D,OAFIhB,EAAU1E,CAAAA,OAAQyI,CAAAA,OAAlBuB,CACEvI,CAAMkD,CAAAA,aAAN,CAAoB,KAApB,CADFqF,CAC8B1D,CAAAA,CAAAA,qCAASC,CAAAA,QADvCyD,CAEJ,CAAiB,KAAjB,CAAyBtE,CAAzB,CAAqC,KAP2B,CAzBlE,KAAAlB,0CAAA,E,CCkBAD,6CAAaE,CAAAA,QAAb,CAAA,qBAAA,CACIF,6CAAaE,CAAAA,QAAb,CAAA,aACJF,8CAAaE,CAAAA,QAAb,CAAA,qBAAA,CACIF,6CAAaE,CAAAA,QAAb,CAAA,aArBJ,KAAAD,kDAAA,E,CCAA,IAAAA,oCAAA,EAyBA,oCAAA,CAAA,KAAA,CAAA,sCAAA,oCAAA,CAAA,YAAA,CAAA","file":"php_compressed.js","sourcesContent":["/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Helper functions for generating PHP for blocks.\n * @suppress {checkTypes|globalThis}\n */\n\nimport * as goog from '../closure/goog/goog.js';\ngoog.declareModuleId('Blockly.PHP');\n\nimport * as stringUtils from '../core/utils/string.js';\n// import type {Block} from '../core/block.js';\nimport {CodeGenerator} from '../core/generator.js';\nimport {Names} from '../core/names.js';\n// import type {Workspace} from '../core/workspace.js';\nimport {inputTypes} from '../core/inputs/input_types.js';\n\n\n/**\n * Order of operation ENUMs.\n * http://php.net/manual/en/language.operators.precedence.php\n * @enum {number}\n */\nexport const Order = {\n ATOMIC: 0, // 0 \"\" ...\n CLONE: 1, // clone\n NEW: 1, // new\n MEMBER: 2.1, // []\n FUNCTION_CALL: 2.2, // ()\n POWER: 3, // **\n INCREMENT: 4, // ++\n DECREMENT: 4, // --\n BITWISE_NOT: 4, // ~\n CAST: 4, // (int) (float) (string) (array) ...\n SUPPRESS_ERROR: 4, // @\n INSTANCEOF: 5, // instanceof\n LOGICAL_NOT: 6, // !\n UNARY_PLUS: 7.1, // +\n UNARY_NEGATION: 7.2, // -\n MULTIPLICATION: 8.1, // *\n DIVISION: 8.2, // /\n MODULUS: 8.3, // %\n ADDITION: 9.1, // +\n SUBTRACTION: 9.2, // -\n STRING_CONCAT: 9.3, // .\n BITWISE_SHIFT: 10, // << >>\n RELATIONAL: 11, // < <= > >=\n EQUALITY: 12, // == != === !== <> <=>\n REFERENCE: 13, // &\n BITWISE_AND: 13, // &\n BITWISE_XOR: 14, // ^\n BITWISE_OR: 15, // |\n LOGICAL_AND: 16, // &&\n LOGICAL_OR: 17, // ||\n IF_NULL: 18, // ??\n CONDITIONAL: 19, // ?:\n ASSIGNMENT: 20, // = += -= *= /= %= <<= >>= ...\n LOGICAL_AND_WEAK: 21, // and\n LOGICAL_XOR: 22, // xor\n LOGICAL_OR_WEAK: 23, // or\n NONE: 99, // (...)\n};\n\nclass PhpGenerator extends CodeGenerator {\n /**\n * List of outer-inner pairings that do NOT require parentheses.\n * @type {!Array<!Array<number>>}\n */\n ORDER_OVERRIDES = [\n // (foo()).bar() -> foo().bar()\n // (foo())[0] -> foo()[0]\n [Order.MEMBER, Order.FUNCTION_CALL],\n // (foo[0])[1] -> foo[0][1]\n // (foo.bar).baz -> foo.bar.baz\n [Order.MEMBER, Order.MEMBER],\n // !(!foo) -> !!foo\n [Order.LOGICAL_NOT, Order.LOGICAL_NOT],\n // a * (b * c) -> a * b * c\n [Order.MULTIPLICATION, Order.MULTIPLICATION],\n // a + (b + c) -> a + b + c\n [Order.ADDITION, Order.ADDITION],\n // a && (b && c) -> a && b && c\n [Order.LOGICAL_AND, Order.LOGICAL_AND],\n // a || (b || c) -> a || b || c\n [Order.LOGICAL_OR, Order.LOGICAL_OR]\n ];\n\n constructor(name) {\n super(name ?? 'PHP');\n this.isInitialized = false;\n\n // Copy Order values onto instance for backwards compatibility\n // while ensuring they are not part of the publically-advertised\n // API.\n //\n // TODO(#7085): deprecate these in due course. (Could initially\n // replace data properties with get accessors that call\n // deprecate.warn().)\n for (const key in Order) {\n this['ORDER_' + key] = Order[key];\n }\n\n // List of illegal variable names. This is not intended to be a\n // security feature. Blockly is 100% client-side, so bypassing\n // this list is trivial. This is intended to prevent users from\n // accidentally clobbering a built-in object or function.\n this.addReservedWords(\n // http://php.net/manual/en/reserved.keywords.php\n '__halt_compiler,abstract,and,array,as,break,callable,case,catch,class,' +\n 'clone,const,continue,declare,default,die,do,echo,else,elseif,empty,' +\n 'enddeclare,endfor,endforeach,endif,endswitch,endwhile,eval,exit,' +\n 'extends,final,for,foreach,function,global,goto,if,implements,include,' +\n 'include_once,instanceof,insteadof,interface,isset,list,namespace,new,' +\n 'or,print,private,protected,public,require,require_once,return,static,' +\n 'switch,throw,trait,try,unset,use,var,while,xor,' +\n // http://php.net/manual/en/reserved.constants.php\n 'PHP_VERSION,PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,' +\n 'PHP_VERSION_ID,PHP_EXTRA_VERSION,PHP_ZTS,PHP_DEBUG,PHP_MAXPATHLEN,' +\n 'PHP_OS,PHP_SAPI,PHP_EOL,PHP_INT_MAX,PHP_INT_SIZE,DEFAULT_INCLUDE_PATH,' +\n 'PEAR_INSTALL_DIR,PEAR_EXTENSION_DIR,PHP_EXTENSION_DIR,PHP_PREFIX,' +\n 'PHP_BINDIR,PHP_BINARY,PHP_MANDIR,PHP_LIBDIR,PHP_DATADIR,' +\n 'PHP_SYSCONFDIR,PHP_LOCALSTATEDIR,PHP_CONFIG_FILE_PATH,' +\n 'PHP_CONFIG_FILE_SCAN_DIR,PHP_SHLIB_SUFFIX,E_ERROR,E_WARNING,E_PARSE,' +\n 'E_NOTICE,E_CORE_ERROR,E_CORE_WARNING,E_COMPILE_ERROR,' +\n 'E_COMPILE_WARNING,E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE,' +\n 'E_DEPRECATED,E_USER_DEPRECATED,E_ALL,E_STRICT,' +\n '__COMPILER_HALT_OFFSET__,TRUE,FALSE,NULL,__CLASS__,__DIR__,__FILE__,' +\n '__FUNCTION__,__LINE__,__METHOD__,__NAMESPACE__,__TRAIT__'\n );\n }\n\n /**\n * Initialise the database of variable names.\n * @param {!Workspace} workspace Workspace to generate code from.\n */\n init(workspace) {\n super.init(workspace);\n\n if (!this.nameDB_) {\n this.nameDB_ = new Names(this.RESERVED_WORDS_, '$');\n } else {\n this.nameDB_.reset();\n }\n\n this.nameDB_.setVariableMap(workspace.getVariableMap());\n this.nameDB_.populateVariables(workspace);\n this.nameDB_.populateProcedures(workspace);\n\n this.isInitialized = true;\n };\n\n /**\n * Prepend the generated code with the variable definitions.\n * @param {string} code Generated code.\n * @return {string} Completed code.\n */\n finish(code) {\n // Convert the definitions dictionary into a list.\n const definitions = Object.values(this.definitions_);\n // Call Blockly.CodeGenerator's finish.\n code = super.finish(code);\n this.isInitialized = false;\n\n this.nameDB_.reset();\n return definitions.join('\\n\\n') + '\\n\\n\\n' + code;\n };\n\n /**\n * Naked values are top-level blocks with outputs that aren't plugged into\n * anything. A trailing semicolon is needed to make this legal.\n * @param {string} line Line of generated code.\n * @return {string} Legal line of code.\n */\n scrubNakedValue(line) {\n return line + ';\\n';\n };\n\n /**\n * Encode a string as a properly escaped PHP string, complete with\n * quotes.\n * @param {string} string Text to encode.\n * @return {string} PHP string.\n * @protected\n */\n quote_(string) {\n string = string.replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\n/g, '\\\\\\n')\n .replace(/'/g, '\\\\\\'');\n return '\\'' + string + '\\'';\n };\n\n /**\n * Encode a string as a properly escaped multiline PHP string, complete with\n * quotes.\n * @param {string} string Text to encode.\n * @return {string} PHP string.\n * @protected\n */\n multiline_quote_(string) {\n const lines = string.split(/\\n/g).map(this.quote_);\n // Join with the following, plus a newline:\n // . \"\\n\" .\n // Newline escaping only works in double-quoted strings.\n return lines.join(' . \\\"\\\\n\\\" .\\n');\n };\n\n /**\n * Common tasks for generating PHP from blocks.\n * Handles comments for the specified block and any connected value blocks.\n * Calls any statements following this block.\n * @param {!Block} block The current block.\n * @param {string} code The PHP code created for this block.\n * @param {boolean=} opt_thisOnly True to generate code for only this\n * statement.\n * @return {string} PHP code with comments and subsequent blocks added.\n * @protected\n */\n scrub_(block, code, opt_thisOnly) {\n let commentCode = '';\n // Only collect comments for blocks that aren't inline.\n if (!block.outputConnection || !block.outputConnection.targetConnection) {\n // Collect comment for this block.\n let comment = block.getCommentText();\n if (comment) {\n comment = stringUtils.wrap(comment, this.COMMENT_WRAP - 3);\n commentCode += this.prefixLines(comment, '// ') + '\\n';\n }\n // Collect comments for all value arguments.\n // Don't collect comments for nested statements.\n for (let i = 0; i < block.inputList.length; i++) {\n if (block.inputList[i].type === inputTypes.VALUE) {\n const childBlock = block.inputList[i].connection.targetBlock();\n if (childBlock) {\n comment = this.allNestedComments(childBlock);\n if (comment) {\n commentCode += this.prefixLines(comment, '// ');\n }\n }\n }\n }\n }\n const nextBlock =\n block.nextConnection && block.nextConnection.targetBlock();\n const nextCode = opt_thisOnly ? '' : this.blockToCode(nextBlock);\n return commentCode + code + nextCode;\n };\n\n /**\n * Gets a property and adjusts the value while taking into account indexing.\n * @param {!Block} block The block.\n * @param {string} atId The property ID of the element to get.\n * @param {number=} opt_delta Value to add.\n * @param {boolean=} opt_negate Whether to negate the value.\n * @param {number=} opt_order The highest order acting on this value.\n * @return {string|number}\n */\n getAdjusted(block, atId, opt_delta, opt_negate, opt_order) {\n let delta = opt_delta || 0;\n let order = opt_order || this.ORDER_NONE;\n if (block.workspace.options.oneBasedIndex) {\n delta--;\n }\n let defaultAtIndex = block.workspace.options.oneBasedIndex ? '1' : '0';\n let outerOrder = order;\n let innerOrder;\n if (delta > 0) {\n outerOrder = this.ORDER_ADDITION;\n innerOrder = this.ORDER_ADDITION;\n } else if (delta < 0) {\n outerOrder = this.ORDER_SUBTRACTION;\n innerOrder = this.ORDER_SUBTRACTION;\n } else if (opt_negate) {\n outerOrder = this.ORDER_UNARY_NEGATION;\n innerOrder = this.ORDER_UNARY_NEGATION;\n }\n let at = this.valueToCode(block, atId, outerOrder) || defaultAtIndex;\n\n if (stringUtils.isNumber(at)) {\n // If the index is a naked number, adjust it right now.\n at = Number(at) + delta;\n if (opt_negate) {\n at = -at;\n }\n } else {\n // If the index is dynamic, adjust it in code.\n if (delta > 0) {\n at = at + ' + ' + delta;\n } else if (delta < 0) {\n at = at + ' - ' + -delta;\n }\n if (opt_negate) {\n if (delta) {\n at = '-(' + at + ')';\n } else {\n at = '-' + at;\n }\n }\n innerOrder = Math.floor(innerOrder);\n order = Math.floor(order);\n if (innerOrder && order >= innerOrder) {\n at = '(' + at + ')';\n }\n }\n return at;\n };\n}\n\n/**\n * PHP code generator.\n * @type {!PhpGenerator}\n */\nexport const phpGenerator = new PhpGenerator();\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for colour blocks.\n */\n\nimport * as goog from '../../closure/goog/goog.js';\ngoog.declareModuleId('Blockly.PHP.colour');\n\nimport {phpGenerator, Order} from '../php.js';\n\n\nphpGenerator.forBlock['colour_picker'] = function(block, generator) {\n // Colour picker.\n const code = generator.quote_(block.getFieldValue('COLOUR'));\n return [code, Order.ATOMIC];\n};\n\nphpGenerator.forBlock['colour_random'] = function(block, generator) {\n // Generate a random colour.\n const functionName = generator.provideFunction_('colour_random', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}() {\n return '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT);\n}\n`);\n const code = functionName + '()';\n return [code, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['colour_rgb'] = function(block, generator) {\n // Compose a colour from RGB components expressed as percentages.\n const red = generator.valueToCode(block, 'RED', Order.NONE) || 0;\n const green = generator.valueToCode(block, 'GREEN', Order.NONE) || 0;\n const blue = generator.valueToCode(block, 'BLUE', Order.NONE) || 0;\n const functionName = generator.provideFunction_('colour_rgb', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($r, $g, $b) {\n $r = round(max(min($r, 100), 0) * 2.55);\n $g = round(max(min($g, 100), 0) * 2.55);\n $b = round(max(min($b, 100), 0) * 2.55);\n $hex = '#';\n $hex .= str_pad(dechex($r), 2, '0', STR_PAD_LEFT);\n $hex .= str_pad(dechex($g), 2, '0', STR_PAD_LEFT);\n $hex .= str_pad(dechex($b), 2, '0', STR_PAD_LEFT);\n return $hex;\n}\n`);\n const code = functionName + '(' + red + ', ' + green + ', ' + blue + ')';\n return [code, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['colour_blend'] = function(block, generator) {\n // Blend two colours together.\n const c1 =\n generator.valueToCode(block, 'COLOUR1', Order.NONE) || \"'#000000'\";\n const c2 =\n generator.valueToCode(block, 'COLOUR2', Order.NONE) || \"'#000000'\";\n const ratio = generator.valueToCode(block, 'RATIO', Order.NONE) || 0.5;\n const functionName = generator.provideFunction_('colour_blend', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($c1, $c2, $ratio) {\n $ratio = max(min($ratio, 1), 0);\n $r1 = hexdec(substr($c1, 1, 2));\n $g1 = hexdec(substr($c1, 3, 2));\n $b1 = hexdec(substr($c1, 5, 2));\n $r2 = hexdec(substr($c2, 1, 2));\n $g2 = hexdec(substr($c2, 3, 2));\n $b2 = hexdec(substr($c2, 5, 2));\n $r = round($r1 * (1 - $ratio) + $r2 * $ratio);\n $g = round($g1 * (1 - $ratio) + $g2 * $ratio);\n $b = round($b1 * (1 - $ratio) + $b2 * $ratio);\n $hex = '#';\n $hex .= str_pad(dechex($r), 2, '0', STR_PAD_LEFT);\n $hex .= str_pad(dechex($g), 2, '0', STR_PAD_LEFT);\n $hex .= str_pad(dechex($b), 2, '0', STR_PAD_LEFT);\n return $hex;\n}\n`);\n const code = functionName + '(' + c1 + ', ' + c2 + ', ' + ratio + ')';\n return [code, Order.FUNCTION_CALL];\n};\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for list blocks.\n */\n\n/**\n * Lists in PHP are known to break when non-variables are passed into blocks\n * that require a list. PHP, unlike other languages, passes arrays as reference\n * value instead of value so we are unable to support it to the extent we can\n * for the other languages.\n * For example, a ternary operator with two arrays will return the array by\n * value and that cannot be passed into any of the built-in array functions for\n * PHP (because only variables can be passed by reference).\n * ex: end(true ? list1 : list2)\n */\n\nimport * as goog from '../../closure/goog/goog.js';\ngoog.declareModuleId('Blockly.generator.lists');\n\nimport * as stringUtils from '../../core/utils/string.js';\nimport {NameType} from '../../core/names.js';\nimport {phpGenerator, Order} from '../php.js';\n\nphpGenerator.forBlock['lists_create_empty'] = function(block, generator) {\n // Create an empty list.\n return ['array()', Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['lists_create_with'] = function(block, generator) {\n // Create a list with any number of elements of any type.\n let code = new Array(block.itemCount_);\n for (let i = 0; i < block.itemCount_; i++) {\n code[i] = generator.valueToCode(block, 'ADD' + i, Order.NONE) || 'null';\n }\n code = 'array(' + code.join(', ') + ')';\n return [code, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['lists_repeat'] = function(block, generator) {\n // Create a list with one element repeated.\n const functionName = generator.provideFunction_('lists_repeat', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($value, $count) {\n $array = array();\n for ($index = 0; $index < $count; $index++) {\n $array[] = $value;\n }\n return $array;\n}\n`);\n const element = generator.valueToCode(block, 'ITEM', Order.NONE) || 'null';\n const repeatCount = generator.valueToCode(block, 'NUM', Order.NONE) || '0';\n const code = functionName + '(' + element + ', ' + repeatCount + ')';\n return [code, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['lists_length'] = function(block, generator) {\n // String or array length.\n const functionName = generator.provideFunction_('length', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($value) {\n if (is_string($value)) {\n return strlen($value);\n } else {\n return count($value);\n }\n}\n`);\n const list = generator.valueToCode(block, 'VALUE', Order.NONE) || \"''\";\n return [functionName + '(' + list + ')', Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['lists_isEmpty'] = function(block, generator) {\n // Is the string null or array empty?\n const argument0 =\n generator.valueToCode(block, 'VALUE', Order.FUNCTION_CALL)\n || 'array()';\n return ['empty(' + argument0 + ')', Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['lists_indexOf'] = function(block, generator) {\n // Find an item in the list.\n const argument0 = generator.valueToCode(block, 'FIND', Order.NONE) || \"''\";\n const argument1 =\n generator.valueToCode(block, 'VALUE', Order.MEMBER) || '[]';\n let errorIndex = ' -1';\n let indexAdjustment = '';\n if (block.workspace.options.oneBasedIndex) {\n errorIndex = ' 0';\n indexAdjustment = ' + 1';\n }\n let functionName;\n if (block.getFieldValue('END') === 'FIRST') {\n // indexOf\n functionName = generator.provideFunction_('indexOf', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($haystack, $needle) {\n for ($index = 0; $index < count($haystack); $index++) {\n if ($haystack[$index] == $needle) return $index${indexAdjustment};\n }\n return ${errorIndex};\n}\n`);\n } else {\n // lastIndexOf\n functionName = generator.provideFunction_('lastIndexOf', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($haystack, $needle) {\n $last = ${errorIndex};\n for ($index = 0; $index < count($haystack); $index++) {\n if ($haystack[$index] == $needle) $last = $index${indexAdjustment};\n }\n return $last;\n}\n`);\n }\n\n const code = functionName + '(' + argument1 + ', ' + argument0 + ')';\n return [code, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['lists_getIndex'] = function(block, generator) {\n // Get element at index.\n const mode = block.getFieldValue('MODE') || 'GET';\n const where = block.getFieldValue('WHERE') || 'FROM_START';\n switch (where) {\n case 'FIRST':\n if (mode === 'GET') {\n const list =\n generator.valueToCode(block, 'VALUE', Order.MEMBER) || 'array()';\n const code = list + '[0]';\n return [code, Order.MEMBER];\n } else if (mode === 'GET_REMOVE') {\n const list =\n generator.valueToCode(block, 'VALUE', Order.NONE) || 'array()';\n const code = 'array_shift(' + list + ')';\n return [code, Order.FUNCTION_CALL];\n } else if (mode === 'REMOVE') {\n const list =\n generator.valueToCode(block, 'VALUE', Order.NONE) || 'array()';\n return 'array_shift(' + list + ');\\n';\n }\n break;\n case 'LAST':\n if (mode === 'GET') {\n const list =\n generator.valueToCode(block, 'VALUE', Order.NONE) || 'array()';\n const code = 'end(' + list + ')';\n return [code, Order.FUNCTION_CALL];\n } else if (mode === 'GET_REMOVE') {\n const list =\n generator.valueToCode(block, 'VALUE', Order.NONE) || 'array()';\n const code = 'array_pop(' + list + ')';\n return [code, Order.FUNCTION_CALL];\n } else if (mode === 'REMOVE') {\n const list =\n generator.valueToCode(block, 'VALUE', Order.NONE) || 'array()';\n return 'array_pop(' + list + ');\\n';\n }\n break;\n case 'FROM_START': {\n const at = generator.getAdjusted(block, 'AT');\n if (mode === 'GET') {\n const list =\n generator.valueToCode(block, 'VALUE', Order.MEMBER) || 'array()';\n const code = list + '[' + at + ']';\n return [code, Order.MEMBER];\n } else if (mode === 'GET_REMOVE') {\n const list =\n generator.valueToCode(block, 'VALUE', Order.NONE) || 'array()';\n const code = 'array_splice(' + list + ', ' + at + ', 1)[0]';\n return [code, Order.FUNCTION_CALL];\n } else if (mode === 'REMOVE') {\n const list =\n generator.valueToCode(block, 'VALUE', Order.NONE) || 'array()';\n return 'array_splice(' + list + ', ' + at + ', 1);\\n';\n }\n break;\n }\n case 'FROM_END':\n if (mode === 'GET') {\n const list =\n generator.valueToCode(block, 'VALUE', Order.NONE) || 'array()';\n const at = generator.getAdjusted(block, 'AT', 1, true);\n const code = 'array_slice(' + list + ', ' + at + ', 1)[0]';\n return [code, Order.FUNCTION_CALL];\n } else if (mode === 'GET_REMOVE' || mode === 'REMOVE') {\n const list =\n generator.valueToCode(block, 'VALUE', Order.NONE) || 'array()';\n const at =\n generator.getAdjusted(block, 'AT', 1, false, Order.SUBTRACTION);\n const code = 'array_splice(' + list + ', count(' + list + ') - ' + at +\n ', 1)[0]';\n if (mode === 'GET_REMOVE') {\n return [code, Order.FUNCTION_CALL];\n } else if (mode === 'REMOVE') {\n return code + ';\\n';\n }\n }\n break;\n case 'RANDOM': {\n const list =\n generator.valueToCode(block, 'VALUE', Order.NONE) || 'array()';\n if (mode === 'GET') {\n const functionName =\n generator.provideFunction_('lists_get_random_item', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($list) {\n return $list[rand(0,count($list)-1)];\n}\n`);\n const code = functionName + '(' + list + ')';\n return [code, Order.FUNCTION_CALL];\n } else if (mode === 'GET_REMOVE') {\n const functionName =\n generator.provideFunction_('lists_get_remove_random_item', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}(&$list) {\n $x = rand(0,count($list)-1);\n unset($list[$x]);\n return array_values($list);\n}\n`);\n const code = functionName + '(' + list + ')';\n return [code, Order.FUNCTION_CALL];\n } else if (mode === 'REMOVE') {\n const functionName =\n generator.provideFunction_('lists_remove_random_item', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}(&$list) {\n unset($list[rand(0,count($list)-1)]);\n}\n`);\n return functionName + '(' + list + ');\\n';\n }\n break;\n }\n }\n throw Error('Unhandled combination (lists_getIndex).');\n};\n\nphpGenerator.forBlock['lists_setIndex'] = function(block, generator) {\n // Set element at index.\n // Note: Until February 2013 this block did not have MODE or WHERE inputs.\n const mode = block.getFieldValue('MODE') || 'GET';\n const where = block.getFieldValue('WHERE') || 'FROM_START';\n const value =\n generator.valueToCode(block, 'TO', Order.ASSIGNMENT) || 'null';\n // Cache non-trivial values to variables to prevent repeated look-ups.\n // Closure, which accesses and modifies 'list'.\n let cachedList;\n function cacheList() {\n if (cachedList.match(/^\\$\\w+$/)) {\n return '';\n }\n const listVar =\n generator.nameDB_.getDistinctName('tmp_list', NameType.VARIABLE);\n const code = listVar + ' = &' + cachedList + ';\\n';\n cachedList = listVar;\n return code;\n }\n switch (where) {\n case 'FIRST':\n if (mode === 'SET') {\n const list =\n generator.valueToCode(block, 'LIST', Order.MEMBER) || 'array()';\n return list + '[0] = ' + value + ';\\n';\n } else if (mode === 'INSERT') {\n const list =\n generator.valueToCode(block, 'LIST', Order.NONE) || 'array()';\n return 'array_unshift(' + list + ', ' + value + ');\\n';\n }\n break;\n case 'LAST': {\n const list =\n generator.valueToCode(block, 'LIST', Order.NONE) || 'array()';\n if (mode === 'SET') {\n const functionName =\n generator.provideFunction_('lists_set_last_item', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}(&$list, $value) {\n $list[count($list) - 1] = $value;\n}\n`);\n return functionName + '(' + list + ', ' + value + ');\\n';\n } else if (mode === 'INSERT') {\n return 'array_push(' + list + ', ' + value + ');\\n';\n }\n break;\n }\n case 'FROM_START': {\n const at = generator.getAdjusted(block, 'AT');\n if (mode === 'SET') {\n const list =\n generator.valueToCode(block, 'LIST', Order.MEMBER) || 'array()';\n return list + '[' + at + '] = ' + value + ';\\n';\n } else if (mode === 'INSERT') {\n const list =\n generator.valueToCode(block, 'LIST', Order.NONE) || 'array()';\n return 'array_splice(' + list + ', ' + at + ', 0, ' + value + ');\\n';\n }\n break;\n }\n case 'FROM_END': {\n const list =\n generator.valueToCode(block, 'LIST', Order.NONE) || 'array()';\n const at = generator.getAdjusted(block, 'AT', 1);\n if (mode === 'SET') {\n const functionName =\n generator.provideFunction_('lists_set_from_end', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}(&$list, $at, $value) {\n $list[count($list) - $at] = $value;\n}\n`);\n return functionName + '(' + list + ', ' + at + ', ' + value + ');\\n';\n } else if (mode === 'INSERT') {\n const functionName =\n generator.provideFunction_('lists_insert_from_end', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}(&$list, $at, $value) {\n return array_splice($list, count($list) - $at, 0, $value);\n}\n`);\n return functionName + '(' + list + ', ' + at + ', ' + value + ');\\n';\n }\n break;\n }\n case 'RANDOM':\n cachedList =\n generator.valueToCode(block, 'LIST', Order.REFERENCE) || 'array()';\n let code = cacheList();\n const list = cachedList;\n const xVar =\n generator.nameDB_.getDistinctName('tmp_x', NameType.VARIABLE);\n code += xVar + ' = rand(0, count(' + list + ')-1);\\n';\n if (mode === 'SET') {\n code += list + '[' + xVar + '] = ' + value + ';\\n';\n return code;\n } else if (mode === 'INSERT') {\n code += 'array_splice(' + list + ', ' + xVar + ', 0, ' + value + ');\\n';\n return code;\n }\n break;\n }\n throw Error('Unhandled combination (lists_setIndex).');\n};\n\nphpGenerator.forBlock['lists_getSublist'] = function(block, generator) {\n // Get sublist.\n const list = generator.valueToCode(block, 'LIST', Order.NONE) || 'array()';\n const where1 = block.getFieldValue('WHERE1');\n const where2 = block.getFieldValue('WHERE2');\n let code;\n if (where1 === 'FIRST' && where2 === 'LAST') {\n code = list;\n } else if (\n list.match(/^\\$\\w+$/) ||\n (where1 !== 'FROM_END' && where2 === 'FROM_START')) {\n // If the list is a simple value or doesn't require a call for length, don't\n // generate a helper function.\n let at1;\n switch (where1) {\n case 'FROM_START':\n at1 = generator.getAdjusted(block, 'AT1');\n break;\n case 'FROM_END':\n at1 =\n generator.getAdjusted(block, 'AT1', 1, false, Order.SUBTRACTION);\n at1 = 'count(' + list + ') - ' + at1;\n break;\n case 'FIRST':\n at1 = '0';\n break;\n default:\n throw Error('Unhandled option (lists_getSublist).');\n }\n let at2;\n let length;\n switch (where2) {\n case 'FROM_START':\n at2 =\n generator.getAdjusted(block, 'AT2', 0, false, Order.SUBTRACTION);\n length = at2 + ' - ';\n if (stringUtils.isNumber(String(at1)) ||\n String(at1).match(/^\\(.+\\)$/)) {\n length += at1;\n } else {\n length += '(' + at1 + ')';\n }\n length += ' + 1';\n break;\n case 'FROM_END':\n at2 =\n generator.getAdjusted(block, 'AT2', 0, false, Order.SUBTRACTION);\n length = 'count(' + list + ') - ' + at2 + ' - ';\n if (stringUtils.isNumber(String(at1)) ||\n String(at1).match(/^\\(.+\\)$/)) {\n length += at1;\n } else {\n length += '(' + at1 + ')';\n }\n break;\n case 'LAST':\n length = 'count(' + list + ') - ';\n if (stringUtils.isNumber(String(at1)) ||\n String(at1).match(/^\\(.+\\)$/)) {\n length += at1;\n } else {\n length += '(' + at1 + ')';\n }\n break;\n default:\n throw Error('Unhandled option (lists_getSublist).');\n }\n code = 'array_slice(' + list + ', ' + at1 + ', ' + length + ')';\n } else {\n const at1 = generator.getAdjusted(block, 'AT1');\n const at2 = generator.getAdjusted(block, 'AT2');\n const functionName =\n generator.provideFunction_('lists_get_sublist', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($list, $where1, $at1, $where2, $at2) {\n if ($where1 == 'FROM_END') {\n $at1 = count($list) - 1 - $at1;\n } else if ($where1 == 'FIRST') {\n $at1 = 0;\n } else if ($where1 != 'FROM_START') {\n throw new Exception('Unhandled option (lists_get_sublist).');\n }\n $length = 0;\n if ($where2 == 'FROM_START') {\n $length = $at2 - $at1 + 1;\n } else if ($where2 == 'FROM_END') {\n $length = count($list) - $at1 - $at2;\n } else if ($where2 == 'LAST') {\n $length = count($list) - $at1;\n } else {\n throw new Exception('Unhandled option (lists_get_sublist).');\n }\n return array_slice($list, $at1, $length);\n}\n`);\n code = functionName + '(' + list + ', \\'' + where1 + '\\', ' + at1 + ', \\'' +\n where2 + '\\', ' + at2 + ')';\n }\n return [code, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['lists_sort'] = function(block, generator) {\n // Block for sorting a list.\n const listCode =\n generator.valueToCode(block, 'LIST', Order.NONE) || 'array()';\n const direction = block.getFieldValue('DIRECTION') === '1' ? 1 : -1;\n const type = block.getFieldValue('TYPE');\n const functionName = generator.provideFunction_('lists_sort', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($list, $type, $direction) {\n $sortCmpFuncs = array(\n 'NUMERIC' => 'strnatcasecmp',\n 'TEXT' => 'strcmp',\n 'IGNORE_CASE' => 'strcasecmp'\n );\n $sortCmp = $sortCmpFuncs[$type];\n $list2 = $list;\n usort($list2, $sortCmp);\n if ($direction == -1) {\n $list2 = array_reverse($list2);\n }\n return $list2;\n}\n`);\n const sortCode =\n functionName + '(' + listCode + ', \"' + type + '\", ' + direction + ')';\n return [sortCode, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['lists_split'] = function(block, generator) {\n // Block for splitting text into a list, or joining a list into text.\n let value_input = generator.valueToCode(block, 'INPUT', Order.NONE);\n const value_delim =\n generator.valueToCode(block, 'DELIM', Order.NONE) || \"''\";\n const mode = block.getFieldValue('MODE');\n let functionName;\n if (mode === 'SPLIT') {\n if (!value_input) {\n value_input = \"''\";\n }\n functionName = 'explode';\n } else if (mode === 'JOIN') {\n if (!value_input) {\n value_input = 'array()';\n }\n functionName = 'implode';\n } else {\n throw Error('Unknown mode: ' + mode);\n }\n const code = functionName + '(' + value_delim + ', ' + value_input + ')';\n return [code, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['lists_reverse'] = function(block, generator) {\n // Block for reversing a list.\n const list = generator.valueToCode(block, 'LIST', Order.NONE) || '[]';\n const code = 'array_reverse(' + list + ')';\n return [code, Order.FUNCTION_CALL];\n};\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for logic blocks.\n */\n\nimport * as goog from '../../closure/goog/goog.js';\ngoog.declareModuleId('Blockly.PHP.logic');\n\nimport {phpGenerator, Order} from '../php.js';\n\n\nphpGenerator.forBlock['controls_if'] = function(block, generator) {\n // If/elseif/else condition.\n let n = 0;\n let code = '', branchCode, conditionCode;\n if (generator.STATEMENT_PREFIX) {\n // Automatic prefix insertion is switched off for this block. Add manually.\n code += generator.injectId(generator.STATEMENT_PREFIX, block);\n }\n do {\n conditionCode =\n generator.valueToCode(block, 'IF' + n, Order.NONE) || 'false';\n branchCode = generator.statementToCode(block, 'DO' + n);\n if (generator.STATEMENT_SUFFIX) {\n branchCode =\n generator.prefixLines(\n generator.injectId(generator.STATEMENT_SUFFIX, block),\n generator.INDENT) +\n branchCode;\n }\n code += (n > 0 ? ' else ' : '') + 'if (' + conditionCode + ') {\\n' +\n branchCode + '}';\n n++;\n } while (block.getInput('IF' + n));\n\n if (block.getInput('ELSE') || generator.STATEMENT_SUFFIX) {\n branchCode = generator.statementToCode(block, 'ELSE');\n if (generator.STATEMENT_SUFFIX) {\n branchCode =\n generator.prefixLines(\n generator.injectId(generator.STATEMENT_SUFFIX, block),\n generator.INDENT) +\n branchCode;\n }\n code += ' else {\\n' + branchCode + '}';\n }\n return code + '\\n';\n};\n\nphpGenerator.forBlock['controls_ifelse'] = phpGenerator.forBlock['controls_if'];\n\nphpGenerator.forBlock['logic_compare'] = function(block, generator) {\n // Comparison operator.\n const OPERATORS =\n {'EQ': '==', 'NEQ': '!=', 'LT': '<', 'LTE': '<=', 'GT': '>', 'GTE': '>='};\n const operator = OPERATORS[block.getFieldValue('OP')];\n const order = (operator === '==' || operator === '!=') ? Order.EQUALITY :\n Order.RELATIONAL;\n const argument0 = generator.valueToCode(block, 'A', order) || '0';\n const argument1 = generator.valueToCode(block, 'B', order) || '0';\n const code = argument0 + ' ' + operator + ' ' + argument1;\n return [code, order];\n};\n\nphpGenerator.forBlock['logic_operation'] = function(block, generator) {\n // Operations 'and', 'or'.\n const operator = (block.getFieldValue('OP') === 'AND') ? '&&' : '||';\n const order =\n (operator === '&&') ? Order.LOGICAL_AND : Order.LOGICAL_OR;\n let argument0 = generator.valueToCode(block, 'A', order);\n let argument1 = generator.valueToCode(block, 'B', order);\n if (!argument0 && !argument1) {\n // If there are no arguments, then the return value is false.\n argument0 = 'false';\n argument1 = 'false';\n } else {\n // Single missing arguments have no effect on the return value.\n const defaultArgument = (operator === '&&') ? 'true' : 'false';\n if (!argument0) {\n argument0 = defaultArgument;\n }\n if (!argument1) {\n argument1 = defaultArgument;\n }\n }\n const code = argument0 + ' ' + operator + ' ' + argument1;\n return [code, order];\n};\n\nphpGenerator.forBlock['logic_negate'] = function(block, generator) {\n // Negation.\n const order = Order.LOGICAL_NOT;\n const argument0 = generator.valueToCode(block, 'BOOL', order) || 'true';\n const code = '!' + argument0;\n return [code, order];\n};\n\nphpGenerator.forBlock['logic_boolean'] = function(block, generator) {\n // Boolean values true and false.\n const code = (block.getFieldValue('BOOL') === 'TRUE') ? 'true' : 'false';\n return [code, Order.ATOMIC];\n};\n\nphpGenerator.forBlock['logic_null'] = function(block, generator) {\n // Null data type.\n return ['null', Order.ATOMIC];\n};\n\nphpGenerator.forBlock['logic_ternary'] = function(block, generator) {\n // Ternary operator.\n const value_if =\n generator.valueToCode(block, 'IF', Order.CONDITIONAL) || 'false';\n const value_then =\n generator.valueToCode(block, 'THEN', Order.CONDITIONAL) || 'null';\n const value_else =\n generator.valueToCode(block, 'ELSE', Order.CONDITIONAL) || 'null';\n const code = value_if + ' ? ' + value_then + ' : ' + value_else;\n return [code, Order.CONDITIONAL];\n};\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for loop blocks.\n */\n\nimport * as goog from '../../closure/goog/goog.js';\ngoog.declareModuleId('Blockly.PHP.loops');\n\nimport * as stringUtils from '../../core/utils/string.js';\nimport {NameType} from '../../core/names.js';\nimport {phpGenerator, Order} from '../php.js';\n\n\nphpGenerator.forBlock['controls_repeat_ext'] = function(block, generator) {\n // Repeat n times.\n let repeats;\n if (block.getField('TIMES')) {\n // Internal number.\n repeats = String(Number(block.getFieldValue('TIMES')));\n } else {\n // External number.\n repeats = generator.valueToCode(block, 'TIMES', Order.ASSIGNMENT) || '0';\n }\n let branch = generator.statementToCode(block, 'DO');\n branch = generator.addLoopTrap(branch, block);\n let code = '';\n const loopVar =\n generator.nameDB_.getDistinctName('count', NameType.VARIABLE);\n let endVar = repeats;\n if (!repeats.match(/^\\w+$/) && !stringUtils.isNumber(repeats)) {\n endVar =\n generator.nameDB_.getDistinctName('repeat_end', NameType.VARIABLE);\n code += endVar + ' = ' + repeats + ';\\n';\n }\n code += 'for (' + loopVar + ' = 0; ' + loopVar + ' < ' + endVar + '; ' +\n loopVar + '++) {\\n' + branch + '}\\n';\n return code;\n};\n\nphpGenerator.forBlock['controls_repeat'] =\n phpGenerator.forBlock['controls_repeat_ext'];\n\nphpGenerator.forBlock['controls_whileUntil'] = function(block, generator) {\n // Do while/until loop.\n const until = block.getFieldValue('MODE') === 'UNTIL';\n let argument0 =\n generator.valueToCode(\n block, 'BOOL', until ? Order.LOGICAL_NOT : Order.NONE) ||\n 'false';\n let branch = generator.statementToCode(block, 'DO');\n branch = generator.addLoopTrap(branch, block);\n if (until) {\n argument0 = '!' + argument0;\n }\n return 'while (' + argument0 + ') {\\n' + branch + '}\\n';\n};\n\nphpGenerator.forBlock['controls_for'] = function(block, generator) {\n // For loop.\n const variable0 =\n generator.nameDB_.getName(block.getFieldValue('VAR'), NameType.VARIABLE);\n const argument0 =\n generator.valueToCode(block, 'FROM', Order.ASSIGNMENT) || '0';\n const argument1 =\n generator.valueToCode(block, 'TO', Order.ASSIGNMENT) || '0';\n const increment =\n generator.valueToCode(block, 'BY', Order.ASSIGNMENT) || '1';\n let branch = generator.statementToCode(block, 'DO');\n branch = generator.addLoopTrap(branch, block);\n let code;\n if (stringUtils.isNumber(argument0) && stringUtils.isNumber(argument1) &&\n stringUtils.isNumber(increment)) {\n // All arguments are simple numbers.\n const up = Number(argument0) <= Number(argument1);\n code = 'for (' + variable0 + ' = ' + argument0 + '; ' + variable0 +\n (up ? ' <= ' : ' >= ') + argument1 + '; ' + variable0;\n const step = Math.abs(Number(increment));\n if (step === 1) {\n code += up ? '++' : '--';\n } else {\n code += (up ? ' += ' : ' -= ') + step;\n }\n code += ') {\\n' + branch + '}\\n';\n } else {\n code = '';\n // Cache non-trivial values to variables to prevent repeated look-ups.\n let startVar = argument0;\n if (!argument0.match(/^\\w+$/) && !stringUtils.isNumber(argument0)) {\n startVar =\n generator.nameDB_.getDistinctName(\n variable0 + '_start', NameType.VARIABLE);\n code += startVar + ' = ' + argument0 + ';\\n';\n }\n let endVar = argument1;\n if (!argument1.match(/^\\w+$/) && !stringUtils.isNumber(argument1)) {\n endVar =\n generator.nameDB_.getDistinctName(\n variable0 + '_end', NameType.VARIABLE);\n code += endVar + ' = ' + argument1 + ';\\n';\n }\n // Determine loop direction at start, in case one of the bounds\n // changes during loop execution.\n const incVar =\n generator.nameDB_.getDistinctName(\n variable0 + '_inc', NameType.VARIABLE);\n code += incVar + ' = ';\n if (stringUtils.isNumber(increment)) {\n code += Math.abs(increment) + ';\\n';\n } else {\n code += 'abs(' + increment + ');\\n';\n }\n code += 'if (' + startVar + ' > ' + endVar + ') {\\n';\n code += generator.INDENT + incVar + ' = -' + incVar + ';\\n';\n code += '}\\n';\n code += 'for (' + variable0 + ' = ' + startVar + '; ' + incVar +\n ' >= 0 ? ' + variable0 + ' <= ' + endVar + ' : ' + variable0 +\n ' >= ' + endVar + '; ' + variable0 + ' += ' + incVar + ') {\\n' +\n branch + '}\\n';\n }\n return code;\n};\n\nphpGenerator.forBlock['controls_forEach'] = function(block, generator) {\n // For each loop.\n const variable0 =\n generator.nameDB_.getName(\n block.getFieldValue('VAR'), NameType.VARIABLE);\n const argument0 =\n generator.valueToCode(block, 'LIST', Order.ASSIGNMENT) || '[]';\n let branch = generator.statementToCode(block, 'DO');\n branch = generator.addLoopTrap(branch, block);\n let code = '';\n code +=\n 'foreach (' + argument0 + ' as ' + variable0 + ') {\\n' + branch + '}\\n';\n return code;\n};\n\nphpGenerator.forBlock['controls_flow_statements'] = function(block, generator) {\n // Flow statements: continue, break.\n let xfix = '';\n if (generator.STATEMENT_PREFIX) {\n // Automatic prefix insertion is switched off for this block. Add manually.\n xfix += generator.injectId(generator.STATEMENT_PREFIX, block);\n }\n if (generator.STATEMENT_SUFFIX) {\n // Inject any statement suffix here since the regular one at the end\n // will not get executed if the break/continue is triggered.\n xfix += generator.injectId(generator.STATEMENT_SUFFIX, block);\n }\n if (generator.STATEMENT_PREFIX) {\n const loop = block.getSurroundLoop();\n if (loop && !loop.suppressPrefixSuffix) {\n // Inject loop's statement prefix here since the regular one at the end\n // of the loop will not get executed if 'continue' is triggered.\n // In the case of 'break', a prefix is needed due to the loop's suffix.\n xfix += generator.injectId(generator.STATEMENT_PREFIX, loop);\n }\n }\n switch (block.getFieldValue('FLOW')) {\n case 'BREAK':\n return xfix + 'break;\\n';\n case 'CONTINUE':\n return xfix + 'continue;\\n';\n }\n throw Error('Unknown flow statement.');\n};\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for math blocks.\n */\n\nimport * as goog from '../../closure/goog/goog.js';\ngoog.declareModuleId('Blockly.PHP.math');\n\nimport {NameType} from '../../core/names.js';\nimport {phpGenerator, Order} from '../php.js';\n\n\nphpGenerator.forBlock['math_number'] = function(block, generator) {\n // Numeric value.\n let code = Number(block.getFieldValue('NUM'));\n const order = code >= 0 ? Order.ATOMIC : Order.UNARY_NEGATION;\n if (code === Infinity) {\n code = 'INF';\n } else if (code === -Infinity) {\n code = '-INF';\n }\n return [code, order];\n};\n\nphpGenerator.forBlock['math_arithmetic'] = function(block, generator) {\n // Basic arithmetic operators, and power.\n const OPERATORS = {\n 'ADD': [' + ', Order.ADDITION],\n 'MINUS': [' - ', Order.SUBTRACTION],\n 'MULTIPLY': [' * ', Order.MULTIPLICATION],\n 'DIVIDE': [' / ', Order.DIVISION],\n 'POWER': [' ** ', Order.POWER],\n };\n const tuple = OPERATORS[block.getFieldValue('OP')];\n const operator = tuple[0];\n const order = tuple[1];\n const argument0 = generator.valueToCode(block, 'A', order) || '0';\n const argument1 = generator.valueToCode(block, 'B', order) || '0';\n const code = argument0 + operator + argument1;\n return [code, order];\n};\n\nphpGenerator.forBlock['math_single'] = function(block, generator) {\n // Math operators with single operand.\n const operator = block.getFieldValue('OP');\n let code;\n let arg;\n if (operator === 'NEG') {\n // Negation is a special case given its different operator precedence.\n arg = generator.valueToCode(block, 'NUM', Order.UNARY_NEGATION) || '0';\n if (arg[0] === '-') {\n // --3 is not legal in JS.\n arg = ' ' + arg;\n }\n code = '-' + arg;\n return [code, Order.UNARY_NEGATION];\n }\n if (operator === 'SIN' || operator === 'COS' || operator === 'TAN') {\n arg = generator.valueToCode(block, 'NUM', Order.DIVISION) || '0';\n } else {\n arg = generator.valueToCode(block, 'NUM', Order.NONE) || '0';\n }\n // First, handle cases which generate values that don't need parentheses\n // wrapping the code.\n switch (operator) {\n case 'ABS':\n code = 'abs(' + arg + ')';\n break;\n case 'ROOT':\n code = 'sqrt(' + arg + ')';\n break;\n case 'LN':\n code = 'log(' + arg + ')';\n break;\n case 'EXP':\n code = 'exp(' + arg + ')';\n break;\n case 'POW10':\n code = 'pow(10,' + arg + ')';\n break;\n case 'ROUND':\n code = 'round(' + arg + ')';\n break;\n case 'ROUNDUP':\n code = 'ceil(' + arg + ')';\n break;\n case 'ROUNDDOWN':\n code = 'floor(' + arg + ')';\n break;\n case 'SIN':\n code = 'sin(' + arg + ' / 180 * pi())';\n break;\n case 'COS':\n code = 'cos(' + arg + ' / 180 * pi())';\n break;\n case 'TAN':\n code = 'tan(' + arg + ' / 180 * pi())';\n break;\n }\n if (code) {\n return [code, Order.FUNCTION_CALL];\n }\n // Second, handle cases which generate values that may need parentheses\n // wrapping the code.\n switch (operator) {\n case 'LOG10':\n code = 'log(' + arg + ') / log(10)';\n break;\n case 'ASIN':\n code = 'asin(' + arg + ') / pi() * 180';\n break;\n case 'ACOS':\n code = 'acos(' + arg + ') / pi() * 180';\n break;\n case 'ATAN':\n code = 'atan(' + arg + ') / pi() * 180';\n break;\n default:\n throw Error('Unknown math operator: ' + operator);\n }\n return [code, Order.DIVISION];\n};\n\nphpGenerator.forBlock['math_constant'] = function(block, generator) {\n // Constants: PI, E, the Golden Ratio, sqrt(2), 1/sqrt(2), INFINITY.\n const CONSTANTS = {\n 'PI': ['M_PI', Order.ATOMIC],\n 'E': ['M_E', Order.ATOMIC],\n 'GOLDEN_RATIO': ['(1 + sqrt(5)) / 2', Order.DIVISION],\n 'SQRT2': ['M_SQRT2', Order.ATOMIC],\n 'SQRT1_2': ['M_SQRT1_2', Order.ATOMIC],\n 'INFINITY': ['INF', Order.ATOMIC],\n };\n return CONSTANTS[block.getFieldValue('CONSTANT')];\n};\n\nphpGenerator.forBlock['math_number_property'] = function(block, generator) {\n // Check if a number is even, odd, prime, whole, positive, or negative\n // or if it is divisible by certain number. Returns true or false.\n const PROPERTIES = {\n 'EVEN': ['', ' % 2 == 0', Order.MODULUS, Order.EQUALITY],\n 'ODD': ['', ' % 2 == 1', Order.MODULUS, Order.EQUALITY],\n 'WHOLE': ['is_int(', ')', Order.NONE, Order.FUNCTION_CALL],\n 'POSITIVE': ['', ' > 0', Order.RELATIONAL, Order.RELATIONAL],\n 'NEGATIVE': ['', ' < 0', Order.RELATIONAL, Order.RELATIONAL],\n 'DIVISIBLE_BY': [null, null, Order.MODULUS, Order.EQUALITY],\n 'PRIME': [null, null, Order.NONE, Order.FUNCTION_CALL],\n };\n const dropdownProperty = block.getFieldValue('PROPERTY');\n const [prefix, suffix, inputOrder, outputOrder] =\n PROPERTIES[dropdownProperty];\n const numberToCheck = generator.valueToCode(block, 'NUMBER_TO_CHECK',\n inputOrder) || '0';\n let code;\n if (dropdownProperty === 'PRIME') {\n // Prime is a special case as it is not a one-liner test.\n const functionName = generator.provideFunction_('math_isPrime', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($n) {\n // https://en.wikipedia.org/wiki/Primality_test#Naive_methods\n if ($n == 2 || $n == 3) {\n return true;\n }\n // False if n is NaN, negative, is 1, or not whole.\n // And false if n is divisible by 2 or 3.\n if (!is_numeric($n) || $n <= 1 || $n % 1 != 0 || $n % 2 == 0 || $n % 3 == 0) {\n return false;\n }\n // Check all the numbers of form 6k +/- 1, up to sqrt(n).\n for ($x = 6; $x <= sqrt($n) + 1; $x += 6) {\n if ($n % ($x - 1) == 0 || $n % ($x + 1) == 0) {\n return false;\n }\n }\n return true;\n}\n`);\n code = functionName + '(' + numberToCheck + ')';\n } else if (dropdownProperty === 'DIVISIBLE_BY') {\n const divisor = generator.valueToCode(block, 'DIVISOR',\n Order.MODULUS) || '0';\n if (divisor === '0') {\n return ['false', Order.ATOMIC];\n\n }\n code = numberToCheck + ' % ' + divisor + ' == 0';\n } else {\n code = prefix + numberToCheck + suffix;\n }\n return [code, outputOrder];\n};\n\nphpGenerator.forBlock['math_change'] = function(block, generator) {\n // Add to a variable in place.\n const argument0 =\n generator.valueToCode(block, 'DELTA', Order.ADDITION) || '0';\n const varName =\n generator.nameDB_.getName(\n block.getFieldValue('VAR'), NameType.VARIABLE);\n return varName + ' += ' + argument0 + ';\\n';\n};\n\n// Rounding functions have a single operand.\nphpGenerator.forBlock['math_round'] = phpGenerator.forBlock['math_single'];\n// Trigonometry functions have a single operand.\nphpGenerator.forBlock['math_trig'] = phpGenerator.forBlock['math_single'];\n\nphpGenerator.forBlock['math_on_list'] = function(block, generator) {\n // Math functions for lists.\n const func = block.getFieldValue('OP');\n let list;\n let code;\n switch (func) {\n case 'SUM':\n list =\n generator.valueToCode(block, 'LIST', Order.FUNCTION_CALL)\n || 'array()';\n code = 'array_sum(' + list + ')';\n break;\n case 'MIN':\n list =\n generator.valueToCode(block, 'LIST', Order.FUNCTION_CALL)\n || 'array()';\n code = 'min(' + list + ')';\n break;\n case 'MAX':\n list =\n generator.valueToCode(block, 'LIST', Order.FUNCTION_CALL)\n || 'array()';\n code = 'max(' + list + ')';\n break;\n case 'AVERAGE': {\n const functionName = generator.provideFunction_('math_mean', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($myList) {\n return array_sum($myList) / count($myList);\n}\n`);\n list = generator.valueToCode(block, 'LIST', Order.NONE) || 'array()';\n code = functionName + '(' + list + ')';\n break;\n }\n case 'MEDIAN': {\n const functionName = generator.provideFunction_('math_median', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($arr) {\n sort($arr,SORT_NUMERIC);\n return (count($arr) % 2) ? $arr[floor(count($arr) / 2)] :\n ($arr[floor(count($arr) / 2)] + $arr[floor(count($arr) / 2) - 1]) / 2;\n}\n`);\n list = generator.valueToCode(block, 'LIST', Order.NONE) || '[]';\n code = functionName + '(' + list + ')';\n break;\n }\n case 'MODE': {\n // As a list of numbers can contain more than one mode,\n // the returned result is provided as an array.\n // Mode of [3, 'x', 'x', 1, 1, 2, '3'] -> ['x', 1].\n const functionName = generator.provideFunction_('math_modes', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($values) {\n if (empty($values)) return array();\n $counts = array_count_values($values);\n arsort($counts); // Sort counts in descending order\n $modes = array_keys($counts, current($counts), true);\n return $modes;\n}\n`);\n list = generator.valueToCode(block, 'LIST', Order.NONE) || '[]';\n code = functionName + '(' + list + ')';\n break;\n }\n case 'STD_DEV': {\n const functionName =\n generator.provideFunction_('math_standard_deviation', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($numbers) {\n $n = count($numbers);\n if (!$n) return null;\n $mean = array_sum($numbers) / count($numbers);\n foreach($numbers as $key => $num) $devs[$key] = pow($num - $mean, 2);\n return sqrt(array_sum($devs) / (count($devs) - 1));\n}\n`);\n list = generator.valueToCode(block, 'LIST', Order.NONE) || '[]';\n code = functionName + '(' + list + ')';\n break;\n }\n case 'RANDOM': {\n const functionName = generator.provideFunction_('math_random_list', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($list) {\n $x = rand(0, count($list)-1);\n return $list[$x];\n}\n`);\n list = generator.valueToCode(block, 'LIST', Order.NONE) || '[]';\n code = functionName + '(' + list + ')';\n break;\n }\n default:\n throw Error('Unknown operator: ' + func);\n }\n return [code, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['math_modulo'] = function(block, generator) {\n // Remainder computation.\n const argument0 =\n generator.valueToCode(block, 'DIVIDEND', Order.MODULUS) || '0';\n const argument1 =\n generator.valueToCode(block, 'DIVISOR', Order.MODULUS) || '0';\n const code = argument0 + ' % ' + argument1;\n return [code, Order.MODULUS];\n};\n\nphpGenerator.forBlock['math_constrain'] = function(block, generator) {\n // Constrain a number between two limits.\n const argument0 = generator.valueToCode(block, 'VALUE', Order.NONE) || '0';\n const argument1 = generator.valueToCode(block, 'LOW', Order.NONE) || '0';\n const argument2 =\n generator.valueToCode(block, 'HIGH', Order.NONE) || 'Infinity';\n const code =\n 'min(max(' + argument0 + ', ' + argument1 + '), ' + argument2 + ')';\n return [code, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['math_random_int'] = function(block, generator) {\n // Random integer between [X] and [Y].\n const argument0 = generator.valueToCode(block, 'FROM', Order.NONE) || '0';\n const argument1 = generator.valueToCode(block, 'TO', Order.NONE) || '0';\n const functionName = generator.provideFunction_('math_random_int', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($a, $b) {\n if ($a > $b) {\n return rand($b, $a);\n }\n return rand($a, $b);\n}\n`);\n const code = functionName + '(' + argument0 + ', ' + argument1 + ')';\n return [code, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['math_random_float'] = function(block, generator) {\n // Random fraction between 0 and 1.\n return ['(float)rand()/(float)getrandmax()', Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['math_atan2'] = function(block, generator) {\n // Arctangent of point (X, Y) in degrees from -180 to 180.\n const argument0 = generator.valueToCode(block, 'X', Order.NONE) || '0';\n const argument1 = generator.valueToCode(block, 'Y', Order.NONE) || '0';\n return [\n 'atan2(' + argument1 + ', ' + argument0 + ') / pi() * 180',\n Order.DIVISION\n ];\n};\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for procedure blocks.\n */\n\nimport * as goog from '../../closure/goog/goog.js';\ngoog.declareModuleId('Blockly.PHP.procedures');\n\nimport * as Variables from '../../core/variables.js';\nimport {NameType} from '../../core/names.js';\nimport {phpGenerator, Order} from '../php.js';\n\n\nphpGenerator.forBlock['procedures_defreturn'] = function(block, generator) {\n // Define a procedure with a return value.\n // First, add a 'global' statement for every variable that is not shadowed by\n // a local parameter.\n const globals = [];\n const workspace = block.workspace;\n const usedVariables = Variables.allUsedVarModels(workspace) || [];\n for (let i = 0, variable; variable = usedVariables[i]; i++) {\n const varName = variable.name;\n if (block.getVars().indexOf(varName) === -1) {\n globals.push(generator.nameDB_.getName(varName, NameType.VARIABLE));\n }\n }\n // Add developer variables.\n const devVarList = Variables.allDeveloperVariables(workspace);\n for (let i = 0; i < devVarList.length; i++) {\n globals.push(\n generator.nameDB_.getName(\n devVarList[i], NameType.DEVELOPER_VARIABLE));\n }\n const globalStr =\n globals.length ?\n generator.INDENT + 'global ' + globals.join(', ') + ';\\n' : '';\n\n const funcName =\n generator.nameDB_.getName(\n block.getFieldValue('NAME'), NameType.PROCEDURE);\n let xfix1 = '';\n if (generator.STATEMENT_PREFIX) {\n xfix1 += generator.injectId(generator.STATEMENT_PREFIX, block);\n }\n if (generator.STATEMENT_SUFFIX) {\n xfix1 += generator.injectId(generator.STATEMENT_SUFFIX, block);\n }\n if (xfix1) {\n xfix1 = generator.prefixLines(xfix1, generator.INDENT);\n }\n let loopTrap = '';\n if (generator.INFINITE_LOOP_TRAP) {\n loopTrap = generator.prefixLines(\n generator.injectId(generator.INFINITE_LOOP_TRAP, block),\n generator.INDENT);\n }\n const branch = generator.statementToCode(block, 'STACK');\n let returnValue = generator.valueToCode(block, 'RETURN', Order.NONE) || '';\n let xfix2 = '';\n if (branch && returnValue) {\n // After executing the function body, revisit this block for the return.\n xfix2 = xfix1;\n }\n if (returnValue) {\n returnValue = generator.INDENT + 'return ' + returnValue + ';\\n';\n }\n const args = [];\n const variables = block.getVars();\n for (let i = 0; i < variables.length; i++) {\n args[i] = generator.nameDB_.getName(variables[i], NameType.VARIABLE);\n }\n let code = 'function ' + funcName + '(' + args.join(', ') + ') {\\n' +\n globalStr + xfix1 + loopTrap + branch + xfix2 + returnValue + '}';\n code = generator.scrub_(block, code);\n // Add % so as not to collide with helper functions in definitions list.\n generator.definitions_['%' + funcName] = code;\n return null;\n};\n\n// Defining a procedure without a return value uses the same generator as\n// a procedure with a return value.\nphpGenerator.forBlock['procedures_defnoreturn'] =\n phpGenerator.forBlock['procedures_defreturn'];\n\nphpGenerator.forBlock['procedures_callreturn'] = function(block, generator) {\n // Call a procedure with a return value.\n const funcName =\n generator.nameDB_.getName(\n block.getFieldValue('NAME'), NameType.PROCEDURE);\n const args = [];\n const variables = block.getVars();\n for (let i = 0; i < variables.length; i++) {\n args[i] = generator.valueToCode(block, 'ARG' + i, Order.NONE) || 'null';\n }\n const code = funcName + '(' + args.join(', ') + ')';\n return [code, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['procedures_callnoreturn'] = function(block, generator) {\n // Call a procedure with no return value.\n // Generated code is for a function call as a statement is the same as a\n // function call as a value, with the addition of line ending.\n const tuple = generator.forBlock['procedures_callreturn'](block, generator);\n return tuple[0] + ';\\n';\n};\n\nphpGenerator.forBlock['procedures_ifreturn'] = function(block, generator) {\n // Conditionally return value from a procedure.\n const condition =\n generator.valueToCode(block, 'CONDITION', Order.NONE) || 'false';\n let code = 'if (' + condition + ') {\\n';\n if (generator.STATEMENT_SUFFIX) {\n // Inject any statement suffix here since the regular one at the end\n // will not get executed if the return is triggered.\n code +=\n generator.prefixLines(\n generator.injectId(generator.STATEMENT_SUFFIX, block),\n generator.INDENT);\n }\n if (block.hasReturnValue_) {\n const value = generator.valueToCode(block, 'VALUE', Order.NONE) || 'null';\n code += generator.INDENT + 'return ' + value + ';\\n';\n } else {\n code += generator.INDENT + 'return;\\n';\n }\n code += '}\\n';\n return code;\n};\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for text blocks.\n */\n\nimport * as goog from '../../closure/goog/goog.js';\ngoog.declareModuleId('Blockly.PHP.texts');\n\nimport {NameType} from '../../core/names.js';\nimport {phpGenerator, Order} from '../php.js';\n\n\nphpGenerator.forBlock['text'] = function(block, generator) {\n // Text value.\n const code = generator.quote_(block.getFieldValue('TEXT'));\n return [code, Order.ATOMIC];\n};\n\nphpGenerator.forBlock['text_multiline'] = function(block, generator) {\n // Text value.\n const code = generator.multiline_quote_(block.getFieldValue('TEXT'));\n const order =\n code.indexOf('.') !== -1 ? Order.STRING_CONCAT : Order.ATOMIC;\n return [code, order];\n};\n\nphpGenerator.forBlock['text_join'] = function(block, generator) {\n // Create a string made up of any number of elements of any type.\n if (block.itemCount_ === 0) {\n return [\"''\", Order.ATOMIC];\n } else if (block.itemCount_ === 1) {\n const element = generator.valueToCode(block, 'ADD0', Order.NONE) || \"''\";\n const code = element;\n return [code, Order.NONE];\n } else if (block.itemCount_ === 2) {\n const element0 =\n generator.valueToCode(block, 'ADD0', Order.STRING_CONCAT) || \"''\";\n const element1 =\n generator.valueToCode(block, 'ADD1', Order.STRING_CONCAT) || \"''\";\n const code = element0 + ' . ' + element1;\n return [code, Order.STRING_CONCAT];\n } else {\n const elements = new Array(block.itemCount_);\n for (let i = 0; i < block.itemCount_; i++) {\n elements[i] =\n generator.valueToCode(block, 'ADD' + i, Order.NONE) || \"''\";\n }\n const code = 'implode(\\'\\', array(' + elements.join(',') + '))';\n return [code, Order.FUNCTION_CALL];\n }\n};\n\nphpGenerator.forBlock['text_append'] = function(block, generator) {\n // Append to a variable in place.\n const varName =\n generator.nameDB_.getName(\n block.getFieldValue('VAR'), NameType.VARIABLE);\n const value =\n generator.valueToCode(block, 'TEXT', Order.ASSIGNMENT) || \"''\";\n return varName + ' .= ' + value + ';\\n';\n};\n\nphpGenerator.forBlock['text_length'] = function(block, generator) {\n // String or array length.\n const functionName = generator.provideFunction_('length', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($value) {\n if (is_string($value)) {\n return strlen($value);\n }\n return count($value);\n}\n`);\n const text = generator.valueToCode(block, 'VALUE', Order.NONE) || \"''\";\n return [functionName + '(' + text + ')', Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['text_isEmpty'] = function(block, generator) {\n // Is the string null or array empty?\n const text = generator.valueToCode(block, 'VALUE', Order.NONE) || \"''\";\n return ['empty(' + text + ')', Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['text_indexOf'] = function(block, generator) {\n // Search the text for a substring.\n const operator =\n block.getFieldValue('END') === 'FIRST' ? 'strpos' : 'strrpos';\n const substring = generator.valueToCode(block, 'FIND', Order.NONE) || \"''\";\n const text = generator.valueToCode(block, 'VALUE', Order.NONE) || \"''\";\n let errorIndex = ' -1';\n let indexAdjustment = '';\n if (block.workspace.options.oneBasedIndex) {\n errorIndex = ' 0';\n indexAdjustment = ' + 1';\n }\n const functionName = generator.provideFunction_(\n block.getFieldValue('END') === 'FIRST' ? 'text_indexOf' :\n 'text_lastIndexOf',\n `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($text, $search) {\n $pos = ${operator}($text, $search);\n return $pos === false ? ${errorIndex} : $pos${indexAdjustment};\n}\n`);\n const code = functionName + '(' + text + ', ' + substring + ')';\n return [code, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['text_charAt'] = function(block, generator) {\n // Get letter at index.\n const where = block.getFieldValue('WHERE') || 'FROM_START';\n const textOrder = (where === 'RANDOM') ? Order.NONE : Order.NONE;\n const text = generator.valueToCode(block, 'VALUE', textOrder) || \"''\";\n switch (where) {\n case 'FIRST': {\n const code = 'substr(' + text + ', 0, 1)';\n return [code, Order.FUNCTION_CALL];\n }\n case 'LAST': {\n const code = 'substr(' + text + ', -1)';\n return [code, Order.FUNCTION_CALL];\n }\n case 'FROM_START': {\n const at = generator.getAdjusted(block, 'AT');\n const code = 'substr(' + text + ', ' + at + ', 1)';\n return [code, Order.FUNCTION_CALL];\n }\n case 'FROM_END': {\n const at = generator.getAdjusted(block, 'AT', 1, true);\n const code = 'substr(' + text + ', ' + at + ', 1)';\n return [code, Order.FUNCTION_CALL];\n }\n case 'RANDOM': {\n const functionName = generator.provideFunction_('text_random_letter', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($text) {\n return $text[rand(0, strlen($text) - 1)];\n}\n`);\n const code = functionName + '(' + text + ')';\n return [code, Order.FUNCTION_CALL];\n }\n }\n throw Error('Unhandled option (text_charAt).');\n};\n\nphpGenerator.forBlock['text_getSubstring'] = function(block, generator) {\n // Get substring.\n const where1 = block.getFieldValue('WHERE1');\n const where2 = block.getFieldValue('WHERE2');\n const text = generator.valueToCode(block, 'STRING', Order.NONE) || \"''\";\n if (where1 === 'FIRST' && where2 === 'LAST') {\n const code = text;\n return [code, Order.NONE];\n } else {\n const at1 = generator.getAdjusted(block, 'AT1');\n const at2 = generator.getAdjusted(block, 'AT2');\n const functionName = generator.provideFunction_('text_get_substring', `\nfunction ${generator.FUNCTION_NAME_PLACEHOLDER_}($text, $where1, $at1, $where2, $at2) {\n if ($where1 == 'FROM_END') {\n $at1 = strlen($text) - 1 - $at1;\n } else if ($where1 == 'FIRST') {\n $at1 = 0;\n } else if ($where1 != 'FROM_START') {\n throw new Exception('Unhandled option (text_get_substring).');\n }\n $length = 0;\n if ($where2 == 'FROM_START') {\n $length = $at2 - $at1 + 1;\n } else if ($where2 == 'FROM_END') {\n $length = strlen($text) - $at1 - $at2;\n } else if ($where2 == 'LAST') {\n $length = strlen($text) - $at1;\n } else {\n throw new Exception('Unhandled option (text_get_substring).');\n }\n return substr($text, $at1, $length);\n}\n`);\n const code = functionName + '(' + text + ', \\'' + where1 + '\\', ' + at1 +\n ', \\'' + where2 + '\\', ' + at2 + ')';\n return [code, Order.FUNCTION_CALL];\n }\n};\n\nphpGenerator.forBlock['text_changeCase'] = function(block, generator) {\n // Change capitalization.\n const text = generator.valueToCode(block, 'TEXT', Order.NONE) || \"''\";\n let code;\n if (block.getFieldValue('CASE') === 'UPPERCASE') {\n code = 'strtoupper(' + text + ')';\n } else if (block.getFieldValue('CASE') === 'LOWERCASE') {\n code = 'strtolower(' + text + ')';\n } else if (block.getFieldValue('CASE') === 'TITLECASE') {\n code = 'ucwords(strtolower(' + text + '))';\n }\n return [code, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['text_trim'] = function(block, generator) {\n // Trim spaces.\n const OPERATORS = {'LEFT': 'ltrim', 'RIGHT': 'rtrim', 'BOTH': 'trim'};\n const operator = OPERATORS[block.getFieldValue('MODE')];\n const text = generator.valueToCode(block, 'TEXT', Order.NONE) || \"''\";\n return [operator + '(' + text + ')', Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['text_print'] = function(block, generator) {\n // Print statement.\n const msg = generator.valueToCode(block, 'TEXT', Order.NONE) || \"''\";\n return 'print(' + msg + ');\\n';\n};\n\nphpGenerator.forBlock['text_prompt_ext'] = function(block, generator) {\n // Prompt function.\n let msg;\n if (block.getField('TEXT')) {\n // Internal message.\n msg = generator.quote_(block.getFieldValue('TEXT'));\n } else {\n // External message.\n msg = generator.valueToCode(block, 'TEXT', Order.NONE) || \"''\";\n }\n let code = 'readline(' + msg + ')';\n const toNumber = block.getFieldValue('TYPE') === 'NUMBER';\n if (toNumber) {\n code = 'floatval(' + code + ')';\n }\n return [code, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['text_prompt'] = phpGenerator.forBlock['text_prompt_ext'];\n\nphpGenerator.forBlock['text_count'] = function(block, generator) {\n const text = generator.valueToCode(block, 'TEXT', Order.NONE) || \"''\";\n const sub = generator.valueToCode(block, 'SUB', Order.NONE) || \"''\";\n const code = 'strlen(' + sub + ') === 0' +\n ' ? strlen(' + text + ') + 1' +\n ' : substr_count(' + text + ', ' + sub + ')';\n return [code, Order.CONDITIONAL];\n};\n\nphpGenerator.forBlock['text_replace'] = function(block, generator) {\n const text = generator.valueToCode(block, 'TEXT', Order.NONE) || \"''\";\n const from = generator.valueToCode(block, 'FROM', Order.NONE) || \"''\";\n const to = generator.valueToCode(block, 'TO', Order.NONE) || \"''\";\n const code = 'str_replace(' + from + ', ' + to + ', ' + text + ')';\n return [code, Order.FUNCTION_CALL];\n};\n\nphpGenerator.forBlock['text_reverse'] = function(block, generator) {\n const text = generator.valueToCode(block, 'TEXT', Order.NONE) || \"''\";\n const code = 'strrev(' + text + ')';\n return [code, Order.FUNCTION_CALL];\n};\n","/**\n * @license\n * Copyright 2015 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for variable blocks.\n */\n\nimport * as goog from '../../closure/goog/goog.js';\ngoog.declareModuleId('Blockly.PHP.variables');\n\nimport {NameType} from '../../core/names.js';\nimport {phpGenerator, Order} from '../php.js';\n\n\nphpGenerator.forBlock['variables_get'] = function(block, generator) {\n // Variable getter.\n const code =\n generator.nameDB_.getName(\n block.getFieldValue('VAR'), NameType.VARIABLE);\n return [code, Order.ATOMIC];\n};\n\nphpGenerator.forBlock['variables_set'] = function(block, generator) {\n // Variable setter.\n const argument0 =\n generator.valueToCode(block, 'VALUE', Order.ASSIGNMENT) || '0';\n const varName =\n generator.nameDB_.getName(\n block.getFieldValue('VAR'), NameType.VARIABLE);\n return varName + ' = ' + argument0 + ';\\n';\n};\n","/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating PHP for dynamic variable blocks.\n */\n\nimport * as goog from '../../closure/goog/goog.js';\ngoog.declareModuleId('Blockly.PHP.variablesDynamic');\n\nimport {phpGenerator} from '../php.js';\nimport './variables.js';\n\n\n// generator is dynamically typed.\nphpGenerator.forBlock['variables_get_dynamic'] =\n phpGenerator.forBlock['variables_get'];\nphpGenerator.forBlock['variables_set_dynamic'] =\n phpGenerator.forBlock['variables_set'];\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Complete helper functions for generating PHP for\n * blocks. This is the entrypoint for php_compressed.js.\n * @suppress {extraRequire}\n */\n\nimport * as goog from '../../closure/goog/goog.js';\ngoog.declareModuleId('Blockly.PHP.all');\n\nimport './colour.js';\nimport './lists.js';\nimport './logic.js';\nimport './loops.js';\nimport './math.js';\nimport './procedures.js';\nimport './text.js';\nimport './variables.js';\nimport './variables_dynamic.js';\n\nexport * from '../php.js';\n"]}