@el-j/magic-helix-core 4.0.0-beta.1 → 4.0.0-beta.3

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/dist/index-B88j4AyE.js +13 -0
  2. package/dist/index-B88j4AyE.js.map +1 -0
  3. package/dist/index-CY-pQbuu.cjs +2 -0
  4. package/dist/index-CY-pQbuu.cjs.map +1 -0
  5. package/dist/index.cjs +75 -1
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.ts +0 -1
  8. package/dist/index.mjs +2234 -51
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/pattern-combiner.d.ts +1 -1
  11. package/dist/plugin-loader.d.ts +7 -1
  12. package/package.json +4 -4
  13. package/dist/BasePlugin-6wv0hYJ9.js +0 -98
  14. package/dist/BasePlugin-6wv0hYJ9.js.map +0 -1
  15. package/dist/BasePlugin-odQJAKA-.cjs +0 -2
  16. package/dist/BasePlugin-odQJAKA-.cjs.map +0 -1
  17. package/dist/builtin-plugins/base/BasePlugin.d.ts +0 -69
  18. package/dist/builtin-plugins/csharp/index.d.ts +0 -20
  19. package/dist/builtin-plugins/go/index.d.ts +0 -23
  20. package/dist/builtin-plugins/index.d.ts +0 -15
  21. package/dist/builtin-plugins/java/index.d.ts +0 -22
  22. package/dist/builtin-plugins/nodejs/index.d.ts +0 -44
  23. package/dist/builtin-plugins/php/index.d.ts +0 -20
  24. package/dist/builtin-plugins/python/index.d.ts +0 -27
  25. package/dist/builtin-plugins/ruby/index.d.ts +0 -20
  26. package/dist/builtin-plugins/rust/index.d.ts +0 -53
  27. package/dist/builtin-plugins/swift/index.d.ts +0 -22
  28. package/dist/default_templates/angular/angular-core.md +0 -19
  29. package/dist/default_templates/architecture/codeowners.md +0 -123
  30. package/dist/default_templates/architecture/monorepo.md +0 -146
  31. package/dist/default_templates/architecture/nx.md +0 -122
  32. package/dist/default_templates/architecture/turborepo.md +0 -114
  33. package/dist/default_templates/ci/github-actions.md +0 -268
  34. package/dist/default_templates/ci/gitlab-ci.md +0 -330
  35. package/dist/default_templates/containers/docker-multistage.md +0 -120
  36. package/dist/default_templates/containers/kubernetes-deploy.md +0 -210
  37. package/dist/default_templates/devops/docker-compose.md +0 -111
  38. package/dist/default_templates/devops/docker-dockerfile.md +0 -94
  39. package/dist/default_templates/devops/github-actions.md +0 -160
  40. package/dist/default_templates/devops/gitlab-ci.md +0 -210
  41. package/dist/default_templates/dotnet/framework-aspnetcore.md +0 -205
  42. package/dist/default_templates/dotnet/framework-blazor.md +0 -271
  43. package/dist/default_templates/dotnet/lang-csharp.md +0 -162
  44. package/dist/default_templates/generic/lang-typescript.md +0 -11
  45. package/dist/default_templates/generic/state-redux.md +0 -21
  46. package/dist/default_templates/generic/state-rxjs.md +0 -6
  47. package/dist/default_templates/generic/style-mui.md +0 -23
  48. package/dist/default_templates/generic/style-tailwind.md +0 -6
  49. package/dist/default_templates/generic/test-cypress.md +0 -21
  50. package/dist/default_templates/generic/test-jest.md +0 -20
  51. package/dist/default_templates/generic/test-playwright.md +0 -21
  52. package/dist/default_templates/generic/test-vitest.md +0 -6
  53. package/dist/default_templates/go/lang-go.md +0 -571
  54. package/dist/default_templates/java/build-gradle.md +0 -102
  55. package/dist/default_templates/java/build-maven.md +0 -86
  56. package/dist/default_templates/java/framework-spring-boot.md +0 -179
  57. package/dist/default_templates/java/lang-java.md +0 -78
  58. package/dist/default_templates/java/lang-kotlin.md +0 -88
  59. package/dist/default_templates/meta/magic-helix-meta.md +0 -213
  60. package/dist/default_templates/meta/meta-debug.md +0 -459
  61. package/dist/default_templates/meta/meta-implement.md +0 -450
  62. package/dist/default_templates/meta/meta-roadmap.md +0 -265
  63. package/dist/default_templates/nestjs/nestjs-core.md +0 -7
  64. package/dist/default_templates/patterns/architecture/clean-architecture.md +0 -469
  65. package/dist/default_templates/patterns/architecture/dependency-injection.md +0 -517
  66. package/dist/default_templates/patterns/architecture/domain-driven-design.md +0 -621
  67. package/dist/default_templates/patterns/architecture/layered-architecture.md +0 -382
  68. package/dist/default_templates/patterns/architecture/repository-pattern.md +0 -408
  69. package/dist/default_templates/patterns/domain-expertise/nextjs-rules.md +0 -115
  70. package/dist/default_templates/patterns/domain-expertise/react-patterns.md +0 -181
  71. package/dist/default_templates/patterns/domain-expertise/server-components.md +0 -212
  72. package/dist/default_templates/patterns/domain-expertise/shadcn-ui.md +0 -52
  73. package/dist/default_templates/patterns/domain-expertise/tailwind-patterns.md +0 -52
  74. package/dist/default_templates/patterns/environment/container-awareness.md +0 -17
  75. package/dist/default_templates/patterns/environment/ide-features.md +0 -17
  76. package/dist/default_templates/patterns/environment/os-commands.md +0 -17
  77. package/dist/default_templates/patterns/organization/heading-hierarchy.md +0 -103
  78. package/dist/default_templates/patterns/organization/sequential-workflows.md +0 -102
  79. package/dist/default_templates/patterns/organization/xml-rule-groups.md +0 -64
  80. package/dist/default_templates/patterns/reasoning/agent-loop.md +0 -151
  81. package/dist/default_templates/patterns/reasoning/confirmation-gates.md +0 -141
  82. package/dist/default_templates/patterns/reasoning/dependency-analysis.md +0 -132
  83. package/dist/default_templates/patterns/reasoning/one-tool-per-iteration.md +0 -152
  84. package/dist/default_templates/patterns/reasoning/preview-before-action.md +0 -194
  85. package/dist/default_templates/patterns/reasoning/reflection-checkpoints.md +0 -166
  86. package/dist/default_templates/patterns/reasoning/result-verification.md +0 -157
  87. package/dist/default_templates/patterns/reasoning/subtask-breakdown.md +0 -131
  88. package/dist/default_templates/patterns/reasoning/thinking-tags.md +0 -100
  89. package/dist/default_templates/patterns/role-definition/capability-declarations.md +0 -72
  90. package/dist/default_templates/patterns/role-definition/expert-identity.md +0 -45
  91. package/dist/default_templates/patterns/role-definition/scope-boundaries.md +0 -61
  92. package/dist/default_templates/patterns/safety/code-safety-rules.md +0 -17
  93. package/dist/default_templates/patterns/safety/credential-handling.md +0 -17
  94. package/dist/default_templates/patterns/safety/destructive-warnings.md +0 -17
  95. package/dist/default_templates/patterns/safety/refusal-messages.md +0 -17
  96. package/dist/default_templates/patterns/tone/adaptive-tone.md +0 -17
  97. package/dist/default_templates/patterns/tone/concise-communication.md +0 -17
  98. package/dist/default_templates/patterns/tone/forbidden-phrases.md +0 -17
  99. package/dist/default_templates/patterns/tool-guidelines/function-schemas.md +0 -143
  100. package/dist/default_templates/patterns/tool-guidelines/parameter-examples.md +0 -137
  101. package/dist/default_templates/patterns/tool-guidelines/usage-policies.md +0 -105
  102. package/dist/default_templates/php/framework-laravel.md +0 -112
  103. package/dist/default_templates/php/lang-php.md +0 -94
  104. package/dist/default_templates/python/lang-python.md +0 -508
  105. package/dist/default_templates/react/react-core.md +0 -677
  106. package/dist/default_templates/react/react-zustand.md +0 -7
  107. package/dist/default_templates/ruby/framework-rails.md +0 -309
  108. package/dist/default_templates/ruby/framework-sinatra.md +0 -227
  109. package/dist/default_templates/ruby/lang-ruby.md +0 -216
  110. package/dist/default_templates/rust/lang-rust.md +0 -89
  111. package/dist/default_templates/swift/framework-vapor.md +0 -352
  112. package/dist/default_templates/swift/lang-swift.md +0 -291
  113. package/dist/default_templates/vue/style-primevue.md +0 -6
  114. package/dist/default_templates/vue/style-quasar.md +0 -22
  115. package/dist/default_templates/vue/vue-core.md +0 -28
  116. package/dist/default_templates/vue/vue-pinia.md +0 -5
  117. package/dist/index-AkVwRl-r.js +0 -92
  118. package/dist/index-AkVwRl-r.js.map +0 -1
  119. package/dist/index-B6BeG1yT.cjs +0 -68
  120. package/dist/index-B6BeG1yT.cjs.map +0 -1
  121. package/dist/index-B8pyjKdF.js +0 -94
  122. package/dist/index-B8pyjKdF.js.map +0 -1
  123. package/dist/index-B_6W_RnJ.cjs +0 -76
  124. package/dist/index-B_6W_RnJ.cjs.map +0 -1
  125. package/dist/index-Bg8DD8ku.js +0 -216
  126. package/dist/index-Bg8DD8ku.js.map +0 -1
  127. package/dist/index-BkJhe5Af.js +0 -1748
  128. package/dist/index-BkJhe5Af.js.map +0 -1
  129. package/dist/index-Bv4Q1Pr7.cjs +0 -33
  130. package/dist/index-Bv4Q1Pr7.cjs.map +0 -1
  131. package/dist/index-CN8J45Nc.cjs +0 -24
  132. package/dist/index-CN8J45Nc.cjs.map +0 -1
  133. package/dist/index-CPbv2Od1.js +0 -62
  134. package/dist/index-CPbv2Od1.js.map +0 -1
  135. package/dist/index-Cf-MC6Al.js +0 -63
  136. package/dist/index-Cf-MC6Al.js.map +0 -1
  137. package/dist/index-DDPXXXDy.cjs +0 -19
  138. package/dist/index-DDPXXXDy.cjs.map +0 -1
  139. package/dist/index-DO30AzDe.cjs +0 -19
  140. package/dist/index-DO30AzDe.cjs.map +0 -1
  141. package/dist/index-Dm37u5ut.js +0 -2128
  142. package/dist/index-Dm37u5ut.js.map +0 -1
  143. package/dist/index-DqHvgoXJ.cjs +0 -19
  144. package/dist/index-DqHvgoXJ.cjs.map +0 -1
  145. package/dist/index-J1qAfsnO.cjs +0 -2
  146. package/dist/index-J1qAfsnO.cjs.map +0 -1
  147. package/dist/index-Jz0HYZ7B.js +0 -13
  148. package/dist/index-Jz0HYZ7B.js.map +0 -1
  149. package/dist/index-K39pdw94.cjs +0 -31
  150. package/dist/index-K39pdw94.cjs.map +0 -1
  151. package/dist/index-L3IVvhd1.cjs +0 -89
  152. package/dist/index-L3IVvhd1.cjs.map +0 -1
  153. package/dist/index-OT2XAJkc.js +0 -117
  154. package/dist/index-OT2XAJkc.js.map +0 -1
  155. package/dist/index-TPAX4XKg.cjs +0 -30
  156. package/dist/index-TPAX4XKg.cjs.map +0 -1
  157. package/dist/index-WmVSB57y.js +0 -107
  158. package/dist/index-WmVSB57y.js.map +0 -1
  159. package/dist/index-mYXvc3Fs.js +0 -68
  160. package/dist/index-mYXvc3Fs.js.map +0 -1
@@ -1,89 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const index=require("./index-B_6W_RnJ.cjs"),BasePlugin=require("./BasePlugin-odQJAKA-.cjs");var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getAugmentedNamespace(t){if(Object.prototype.hasOwnProperty.call(t,"__esModule"))return t;var r=t.default;if(typeof r=="function"){var a=function e(){var i=!1;try{i=this instanceof e}catch{}return i?Reflect.construct(r,arguments,this.constructor):r.apply(this,arguments)};a.prototype=r.prototype}else a={};return Object.defineProperty(a,"__esModule",{value:!0}),Object.keys(t).forEach(function(e){var i=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(a,e,i.get?i:{enumerable:!0,get:function(){return t[e]}})}),a}var toml={},parse={exports:{}},tomlParser={exports:{}},parser,hasRequiredParser;function requireParser(){if(hasRequiredParser)return parser;hasRequiredParser=1;const t=1114112;class r extends Error{constructor(n,o,c){super("[ParserError] "+n,o,c),this.name="ParserError",this.code="ParserError",Error.captureStackTrace&&Error.captureStackTrace(this,r)}}class a{constructor(n){this.parser=n,this.buf="",this.returned=null,this.result=null,this.resultTable=null,this.resultArr=null}}class e{constructor(){this.pos=0,this.col=0,this.line=0,this.obj={},this.ctx=this.obj,this.stack=[],this._buf="",this.char=null,this.ii=0,this.state=new a(this.parseStart)}parse(n){if(n.length===0||n.length==null)return;this._buf=String(n),this.ii=-1,this.char=-1;let o;for(;o===!1||this.nextChar();)o=this.runOne();this._buf=null}nextChar(){return this.char===10&&(++this.line,this.col=-1),++this.ii,this.char=this._buf.codePointAt(this.ii),++this.pos,++this.col,this.haveBuffer()}haveBuffer(){return this.ii<this._buf.length}runOne(){return this.state.parser.call(this,this.state.returned)}finish(){this.char=t;let n;do n=this.state.parser,this.runOne();while(this.state.parser!==n);return this.ctx=null,this.state=null,this._buf=null,this.obj}next(n){if(typeof n!="function")throw new r("Tried to set state to non-existent state: "+JSON.stringify(n));this.state.parser=n}goto(n){return this.next(n),this.runOne()}call(n,o){o&&this.next(o),this.stack.push(this.state),this.state=new a(n)}callNow(n,o){return this.call(n,o),this.runOne()}return(n){if(this.stack.length===0)throw this.error(new r("Stack underflow"));n===void 0&&(n=this.state.buf),this.state=this.stack.pop(),this.state.returned=n}returnNow(n){return this.return(n),this.runOne()}consume(){if(this.char===t)throw this.error(new r("Unexpected end-of-buffer"));this.state.buf+=this._buf[this.ii]}error(n){return n.line=this.line,n.col=this.col,n.pos=this.pos,n}parseStart(){throw new r("Must declare a parseStart method")}}return e.END=t,e.Error=r,parser=e,parser}var createDatetime,hasRequiredCreateDatetime;function requireCreateDatetime(){return hasRequiredCreateDatetime||(hasRequiredCreateDatetime=1,createDatetime=t=>{const r=new Date(t);if(isNaN(r))throw new TypeError("Invalid Datetime");return r}),createDatetime}var formatNum,hasRequiredFormatNum;function requireFormatNum(){return hasRequiredFormatNum||(hasRequiredFormatNum=1,formatNum=(t,r)=>{for(r=String(r);r.length<t;)r="0"+r;return r}),formatNum}var createDatetimeFloat,hasRequiredCreateDatetimeFloat;function requireCreateDatetimeFloat(){if(hasRequiredCreateDatetimeFloat)return createDatetimeFloat;hasRequiredCreateDatetimeFloat=1;const t=requireFormatNum();class r extends Date{constructor(e){super(e+"Z"),this.isFloating=!0}toISOString(){const e=`${this.getUTCFullYear()}-${t(2,this.getUTCMonth()+1)}-${t(2,this.getUTCDate())}`,i=`${t(2,this.getUTCHours())}:${t(2,this.getUTCMinutes())}:${t(2,this.getUTCSeconds())}.${t(3,this.getUTCMilliseconds())}`;return`${e}T${i}`}}return createDatetimeFloat=a=>{const e=new r(a);if(isNaN(e))throw new TypeError("Invalid Datetime");return e},createDatetimeFloat}var createDate,hasRequiredCreateDate;function requireCreateDate(){if(hasRequiredCreateDate)return createDate;hasRequiredCreateDate=1;const t=requireFormatNum(),r=commonjsGlobal.Date;class a extends r{constructor(i){super(i),this.isDate=!0}toISOString(){return`${this.getUTCFullYear()}-${t(2,this.getUTCMonth()+1)}-${t(2,this.getUTCDate())}`}}return createDate=e=>{const i=new a(e);if(isNaN(i))throw new TypeError("Invalid Datetime");return i},createDate}var createTime,hasRequiredCreateTime;function requireCreateTime(){if(hasRequiredCreateTime)return createTime;hasRequiredCreateTime=1;const t=requireFormatNum();class r extends Date{constructor(e){super(`0000-01-01T${e}Z`),this.isTime=!0}toISOString(){return`${t(2,this.getUTCHours())}:${t(2,this.getUTCMinutes())}:${t(2,this.getUTCSeconds())}.${t(3,this.getUTCMilliseconds())}`}}return createTime=a=>{const e=new r(a);if(isNaN(e))throw new TypeError("Invalid Datetime");return e},createTime}var hasRequiredTomlParser;function requireTomlParser(){if(hasRequiredTomlParser)return tomlParser.exports;hasRequiredTomlParser=1,tomlParser.exports=makeParserClass(requireParser()),tomlParser.exports.makeParserClass=makeParserClass;class TomlError extends Error{constructor(r){super(r),this.name="TomlError",Error.captureStackTrace&&Error.captureStackTrace(this,TomlError),this.fromTOML=!0,this.wrapped=null}}TomlError.wrap=t=>{const r=new TomlError(t.message);return r.code=t.code,r.wrapped=t,r},tomlParser.exports.TomlError=TomlError;const createDateTime=requireCreateDatetime(),createDateTimeFloat=requireCreateDatetimeFloat(),createDate=requireCreateDate(),createTime=requireCreateTime(),CTRL_I=9,CTRL_J=10,CTRL_M=13,CTRL_CHAR_BOUNDARY=31,CHAR_SP=32,CHAR_QUOT=34,CHAR_NUM=35,CHAR_APOS=39,CHAR_PLUS=43,CHAR_COMMA=44,CHAR_HYPHEN=45,CHAR_PERIOD=46,CHAR_0=48,CHAR_1=49,CHAR_7=55,CHAR_9=57,CHAR_COLON=58,CHAR_EQUALS=61,CHAR_A=65,CHAR_E=69,CHAR_F=70,CHAR_T=84,CHAR_U=85,CHAR_Z=90,CHAR_LOWBAR=95,CHAR_a=97,CHAR_b=98,CHAR_e=101,CHAR_f=102,CHAR_i=105,CHAR_l=108,CHAR_n=110,CHAR_o=111,CHAR_r=114,CHAR_s=115,CHAR_t=116,CHAR_u=117,CHAR_x=120,CHAR_z=122,CHAR_LCUB=123,CHAR_RCUB=125,CHAR_LSQB=91,CHAR_BSOL=92,CHAR_RSQB=93,CHAR_DEL=127,SURROGATE_FIRST=55296,SURROGATE_LAST=57343,escapes={[CHAR_b]:"\b",[CHAR_t]:" ",[CHAR_n]:`
2
- `,[CHAR_f]:"\f",[CHAR_r]:"\r",[CHAR_QUOT]:'"',[CHAR_BSOL]:"\\"};function isDigit(t){return t>=CHAR_0&&t<=CHAR_9}function isHexit(t){return t>=CHAR_A&&t<=CHAR_F||t>=CHAR_a&&t<=CHAR_f||t>=CHAR_0&&t<=CHAR_9}function isBit(t){return t===CHAR_1||t===CHAR_0}function isOctit(t){return t>=CHAR_0&&t<=CHAR_7}function isAlphaNumQuoteHyphen(t){return t>=CHAR_A&&t<=CHAR_Z||t>=CHAR_a&&t<=CHAR_z||t>=CHAR_0&&t<=CHAR_9||t===CHAR_APOS||t===CHAR_QUOT||t===CHAR_LOWBAR||t===CHAR_HYPHEN}function isAlphaNumHyphen(t){return t>=CHAR_A&&t<=CHAR_Z||t>=CHAR_a&&t<=CHAR_z||t>=CHAR_0&&t<=CHAR_9||t===CHAR_LOWBAR||t===CHAR_HYPHEN}const _type=Symbol("type"),_declared=Symbol("declared"),hasOwnProperty=Object.prototype.hasOwnProperty,defineProperty=Object.defineProperty,descriptor={configurable:!0,enumerable:!0,writable:!0,value:void 0};function hasKey(t,r){return hasOwnProperty.call(t,r)?!0:(r==="__proto__"&&defineProperty(t,"__proto__",descriptor),!1)}const INLINE_TABLE=Symbol("inline-table");function InlineTable(){return Object.defineProperties({},{[_type]:{value:INLINE_TABLE}})}function isInlineTable(t){return t===null||typeof t!="object"?!1:t[_type]===INLINE_TABLE}const TABLE=Symbol("table");function Table(){return Object.defineProperties({},{[_type]:{value:TABLE},[_declared]:{value:!1,writable:!0}})}function isTable(t){return t===null||typeof t!="object"?!1:t[_type]===TABLE}const _contentType=Symbol("content-type"),INLINE_LIST=Symbol("inline-list");function InlineList(t){return Object.defineProperties([],{[_type]:{value:INLINE_LIST},[_contentType]:{value:t}})}function isInlineList(t){return t===null||typeof t!="object"?!1:t[_type]===INLINE_LIST}const LIST=Symbol("list");function List(){return Object.defineProperties([],{[_type]:{value:LIST}})}function isList(t){return t===null||typeof t!="object"?!1:t[_type]===LIST}let _custom;try{const utilInspect=eval("require('util').inspect");_custom=utilInspect.custom}catch(t){}const _inspect=_custom||"inspect";class BoxedBigInt{constructor(r){try{this.value=commonjsGlobal.BigInt.asIntN(64,r)}catch{this.value=null}Object.defineProperty(this,_type,{value:INTEGER})}isNaN(){return this.value===null}toString(){return String(this.value)}[_inspect](){return`[BigInt: ${this.toString()}]}`}valueOf(){return this.value}}const INTEGER=Symbol("integer");function Integer(t){let r=Number(t);return Object.is(r,-0)&&(r=0),commonjsGlobal.BigInt&&!Number.isSafeInteger(r)?new BoxedBigInt(t):Object.defineProperties(new Number(r),{isNaN:{value:function(){return isNaN(this)}},[_type]:{value:INTEGER},[_inspect]:{value:()=>`[Integer: ${t}]`}})}function isInteger(t){return t===null||typeof t!="object"?!1:t[_type]===INTEGER}const FLOAT=Symbol("float");function Float(t){return Object.defineProperties(new Number(t),{[_type]:{value:FLOAT},[_inspect]:{value:()=>`[Float: ${t}]`}})}function isFloat(t){return t===null||typeof t!="object"?!1:t[_type]===FLOAT}function tomlType(t){const r=typeof t;if(r==="object"){if(t===null)return"null";if(t instanceof Date)return"datetime";if(_type in t)switch(t[_type]){case INLINE_TABLE:return"inline-table";case INLINE_LIST:return"inline-list";case TABLE:return"table";case LIST:return"list";case FLOAT:return"float";case INTEGER:return"integer"}}return r}function makeParserClass(t){class r extends t{constructor(){super(),this.ctx=this.obj=Table()}atEndOfWord(){return this.char===CHAR_NUM||this.char===CTRL_I||this.char===CHAR_SP||this.atEndOfLine()}atEndOfLine(){return this.char===t.END||this.char===CTRL_J||this.char===CTRL_M}parseStart(){if(this.char===t.END)return null;if(this.char===CHAR_LSQB)return this.call(this.parseTableOrList);if(this.char===CHAR_NUM)return this.call(this.parseComment);if(this.char===CTRL_J||this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M)return null;if(isAlphaNumQuoteHyphen(this.char))return this.callNow(this.parseAssignStatement);throw this.error(new TomlError(`Unknown character "${this.char}"`))}parseWhitespaceToEOL(){if(this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M)return null;if(this.char===CHAR_NUM)return this.goto(this.parseComment);if(this.char===t.END||this.char===CTRL_J)return this.return();throw this.error(new TomlError("Unexpected character, expected only whitespace or comments till end of line"))}parseAssignStatement(){return this.callNow(this.parseAssign,this.recordAssignStatement)}recordAssignStatement(e){let i=this.ctx,n=e.key.pop();for(let o of e.key){if(hasKey(i,o)&&!isTable(i[o]))throw this.error(new TomlError("Can't redefine existing key"));i=i[o]=i[o]||Table()}if(hasKey(i,n))throw this.error(new TomlError("Can't redefine existing key"));return i[_declared]=!0,isInteger(e.value)||isFloat(e.value)?i[n]=e.value.valueOf():i[n]=e.value,this.goto(this.parseWhitespaceToEOL)}parseAssign(){return this.callNow(this.parseKeyword,this.recordAssignKeyword)}recordAssignKeyword(e){return this.state.resultTable?this.state.resultTable.push(e):this.state.resultTable=[e],this.goto(this.parseAssignKeywordPreDot)}parseAssignKeywordPreDot(){if(this.char===CHAR_PERIOD)return this.next(this.parseAssignKeywordPostDot);if(this.char!==CHAR_SP&&this.char!==CTRL_I)return this.goto(this.parseAssignEqual)}parseAssignKeywordPostDot(){if(this.char!==CHAR_SP&&this.char!==CTRL_I)return this.callNow(this.parseKeyword,this.recordAssignKeyword)}parseAssignEqual(){if(this.char===CHAR_EQUALS)return this.next(this.parseAssignPreValue);throw this.error(new TomlError('Invalid character, expected "="'))}parseAssignPreValue(){return this.char===CHAR_SP||this.char===CTRL_I?null:this.callNow(this.parseValue,this.recordAssignValue)}recordAssignValue(e){return this.returnNow({key:this.state.resultTable,value:e})}parseComment(){do{if(this.char===t.END||this.char===CTRL_J)return this.return();if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I)throw this.errorControlCharIn("comments")}while(this.nextChar())}parseTableOrList(){if(this.char===CHAR_LSQB)this.next(this.parseList);else return this.goto(this.parseTable)}parseTable(){return this.ctx=this.obj,this.goto(this.parseTableNext)}parseTableNext(){return this.char===CHAR_SP||this.char===CTRL_I?null:this.callNow(this.parseKeyword,this.parseTableMore)}parseTableMore(e){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===CHAR_RSQB){if(hasKey(this.ctx,e)&&(!isTable(this.ctx[e])||this.ctx[e][_declared]))throw this.error(new TomlError("Can't redefine existing key"));return this.ctx=this.ctx[e]=this.ctx[e]||Table(),this.ctx[_declared]=!0,this.next(this.parseWhitespaceToEOL)}else if(this.char===CHAR_PERIOD){if(!hasKey(this.ctx,e))this.ctx=this.ctx[e]=Table();else if(isTable(this.ctx[e]))this.ctx=this.ctx[e];else if(isList(this.ctx[e]))this.ctx=this.ctx[e][this.ctx[e].length-1];else throw this.error(new TomlError("Can't redefine existing key"));return this.next(this.parseTableNext)}else throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"))}parseList(){return this.ctx=this.obj,this.goto(this.parseListNext)}parseListNext(){return this.char===CHAR_SP||this.char===CTRL_I?null:this.callNow(this.parseKeyword,this.parseListMore)}parseListMore(e){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===CHAR_RSQB){if(hasKey(this.ctx,e)||(this.ctx[e]=List()),isInlineList(this.ctx[e]))throw this.error(new TomlError("Can't extend an inline array"));if(isList(this.ctx[e])){const i=Table();this.ctx[e].push(i),this.ctx=i}else throw this.error(new TomlError("Can't redefine an existing key"));return this.next(this.parseListEnd)}else if(this.char===CHAR_PERIOD){if(!hasKey(this.ctx,e))this.ctx=this.ctx[e]=Table();else{if(isInlineList(this.ctx[e]))throw this.error(new TomlError("Can't extend an inline array"));if(isInlineTable(this.ctx[e]))throw this.error(new TomlError("Can't extend an inline table"));if(isList(this.ctx[e]))this.ctx=this.ctx[e][this.ctx[e].length-1];else if(isTable(this.ctx[e]))this.ctx=this.ctx[e];else throw this.error(new TomlError("Can't redefine an existing key"))}return this.next(this.parseListNext)}else throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"))}parseListEnd(e){if(this.char===CHAR_RSQB)return this.next(this.parseWhitespaceToEOL);throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"))}parseValue(){if(this.char===t.END)throw this.error(new TomlError("Key without value"));if(this.char===CHAR_QUOT)return this.next(this.parseDoubleString);if(this.char===CHAR_APOS)return this.next(this.parseSingleString);if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)return this.goto(this.parseNumberSign);if(this.char===CHAR_i)return this.next(this.parseInf);if(this.char===CHAR_n)return this.next(this.parseNan);if(isDigit(this.char))return this.goto(this.parseNumberOrDateTime);if(this.char===CHAR_t||this.char===CHAR_f)return this.goto(this.parseBoolean);if(this.char===CHAR_LSQB)return this.call(this.parseInlineList,this.recordValue);if(this.char===CHAR_LCUB)return this.call(this.parseInlineTable,this.recordValue);throw this.error(new TomlError("Unexpected character, expecting string, number, datetime, boolean, inline array or inline table"))}recordValue(e){return this.returnNow(e)}parseInf(){if(this.char===CHAR_n)return this.next(this.parseInf2);throw this.error(new TomlError('Unexpected character, expected "inf", "+inf" or "-inf"'))}parseInf2(){if(this.char===CHAR_f)return this.state.buf==="-"?this.return(-1/0):this.return(1/0);throw this.error(new TomlError('Unexpected character, expected "inf", "+inf" or "-inf"'))}parseNan(){if(this.char===CHAR_a)return this.next(this.parseNan2);throw this.error(new TomlError('Unexpected character, expected "nan"'))}parseNan2(){if(this.char===CHAR_n)return this.return(NaN);throw this.error(new TomlError('Unexpected character, expected "nan"'))}parseKeyword(){return this.char===CHAR_QUOT?this.next(this.parseBasicString):this.char===CHAR_APOS?this.next(this.parseLiteralString):this.goto(this.parseBareKey)}parseBareKey(){do{if(this.char===t.END)throw this.error(new TomlError("Key ended without value"));if(isAlphaNumHyphen(this.char))this.consume();else{if(this.state.buf.length===0)throw this.error(new TomlError("Empty bare keys are not allowed"));return this.returnNow()}}while(this.nextChar())}parseSingleString(){return this.char===CHAR_APOS?this.next(this.parseLiteralMultiStringMaybe):this.goto(this.parseLiteralString)}parseLiteralString(){do{if(this.char===CHAR_APOS)return this.return();if(this.atEndOfLine())throw this.error(new TomlError("Unterminated string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I)throw this.errorControlCharIn("strings");this.consume()}while(this.nextChar())}parseLiteralMultiStringMaybe(){return this.char===CHAR_APOS?this.next(this.parseLiteralMultiString):this.returnNow()}parseLiteralMultiString(){return this.char===CTRL_M?null:this.char===CTRL_J?this.next(this.parseLiteralMultiStringContent):this.goto(this.parseLiteralMultiStringContent)}parseLiteralMultiStringContent(){do{if(this.char===CHAR_APOS)return this.next(this.parseLiteralMultiEnd);if(this.char===t.END)throw this.error(new TomlError("Unterminated multi-line string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I&&this.char!==CTRL_J&&this.char!==CTRL_M)throw this.errorControlCharIn("strings");this.consume()}while(this.nextChar())}parseLiteralMultiEnd(){return this.char===CHAR_APOS?this.next(this.parseLiteralMultiEnd2):(this.state.buf+="'",this.goto(this.parseLiteralMultiStringContent))}parseLiteralMultiEnd2(){return this.char===CHAR_APOS?this.next(this.parseLiteralMultiEnd3):(this.state.buf+="''",this.goto(this.parseLiteralMultiStringContent))}parseLiteralMultiEnd3(){return this.char===CHAR_APOS?(this.state.buf+="'",this.next(this.parseLiteralMultiEnd4)):this.returnNow()}parseLiteralMultiEnd4(){return this.char===CHAR_APOS?(this.state.buf+="'",this.return()):this.returnNow()}parseDoubleString(){return this.char===CHAR_QUOT?this.next(this.parseMultiStringMaybe):this.goto(this.parseBasicString)}parseBasicString(){do{if(this.char===CHAR_BSOL)return this.call(this.parseEscape,this.recordEscapeReplacement);if(this.char===CHAR_QUOT)return this.return();if(this.atEndOfLine())throw this.error(new TomlError("Unterminated string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I)throw this.errorControlCharIn("strings");this.consume()}while(this.nextChar())}recordEscapeReplacement(e){return this.state.buf+=e,this.goto(this.parseBasicString)}parseMultiStringMaybe(){return this.char===CHAR_QUOT?this.next(this.parseMultiString):this.returnNow()}parseMultiString(){return this.char===CTRL_M?null:this.char===CTRL_J?this.next(this.parseMultiStringContent):this.goto(this.parseMultiStringContent)}parseMultiStringContent(){do{if(this.char===CHAR_BSOL)return this.call(this.parseMultiEscape,this.recordMultiEscapeReplacement);if(this.char===CHAR_QUOT)return this.next(this.parseMultiEnd);if(this.char===t.END)throw this.error(new TomlError("Unterminated multi-line string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I&&this.char!==CTRL_J&&this.char!==CTRL_M)throw this.errorControlCharIn("strings");this.consume()}while(this.nextChar())}errorControlCharIn(e){let i="\\u00";return this.char<16&&(i+="0"),i+=this.char.toString(16),this.error(new TomlError(`Control characters (codes < 0x1f and 0x7f) are not allowed in ${e}, use ${i} instead`))}recordMultiEscapeReplacement(e){return this.state.buf+=e,this.goto(this.parseMultiStringContent)}parseMultiEnd(){return this.char===CHAR_QUOT?this.next(this.parseMultiEnd2):(this.state.buf+='"',this.goto(this.parseMultiStringContent))}parseMultiEnd2(){return this.char===CHAR_QUOT?this.next(this.parseMultiEnd3):(this.state.buf+='""',this.goto(this.parseMultiStringContent))}parseMultiEnd3(){return this.char===CHAR_QUOT?(this.state.buf+='"',this.next(this.parseMultiEnd4)):this.returnNow()}parseMultiEnd4(){return this.char===CHAR_QUOT?(this.state.buf+='"',this.return()):this.returnNow()}parseMultiEscape(){return this.char===CTRL_M||this.char===CTRL_J?this.next(this.parseMultiTrim):this.char===CHAR_SP||this.char===CTRL_I?this.next(this.parsePreMultiTrim):this.goto(this.parseEscape)}parsePreMultiTrim(){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===CTRL_M||this.char===CTRL_J)return this.next(this.parseMultiTrim);throw this.error(new TomlError("Can't escape whitespace"))}parseMultiTrim(){return this.char===CTRL_J||this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M?null:this.returnNow()}parseEscape(){if(this.char in escapes)return this.return(escapes[this.char]);if(this.char===CHAR_u)return this.call(this.parseSmallUnicode,this.parseUnicodeReturn);if(this.char===CHAR_U)return this.call(this.parseLargeUnicode,this.parseUnicodeReturn);throw this.error(new TomlError("Unknown escape character: "+this.char))}parseUnicodeReturn(e){try{const i=parseInt(e,16);if(i>=SURROGATE_FIRST&&i<=SURROGATE_LAST)throw this.error(new TomlError("Invalid unicode, character in range 0xD800 - 0xDFFF is reserved"));return this.returnNow(String.fromCodePoint(i))}catch(i){throw this.error(TomlError.wrap(i))}}parseSmallUnicode(){if(isHexit(this.char)){if(this.consume(),this.state.buf.length>=4)return this.return()}else throw this.error(new TomlError("Invalid character in unicode sequence, expected hex"))}parseLargeUnicode(){if(isHexit(this.char)){if(this.consume(),this.state.buf.length>=8)return this.return()}else throw this.error(new TomlError("Invalid character in unicode sequence, expected hex"))}parseNumberSign(){return this.consume(),this.next(this.parseMaybeSignedInfOrNan)}parseMaybeSignedInfOrNan(){return this.char===CHAR_i?this.next(this.parseInf):this.char===CHAR_n?this.next(this.parseNan):this.callNow(this.parseNoUnder,this.parseNumberIntegerStart)}parseNumberIntegerStart(){return this.char===CHAR_0?(this.consume(),this.next(this.parseNumberIntegerExponentOrDecimal)):this.goto(this.parseNumberInteger)}parseNumberIntegerExponentOrDecimal(){return this.char===CHAR_PERIOD?(this.consume(),this.call(this.parseNoUnder,this.parseNumberFloat)):this.char===CHAR_E||this.char===CHAR_e?(this.consume(),this.next(this.parseNumberExponentSign)):this.returnNow(Integer(this.state.buf))}parseNumberInteger(){if(isDigit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnder);if(this.char===CHAR_E||this.char===CHAR_e)return this.consume(),this.next(this.parseNumberExponentSign);if(this.char===CHAR_PERIOD)return this.consume(),this.call(this.parseNoUnder,this.parseNumberFloat);{const e=Integer(this.state.buf);if(e.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(e)}}}parseNoUnder(){if(this.char===CHAR_LOWBAR||this.char===CHAR_PERIOD||this.char===CHAR_E||this.char===CHAR_e)throw this.error(new TomlError("Unexpected character, expected digit"));if(this.atEndOfWord())throw this.error(new TomlError("Incomplete number"));return this.returnNow()}parseNoUnderHexOctBinLiteral(){if(this.char===CHAR_LOWBAR||this.char===CHAR_PERIOD)throw this.error(new TomlError("Unexpected character, expected digit"));if(this.atEndOfWord())throw this.error(new TomlError("Incomplete number"));return this.returnNow()}parseNumberFloat(){if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnder,this.parseNumberFloat);if(isDigit(this.char))this.consume();else return this.char===CHAR_E||this.char===CHAR_e?(this.consume(),this.next(this.parseNumberExponentSign)):this.returnNow(Float(this.state.buf))}parseNumberExponentSign(){if(isDigit(this.char))return this.goto(this.parseNumberExponent);if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)this.consume(),this.call(this.parseNoUnder,this.parseNumberExponent);else throw this.error(new TomlError("Unexpected character, expected -, + or digit"))}parseNumberExponent(){if(isDigit(this.char))this.consume();else return this.char===CHAR_LOWBAR?this.call(this.parseNoUnder):this.returnNow(Float(this.state.buf))}parseNumberOrDateTime(){return this.char===CHAR_0?(this.consume(),this.next(this.parseNumberBaseOrDateTime)):this.goto(this.parseNumberOrDateTimeOnly)}parseNumberOrDateTimeOnly(){if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnder,this.parseNumberInteger);if(isDigit(this.char))this.consume(),this.state.buf.length>4&&this.next(this.parseNumberInteger);else return this.char===CHAR_E||this.char===CHAR_e?(this.consume(),this.next(this.parseNumberExponentSign)):this.char===CHAR_PERIOD?(this.consume(),this.call(this.parseNoUnder,this.parseNumberFloat)):this.char===CHAR_HYPHEN?this.goto(this.parseDateTime):this.char===CHAR_COLON?this.goto(this.parseOnlyTimeHour):this.returnNow(Integer(this.state.buf))}parseDateTimeOnly(){if(this.state.buf.length<4){if(isDigit(this.char))return this.consume();if(this.char===CHAR_COLON)return this.goto(this.parseOnlyTimeHour);throw this.error(new TomlError("Expected digit while parsing year part of a date"))}else{if(this.char===CHAR_HYPHEN)return this.goto(this.parseDateTime);throw this.error(new TomlError("Expected hyphen (-) while parsing year part of date"))}}parseNumberBaseOrDateTime(){return this.char===CHAR_b?(this.consume(),this.call(this.parseNoUnderHexOctBinLiteral,this.parseIntegerBin)):this.char===CHAR_o?(this.consume(),this.call(this.parseNoUnderHexOctBinLiteral,this.parseIntegerOct)):this.char===CHAR_x?(this.consume(),this.call(this.parseNoUnderHexOctBinLiteral,this.parseIntegerHex)):this.char===CHAR_PERIOD?this.goto(this.parseNumberInteger):isDigit(this.char)?this.goto(this.parseDateTimeOnly):this.returnNow(Integer(this.state.buf))}parseIntegerHex(){if(isHexit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnderHexOctBinLiteral);{const e=Integer(this.state.buf);if(e.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(e)}}}parseIntegerOct(){if(isOctit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnderHexOctBinLiteral);{const e=Integer(this.state.buf);if(e.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(e)}}}parseIntegerBin(){if(isBit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnderHexOctBinLiteral);{const e=Integer(this.state.buf);if(e.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(e)}}}parseDateTime(){if(this.state.buf.length<4)throw this.error(new TomlError("Years less than 1000 must be zero padded to four characters"));return this.state.result=this.state.buf,this.state.buf="",this.next(this.parseDateMonth)}parseDateMonth(){if(this.char===CHAR_HYPHEN){if(this.state.buf.length<2)throw this.error(new TomlError("Months less than 10 must be zero padded to two characters"));return this.state.result+="-"+this.state.buf,this.state.buf="",this.next(this.parseDateDay)}else if(isDigit(this.char))this.consume();else throw this.error(new TomlError("Incomplete datetime"))}parseDateDay(){if(this.char===CHAR_T||this.char===CHAR_SP){if(this.state.buf.length<2)throw this.error(new TomlError("Days less than 10 must be zero padded to two characters"));return this.state.result+="-"+this.state.buf,this.state.buf="",this.next(this.parseStartTimeHour)}else{if(this.atEndOfWord())return this.returnNow(createDate(this.state.result+"-"+this.state.buf));if(isDigit(this.char))this.consume();else throw this.error(new TomlError("Incomplete datetime"))}}parseStartTimeHour(){return this.atEndOfWord()?this.returnNow(createDate(this.state.result)):this.goto(this.parseTimeHour)}parseTimeHour(){if(this.char===CHAR_COLON){if(this.state.buf.length<2)throw this.error(new TomlError("Hours less than 10 must be zero padded to two characters"));return this.state.result+="T"+this.state.buf,this.state.buf="",this.next(this.parseTimeMin)}else if(isDigit(this.char))this.consume();else throw this.error(new TomlError("Incomplete datetime"))}parseTimeMin(){if(this.state.buf.length<2&&isDigit(this.char))this.consume();else{if(this.state.buf.length===2&&this.char===CHAR_COLON)return this.state.result+=":"+this.state.buf,this.state.buf="",this.next(this.parseTimeSec);throw this.error(new TomlError("Incomplete datetime"))}}parseTimeSec(){if(isDigit(this.char)){if(this.consume(),this.state.buf.length===2)return this.state.result+=":"+this.state.buf,this.state.buf="",this.next(this.parseTimeZoneOrFraction)}else throw this.error(new TomlError("Incomplete datetime"))}parseOnlyTimeHour(){if(this.char===CHAR_COLON){if(this.state.buf.length<2)throw this.error(new TomlError("Hours less than 10 must be zero padded to two characters"));return this.state.result=this.state.buf,this.state.buf="",this.next(this.parseOnlyTimeMin)}else throw this.error(new TomlError("Incomplete time"))}parseOnlyTimeMin(){if(this.state.buf.length<2&&isDigit(this.char))this.consume();else{if(this.state.buf.length===2&&this.char===CHAR_COLON)return this.state.result+=":"+this.state.buf,this.state.buf="",this.next(this.parseOnlyTimeSec);throw this.error(new TomlError("Incomplete time"))}}parseOnlyTimeSec(){if(isDigit(this.char)){if(this.consume(),this.state.buf.length===2)return this.next(this.parseOnlyTimeFractionMaybe)}else throw this.error(new TomlError("Incomplete time"))}parseOnlyTimeFractionMaybe(){if(this.state.result+=":"+this.state.buf,this.char===CHAR_PERIOD)this.state.buf="",this.next(this.parseOnlyTimeFraction);else return this.return(createTime(this.state.result))}parseOnlyTimeFraction(){if(isDigit(this.char))this.consume();else if(this.atEndOfWord()){if(this.state.buf.length===0)throw this.error(new TomlError("Expected digit in milliseconds"));return this.returnNow(createTime(this.state.result+"."+this.state.buf))}else throw this.error(new TomlError("Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z"))}parseTimeZoneOrFraction(){if(this.char===CHAR_PERIOD)this.consume(),this.next(this.parseDateTimeFraction);else if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)this.consume(),this.next(this.parseTimeZoneHour);else{if(this.char===CHAR_Z)return this.consume(),this.return(createDateTime(this.state.result+this.state.buf));if(this.atEndOfWord())return this.returnNow(createDateTimeFloat(this.state.result+this.state.buf));throw this.error(new TomlError("Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z"))}}parseDateTimeFraction(){if(isDigit(this.char))this.consume();else{if(this.state.buf.length===1)throw this.error(new TomlError("Expected digit in milliseconds"));if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)this.consume(),this.next(this.parseTimeZoneHour);else{if(this.char===CHAR_Z)return this.consume(),this.return(createDateTime(this.state.result+this.state.buf));if(this.atEndOfWord())return this.returnNow(createDateTimeFloat(this.state.result+this.state.buf));throw this.error(new TomlError("Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z"))}}}parseTimeZoneHour(){if(isDigit(this.char)){if(this.consume(),/\d\d$/.test(this.state.buf))return this.next(this.parseTimeZoneSep)}else throw this.error(new TomlError("Unexpected character in datetime, expected digit"))}parseTimeZoneSep(){if(this.char===CHAR_COLON)this.consume(),this.next(this.parseTimeZoneMin);else throw this.error(new TomlError("Unexpected character in datetime, expected colon"))}parseTimeZoneMin(){if(isDigit(this.char)){if(this.consume(),/\d\d$/.test(this.state.buf))return this.return(createDateTime(this.state.result+this.state.buf))}else throw this.error(new TomlError("Unexpected character in datetime, expected digit"))}parseBoolean(){if(this.char===CHAR_t)return this.consume(),this.next(this.parseTrue_r);if(this.char===CHAR_f)return this.consume(),this.next(this.parseFalse_a)}parseTrue_r(){if(this.char===CHAR_r)return this.consume(),this.next(this.parseTrue_u);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseTrue_u(){if(this.char===CHAR_u)return this.consume(),this.next(this.parseTrue_e);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseTrue_e(){if(this.char===CHAR_e)return this.return(!0);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_a(){if(this.char===CHAR_a)return this.consume(),this.next(this.parseFalse_l);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_l(){if(this.char===CHAR_l)return this.consume(),this.next(this.parseFalse_s);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_s(){if(this.char===CHAR_s)return this.consume(),this.next(this.parseFalse_e);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_e(){if(this.char===CHAR_e)return this.return(!1);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseInlineList(){if(this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M||this.char===CTRL_J)return null;if(this.char===t.END)throw this.error(new TomlError("Unterminated inline array"));return this.char===CHAR_NUM?this.call(this.parseComment):this.char===CHAR_RSQB?this.return(this.state.resultArr||InlineList()):this.callNow(this.parseValue,this.recordInlineListValue)}recordInlineListValue(e){return this.state.resultArr||(this.state.resultArr=InlineList(tomlType(e))),isFloat(e)||isInteger(e)?this.state.resultArr.push(e.valueOf()):this.state.resultArr.push(e),this.goto(this.parseInlineListNext)}parseInlineListNext(){if(this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M||this.char===CTRL_J)return null;if(this.char===CHAR_NUM)return this.call(this.parseComment);if(this.char===CHAR_COMMA)return this.next(this.parseInlineList);if(this.char===CHAR_RSQB)return this.goto(this.parseInlineList);throw this.error(new TomlError("Invalid character, expected whitespace, comma (,) or close bracket (])"))}parseInlineTable(){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===t.END||this.char===CHAR_NUM||this.char===CTRL_J||this.char===CTRL_M)throw this.error(new TomlError("Unterminated inline array"));return this.char===CHAR_RCUB?this.return(this.state.resultTable||InlineTable()):(this.state.resultTable||(this.state.resultTable=InlineTable()),this.callNow(this.parseAssign,this.recordInlineTableValue))}recordInlineTableValue(e){let i=this.state.resultTable,n=e.key.pop();for(let o of e.key){if(hasKey(i,o)&&(!isTable(i[o])||i[o][_declared]))throw this.error(new TomlError("Can't redefine existing key"));i=i[o]=i[o]||Table()}if(hasKey(i,n))throw this.error(new TomlError("Can't redefine existing key"));return isInteger(e.value)||isFloat(e.value)?i[n]=e.value.valueOf():i[n]=e.value,this.goto(this.parseInlineTableNext)}parseInlineTableNext(){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===t.END||this.char===CHAR_NUM||this.char===CTRL_J||this.char===CTRL_M)throw this.error(new TomlError("Unterminated inline array"));if(this.char===CHAR_COMMA)return this.next(this.parseInlineTablePostComma);if(this.char===CHAR_RCUB)return this.goto(this.parseInlineTable);throw this.error(new TomlError("Invalid character, expected whitespace, comma (,) or close bracket (])"))}parseInlineTablePostComma(){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===t.END||this.char===CHAR_NUM||this.char===CTRL_J||this.char===CTRL_M)throw this.error(new TomlError("Unterminated inline array"));if(this.char===CHAR_COMMA)throw this.error(new TomlError("Empty elements in inline tables are not permitted"));if(this.char===CHAR_RCUB)throw this.error(new TomlError("Trailing commas in inline tables are not permitted"));return this.goto(this.parseInlineTable)}}return r}return tomlParser.exports}var parsePrettyError,hasRequiredParsePrettyError;function requireParsePrettyError(){if(hasRequiredParsePrettyError)return parsePrettyError;hasRequiredParsePrettyError=1,parsePrettyError=t;function t(r,a){if(r.pos==null||r.line==null)return r;let e=r.message;if(e+=` at row ${r.line+1}, col ${r.col+1}, pos ${r.pos}:
3
- `,a&&a.split){const i=a.split(/\n/),n=String(Math.min(i.length,r.line+3)).length;let o=" ";for(;o.length<n;)o+=" ";for(let c=Math.max(0,r.line-1);c<Math.min(i.length,r.line+2);++c){let f=String(c+1);if(f.length<n&&(f=" "+f),r.line===c){e+=f+"> "+i[c]+`
4
- `,e+=o+" ";for(let u=0;u<r.col;++u)e+=" ";e+=`^
5
- `}else e+=f+": "+i[c]+`
6
- `}}return r.message=e+`
7
- `,r}return parsePrettyError}var parseString_1,hasRequiredParseString;function requireParseString(){if(hasRequiredParseString)return parseString_1;hasRequiredParseString=1,parseString_1=a;const t=requireTomlParser(),r=requireParsePrettyError();function a(e){commonjsGlobal.Buffer&&commonjsGlobal.Buffer.isBuffer(e)&&(e=e.toString("utf8"));const i=new t;try{return i.parse(e),i.finish()}catch(n){throw r(n,e)}}return parseString_1}var parseAsync_1,hasRequiredParseAsync;function requireParseAsync(){if(hasRequiredParseAsync)return parseAsync_1;hasRequiredParseAsync=1,parseAsync_1=a;const t=requireTomlParser(),r=requireParsePrettyError();function a(e,i){i||(i={});const n=0,o=i.blocksize||40960,c=new t;return new Promise((u,d)=>{setImmediate(f,n,o,u,d)});function f(u,d,R,g){if(u>=e.length)try{return R(c.finish())}catch(w){return g(r(w,e))}try{c.parse(e.slice(u,u+d)),setImmediate(f,u+d,d,R,g)}catch(w){g(r(w,e))}}}return parseAsync_1}const require$$0=getAugmentedNamespace(index.__viteBrowserExternal);var parseStream_1,hasRequiredParseStream;function requireParseStream(){if(hasRequiredParseStream)return parseStream_1;hasRequiredParseStream=1,parseStream_1=a;const t=require$$0,r=requireTomlParser();function a(n){return n?e(n):i()}function e(n){const o=new r;return n.setEncoding("utf8"),new Promise((c,f)=>{let u,d=!1,R=!1;function g(){if(d=!0,!u)try{c(o.finish())}catch(T){f(T)}}function w(T){R=!0,f(T)}n.once("end",g),n.once("error",w),x();function x(){u=!0;let T;for(;(T=n.read())!==null;)try{o.parse(T)}catch(E){return w(E)}if(u=!1,d)return g();R||n.once("readable",x)}})}function i(){const n=new r;return new t.Transform({objectMode:!0,transform(o,c,f){try{n.parse(o.toString(c))}catch(u){this.emit("error",u)}f()},flush(o){try{this.push(n.finish())}catch(c){this.emit("error",c)}o()}})}return parseStream_1}var hasRequiredParse;function requireParse(){return hasRequiredParse||(hasRequiredParse=1,parse.exports=requireParseString(),parse.exports.async=requireParseAsync(),parse.exports.stream=requireParseStream(),parse.exports.prettyError=requireParsePrettyError()),parse.exports}var stringify={exports:{}},hasRequiredStringify;function requireStringify(){if(hasRequiredStringify)return stringify.exports;hasRequiredStringify=1,stringify.exports=t,stringify.exports.value=T;function t(s){if(s===null)throw r("null");if(s===void 0)throw r("undefined");if(typeof s!="object")throw r(typeof s);if(typeof s.toJSON=="function"&&(s=s.toJSON()),s==null)return null;const h=c(s);if(h!=="table")throw r(h);return n("","",s)}function r(s){return new Error("Can only stringify objects, not "+s)}function a(s){return Object.keys(s).filter(h=>o(s[h]))}function e(s){return Object.keys(s).filter(h=>!o(s[h]))}function i(s){let h=Array.isArray(s)?[]:Object.prototype.hasOwnProperty.call(s,"__proto__")?{["__proto__"]:void 0}:{};for(let l of Object.keys(s))s[l]&&typeof s[l].toJSON=="function"&&!("toISOString"in s[l])?h[l]=s[l].toJSON():h[l]=s[l];return h}function n(s,h,l){l=i(l);let m,_;m=a(l),_=e(l);const A=[],b=h||"";m.forEach(H=>{var S=c(l[H]);S!=="undefined"&&S!=="null"&&A.push(b+f(H)+" = "+x(l[H],!0))}),A.length>0&&A.push("");const N=s&&m.length>0?h+" ":"";return _.forEach(H=>{A.push(D(s,N,H,l[H]))}),A.join(`
8
- `)}function o(s){switch(c(s)){case"undefined":case"null":case"integer":case"nan":case"float":case"boolean":case"string":case"datetime":return!0;case"array":return s.length===0||c(s[0])!=="table";case"table":return Object.keys(s).length===0;default:return!1}}function c(s){return s===void 0?"undefined":s===null?"null":typeof s=="bigint"||Number.isInteger(s)&&!Object.is(s,-0)?"integer":typeof s=="number"?"float":typeof s=="boolean"?"boolean":typeof s=="string"?"string":"toISOString"in s?isNaN(s)?"undefined":"datetime":Array.isArray(s)?"array":"table"}function f(s){const h=String(s);return/^[-A-Za-z0-9_]+$/.test(h)?h:u(h)}function u(s){return'"'+g(s).replace(/"/g,'\\"')+'"'}function d(s){return"'"+s+"'"}function R(s,h){for(;h.length<s;)h="0"+h;return h}function g(s){return s.replace(/\\/g,"\\\\").replace(/[\b]/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/([\u0000-\u001f\u007f])/,h=>"\\u"+R(4,h.codePointAt(0).toString(16)))}function w(s){let h=s.split(/\n/).map(l=>g(l).replace(/"(?="")/g,'\\"')).join(`
9
- `);return h.slice(-1)==='"'&&(h+=`\\
10
- `),`"""
11
- `+h+'"""'}function x(s,h){let l=c(s);return l==="string"&&(h&&/\n/.test(s)?l="string-multiline":!/[\b\t\n\f\r']/.test(s)&&/"/.test(s)&&(l="string-literal")),T(s,l)}function T(s,h){switch(h||(h=c(s)),h){case"string-multiline":return w(s);case"string":return u(s);case"string-literal":return d(s);case"integer":return E(s);case"float":return y(s);case"boolean":return p(s);case"datetime":return L(s);case"array":return O(s.filter(l=>c(l)!=="null"&&c(l)!=="undefined"&&c(l)!=="nan"));case"table":return I(s);default:throw r(h)}}function E(s){return String(s).replace(/\B(?=(\d{3})+(?!\d))/g,"_")}function y(s){if(s===1/0)return"inf";if(s===-1/0)return"-inf";if(Object.is(s,NaN))return"nan";if(Object.is(s,-0))return"-0.0";const[h,l]=String(s).split(".");return E(h)+"."+l}function p(s){return String(s)}function L(s){return s.toISOString()}function O(s){s=i(s);let h="[";const l=s.map(m=>T(m));return l.join(", ").length>60||/\n/.test(l)?h+=`
12
- `+l.join(`,
13
- `)+`
14
- `:h+=" "+l.join(", ")+(l.length>0?" ":""),h+"]"}function I(s){s=i(s);const h=[];return Object.keys(s).forEach(l=>{h.push(f(l)+" = "+x(s[l],!1))}),"{ "+h.join(", ")+(h.length>0?" ":"")+"}"}function D(s,h,l,m){const _=c(m);if(_==="array")return P(s,h,l,m);if(_==="table")return M(s,h,l,m);throw r(_)}function P(s,h,l,m){m=i(m);const _=c(m[0]);if(_!=="table")throw r(_);const A=s+f(l);let b="";return m.forEach(N=>{b.length>0&&(b+=`
15
- `),b+=h+"[["+A+`]]
16
- `,b+=n(A+".",h,N)}),b}function M(s,h,l,m){const _=s+f(l);let A="";return a(m).length>0&&(A+=h+"["+_+`]
17
- `),A+n(_+".",h,m)}return stringify.exports}var hasRequiredToml;function requireToml(){return hasRequiredToml||(hasRequiredToml=1,toml.parse=requireParse(),toml.stringify=requireStringify()),toml}var tomlExports=requireToml();const C=class C extends BasePlugin.BasePlugin{constructor(){super(...arguments),this.name="rust",this.displayName="Rust",this.version="3.1.0",this.priority=80}async detect(r){if(!this.fileExists(r,"Cargo.toml"))return null;const a=this.readFile(r,"Cargo.toml");if(!a)return{language:"Rust",name:this.getProjectName(r),dependencies:{},manifestFile:"Cargo.toml",projectPath:r,tags:["lang-rust"]};const e=this.parseManifest(a),i=e?this.extractDependenciesFromManifest(e):this.extractDependenciesFromText(a),n=this.extractWorkspaceMembers(e,a),o=await this.computeProjectTags(r,i,e,a);return{language:"Rust",name:e?.package?.name||this.extractNameFromContent(a)||this.getProjectName(r),description:e?.package?.description||this.extractDescriptionFromContent(a),dependencies:i,manifestFile:"Cargo.toml",projectPath:r,workspaceMembers:n.length>0?n:void 0,tags:o.length>0?o:void 0,keywords:e?.package?.keywords,categories:e?.package?.categories}}getTemplates(){return[{name:"rust-core",tags:["lang-rust"],content:`# Rust Development Guidelines
18
-
19
- This project uses Rust.
20
-
21
- ## Project Structure
22
- - Follow Cargo conventions
23
- - Organize code with modules and crates
24
- - Prefer workspace members for shared libraries
25
-
26
- ## Tooling
27
- - Run \`cargo fmt\` and \`cargo clippy\` before committing
28
- - Enable \`deny(warnings)\` in CI for regression catch
29
- - Keep the MSRV documented in README or \`rust-toolchain.toml\`
30
-
31
- ## Safety & Ownership
32
- - Embrace ownership and borrowing to prevent data races
33
- - Minimize \`unsafe\` blocks and document why they're required
34
- - Handle \`Result\`/\`Option\` exhaustively with meaningful errors
35
-
36
- ## Testing
37
- - Cover critical code paths with unit tests in-module
38
- - Add integration tests under \`tests/\`
39
- - Use property tests or fuzzing for complex parsing logic
40
-
41
- ## Dependencies
42
- - Keep Cargo.lock committed for binaries
43
- - Audit crates with \`cargo audit\`
44
- - Prefer feature flags over forked crates when possible`},{name:"rust-embedded-core",tags:["rust-embedded"],content:`# Embedded & Hardware Rust Guidelines
45
-
46
- This project targets hardware/embedded environments.
47
-
48
- ## Build & Profiles
49
- - Define \`[profile.dev]\` / \`[profile.release]\` tweaks for probe-run
50
- - Track linker scripts such as \`memory.x\` inside version control
51
- - Pin the toolchain with \`rust-toolchain.toml\` to keep firmware reproducible
52
-
53
- ## Runtime Constraints
54
- - Prefer \`#![no_std]\` libraries and audit for heap allocations
55
- - Use \`heapless\` or ring buffers instead of Vec when RAM is limited
56
- - Tune interrupt priorities and minimize busy waits
57
-
58
- ## HAL & Drivers
59
- - Adhere to \`embedded-hal\` traits for portability
60
- - Isolate board support packages under \`boards/<target>\`
61
- - Document pin mappings and peripheral ownership
62
-
63
- ## Observability
64
- - Route logs through \`defmt\` or RTT instead of printf polling
65
- - Keep probe-run + probe-rs configs under \`.cargo/config.toml\`
66
- - Include instructions for flashing + debugging (UF2, JLink, etc.)
67
-
68
- ## Testing on Hardware
69
- - Maintain hardware-in-the-loop smoke tests
70
- - Provide mocks for driver crates to unblock CI
71
- - Capture oscilloscope/logic-analyzer traces for tricky regressions`},{name:"hardware2rust-profile",tags:["hardware2rust"],content:`# hardware2rust Project Notes
72
-
73
- These guidelines focus on packages aligned with the hardware2rust stack.
74
-
75
- ## Package Layout
76
- - Keep reusable primitives in \`crates/core\` and board-specific glue in \`crates/boards/<target>\`
77
- - Expose ergonomic builder APIs for configuring buses, clocks, and peripherals
78
- - Document supported targets (nRF, RP2040, ESP) in README badges
79
-
80
- ## Feature Flags
81
- - Mirror hardware variants with Cargo features (e.g. \`rtic\`, \`defmt\`, \`probe-run\`)
82
- - Ensure mutually exclusive features guard incompatible HAL implementations
83
-
84
- ## Developer Experience
85
- - Ship ready-to-flash examples under \`examples/\` (blinky, I2C scanner, sensor demos)
86
- - Provide VS Code + probe-rs launch.json snippets for teammates
87
- - Keep CI workflows building representative targets to catch regressions early`}]}getDependencyTagMap(){return{tokio:"rust-async","actix-web":"rust-actix",rocket:"rust-rocket",serde:"serde","embedded-hal":"rust-embedded","embedded-hal-async":"rust-embedded","cortex-m":"rust-embedded","cortex-m-rt":"rust-embedded","cortex-m-rtic":"rust-embedded",rtic:"rust-embedded",hardware2rust:"hardware2rust","probe-run":"rust-embedded","probe-rs":"rust-embedded",defmt:"rust-embedded",heapless:"rust-embedded","rp2040-hal":"rust-embedded","nrf52840-hal":"rust-embedded","stm32f4xx-hal":"rust-embedded","esp-idf-hal":"rust-embedded"}}parseManifest(r){try{return tomlExports.parse(r)}catch{return null}}extractDependenciesFromManifest(r){const a={};if(this.collectDependencies(r.dependencies,a),this.collectDependencies(r["dev-dependencies"],a),this.collectDependencies(r["build-dependencies"],a),this.collectDependencies(r.workspace?.dependencies,a),r.target)for(const e of Object.values(r.target))e&&(this.collectDependencies(e.dependencies,a),this.collectDependencies(e["dev-dependencies"],a),this.collectDependencies(e["build-dependencies"],a));return a}collectDependencies(r,a){if(r)for(const[e,i]of Object.entries(r))a[e]=this.normalizeDependencyVersion(i)}normalizeDependencyVersion(r){if(typeof r=="string"||typeof r=="number")return String(r);if(typeof r=="boolean")return r?"*":"disabled";if(r&&typeof r=="object"){const a=r,e=a.version;if(typeof e=="string")return e;const i=a.git;if(typeof i=="string"){const o=a.rev;return typeof o=="string"?`git:${i}#${o}`:`git:${i}`}const n=a.path;if(typeof n=="string")return`path:${n}`}return"*"}extractWorkspaceMembers(r,a){return r?.workspace?.members?.length?r.workspace.members.map(e=>e.trim()).filter(Boolean):this.fallbackWorkspaceMembers(a)}fallbackWorkspaceMembers(r){const a=r.match(/\[workspace\][\s\S]*?members\s*=\s*\[([\s\S]*?)\]/);return a?a[1].split(",").map(e=>e.trim().replace(/['"]/g,"")).filter(Boolean):[]}extractDependenciesFromText(r){const a={},e=["dependencies","dev-dependencies","build-dependencies","workspace.dependencies"];for(const i of e){const n=this.extractSection(r,i);n&&this.parseDependencyLines(n,a)}return a}extractSection(r,a){const e=a.replace(".","\\."),n=new RegExp(`\\[${e}\\]([\\s\\S]*?)(?:\\n\\[|$)`,"i").exec(r);return n?n[1]:null}parseDependencyLines(r,a){const e=r.split(`
88
- `);for(const i of e){const n=i.trim();if(!n||n.startsWith("#"))continue;const o=n.match(/^([A-Za-z0-9_-]+)\s*=\s*(.+)$/);if(!o)continue;const[,c,f]=o,u=f.trim();if(u.startsWith("{")){const d=u.match(/version\s*=\s*"([^"]+)"/),R=u.match(/git\s*=\s*"([^"]+)"/),g=u.match(/path\s*=\s*"([^"]+)"/);a[c]=d?.[1]||(R?`git:${R}`:g?`path:${g}`:"*")}else a[c]=u.replace(/"/g,"")}}extractNameFromContent(r){return r.match(/\[package\][\s\S]*?name\s*=\s*"([^"]+)"/)?.[1]}extractDescriptionFromContent(r){return r.match(/\[package\][\s\S]*?description\s*=\s*"([^"]+)"/)?.[1]}async computeProjectTags(r,a,e,i){const n=new Set(["lang-rust"]),o=Object.keys(a).map(p=>p.toLowerCase()),c=o.some(p=>C.EMBEDDED_DEPENDENCIES.has(p)),f=(e?.package?.keywords??[]).map(p=>p.toLowerCase()),u=(e?.package?.categories??[]).map(p=>p.toLowerCase()),d=f.some(p=>C.EMBEDDED_KEYWORDS.has(p)),R=u.some(p=>C.EMBEDDED_KEYWORDS.has(p)),g=C.MEMORY_LAYOUT_FILES.some(p=>this.fileExists(r,p)),w=C.CARGO_CONFIG_FILES.some(p=>this.fileExists(r,p)),x=e?.package?.name?.toLowerCase()??"",T=i.toLowerCase(),E=C.HARDWARE_NAME_HINTS.some(p=>x.includes(p)||T.includes(p)),y=x.includes("hardware2rust")||o.some(p=>p.includes("hardware2rust"));return(c||d||R||g||w||E)&&n.add("rust-embedded"),y&&n.add("hardware2rust"),Array.from(n)}};C.EMBEDDED_DEPENDENCIES=new Set(["hardware2rust","embedded-hal","embedded-hal-async","cortex-m","cortex-m-rt","cortex-m-rtic","rtic","nrf52840-hal","atsamd-hal","stm32f4xx-hal","stm32h7xx-hal","esp-idf-hal","esp-hal","rp2040-hal","probe-run","probe-rs","defmt","heapless","microbit","drone-core"].map(r=>r.toLowerCase())),C.EMBEDDED_KEYWORDS=new Set(["embedded","hardware","no_std","nostd","microcontroller","firmware","hal","baremetal","bare-metal"]),C.HARDWARE_NAME_HINTS=["hardware","hardware2rust","embedded"],C.CARGO_CONFIG_FILES=[".cargo/config",".cargo/config.toml"],C.MEMORY_LAYOUT_FILES=["memory.x","memory.x.in"];let RustPlugin=C;exports.RustPlugin=RustPlugin;
89
- //# sourceMappingURL=index-L3IVvhd1.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-L3IVvhd1.cjs","sources":["../../../node_modules/@iarna/toml/lib/parser.js","../../../node_modules/@iarna/toml/lib/create-datetime.js","../../../node_modules/@iarna/toml/lib/format-num.js","../../../node_modules/@iarna/toml/lib/create-datetime-float.js","../../../node_modules/@iarna/toml/lib/create-date.js","../../../node_modules/@iarna/toml/lib/create-time.js","../../../node_modules/@iarna/toml/lib/toml-parser.js","../../../node_modules/@iarna/toml/parse-pretty-error.js","../../../node_modules/@iarna/toml/parse-string.js","../../../node_modules/@iarna/toml/parse-async.js","../../../node_modules/@iarna/toml/parse-stream.js","../../../node_modules/@iarna/toml/parse.js","../../../node_modules/@iarna/toml/stringify.js","../../../node_modules/@iarna/toml/toml.js","../src/builtin-plugins/rust/index.ts"],"sourcesContent":["'use strict'\nconst ParserEND = 0x110000\nclass ParserError extends Error {\n /* istanbul ignore next */\n constructor (msg, filename, linenumber) {\n super('[ParserError] ' + msg, filename, linenumber)\n this.name = 'ParserError'\n this.code = 'ParserError'\n if (Error.captureStackTrace) Error.captureStackTrace(this, ParserError)\n }\n}\nclass State {\n constructor (parser) {\n this.parser = parser\n this.buf = ''\n this.returned = null\n this.result = null\n this.resultTable = null\n this.resultArr = null\n }\n}\nclass Parser {\n constructor () {\n this.pos = 0\n this.col = 0\n this.line = 0\n this.obj = {}\n this.ctx = this.obj\n this.stack = []\n this._buf = ''\n this.char = null\n this.ii = 0\n this.state = new State(this.parseStart)\n }\n\n parse (str) {\n /* istanbul ignore next */\n if (str.length === 0 || str.length == null) return\n\n this._buf = String(str)\n this.ii = -1\n this.char = -1\n let getNext\n while (getNext === false || this.nextChar()) {\n getNext = this.runOne()\n }\n this._buf = null\n }\n nextChar () {\n if (this.char === 0x0A) {\n ++this.line\n this.col = -1\n }\n ++this.ii\n this.char = this._buf.codePointAt(this.ii)\n ++this.pos\n ++this.col\n return this.haveBuffer()\n }\n haveBuffer () {\n return this.ii < this._buf.length\n }\n runOne () {\n return this.state.parser.call(this, this.state.returned)\n }\n finish () {\n this.char = ParserEND\n let last\n do {\n last = this.state.parser\n this.runOne()\n } while (this.state.parser !== last)\n\n this.ctx = null\n this.state = null\n this._buf = null\n\n return this.obj\n }\n next (fn) {\n /* istanbul ignore next */\n if (typeof fn !== 'function') throw new ParserError('Tried to set state to non-existent state: ' + JSON.stringify(fn))\n this.state.parser = fn\n }\n goto (fn) {\n this.next(fn)\n return this.runOne()\n }\n call (fn, returnWith) {\n if (returnWith) this.next(returnWith)\n this.stack.push(this.state)\n this.state = new State(fn)\n }\n callNow (fn, returnWith) {\n this.call(fn, returnWith)\n return this.runOne()\n }\n return (value) {\n /* istanbul ignore next */\n if (this.stack.length === 0) throw this.error(new ParserError('Stack underflow'))\n if (value === undefined) value = this.state.buf\n this.state = this.stack.pop()\n this.state.returned = value\n }\n returnNow (value) {\n this.return(value)\n return this.runOne()\n }\n consume () {\n /* istanbul ignore next */\n if (this.char === ParserEND) throw this.error(new ParserError('Unexpected end-of-buffer'))\n this.state.buf += this._buf[this.ii]\n }\n error (err) {\n err.line = this.line\n err.col = this.col\n err.pos = this.pos\n return err\n }\n /* istanbul ignore next */\n parseStart () {\n throw new ParserError('Must declare a parseStart method')\n }\n}\nParser.END = ParserEND\nParser.Error = ParserError\nmodule.exports = Parser\n","'use strict'\nmodule.exports = value => {\n const date = new Date(value)\n /* istanbul ignore if */\n if (isNaN(date)) {\n throw new TypeError('Invalid Datetime')\n } else {\n return date\n }\n}\n","'use strict'\nmodule.exports = (d, num) => {\n num = String(num)\n while (num.length < d) num = '0' + num\n return num\n}\n","'use strict'\nconst f = require('./format-num.js')\n\nclass FloatingDateTime extends Date {\n constructor (value) {\n super(value + 'Z')\n this.isFloating = true\n }\n toISOString () {\n const date = `${this.getUTCFullYear()}-${f(2, this.getUTCMonth() + 1)}-${f(2, this.getUTCDate())}`\n const time = `${f(2, this.getUTCHours())}:${f(2, this.getUTCMinutes())}:${f(2, this.getUTCSeconds())}.${f(3, this.getUTCMilliseconds())}`\n return `${date}T${time}`\n }\n}\n\nmodule.exports = value => {\n const date = new FloatingDateTime(value)\n /* istanbul ignore if */\n if (isNaN(date)) {\n throw new TypeError('Invalid Datetime')\n } else {\n return date\n }\n}\n","'use strict'\nconst f = require('./format-num.js')\nconst DateTime = global.Date\n\nclass Date extends DateTime {\n constructor (value) {\n super(value)\n this.isDate = true\n }\n toISOString () {\n return `${this.getUTCFullYear()}-${f(2, this.getUTCMonth() + 1)}-${f(2, this.getUTCDate())}`\n }\n}\n\nmodule.exports = value => {\n const date = new Date(value)\n /* istanbul ignore if */\n if (isNaN(date)) {\n throw new TypeError('Invalid Datetime')\n } else {\n return date\n }\n}\n","'use strict'\nconst f = require('./format-num.js')\n\nclass Time extends Date {\n constructor (value) {\n super(`0000-01-01T${value}Z`)\n this.isTime = true\n }\n toISOString () {\n return `${f(2, this.getUTCHours())}:${f(2, this.getUTCMinutes())}:${f(2, this.getUTCSeconds())}.${f(3, this.getUTCMilliseconds())}`\n }\n}\n\nmodule.exports = value => {\n const date = new Time(value)\n /* istanbul ignore if */\n if (isNaN(date)) {\n throw new TypeError('Invalid Datetime')\n } else {\n return date\n }\n}\n","'use strict'\n/* eslint-disable no-new-wrappers, no-eval, camelcase, operator-linebreak */\nmodule.exports = makeParserClass(require('./parser.js'))\nmodule.exports.makeParserClass = makeParserClass\n\nclass TomlError extends Error {\n constructor (msg) {\n super(msg)\n this.name = 'TomlError'\n /* istanbul ignore next */\n if (Error.captureStackTrace) Error.captureStackTrace(this, TomlError)\n this.fromTOML = true\n this.wrapped = null\n }\n}\nTomlError.wrap = err => {\n const terr = new TomlError(err.message)\n terr.code = err.code\n terr.wrapped = err\n return terr\n}\nmodule.exports.TomlError = TomlError\n\nconst createDateTime = require('./create-datetime.js')\nconst createDateTimeFloat = require('./create-datetime-float.js')\nconst createDate = require('./create-date.js')\nconst createTime = require('./create-time.js')\n\nconst CTRL_I = 0x09\nconst CTRL_J = 0x0A\nconst CTRL_M = 0x0D\nconst CTRL_CHAR_BOUNDARY = 0x1F // the last non-character in the latin1 region of unicode, except DEL\nconst CHAR_SP = 0x20\nconst CHAR_QUOT = 0x22\nconst CHAR_NUM = 0x23\nconst CHAR_APOS = 0x27\nconst CHAR_PLUS = 0x2B\nconst CHAR_COMMA = 0x2C\nconst CHAR_HYPHEN = 0x2D\nconst CHAR_PERIOD = 0x2E\nconst CHAR_0 = 0x30\nconst CHAR_1 = 0x31\nconst CHAR_7 = 0x37\nconst CHAR_9 = 0x39\nconst CHAR_COLON = 0x3A\nconst CHAR_EQUALS = 0x3D\nconst CHAR_A = 0x41\nconst CHAR_E = 0x45\nconst CHAR_F = 0x46\nconst CHAR_T = 0x54\nconst CHAR_U = 0x55\nconst CHAR_Z = 0x5A\nconst CHAR_LOWBAR = 0x5F\nconst CHAR_a = 0x61\nconst CHAR_b = 0x62\nconst CHAR_e = 0x65\nconst CHAR_f = 0x66\nconst CHAR_i = 0x69\nconst CHAR_l = 0x6C\nconst CHAR_n = 0x6E\nconst CHAR_o = 0x6F\nconst CHAR_r = 0x72\nconst CHAR_s = 0x73\nconst CHAR_t = 0x74\nconst CHAR_u = 0x75\nconst CHAR_x = 0x78\nconst CHAR_z = 0x7A\nconst CHAR_LCUB = 0x7B\nconst CHAR_RCUB = 0x7D\nconst CHAR_LSQB = 0x5B\nconst CHAR_BSOL = 0x5C\nconst CHAR_RSQB = 0x5D\nconst CHAR_DEL = 0x7F\nconst SURROGATE_FIRST = 0xD800\nconst SURROGATE_LAST = 0xDFFF\n\nconst escapes = {\n [CHAR_b]: '\\u0008',\n [CHAR_t]: '\\u0009',\n [CHAR_n]: '\\u000A',\n [CHAR_f]: '\\u000C',\n [CHAR_r]: '\\u000D',\n [CHAR_QUOT]: '\\u0022',\n [CHAR_BSOL]: '\\u005C'\n}\n\nfunction isDigit (cp) {\n return cp >= CHAR_0 && cp <= CHAR_9\n}\nfunction isHexit (cp) {\n return (cp >= CHAR_A && cp <= CHAR_F) || (cp >= CHAR_a && cp <= CHAR_f) || (cp >= CHAR_0 && cp <= CHAR_9)\n}\nfunction isBit (cp) {\n return cp === CHAR_1 || cp === CHAR_0\n}\nfunction isOctit (cp) {\n return (cp >= CHAR_0 && cp <= CHAR_7)\n}\nfunction isAlphaNumQuoteHyphen (cp) {\n return (cp >= CHAR_A && cp <= CHAR_Z)\n || (cp >= CHAR_a && cp <= CHAR_z)\n || (cp >= CHAR_0 && cp <= CHAR_9)\n || cp === CHAR_APOS\n || cp === CHAR_QUOT\n || cp === CHAR_LOWBAR\n || cp === CHAR_HYPHEN\n}\nfunction isAlphaNumHyphen (cp) {\n return (cp >= CHAR_A && cp <= CHAR_Z)\n || (cp >= CHAR_a && cp <= CHAR_z)\n || (cp >= CHAR_0 && cp <= CHAR_9)\n || cp === CHAR_LOWBAR\n || cp === CHAR_HYPHEN\n}\nconst _type = Symbol('type')\nconst _declared = Symbol('declared')\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty\nconst defineProperty = Object.defineProperty\nconst descriptor = {configurable: true, enumerable: true, writable: true, value: undefined}\n\nfunction hasKey (obj, key) {\n if (hasOwnProperty.call(obj, key)) return true\n if (key === '__proto__') defineProperty(obj, '__proto__', descriptor)\n return false\n}\n\nconst INLINE_TABLE = Symbol('inline-table')\nfunction InlineTable () {\n return Object.defineProperties({}, {\n [_type]: {value: INLINE_TABLE}\n })\n}\nfunction isInlineTable (obj) {\n if (obj === null || typeof (obj) !== 'object') return false\n return obj[_type] === INLINE_TABLE\n}\n\nconst TABLE = Symbol('table')\nfunction Table () {\n return Object.defineProperties({}, {\n [_type]: {value: TABLE},\n [_declared]: {value: false, writable: true}\n })\n}\nfunction isTable (obj) {\n if (obj === null || typeof (obj) !== 'object') return false\n return obj[_type] === TABLE\n}\n\nconst _contentType = Symbol('content-type')\nconst INLINE_LIST = Symbol('inline-list')\nfunction InlineList (type) {\n return Object.defineProperties([], {\n [_type]: {value: INLINE_LIST},\n [_contentType]: {value: type}\n })\n}\nfunction isInlineList (obj) {\n if (obj === null || typeof (obj) !== 'object') return false\n return obj[_type] === INLINE_LIST\n}\n\nconst LIST = Symbol('list')\nfunction List () {\n return Object.defineProperties([], {\n [_type]: {value: LIST}\n })\n}\nfunction isList (obj) {\n if (obj === null || typeof (obj) !== 'object') return false\n return obj[_type] === LIST\n}\n\n// in an eval, to let bundlers not slurp in a util proxy\nlet _custom\ntry {\n const utilInspect = eval(\"require('util').inspect\")\n _custom = utilInspect.custom\n} catch (_) {\n /* eval require not available in transpiled bundle */\n}\n/* istanbul ignore next */\nconst _inspect = _custom || 'inspect'\n\nclass BoxedBigInt {\n constructor (value) {\n try {\n this.value = global.BigInt.asIntN(64, value)\n } catch (_) {\n /* istanbul ignore next */\n this.value = null\n }\n Object.defineProperty(this, _type, {value: INTEGER})\n }\n isNaN () {\n return this.value === null\n }\n /* istanbul ignore next */\n toString () {\n return String(this.value)\n }\n /* istanbul ignore next */\n [_inspect] () {\n return `[BigInt: ${this.toString()}]}`\n }\n valueOf () {\n return this.value\n }\n}\n\nconst INTEGER = Symbol('integer')\nfunction Integer (value) {\n let num = Number(value)\n // -0 is a float thing, not an int thing\n if (Object.is(num, -0)) num = 0\n /* istanbul ignore else */\n if (global.BigInt && !Number.isSafeInteger(num)) {\n return new BoxedBigInt(value)\n } else {\n /* istanbul ignore next */\n return Object.defineProperties(new Number(num), {\n isNaN: {value: function () { return isNaN(this) }},\n [_type]: {value: INTEGER},\n [_inspect]: {value: () => `[Integer: ${value}]`}\n })\n }\n}\nfunction isInteger (obj) {\n if (obj === null || typeof (obj) !== 'object') return false\n return obj[_type] === INTEGER\n}\n\nconst FLOAT = Symbol('float')\nfunction Float (value) {\n /* istanbul ignore next */\n return Object.defineProperties(new Number(value), {\n [_type]: {value: FLOAT},\n [_inspect]: {value: () => `[Float: ${value}]`}\n })\n}\nfunction isFloat (obj) {\n if (obj === null || typeof (obj) !== 'object') return false\n return obj[_type] === FLOAT\n}\n\nfunction tomlType (value) {\n const type = typeof value\n if (type === 'object') {\n /* istanbul ignore if */\n if (value === null) return 'null'\n if (value instanceof Date) return 'datetime'\n /* istanbul ignore else */\n if (_type in value) {\n switch (value[_type]) {\n case INLINE_TABLE: return 'inline-table'\n case INLINE_LIST: return 'inline-list'\n /* istanbul ignore next */\n case TABLE: return 'table'\n /* istanbul ignore next */\n case LIST: return 'list'\n case FLOAT: return 'float'\n case INTEGER: return 'integer'\n }\n }\n }\n return type\n}\n\nfunction makeParserClass (Parser) {\n class TOMLParser extends Parser {\n constructor () {\n super()\n this.ctx = this.obj = Table()\n }\n\n /* MATCH HELPER */\n atEndOfWord () {\n return this.char === CHAR_NUM || this.char === CTRL_I || this.char === CHAR_SP || this.atEndOfLine()\n }\n atEndOfLine () {\n return this.char === Parser.END || this.char === CTRL_J || this.char === CTRL_M\n }\n\n parseStart () {\n if (this.char === Parser.END) {\n return null\n } else if (this.char === CHAR_LSQB) {\n return this.call(this.parseTableOrList)\n } else if (this.char === CHAR_NUM) {\n return this.call(this.parseComment)\n } else if (this.char === CTRL_J || this.char === CHAR_SP || this.char === CTRL_I || this.char === CTRL_M) {\n return null\n } else if (isAlphaNumQuoteHyphen(this.char)) {\n return this.callNow(this.parseAssignStatement)\n } else {\n throw this.error(new TomlError(`Unknown character \"${this.char}\"`))\n }\n }\n\n // HELPER, this strips any whitespace and comments to the end of the line\n // then RETURNS. Last state in a production.\n parseWhitespaceToEOL () {\n if (this.char === CHAR_SP || this.char === CTRL_I || this.char === CTRL_M) {\n return null\n } else if (this.char === CHAR_NUM) {\n return this.goto(this.parseComment)\n } else if (this.char === Parser.END || this.char === CTRL_J) {\n return this.return()\n } else {\n throw this.error(new TomlError('Unexpected character, expected only whitespace or comments till end of line'))\n }\n }\n\n /* ASSIGNMENT: key = value */\n parseAssignStatement () {\n return this.callNow(this.parseAssign, this.recordAssignStatement)\n }\n recordAssignStatement (kv) {\n let target = this.ctx\n let finalKey = kv.key.pop()\n for (let kw of kv.key) {\n if (hasKey(target, kw) && !isTable(target[kw])) {\n throw this.error(new TomlError(\"Can't redefine existing key\"))\n }\n target = target[kw] = target[kw] || Table()\n }\n if (hasKey(target, finalKey)) {\n throw this.error(new TomlError(\"Can't redefine existing key\"))\n }\n target[_declared] = true\n // unbox our numbers\n if (isInteger(kv.value) || isFloat(kv.value)) {\n target[finalKey] = kv.value.valueOf()\n } else {\n target[finalKey] = kv.value\n }\n return this.goto(this.parseWhitespaceToEOL)\n }\n\n /* ASSSIGNMENT expression, key = value possibly inside an inline table */\n parseAssign () {\n return this.callNow(this.parseKeyword, this.recordAssignKeyword)\n }\n recordAssignKeyword (key) {\n if (this.state.resultTable) {\n this.state.resultTable.push(key)\n } else {\n this.state.resultTable = [key]\n }\n return this.goto(this.parseAssignKeywordPreDot)\n }\n parseAssignKeywordPreDot () {\n if (this.char === CHAR_PERIOD) {\n return this.next(this.parseAssignKeywordPostDot)\n } else if (this.char !== CHAR_SP && this.char !== CTRL_I) {\n return this.goto(this.parseAssignEqual)\n }\n }\n parseAssignKeywordPostDot () {\n if (this.char !== CHAR_SP && this.char !== CTRL_I) {\n return this.callNow(this.parseKeyword, this.recordAssignKeyword)\n }\n }\n\n parseAssignEqual () {\n if (this.char === CHAR_EQUALS) {\n return this.next(this.parseAssignPreValue)\n } else {\n throw this.error(new TomlError('Invalid character, expected \"=\"'))\n }\n }\n parseAssignPreValue () {\n if (this.char === CHAR_SP || this.char === CTRL_I) {\n return null\n } else {\n return this.callNow(this.parseValue, this.recordAssignValue)\n }\n }\n recordAssignValue (value) {\n return this.returnNow({key: this.state.resultTable, value: value})\n }\n\n /* COMMENTS: #...eol */\n parseComment () {\n do {\n if (this.char === Parser.END || this.char === CTRL_J) {\n return this.return()\n } else if (this.char === CHAR_DEL || (this.char <= CTRL_CHAR_BOUNDARY && this.char !== CTRL_I)) {\n throw this.errorControlCharIn('comments')\n }\n } while (this.nextChar())\n }\n\n /* TABLES AND LISTS, [foo] and [[foo]] */\n parseTableOrList () {\n if (this.char === CHAR_LSQB) {\n this.next(this.parseList)\n } else {\n return this.goto(this.parseTable)\n }\n }\n\n /* TABLE [foo.bar.baz] */\n parseTable () {\n this.ctx = this.obj\n return this.goto(this.parseTableNext)\n }\n parseTableNext () {\n if (this.char === CHAR_SP || this.char === CTRL_I) {\n return null\n } else {\n return this.callNow(this.parseKeyword, this.parseTableMore)\n }\n }\n parseTableMore (keyword) {\n if (this.char === CHAR_SP || this.char === CTRL_I) {\n return null\n } else if (this.char === CHAR_RSQB) {\n if (hasKey(this.ctx, keyword) && (!isTable(this.ctx[keyword]) || this.ctx[keyword][_declared])) {\n throw this.error(new TomlError(\"Can't redefine existing key\"))\n } else {\n this.ctx = this.ctx[keyword] = this.ctx[keyword] || Table()\n this.ctx[_declared] = true\n }\n return this.next(this.parseWhitespaceToEOL)\n } else if (this.char === CHAR_PERIOD) {\n if (!hasKey(this.ctx, keyword)) {\n this.ctx = this.ctx[keyword] = Table()\n } else if (isTable(this.ctx[keyword])) {\n this.ctx = this.ctx[keyword]\n } else if (isList(this.ctx[keyword])) {\n this.ctx = this.ctx[keyword][this.ctx[keyword].length - 1]\n } else {\n throw this.error(new TomlError(\"Can't redefine existing key\"))\n }\n return this.next(this.parseTableNext)\n } else {\n throw this.error(new TomlError('Unexpected character, expected whitespace, . or ]'))\n }\n }\n\n /* LIST [[a.b.c]] */\n parseList () {\n this.ctx = this.obj\n return this.goto(this.parseListNext)\n }\n parseListNext () {\n if (this.char === CHAR_SP || this.char === CTRL_I) {\n return null\n } else {\n return this.callNow(this.parseKeyword, this.parseListMore)\n }\n }\n parseListMore (keyword) {\n if (this.char === CHAR_SP || this.char === CTRL_I) {\n return null\n } else if (this.char === CHAR_RSQB) {\n if (!hasKey(this.ctx, keyword)) {\n this.ctx[keyword] = List()\n }\n if (isInlineList(this.ctx[keyword])) {\n throw this.error(new TomlError(\"Can't extend an inline array\"))\n } else if (isList(this.ctx[keyword])) {\n const next = Table()\n this.ctx[keyword].push(next)\n this.ctx = next\n } else {\n throw this.error(new TomlError(\"Can't redefine an existing key\"))\n }\n return this.next(this.parseListEnd)\n } else if (this.char === CHAR_PERIOD) {\n if (!hasKey(this.ctx, keyword)) {\n this.ctx = this.ctx[keyword] = Table()\n } else if (isInlineList(this.ctx[keyword])) {\n throw this.error(new TomlError(\"Can't extend an inline array\"))\n } else if (isInlineTable(this.ctx[keyword])) {\n throw this.error(new TomlError(\"Can't extend an inline table\"))\n } else if (isList(this.ctx[keyword])) {\n this.ctx = this.ctx[keyword][this.ctx[keyword].length - 1]\n } else if (isTable(this.ctx[keyword])) {\n this.ctx = this.ctx[keyword]\n } else {\n throw this.error(new TomlError(\"Can't redefine an existing key\"))\n }\n return this.next(this.parseListNext)\n } else {\n throw this.error(new TomlError('Unexpected character, expected whitespace, . or ]'))\n }\n }\n parseListEnd (keyword) {\n if (this.char === CHAR_RSQB) {\n return this.next(this.parseWhitespaceToEOL)\n } else {\n throw this.error(new TomlError('Unexpected character, expected whitespace, . or ]'))\n }\n }\n\n /* VALUE string, number, boolean, inline list, inline object */\n parseValue () {\n if (this.char === Parser.END) {\n throw this.error(new TomlError('Key without value'))\n } else if (this.char === CHAR_QUOT) {\n return this.next(this.parseDoubleString)\n } if (this.char === CHAR_APOS) {\n return this.next(this.parseSingleString)\n } else if (this.char === CHAR_HYPHEN || this.char === CHAR_PLUS) {\n return this.goto(this.parseNumberSign)\n } else if (this.char === CHAR_i) {\n return this.next(this.parseInf)\n } else if (this.char === CHAR_n) {\n return this.next(this.parseNan)\n } else if (isDigit(this.char)) {\n return this.goto(this.parseNumberOrDateTime)\n } else if (this.char === CHAR_t || this.char === CHAR_f) {\n return this.goto(this.parseBoolean)\n } else if (this.char === CHAR_LSQB) {\n return this.call(this.parseInlineList, this.recordValue)\n } else if (this.char === CHAR_LCUB) {\n return this.call(this.parseInlineTable, this.recordValue)\n } else {\n throw this.error(new TomlError('Unexpected character, expecting string, number, datetime, boolean, inline array or inline table'))\n }\n }\n recordValue (value) {\n return this.returnNow(value)\n }\n\n parseInf () {\n if (this.char === CHAR_n) {\n return this.next(this.parseInf2)\n } else {\n throw this.error(new TomlError('Unexpected character, expected \"inf\", \"+inf\" or \"-inf\"'))\n }\n }\n parseInf2 () {\n if (this.char === CHAR_f) {\n if (this.state.buf === '-') {\n return this.return(-Infinity)\n } else {\n return this.return(Infinity)\n }\n } else {\n throw this.error(new TomlError('Unexpected character, expected \"inf\", \"+inf\" or \"-inf\"'))\n }\n }\n\n parseNan () {\n if (this.char === CHAR_a) {\n return this.next(this.parseNan2)\n } else {\n throw this.error(new TomlError('Unexpected character, expected \"nan\"'))\n }\n }\n parseNan2 () {\n if (this.char === CHAR_n) {\n return this.return(NaN)\n } else {\n throw this.error(new TomlError('Unexpected character, expected \"nan\"'))\n }\n }\n\n /* KEYS, barewords or basic, literal, or dotted */\n parseKeyword () {\n if (this.char === CHAR_QUOT) {\n return this.next(this.parseBasicString)\n } else if (this.char === CHAR_APOS) {\n return this.next(this.parseLiteralString)\n } else {\n return this.goto(this.parseBareKey)\n }\n }\n\n /* KEYS: barewords */\n parseBareKey () {\n do {\n if (this.char === Parser.END) {\n throw this.error(new TomlError('Key ended without value'))\n } else if (isAlphaNumHyphen(this.char)) {\n this.consume()\n } else if (this.state.buf.length === 0) {\n throw this.error(new TomlError('Empty bare keys are not allowed'))\n } else {\n return this.returnNow()\n }\n } while (this.nextChar())\n }\n\n /* STRINGS, single quoted (literal) */\n parseSingleString () {\n if (this.char === CHAR_APOS) {\n return this.next(this.parseLiteralMultiStringMaybe)\n } else {\n return this.goto(this.parseLiteralString)\n }\n }\n parseLiteralString () {\n do {\n if (this.char === CHAR_APOS) {\n return this.return()\n } else if (this.atEndOfLine()) {\n throw this.error(new TomlError('Unterminated string'))\n } else if (this.char === CHAR_DEL || (this.char <= CTRL_CHAR_BOUNDARY && this.char !== CTRL_I)) {\n throw this.errorControlCharIn('strings')\n } else {\n this.consume()\n }\n } while (this.nextChar())\n }\n parseLiteralMultiStringMaybe () {\n if (this.char === CHAR_APOS) {\n return this.next(this.parseLiteralMultiString)\n } else {\n return this.returnNow()\n }\n }\n parseLiteralMultiString () {\n if (this.char === CTRL_M) {\n return null\n } else if (this.char === CTRL_J) {\n return this.next(this.parseLiteralMultiStringContent)\n } else {\n return this.goto(this.parseLiteralMultiStringContent)\n }\n }\n parseLiteralMultiStringContent () {\n do {\n if (this.char === CHAR_APOS) {\n return this.next(this.parseLiteralMultiEnd)\n } else if (this.char === Parser.END) {\n throw this.error(new TomlError('Unterminated multi-line string'))\n } else if (this.char === CHAR_DEL || (this.char <= CTRL_CHAR_BOUNDARY && this.char !== CTRL_I && this.char !== CTRL_J && this.char !== CTRL_M)) {\n throw this.errorControlCharIn('strings')\n } else {\n this.consume()\n }\n } while (this.nextChar())\n }\n parseLiteralMultiEnd () {\n if (this.char === CHAR_APOS) {\n return this.next(this.parseLiteralMultiEnd2)\n } else {\n this.state.buf += \"'\"\n return this.goto(this.parseLiteralMultiStringContent)\n }\n }\n parseLiteralMultiEnd2 () {\n if (this.char === CHAR_APOS) {\n return this.next(this.parseLiteralMultiEnd3)\n } else {\n this.state.buf += \"''\"\n return this.goto(this.parseLiteralMultiStringContent)\n }\n }\n parseLiteralMultiEnd3 () {\n if (this.char === CHAR_APOS) {\n this.state.buf += \"'\"\n return this.next(this.parseLiteralMultiEnd4)\n } else {\n return this.returnNow()\n }\n }\n parseLiteralMultiEnd4 () {\n if (this.char === CHAR_APOS) {\n this.state.buf += \"'\"\n return this.return()\n } else {\n return this.returnNow()\n }\n }\n\n /* STRINGS double quoted */\n parseDoubleString () {\n if (this.char === CHAR_QUOT) {\n return this.next(this.parseMultiStringMaybe)\n } else {\n return this.goto(this.parseBasicString)\n }\n }\n parseBasicString () {\n do {\n if (this.char === CHAR_BSOL) {\n return this.call(this.parseEscape, this.recordEscapeReplacement)\n } else if (this.char === CHAR_QUOT) {\n return this.return()\n } else if (this.atEndOfLine()) {\n throw this.error(new TomlError('Unterminated string'))\n } else if (this.char === CHAR_DEL || (this.char <= CTRL_CHAR_BOUNDARY && this.char !== CTRL_I)) {\n throw this.errorControlCharIn('strings')\n } else {\n this.consume()\n }\n } while (this.nextChar())\n }\n recordEscapeReplacement (replacement) {\n this.state.buf += replacement\n return this.goto(this.parseBasicString)\n }\n parseMultiStringMaybe () {\n if (this.char === CHAR_QUOT) {\n return this.next(this.parseMultiString)\n } else {\n return this.returnNow()\n }\n }\n parseMultiString () {\n if (this.char === CTRL_M) {\n return null\n } else if (this.char === CTRL_J) {\n return this.next(this.parseMultiStringContent)\n } else {\n return this.goto(this.parseMultiStringContent)\n }\n }\n parseMultiStringContent () {\n do {\n if (this.char === CHAR_BSOL) {\n return this.call(this.parseMultiEscape, this.recordMultiEscapeReplacement)\n } else if (this.char === CHAR_QUOT) {\n return this.next(this.parseMultiEnd)\n } else if (this.char === Parser.END) {\n throw this.error(new TomlError('Unterminated multi-line string'))\n } else if (this.char === CHAR_DEL || (this.char <= CTRL_CHAR_BOUNDARY && this.char !== CTRL_I && this.char !== CTRL_J && this.char !== CTRL_M)) {\n throw this.errorControlCharIn('strings')\n } else {\n this.consume()\n }\n } while (this.nextChar())\n }\n errorControlCharIn (type) {\n let displayCode = '\\\\u00'\n if (this.char < 16) {\n displayCode += '0'\n }\n displayCode += this.char.toString(16)\n\n return this.error(new TomlError(`Control characters (codes < 0x1f and 0x7f) are not allowed in ${type}, use ${displayCode} instead`))\n }\n recordMultiEscapeReplacement (replacement) {\n this.state.buf += replacement\n return this.goto(this.parseMultiStringContent)\n }\n parseMultiEnd () {\n if (this.char === CHAR_QUOT) {\n return this.next(this.parseMultiEnd2)\n } else {\n this.state.buf += '\"'\n return this.goto(this.parseMultiStringContent)\n }\n }\n parseMultiEnd2 () {\n if (this.char === CHAR_QUOT) {\n return this.next(this.parseMultiEnd3)\n } else {\n this.state.buf += '\"\"'\n return this.goto(this.parseMultiStringContent)\n }\n }\n parseMultiEnd3 () {\n if (this.char === CHAR_QUOT) {\n this.state.buf += '\"'\n return this.next(this.parseMultiEnd4)\n } else {\n return this.returnNow()\n }\n }\n parseMultiEnd4 () {\n if (this.char === CHAR_QUOT) {\n this.state.buf += '\"'\n return this.return()\n } else {\n return this.returnNow()\n }\n }\n parseMultiEscape () {\n if (this.char === CTRL_M || this.char === CTRL_J) {\n return this.next(this.parseMultiTrim)\n } else if (this.char === CHAR_SP || this.char === CTRL_I) {\n return this.next(this.parsePreMultiTrim)\n } else {\n return this.goto(this.parseEscape)\n }\n }\n parsePreMultiTrim () {\n if (this.char === CHAR_SP || this.char === CTRL_I) {\n return null\n } else if (this.char === CTRL_M || this.char === CTRL_J) {\n return this.next(this.parseMultiTrim)\n } else {\n throw this.error(new TomlError(\"Can't escape whitespace\"))\n }\n }\n parseMultiTrim () {\n // explicitly whitespace here, END should follow the same path as chars\n if (this.char === CTRL_J || this.char === CHAR_SP || this.char === CTRL_I || this.char === CTRL_M) {\n return null\n } else {\n return this.returnNow()\n }\n }\n parseEscape () {\n if (this.char in escapes) {\n return this.return(escapes[this.char])\n } else if (this.char === CHAR_u) {\n return this.call(this.parseSmallUnicode, this.parseUnicodeReturn)\n } else if (this.char === CHAR_U) {\n return this.call(this.parseLargeUnicode, this.parseUnicodeReturn)\n } else {\n throw this.error(new TomlError('Unknown escape character: ' + this.char))\n }\n }\n parseUnicodeReturn (char) {\n try {\n const codePoint = parseInt(char, 16)\n if (codePoint >= SURROGATE_FIRST && codePoint <= SURROGATE_LAST) {\n throw this.error(new TomlError('Invalid unicode, character in range 0xD800 - 0xDFFF is reserved'))\n }\n return this.returnNow(String.fromCodePoint(codePoint))\n } catch (err) {\n throw this.error(TomlError.wrap(err))\n }\n }\n parseSmallUnicode () {\n if (!isHexit(this.char)) {\n throw this.error(new TomlError('Invalid character in unicode sequence, expected hex'))\n } else {\n this.consume()\n if (this.state.buf.length >= 4) return this.return()\n }\n }\n parseLargeUnicode () {\n if (!isHexit(this.char)) {\n throw this.error(new TomlError('Invalid character in unicode sequence, expected hex'))\n } else {\n this.consume()\n if (this.state.buf.length >= 8) return this.return()\n }\n }\n\n /* NUMBERS */\n parseNumberSign () {\n this.consume()\n return this.next(this.parseMaybeSignedInfOrNan)\n }\n parseMaybeSignedInfOrNan () {\n if (this.char === CHAR_i) {\n return this.next(this.parseInf)\n } else if (this.char === CHAR_n) {\n return this.next(this.parseNan)\n } else {\n return this.callNow(this.parseNoUnder, this.parseNumberIntegerStart)\n }\n }\n parseNumberIntegerStart () {\n if (this.char === CHAR_0) {\n this.consume()\n return this.next(this.parseNumberIntegerExponentOrDecimal)\n } else {\n return this.goto(this.parseNumberInteger)\n }\n }\n parseNumberIntegerExponentOrDecimal () {\n if (this.char === CHAR_PERIOD) {\n this.consume()\n return this.call(this.parseNoUnder, this.parseNumberFloat)\n } else if (this.char === CHAR_E || this.char === CHAR_e) {\n this.consume()\n return this.next(this.parseNumberExponentSign)\n } else {\n return this.returnNow(Integer(this.state.buf))\n }\n }\n parseNumberInteger () {\n if (isDigit(this.char)) {\n this.consume()\n } else if (this.char === CHAR_LOWBAR) {\n return this.call(this.parseNoUnder)\n } else if (this.char === CHAR_E || this.char === CHAR_e) {\n this.consume()\n return this.next(this.parseNumberExponentSign)\n } else if (this.char === CHAR_PERIOD) {\n this.consume()\n return this.call(this.parseNoUnder, this.parseNumberFloat)\n } else {\n const result = Integer(this.state.buf)\n /* istanbul ignore if */\n if (result.isNaN()) {\n throw this.error(new TomlError('Invalid number'))\n } else {\n return this.returnNow(result)\n }\n }\n }\n parseNoUnder () {\n if (this.char === CHAR_LOWBAR || this.char === CHAR_PERIOD || this.char === CHAR_E || this.char === CHAR_e) {\n throw this.error(new TomlError('Unexpected character, expected digit'))\n } else if (this.atEndOfWord()) {\n throw this.error(new TomlError('Incomplete number'))\n }\n return this.returnNow()\n }\n parseNoUnderHexOctBinLiteral () {\n if (this.char === CHAR_LOWBAR || this.char === CHAR_PERIOD) {\n throw this.error(new TomlError('Unexpected character, expected digit'))\n } else if (this.atEndOfWord()) {\n throw this.error(new TomlError('Incomplete number'))\n }\n return this.returnNow()\n }\n parseNumberFloat () {\n if (this.char === CHAR_LOWBAR) {\n return this.call(this.parseNoUnder, this.parseNumberFloat)\n } else if (isDigit(this.char)) {\n this.consume()\n } else if (this.char === CHAR_E || this.char === CHAR_e) {\n this.consume()\n return this.next(this.parseNumberExponentSign)\n } else {\n return this.returnNow(Float(this.state.buf))\n }\n }\n parseNumberExponentSign () {\n if (isDigit(this.char)) {\n return this.goto(this.parseNumberExponent)\n } else if (this.char === CHAR_HYPHEN || this.char === CHAR_PLUS) {\n this.consume()\n this.call(this.parseNoUnder, this.parseNumberExponent)\n } else {\n throw this.error(new TomlError('Unexpected character, expected -, + or digit'))\n }\n }\n parseNumberExponent () {\n if (isDigit(this.char)) {\n this.consume()\n } else if (this.char === CHAR_LOWBAR) {\n return this.call(this.parseNoUnder)\n } else {\n return this.returnNow(Float(this.state.buf))\n }\n }\n\n /* NUMBERS or DATETIMES */\n parseNumberOrDateTime () {\n if (this.char === CHAR_0) {\n this.consume()\n return this.next(this.parseNumberBaseOrDateTime)\n } else {\n return this.goto(this.parseNumberOrDateTimeOnly)\n }\n }\n parseNumberOrDateTimeOnly () {\n // note, if two zeros are in a row then it MUST be a date\n if (this.char === CHAR_LOWBAR) {\n return this.call(this.parseNoUnder, this.parseNumberInteger)\n } else if (isDigit(this.char)) {\n this.consume()\n if (this.state.buf.length > 4) this.next(this.parseNumberInteger)\n } else if (this.char === CHAR_E || this.char === CHAR_e) {\n this.consume()\n return this.next(this.parseNumberExponentSign)\n } else if (this.char === CHAR_PERIOD) {\n this.consume()\n return this.call(this.parseNoUnder, this.parseNumberFloat)\n } else if (this.char === CHAR_HYPHEN) {\n return this.goto(this.parseDateTime)\n } else if (this.char === CHAR_COLON) {\n return this.goto(this.parseOnlyTimeHour)\n } else {\n return this.returnNow(Integer(this.state.buf))\n }\n }\n parseDateTimeOnly () {\n if (this.state.buf.length < 4) {\n if (isDigit(this.char)) {\n return this.consume()\n } else if (this.char === CHAR_COLON) {\n return this.goto(this.parseOnlyTimeHour)\n } else {\n throw this.error(new TomlError('Expected digit while parsing year part of a date'))\n }\n } else {\n if (this.char === CHAR_HYPHEN) {\n return this.goto(this.parseDateTime)\n } else {\n throw this.error(new TomlError('Expected hyphen (-) while parsing year part of date'))\n }\n }\n }\n parseNumberBaseOrDateTime () {\n if (this.char === CHAR_b) {\n this.consume()\n return this.call(this.parseNoUnderHexOctBinLiteral, this.parseIntegerBin)\n } else if (this.char === CHAR_o) {\n this.consume()\n return this.call(this.parseNoUnderHexOctBinLiteral, this.parseIntegerOct)\n } else if (this.char === CHAR_x) {\n this.consume()\n return this.call(this.parseNoUnderHexOctBinLiteral, this.parseIntegerHex)\n } else if (this.char === CHAR_PERIOD) {\n return this.goto(this.parseNumberInteger)\n } else if (isDigit(this.char)) {\n return this.goto(this.parseDateTimeOnly)\n } else {\n return this.returnNow(Integer(this.state.buf))\n }\n }\n parseIntegerHex () {\n if (isHexit(this.char)) {\n this.consume()\n } else if (this.char === CHAR_LOWBAR) {\n return this.call(this.parseNoUnderHexOctBinLiteral)\n } else {\n const result = Integer(this.state.buf)\n /* istanbul ignore if */\n if (result.isNaN()) {\n throw this.error(new TomlError('Invalid number'))\n } else {\n return this.returnNow(result)\n }\n }\n }\n parseIntegerOct () {\n if (isOctit(this.char)) {\n this.consume()\n } else if (this.char === CHAR_LOWBAR) {\n return this.call(this.parseNoUnderHexOctBinLiteral)\n } else {\n const result = Integer(this.state.buf)\n /* istanbul ignore if */\n if (result.isNaN()) {\n throw this.error(new TomlError('Invalid number'))\n } else {\n return this.returnNow(result)\n }\n }\n }\n parseIntegerBin () {\n if (isBit(this.char)) {\n this.consume()\n } else if (this.char === CHAR_LOWBAR) {\n return this.call(this.parseNoUnderHexOctBinLiteral)\n } else {\n const result = Integer(this.state.buf)\n /* istanbul ignore if */\n if (result.isNaN()) {\n throw this.error(new TomlError('Invalid number'))\n } else {\n return this.returnNow(result)\n }\n }\n }\n\n /* DATETIME */\n parseDateTime () {\n // we enter here having just consumed the year and about to consume the hyphen\n if (this.state.buf.length < 4) {\n throw this.error(new TomlError('Years less than 1000 must be zero padded to four characters'))\n }\n this.state.result = this.state.buf\n this.state.buf = ''\n return this.next(this.parseDateMonth)\n }\n parseDateMonth () {\n if (this.char === CHAR_HYPHEN) {\n if (this.state.buf.length < 2) {\n throw this.error(new TomlError('Months less than 10 must be zero padded to two characters'))\n }\n this.state.result += '-' + this.state.buf\n this.state.buf = ''\n return this.next(this.parseDateDay)\n } else if (isDigit(this.char)) {\n this.consume()\n } else {\n throw this.error(new TomlError('Incomplete datetime'))\n }\n }\n parseDateDay () {\n if (this.char === CHAR_T || this.char === CHAR_SP) {\n if (this.state.buf.length < 2) {\n throw this.error(new TomlError('Days less than 10 must be zero padded to two characters'))\n }\n this.state.result += '-' + this.state.buf\n this.state.buf = ''\n return this.next(this.parseStartTimeHour)\n } else if (this.atEndOfWord()) {\n return this.returnNow(createDate(this.state.result + '-' + this.state.buf))\n } else if (isDigit(this.char)) {\n this.consume()\n } else {\n throw this.error(new TomlError('Incomplete datetime'))\n }\n }\n parseStartTimeHour () {\n if (this.atEndOfWord()) {\n return this.returnNow(createDate(this.state.result))\n } else {\n return this.goto(this.parseTimeHour)\n }\n }\n parseTimeHour () {\n if (this.char === CHAR_COLON) {\n if (this.state.buf.length < 2) {\n throw this.error(new TomlError('Hours less than 10 must be zero padded to two characters'))\n }\n this.state.result += 'T' + this.state.buf\n this.state.buf = ''\n return this.next(this.parseTimeMin)\n } else if (isDigit(this.char)) {\n this.consume()\n } else {\n throw this.error(new TomlError('Incomplete datetime'))\n }\n }\n parseTimeMin () {\n if (this.state.buf.length < 2 && isDigit(this.char)) {\n this.consume()\n } else if (this.state.buf.length === 2 && this.char === CHAR_COLON) {\n this.state.result += ':' + this.state.buf\n this.state.buf = ''\n return this.next(this.parseTimeSec)\n } else {\n throw this.error(new TomlError('Incomplete datetime'))\n }\n }\n parseTimeSec () {\n if (isDigit(this.char)) {\n this.consume()\n if (this.state.buf.length === 2) {\n this.state.result += ':' + this.state.buf\n this.state.buf = ''\n return this.next(this.parseTimeZoneOrFraction)\n }\n } else {\n throw this.error(new TomlError('Incomplete datetime'))\n }\n }\n\n parseOnlyTimeHour () {\n /* istanbul ignore else */\n if (this.char === CHAR_COLON) {\n if (this.state.buf.length < 2) {\n throw this.error(new TomlError('Hours less than 10 must be zero padded to two characters'))\n }\n this.state.result = this.state.buf\n this.state.buf = ''\n return this.next(this.parseOnlyTimeMin)\n } else {\n throw this.error(new TomlError('Incomplete time'))\n }\n }\n parseOnlyTimeMin () {\n if (this.state.buf.length < 2 && isDigit(this.char)) {\n this.consume()\n } else if (this.state.buf.length === 2 && this.char === CHAR_COLON) {\n this.state.result += ':' + this.state.buf\n this.state.buf = ''\n return this.next(this.parseOnlyTimeSec)\n } else {\n throw this.error(new TomlError('Incomplete time'))\n }\n }\n parseOnlyTimeSec () {\n if (isDigit(this.char)) {\n this.consume()\n if (this.state.buf.length === 2) {\n return this.next(this.parseOnlyTimeFractionMaybe)\n }\n } else {\n throw this.error(new TomlError('Incomplete time'))\n }\n }\n parseOnlyTimeFractionMaybe () {\n this.state.result += ':' + this.state.buf\n if (this.char === CHAR_PERIOD) {\n this.state.buf = ''\n this.next(this.parseOnlyTimeFraction)\n } else {\n return this.return(createTime(this.state.result))\n }\n }\n parseOnlyTimeFraction () {\n if (isDigit(this.char)) {\n this.consume()\n } else if (this.atEndOfWord()) {\n if (this.state.buf.length === 0) throw this.error(new TomlError('Expected digit in milliseconds'))\n return this.returnNow(createTime(this.state.result + '.' + this.state.buf))\n } else {\n throw this.error(new TomlError('Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z'))\n }\n }\n\n parseTimeZoneOrFraction () {\n if (this.char === CHAR_PERIOD) {\n this.consume()\n this.next(this.parseDateTimeFraction)\n } else if (this.char === CHAR_HYPHEN || this.char === CHAR_PLUS) {\n this.consume()\n this.next(this.parseTimeZoneHour)\n } else if (this.char === CHAR_Z) {\n this.consume()\n return this.return(createDateTime(this.state.result + this.state.buf))\n } else if (this.atEndOfWord()) {\n return this.returnNow(createDateTimeFloat(this.state.result + this.state.buf))\n } else {\n throw this.error(new TomlError('Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z'))\n }\n }\n parseDateTimeFraction () {\n if (isDigit(this.char)) {\n this.consume()\n } else if (this.state.buf.length === 1) {\n throw this.error(new TomlError('Expected digit in milliseconds'))\n } else if (this.char === CHAR_HYPHEN || this.char === CHAR_PLUS) {\n this.consume()\n this.next(this.parseTimeZoneHour)\n } else if (this.char === CHAR_Z) {\n this.consume()\n return this.return(createDateTime(this.state.result + this.state.buf))\n } else if (this.atEndOfWord()) {\n return this.returnNow(createDateTimeFloat(this.state.result + this.state.buf))\n } else {\n throw this.error(new TomlError('Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z'))\n }\n }\n parseTimeZoneHour () {\n if (isDigit(this.char)) {\n this.consume()\n // FIXME: No more regexps\n if (/\\d\\d$/.test(this.state.buf)) return this.next(this.parseTimeZoneSep)\n } else {\n throw this.error(new TomlError('Unexpected character in datetime, expected digit'))\n }\n }\n parseTimeZoneSep () {\n if (this.char === CHAR_COLON) {\n this.consume()\n this.next(this.parseTimeZoneMin)\n } else {\n throw this.error(new TomlError('Unexpected character in datetime, expected colon'))\n }\n }\n parseTimeZoneMin () {\n if (isDigit(this.char)) {\n this.consume()\n if (/\\d\\d$/.test(this.state.buf)) return this.return(createDateTime(this.state.result + this.state.buf))\n } else {\n throw this.error(new TomlError('Unexpected character in datetime, expected digit'))\n }\n }\n\n /* BOOLEAN */\n parseBoolean () {\n /* istanbul ignore else */\n if (this.char === CHAR_t) {\n this.consume()\n return this.next(this.parseTrue_r)\n } else if (this.char === CHAR_f) {\n this.consume()\n return this.next(this.parseFalse_a)\n }\n }\n parseTrue_r () {\n if (this.char === CHAR_r) {\n this.consume()\n return this.next(this.parseTrue_u)\n } else {\n throw this.error(new TomlError('Invalid boolean, expected true or false'))\n }\n }\n parseTrue_u () {\n if (this.char === CHAR_u) {\n this.consume()\n return this.next(this.parseTrue_e)\n } else {\n throw this.error(new TomlError('Invalid boolean, expected true or false'))\n }\n }\n parseTrue_e () {\n if (this.char === CHAR_e) {\n return this.return(true)\n } else {\n throw this.error(new TomlError('Invalid boolean, expected true or false'))\n }\n }\n\n parseFalse_a () {\n if (this.char === CHAR_a) {\n this.consume()\n return this.next(this.parseFalse_l)\n } else {\n throw this.error(new TomlError('Invalid boolean, expected true or false'))\n }\n }\n\n parseFalse_l () {\n if (this.char === CHAR_l) {\n this.consume()\n return this.next(this.parseFalse_s)\n } else {\n throw this.error(new TomlError('Invalid boolean, expected true or false'))\n }\n }\n\n parseFalse_s () {\n if (this.char === CHAR_s) {\n this.consume()\n return this.next(this.parseFalse_e)\n } else {\n throw this.error(new TomlError('Invalid boolean, expected true or false'))\n }\n }\n\n parseFalse_e () {\n if (this.char === CHAR_e) {\n return this.return(false)\n } else {\n throw this.error(new TomlError('Invalid boolean, expected true or false'))\n }\n }\n\n /* INLINE LISTS */\n parseInlineList () {\n if (this.char === CHAR_SP || this.char === CTRL_I || this.char === CTRL_M || this.char === CTRL_J) {\n return null\n } else if (this.char === Parser.END) {\n throw this.error(new TomlError('Unterminated inline array'))\n } else if (this.char === CHAR_NUM) {\n return this.call(this.parseComment)\n } else if (this.char === CHAR_RSQB) {\n return this.return(this.state.resultArr || InlineList())\n } else {\n return this.callNow(this.parseValue, this.recordInlineListValue)\n }\n }\n recordInlineListValue (value) {\n if (!this.state.resultArr) {\n this.state.resultArr = InlineList(tomlType(value))\n }\n if (isFloat(value) || isInteger(value)) {\n // unbox now that we've verified they're ok\n this.state.resultArr.push(value.valueOf())\n } else {\n this.state.resultArr.push(value)\n }\n return this.goto(this.parseInlineListNext)\n }\n parseInlineListNext () {\n if (this.char === CHAR_SP || this.char === CTRL_I || this.char === CTRL_M || this.char === CTRL_J) {\n return null\n } else if (this.char === CHAR_NUM) {\n return this.call(this.parseComment)\n } else if (this.char === CHAR_COMMA) {\n return this.next(this.parseInlineList)\n } else if (this.char === CHAR_RSQB) {\n return this.goto(this.parseInlineList)\n } else {\n throw this.error(new TomlError('Invalid character, expected whitespace, comma (,) or close bracket (])'))\n }\n }\n\n /* INLINE TABLE */\n parseInlineTable () {\n if (this.char === CHAR_SP || this.char === CTRL_I) {\n return null\n } else if (this.char === Parser.END || this.char === CHAR_NUM || this.char === CTRL_J || this.char === CTRL_M) {\n throw this.error(new TomlError('Unterminated inline array'))\n } else if (this.char === CHAR_RCUB) {\n return this.return(this.state.resultTable || InlineTable())\n } else {\n if (!this.state.resultTable) this.state.resultTable = InlineTable()\n return this.callNow(this.parseAssign, this.recordInlineTableValue)\n }\n }\n recordInlineTableValue (kv) {\n let target = this.state.resultTable\n let finalKey = kv.key.pop()\n for (let kw of kv.key) {\n if (hasKey(target, kw) && (!isTable(target[kw]) || target[kw][_declared])) {\n throw this.error(new TomlError(\"Can't redefine existing key\"))\n }\n target = target[kw] = target[kw] || Table()\n }\n if (hasKey(target, finalKey)) {\n throw this.error(new TomlError(\"Can't redefine existing key\"))\n }\n if (isInteger(kv.value) || isFloat(kv.value)) {\n target[finalKey] = kv.value.valueOf()\n } else {\n target[finalKey] = kv.value\n }\n return this.goto(this.parseInlineTableNext)\n }\n parseInlineTableNext () {\n if (this.char === CHAR_SP || this.char === CTRL_I) {\n return null\n } else if (this.char === Parser.END || this.char === CHAR_NUM || this.char === CTRL_J || this.char === CTRL_M) {\n throw this.error(new TomlError('Unterminated inline array'))\n } else if (this.char === CHAR_COMMA) {\n return this.next(this.parseInlineTablePostComma)\n } else if (this.char === CHAR_RCUB) {\n return this.goto(this.parseInlineTable)\n } else {\n throw this.error(new TomlError('Invalid character, expected whitespace, comma (,) or close bracket (])'))\n }\n }\n parseInlineTablePostComma () {\n if (this.char === CHAR_SP || this.char === CTRL_I) {\n return null\n } else if (this.char === Parser.END || this.char === CHAR_NUM || this.char === CTRL_J || this.char === CTRL_M) {\n throw this.error(new TomlError('Unterminated inline array'))\n } else if (this.char === CHAR_COMMA) {\n throw this.error(new TomlError('Empty elements in inline tables are not permitted'))\n } else if (this.char === CHAR_RCUB) {\n throw this.error(new TomlError('Trailing commas in inline tables are not permitted'))\n } else {\n return this.goto(this.parseInlineTable)\n }\n }\n }\n return TOMLParser\n}\n","'use strict'\nmodule.exports = prettyError\n\nfunction prettyError (err, buf) {\n /* istanbul ignore if */\n if (err.pos == null || err.line == null) return err\n let msg = err.message\n msg += ` at row ${err.line + 1}, col ${err.col + 1}, pos ${err.pos}:\\n`\n\n /* istanbul ignore else */\n if (buf && buf.split) {\n const lines = buf.split(/\\n/)\n const lineNumWidth = String(Math.min(lines.length, err.line + 3)).length\n let linePadding = ' '\n while (linePadding.length < lineNumWidth) linePadding += ' '\n for (let ii = Math.max(0, err.line - 1); ii < Math.min(lines.length, err.line + 2); ++ii) {\n let lineNum = String(ii + 1)\n if (lineNum.length < lineNumWidth) lineNum = ' ' + lineNum\n if (err.line === ii) {\n msg += lineNum + '> ' + lines[ii] + '\\n'\n msg += linePadding + ' '\n for (let hh = 0; hh < err.col; ++hh) {\n msg += ' '\n }\n msg += '^\\n'\n } else {\n msg += lineNum + ': ' + lines[ii] + '\\n'\n }\n }\n }\n err.message = msg + '\\n'\n return err\n}\n","'use strict'\nmodule.exports = parseString\n\nconst TOMLParser = require('./lib/toml-parser.js')\nconst prettyError = require('./parse-pretty-error.js')\n\nfunction parseString (str) {\n if (global.Buffer && global.Buffer.isBuffer(str)) {\n str = str.toString('utf8')\n }\n const parser = new TOMLParser()\n try {\n parser.parse(str)\n return parser.finish()\n } catch (err) {\n throw prettyError(err, str)\n }\n}\n","'use strict'\nmodule.exports = parseAsync\n\nconst TOMLParser = require('./lib/toml-parser.js')\nconst prettyError = require('./parse-pretty-error.js')\n\nfunction parseAsync (str, opts) {\n if (!opts) opts = {}\n const index = 0\n const blocksize = opts.blocksize || 40960\n const parser = new TOMLParser()\n return new Promise((resolve, reject) => {\n setImmediate(parseAsyncNext, index, blocksize, resolve, reject)\n })\n function parseAsyncNext (index, blocksize, resolve, reject) {\n if (index >= str.length) {\n try {\n return resolve(parser.finish())\n } catch (err) {\n return reject(prettyError(err, str))\n }\n }\n try {\n parser.parse(str.slice(index, index + blocksize))\n setImmediate(parseAsyncNext, index + blocksize, blocksize, resolve, reject)\n } catch (err) {\n reject(prettyError(err, str))\n }\n }\n}\n","'use strict'\nmodule.exports = parseStream\n\nconst stream = require('stream')\nconst TOMLParser = require('./lib/toml-parser.js')\n\nfunction parseStream (stm) {\n if (stm) {\n return parseReadable(stm)\n } else {\n return parseTransform(stm)\n }\n}\n\nfunction parseReadable (stm) {\n const parser = new TOMLParser()\n stm.setEncoding('utf8')\n return new Promise((resolve, reject) => {\n let readable\n let ended = false\n let errored = false\n function finish () {\n ended = true\n if (readable) return\n try {\n resolve(parser.finish())\n } catch (err) {\n reject(err)\n }\n }\n function error (err) {\n errored = true\n reject(err)\n }\n stm.once('end', finish)\n stm.once('error', error)\n readNext()\n\n function readNext () {\n readable = true\n let data\n while ((data = stm.read()) !== null) {\n try {\n parser.parse(data)\n } catch (err) {\n return error(err)\n }\n }\n readable = false\n /* istanbul ignore if */\n if (ended) return finish()\n /* istanbul ignore if */\n if (errored) return\n stm.once('readable', readNext)\n }\n })\n}\n\nfunction parseTransform () {\n const parser = new TOMLParser()\n return new stream.Transform({\n objectMode: true,\n transform (chunk, encoding, cb) {\n try {\n parser.parse(chunk.toString(encoding))\n } catch (err) {\n this.emit('error', err)\n }\n cb()\n },\n flush (cb) {\n try {\n this.push(parser.finish())\n } catch (err) {\n this.emit('error', err)\n }\n cb()\n }\n })\n}\n","'use strict'\nmodule.exports = require('./parse-string.js')\nmodule.exports.async = require('./parse-async.js')\nmodule.exports.stream = require('./parse-stream.js')\nmodule.exports.prettyError = require('./parse-pretty-error.js')\n","'use strict'\nmodule.exports = stringify\nmodule.exports.value = stringifyInline\n\nfunction stringify (obj) {\n if (obj === null) throw typeError('null')\n if (obj === void (0)) throw typeError('undefined')\n if (typeof obj !== 'object') throw typeError(typeof obj)\n\n if (typeof obj.toJSON === 'function') obj = obj.toJSON()\n if (obj == null) return null\n const type = tomlType(obj)\n if (type !== 'table') throw typeError(type)\n return stringifyObject('', '', obj)\n}\n\nfunction typeError (type) {\n return new Error('Can only stringify objects, not ' + type)\n}\n\nfunction getInlineKeys (obj) {\n return Object.keys(obj).filter(key => isInline(obj[key]))\n}\nfunction getComplexKeys (obj) {\n return Object.keys(obj).filter(key => !isInline(obj[key]))\n}\n\nfunction toJSON (obj) {\n let nobj = Array.isArray(obj) ? [] : Object.prototype.hasOwnProperty.call(obj, '__proto__') ? {['__proto__']: undefined} : {}\n for (let prop of Object.keys(obj)) {\n if (obj[prop] && typeof obj[prop].toJSON === 'function' && !('toISOString' in obj[prop])) {\n nobj[prop] = obj[prop].toJSON()\n } else {\n nobj[prop] = obj[prop]\n }\n }\n return nobj\n}\n\nfunction stringifyObject (prefix, indent, obj) {\n obj = toJSON(obj)\n let inlineKeys\n let complexKeys\n inlineKeys = getInlineKeys(obj)\n complexKeys = getComplexKeys(obj)\n const result = []\n const inlineIndent = indent || ''\n inlineKeys.forEach(key => {\n var type = tomlType(obj[key])\n if (type !== 'undefined' && type !== 'null') {\n result.push(inlineIndent + stringifyKey(key) + ' = ' + stringifyAnyInline(obj[key], true))\n }\n })\n if (result.length > 0) result.push('')\n const complexIndent = prefix && inlineKeys.length > 0 ? indent + ' ' : ''\n complexKeys.forEach(key => {\n result.push(stringifyComplex(prefix, complexIndent, key, obj[key]))\n })\n return result.join('\\n')\n}\n\nfunction isInline (value) {\n switch (tomlType(value)) {\n case 'undefined':\n case 'null':\n case 'integer':\n case 'nan':\n case 'float':\n case 'boolean':\n case 'string':\n case 'datetime':\n return true\n case 'array':\n return value.length === 0 || tomlType(value[0]) !== 'table'\n case 'table':\n return Object.keys(value).length === 0\n /* istanbul ignore next */\n default:\n return false\n }\n}\n\nfunction tomlType (value) {\n if (value === undefined) {\n return 'undefined'\n } else if (value === null) {\n return 'null'\n /* eslint-disable valid-typeof */\n } else if (typeof value === 'bigint' || (Number.isInteger(value) && !Object.is(value, -0))) {\n return 'integer'\n } else if (typeof value === 'number') {\n return 'float'\n } else if (typeof value === 'boolean') {\n return 'boolean'\n } else if (typeof value === 'string') {\n return 'string'\n } else if ('toISOString' in value) {\n return isNaN(value) ? 'undefined' : 'datetime'\n } else if (Array.isArray(value)) {\n return 'array'\n } else {\n return 'table'\n }\n}\n\nfunction stringifyKey (key) {\n const keyStr = String(key)\n if (/^[-A-Za-z0-9_]+$/.test(keyStr)) {\n return keyStr\n } else {\n return stringifyBasicString(keyStr)\n }\n}\n\nfunction stringifyBasicString (str) {\n return '\"' + escapeString(str).replace(/\"/g, '\\\\\"') + '\"'\n}\n\nfunction stringifyLiteralString (str) {\n return \"'\" + str + \"'\"\n}\n\nfunction numpad (num, str) {\n while (str.length < num) str = '0' + str\n return str\n}\n\nfunction escapeString (str) {\n return str.replace(/\\\\/g, '\\\\\\\\')\n .replace(/[\\b]/g, '\\\\b')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\f/g, '\\\\f')\n .replace(/\\r/g, '\\\\r')\n /* eslint-disable no-control-regex */\n .replace(/([\\u0000-\\u001f\\u007f])/, c => '\\\\u' + numpad(4, c.codePointAt(0).toString(16)))\n /* eslint-enable no-control-regex */\n}\n\nfunction stringifyMultilineString (str) {\n let escaped = str.split(/\\n/).map(str => {\n return escapeString(str).replace(/\"(?=\"\")/g, '\\\\\"')\n }).join('\\n')\n if (escaped.slice(-1) === '\"') escaped += '\\\\\\n'\n return '\"\"\"\\n' + escaped + '\"\"\"'\n}\n\nfunction stringifyAnyInline (value, multilineOk) {\n let type = tomlType(value)\n if (type === 'string') {\n if (multilineOk && /\\n/.test(value)) {\n type = 'string-multiline'\n } else if (!/[\\b\\t\\n\\f\\r']/.test(value) && /\"/.test(value)) {\n type = 'string-literal'\n }\n }\n return stringifyInline(value, type)\n}\n\nfunction stringifyInline (value, type) {\n /* istanbul ignore if */\n if (!type) type = tomlType(value)\n switch (type) {\n case 'string-multiline':\n return stringifyMultilineString(value)\n case 'string':\n return stringifyBasicString(value)\n case 'string-literal':\n return stringifyLiteralString(value)\n case 'integer':\n return stringifyInteger(value)\n case 'float':\n return stringifyFloat(value)\n case 'boolean':\n return stringifyBoolean(value)\n case 'datetime':\n return stringifyDatetime(value)\n case 'array':\n return stringifyInlineArray(value.filter(_ => tomlType(_) !== 'null' && tomlType(_) !== 'undefined' && tomlType(_) !== 'nan'))\n case 'table':\n return stringifyInlineTable(value)\n /* istanbul ignore next */\n default:\n throw typeError(type)\n }\n}\n\nfunction stringifyInteger (value) {\n /* eslint-disable security/detect-unsafe-regex */\n return String(value).replace(/\\B(?=(\\d{3})+(?!\\d))/g, '_')\n}\n\nfunction stringifyFloat (value) {\n if (value === Infinity) {\n return 'inf'\n } else if (value === -Infinity) {\n return '-inf'\n } else if (Object.is(value, NaN)) {\n return 'nan'\n } else if (Object.is(value, -0)) {\n return '-0.0'\n }\n const [int, dec] = String(value).split('.')\n return stringifyInteger(int) + '.' + dec\n}\n\nfunction stringifyBoolean (value) {\n return String(value)\n}\n\nfunction stringifyDatetime (value) {\n return value.toISOString()\n}\n\nfunction stringifyInlineArray (values) {\n values = toJSON(values)\n let result = '['\n const stringified = values.map(_ => stringifyInline(_))\n if (stringified.join(', ').length > 60 || /\\n/.test(stringified)) {\n result += '\\n ' + stringified.join(',\\n ') + '\\n'\n } else {\n result += ' ' + stringified.join(', ') + (stringified.length > 0 ? ' ' : '')\n }\n return result + ']'\n}\n\nfunction stringifyInlineTable (value) {\n value = toJSON(value)\n const result = []\n Object.keys(value).forEach(key => {\n result.push(stringifyKey(key) + ' = ' + stringifyAnyInline(value[key], false))\n })\n return '{ ' + result.join(', ') + (result.length > 0 ? ' ' : '') + '}'\n}\n\nfunction stringifyComplex (prefix, indent, key, value) {\n const valueType = tomlType(value)\n /* istanbul ignore else */\n if (valueType === 'array') {\n return stringifyArrayOfTables(prefix, indent, key, value)\n } else if (valueType === 'table') {\n return stringifyComplexTable(prefix, indent, key, value)\n } else {\n throw typeError(valueType)\n }\n}\n\nfunction stringifyArrayOfTables (prefix, indent, key, values) {\n values = toJSON(values)\n const firstValueType = tomlType(values[0])\n /* istanbul ignore if */\n if (firstValueType !== 'table') throw typeError(firstValueType)\n const fullKey = prefix + stringifyKey(key)\n let result = ''\n values.forEach(table => {\n if (result.length > 0) result += '\\n'\n result += indent + '[[' + fullKey + ']]\\n'\n result += stringifyObject(fullKey + '.', indent, table)\n })\n return result\n}\n\nfunction stringifyComplexTable (prefix, indent, key, value) {\n const fullKey = prefix + stringifyKey(key)\n let result = ''\n if (getInlineKeys(value).length > 0) {\n result += indent + '[' + fullKey + ']\\n'\n }\n return result + stringifyObject(fullKey + '.', indent, value)\n}\n","'use strict'\nexports.parse = require('./parse.js')\nexports.stringify = require('./stringify.js')\n","/**\n * Rust Language Plugin\n *\n * Detects Rust projects via Cargo.toml with hardware-aware heuristics.\n */\n\nimport { parse } from '@iarna/toml';\nimport type { ProjectMetadata, TemplateDefinition } from '../../types';\nimport { BasePlugin } from '../base/BasePlugin';\n\ntype CargoDependency = string | number | boolean | Record<string, unknown>;\ntype DependencySection = Record<string, CargoDependency>;\ninterface CargoTargetSection {\n dependencies?: DependencySection;\n ['dev-dependencies']?: DependencySection;\n ['build-dependencies']?: DependencySection;\n}\ninterface CargoManifest {\n package?: {\n name?: string;\n description?: string;\n keywords?: string[];\n categories?: string[];\n };\n dependencies?: DependencySection;\n ['dev-dependencies']?: DependencySection;\n ['build-dependencies']?: DependencySection;\n workspace?: {\n members?: string[];\n dependencies?: DependencySection;\n };\n target?: Record<string, CargoTargetSection>;\n}\n\nexport class RustPlugin extends BasePlugin {\n name = 'rust';\n displayName = 'Rust';\n version = '3.1.0';\n priority = 80;\n\n private static readonly EMBEDDED_DEPENDENCIES = new Set(\n [\n 'hardware2rust',\n 'embedded-hal',\n 'embedded-hal-async',\n 'cortex-m',\n 'cortex-m-rt',\n 'cortex-m-rtic',\n 'rtic',\n 'nrf52840-hal',\n 'atsamd-hal',\n 'stm32f4xx-hal',\n 'stm32h7xx-hal',\n 'esp-idf-hal',\n 'esp-hal',\n 'rp2040-hal',\n 'probe-run',\n 'probe-rs',\n 'defmt',\n 'heapless',\n 'microbit',\n 'drone-core',\n ].map((name) => name.toLowerCase()),\n );\n\n private static readonly EMBEDDED_KEYWORDS = new Set([\n 'embedded',\n 'hardware',\n 'no_std',\n 'nostd',\n 'microcontroller',\n 'firmware',\n 'hal',\n 'baremetal',\n 'bare-metal',\n ]);\n\n private static readonly HARDWARE_NAME_HINTS = [\n 'hardware',\n 'hardware2rust',\n 'embedded',\n ];\n private static readonly CARGO_CONFIG_FILES = [\n '.cargo/config',\n '.cargo/config.toml',\n ];\n private static readonly MEMORY_LAYOUT_FILES = ['memory.x', 'memory.x.in'];\n\n async detect(projectPath: string): Promise<ProjectMetadata | null> {\n if (!this.fileExists(projectPath, 'Cargo.toml')) {\n return null;\n }\n\n const content = this.readFile(projectPath, 'Cargo.toml');\n if (!content) {\n return {\n language: 'Rust',\n name: this.getProjectName(projectPath),\n dependencies: {},\n manifestFile: 'Cargo.toml',\n projectPath,\n tags: ['lang-rust'],\n };\n }\n\n const manifest = this.parseManifest(content);\n const dependencies = manifest\n ? this.extractDependenciesFromManifest(manifest)\n : this.extractDependenciesFromText(content);\n const workspaceMembers = this.extractWorkspaceMembers(manifest, content);\n const tags = await this.computeProjectTags(\n projectPath,\n dependencies,\n manifest,\n content,\n );\n\n const metadata: ProjectMetadata = {\n language: 'Rust',\n name:\n manifest?.package?.name ||\n this.extractNameFromContent(content) ||\n this.getProjectName(projectPath),\n description:\n manifest?.package?.description ||\n this.extractDescriptionFromContent(content),\n dependencies,\n manifestFile: 'Cargo.toml',\n projectPath,\n workspaceMembers:\n workspaceMembers.length > 0 ? workspaceMembers : undefined,\n tags: tags.length > 0 ? tags : undefined,\n keywords: manifest?.package?.keywords,\n categories: manifest?.package?.categories,\n };\n\n return metadata;\n }\n\n getTemplates(): TemplateDefinition[] {\n return [\n {\n name: 'rust-core',\n tags: ['lang-rust'],\n content: `# Rust Development Guidelines\n\nThis project uses Rust.\n\n## Project Structure\n- Follow Cargo conventions\n- Organize code with modules and crates\n- Prefer workspace members for shared libraries\n\n## Tooling\n- Run \\`cargo fmt\\` and \\`cargo clippy\\` before committing\n- Enable \\`deny(warnings)\\` in CI for regression catch\n- Keep the MSRV documented in README or \\`rust-toolchain.toml\\`\n\n## Safety & Ownership\n- Embrace ownership and borrowing to prevent data races\n- Minimize \\`unsafe\\` blocks and document why they're required\n- Handle \\`Result\\`/\\`Option\\` exhaustively with meaningful errors\n\n## Testing\n- Cover critical code paths with unit tests in-module\n- Add integration tests under \\`tests/\\`\n- Use property tests or fuzzing for complex parsing logic\n\n## Dependencies\n- Keep Cargo.lock committed for binaries\n- Audit crates with \\`cargo audit\\`\n- Prefer feature flags over forked crates when possible`,\n },\n {\n name: 'rust-embedded-core',\n tags: ['rust-embedded'],\n content: `# Embedded & Hardware Rust Guidelines\n\nThis project targets hardware/embedded environments.\n\n## Build & Profiles\n- Define \\`[profile.dev]\\` / \\`[profile.release]\\` tweaks for probe-run\n- Track linker scripts such as \\`memory.x\\` inside version control\n- Pin the toolchain with \\`rust-toolchain.toml\\` to keep firmware reproducible\n\n## Runtime Constraints\n- Prefer \\`#![no_std]\\` libraries and audit for heap allocations\n- Use \\`heapless\\` or ring buffers instead of Vec when RAM is limited\n- Tune interrupt priorities and minimize busy waits\n\n## HAL & Drivers\n- Adhere to \\`embedded-hal\\` traits for portability\n- Isolate board support packages under \\`boards/<target>\\`\n- Document pin mappings and peripheral ownership\n\n## Observability\n- Route logs through \\`defmt\\` or RTT instead of printf polling\n- Keep probe-run + probe-rs configs under \\`.cargo/config.toml\\`\n- Include instructions for flashing + debugging (UF2, JLink, etc.)\n\n## Testing on Hardware\n- Maintain hardware-in-the-loop smoke tests\n- Provide mocks for driver crates to unblock CI\n- Capture oscilloscope/logic-analyzer traces for tricky regressions`,\n },\n {\n name: 'hardware2rust-profile',\n tags: ['hardware2rust'],\n content: `# hardware2rust Project Notes\n\nThese guidelines focus on packages aligned with the hardware2rust stack.\n\n## Package Layout\n- Keep reusable primitives in \\`crates/core\\` and board-specific glue in \\`crates/boards/<target>\\`\n- Expose ergonomic builder APIs for configuring buses, clocks, and peripherals\n- Document supported targets (nRF, RP2040, ESP) in README badges\n\n## Feature Flags\n- Mirror hardware variants with Cargo features (e.g. \\`rtic\\`, \\`defmt\\`, \\`probe-run\\`)\n- Ensure mutually exclusive features guard incompatible HAL implementations\n\n## Developer Experience\n- Ship ready-to-flash examples under \\`examples/\\` (blinky, I2C scanner, sensor demos)\n- Provide VS Code + probe-rs launch.json snippets for teammates\n- Keep CI workflows building representative targets to catch regressions early`,\n },\n ];\n }\n\n getDependencyTagMap() {\n return {\n tokio: 'rust-async',\n 'actix-web': 'rust-actix',\n rocket: 'rust-rocket',\n serde: 'serde',\n 'embedded-hal': 'rust-embedded',\n 'embedded-hal-async': 'rust-embedded',\n 'cortex-m': 'rust-embedded',\n 'cortex-m-rt': 'rust-embedded',\n 'cortex-m-rtic': 'rust-embedded',\n rtic: 'rust-embedded',\n hardware2rust: 'hardware2rust',\n 'probe-run': 'rust-embedded',\n 'probe-rs': 'rust-embedded',\n defmt: 'rust-embedded',\n heapless: 'rust-embedded',\n 'rp2040-hal': 'rust-embedded',\n 'nrf52840-hal': 'rust-embedded',\n 'stm32f4xx-hal': 'rust-embedded',\n 'esp-idf-hal': 'rust-embedded',\n };\n }\n\n private parseManifest(content: string): CargoManifest | null {\n try {\n return parse(content) as CargoManifest;\n } catch {\n return null;\n }\n }\n\n private extractDependenciesFromManifest(\n manifest: CargoManifest,\n ): Record<string, string> {\n const deps: Record<string, string> = {};\n this.collectDependencies(manifest.dependencies, deps);\n this.collectDependencies(manifest['dev-dependencies'], deps);\n this.collectDependencies(manifest['build-dependencies'], deps);\n this.collectDependencies(manifest.workspace?.dependencies, deps);\n\n if (manifest.target) {\n for (const section of Object.values(manifest.target)) {\n if (!section) continue;\n this.collectDependencies(section.dependencies, deps);\n this.collectDependencies(section['dev-dependencies'], deps);\n this.collectDependencies(section['build-dependencies'], deps);\n }\n }\n\n return deps;\n }\n\n private collectDependencies(\n section: DependencySection | undefined,\n accumulator: Record<string, string>,\n ): void {\n if (!section) return;\n for (const [name, value] of Object.entries(section)) {\n accumulator[name] = this.normalizeDependencyVersion(value);\n }\n }\n\n private normalizeDependencyVersion(value: CargoDependency): string {\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value);\n }\n\n if (typeof value === 'boolean') {\n return value ? '*' : 'disabled';\n }\n\n if (value && typeof value === 'object') {\n const record = value as Record<string, unknown>;\n const version = record.version;\n if (typeof version === 'string') {\n return version;\n }\n\n const git = record.git;\n if (typeof git === 'string') {\n const rev = record.rev;\n return typeof rev === 'string' ? `git:${git}#${rev}` : `git:${git}`;\n }\n\n const path = record.path;\n if (typeof path === 'string') {\n return `path:${path}`;\n }\n }\n\n return '*';\n }\n\n private extractWorkspaceMembers(\n manifest: CargoManifest | null,\n content: string,\n ): string[] {\n if (manifest?.workspace?.members?.length) {\n return manifest.workspace.members\n .map((member) => member.trim())\n .filter(Boolean);\n }\n\n return this.fallbackWorkspaceMembers(content);\n }\n\n private fallbackWorkspaceMembers(content: string): string[] {\n const match = content.match(\n /\\[workspace\\][\\s\\S]*?members\\s*=\\s*\\[([\\s\\S]*?)\\]/,\n );\n if (!match) {\n return [];\n }\n\n return match[1]\n .split(',')\n .map((member) => member.trim().replace(/['\"]/g, ''))\n .filter(Boolean);\n }\n\n private extractDependenciesFromText(content: string): Record<string, string> {\n const deps: Record<string, string> = {};\n const sections = [\n 'dependencies',\n 'dev-dependencies',\n 'build-dependencies',\n 'workspace.dependencies',\n ];\n\n for (const section of sections) {\n const block = this.extractSection(content, section);\n if (block) {\n this.parseDependencyLines(block, deps);\n }\n }\n\n return deps;\n }\n\n private extractSection(content: string, sectionName: string): string | null {\n const escaped = sectionName.replace('.', '\\\\.');\n const regex = new RegExp(`\\\\[${escaped}\\\\]([\\\\s\\\\S]*?)(?:\\\\n\\\\[|$)`, 'i');\n const match = regex.exec(content);\n return match ? match[1] : null;\n }\n\n private parseDependencyLines(\n block: string,\n deps: Record<string, string>,\n ): void {\n const lines = block.split('\\n');\n for (const rawLine of lines) {\n const line = rawLine.trim();\n if (!line || line.startsWith('#')) {\n continue;\n }\n\n const match = line.match(/^([A-Za-z0-9_-]+)\\s*=\\s*(.+)$/);\n if (!match) {\n continue;\n }\n\n const [, name, value] = match;\n const trimmedValue = value.trim();\n if (trimmedValue.startsWith('{')) {\n const versionMatch = trimmedValue.match(/version\\s*=\\s*\"([^\"]+)\"/);\n const gitMatch = trimmedValue.match(/git\\s*=\\s*\"([^\"]+)\"/);\n const pathMatch = trimmedValue.match(/path\\s*=\\s*\"([^\"]+)\"/);\n deps[name] =\n versionMatch?.[1] ||\n (gitMatch\n ? `git:${gitMatch}`\n : pathMatch\n ? `path:${pathMatch}`\n : '*');\n } else {\n deps[name] = trimmedValue.replace(/\"/g, '');\n }\n }\n }\n\n private extractNameFromContent(content: string): string | undefined {\n const match = content.match(/\\[package\\][\\s\\S]*?name\\s*=\\s*\"([^\"]+)\"/);\n return match?.[1];\n }\n\n private extractDescriptionFromContent(content: string): string | undefined {\n const match = content.match(\n /\\[package\\][\\s\\S]*?description\\s*=\\s*\"([^\"]+)\"/,\n );\n return match?.[1];\n }\n\n private async computeProjectTags(\n projectPath: string,\n dependencies: Record<string, string>,\n manifest: CargoManifest | null,\n content: string,\n ): Promise<string[]> {\n const tags = new Set<string>(['lang-rust']);\n const depNames = Object.keys(dependencies).map((dep) => dep.toLowerCase());\n const hasEmbeddedDep = depNames.some((dep) =>\n RustPlugin.EMBEDDED_DEPENDENCIES.has(dep),\n );\n\n const keywords = (manifest?.package?.keywords ?? []).map((keyword) =>\n keyword.toLowerCase(),\n );\n const categories = (manifest?.package?.categories ?? []).map((category) =>\n category.toLowerCase(),\n );\n const hasEmbeddedKeyword = keywords.some((keyword) =>\n RustPlugin.EMBEDDED_KEYWORDS.has(keyword),\n );\n const hasEmbeddedCategory = categories.some((category) =>\n RustPlugin.EMBEDDED_KEYWORDS.has(category),\n );\n\n const hasMemoryLayout = RustPlugin.MEMORY_LAYOUT_FILES.some((file) =>\n this.fileExists(projectPath, file),\n );\n const hasCargoConfig = RustPlugin.CARGO_CONFIG_FILES.some((file) =>\n this.fileExists(projectPath, file),\n );\n\n const normalizedName = manifest?.package?.name?.toLowerCase() ?? '';\n const contentLower = content.toLowerCase();\n const mentionsHardware = RustPlugin.HARDWARE_NAME_HINTS.some(\n (hint) => normalizedName.includes(hint) || contentLower.includes(hint),\n );\n const isHardware2Rust =\n normalizedName.includes('hardware2rust') ||\n depNames.some((dep) => dep.includes('hardware2rust'));\n\n if (\n hasEmbeddedDep ||\n hasEmbeddedKeyword ||\n hasEmbeddedCategory ||\n hasMemoryLayout ||\n hasCargoConfig ||\n mentionsHardware\n ) {\n tags.add('rust-embedded');\n }\n\n if (isHardware2Rust) {\n tags.add('hardware2rust');\n }\n\n return Array.from(tags);\n }\n}\n"],"names":["ParserEND","ParserError","msg","filename","linenumber","State","parser","Parser","str","getNext","last","fn","returnWith","value","err","date","d","num","f","require$$0","FloatingDateTime","time","DateTime","global","Date","Time","tomlParserModule","terr","require$$1","require$$2","require$$3","require$$4","cp","obj","key","type","_","TOMLParser","kv","target","finalKey","kw","keyword","next","replacement","displayCode","char","codePoint","result","prettyError","buf","lines","lineNumWidth","linePadding","ii","lineNum","hh","parseString","parseAsync","opts","index","blocksize","resolve","reject","parseAsyncNext","parseStream","stream","stm","parseReadable","parseTransform","readable","ended","errored","finish","error","readNext","data","chunk","encoding","cb","parseModule","stringifyModule","stringify","stringifyInline","typeError","tomlType","stringifyObject","getInlineKeys","isInline","getComplexKeys","toJSON","nobj","prop","prefix","indent","inlineKeys","complexKeys","inlineIndent","stringifyKey","stringifyAnyInline","complexIndent","stringifyComplex","keyStr","stringifyBasicString","escapeString","stringifyLiteralString","numpad","c","stringifyMultilineString","escaped","multilineOk","stringifyInteger","stringifyFloat","stringifyBoolean","stringifyDatetime","stringifyInlineArray","stringifyInlineTable","int","dec","values","stringified","valueType","stringifyArrayOfTables","stringifyComplexTable","firstValueType","fullKey","table","_RustPlugin","BasePlugin","projectPath","content","manifest","dependencies","workspaceMembers","tags","parse","deps","section","accumulator","name","record","version","git","rev","path","member","match","sections","block","sectionName","rawLine","line","trimmedValue","versionMatch","gitMatch","pathMatch","depNames","dep","hasEmbeddedDep","keywords","categories","category","hasEmbeddedKeyword","hasEmbeddedCategory","hasMemoryLayout","file","hasCargoConfig","normalizedName","contentLower","mentionsHardware","hint","isHardware2Rust"],"mappings":"89BACA,MAAMA,EAAY,QAClB,MAAMC,UAAoB,KAAM,CAE9B,YAAaC,EAAKC,EAAUC,EAAY,CACtC,MAAM,iBAAmBF,EAAKC,EAAUC,CAAU,EAClD,KAAK,KAAO,cACZ,KAAK,KAAO,cACR,MAAM,mBAAmB,MAAM,kBAAkB,KAAMH,CAAW,CAC1E,CACA,CACA,MAAMI,CAAM,CACV,YAAaC,EAAQ,CACnB,KAAK,OAASA,EACd,KAAK,IAAM,GACX,KAAK,SAAW,KAChB,KAAK,OAAS,KACd,KAAK,YAAc,KACnB,KAAK,UAAY,IACrB,CACA,CACA,MAAMC,CAAO,CACX,aAAe,CACb,KAAK,IAAM,EACX,KAAK,IAAM,EACX,KAAK,KAAO,EACZ,KAAK,IAAM,CAAA,EACX,KAAK,IAAM,KAAK,IAChB,KAAK,MAAQ,CAAA,EACb,KAAK,KAAO,GACZ,KAAK,KAAO,KACZ,KAAK,GAAK,EACV,KAAK,MAAQ,IAAIF,EAAM,KAAK,UAAU,CAC1C,CAEE,MAAOG,EAAK,CAEV,GAAIA,EAAI,SAAW,GAAKA,EAAI,QAAU,KAAM,OAE5C,KAAK,KAAO,OAAOA,CAAG,EACtB,KAAK,GAAK,GACV,KAAK,KAAO,GACZ,IAAIC,EACJ,KAAOA,IAAY,IAAS,KAAK,SAAQ,GACvCA,EAAU,KAAK,OAAM,EAEvB,KAAK,KAAO,IAChB,CACE,UAAY,CACV,OAAI,KAAK,OAAS,KAChB,EAAE,KAAK,KACP,KAAK,IAAM,IAEb,EAAE,KAAK,GACP,KAAK,KAAO,KAAK,KAAK,YAAY,KAAK,EAAE,EACzC,EAAE,KAAK,IACP,EAAE,KAAK,IACA,KAAK,WAAU,CAC1B,CACE,YAAc,CACZ,OAAO,KAAK,GAAK,KAAK,KAAK,MAC/B,CACE,QAAU,CACR,OAAO,KAAK,MAAM,OAAO,KAAK,KAAM,KAAK,MAAM,QAAQ,CAC3D,CACE,QAAU,CACR,KAAK,KAAOT,EACZ,IAAIU,EACJ,GACEA,EAAO,KAAK,MAAM,OAClB,KAAK,OAAM,QACJ,KAAK,MAAM,SAAWA,GAE/B,YAAK,IAAM,KACX,KAAK,MAAQ,KACb,KAAK,KAAO,KAEL,KAAK,GAChB,CACE,KAAMC,EAAI,CAER,GAAI,OAAOA,GAAO,WAAY,MAAM,IAAIV,EAAY,6CAA+C,KAAK,UAAUU,CAAE,CAAC,EACrH,KAAK,MAAM,OAASA,CACxB,CACE,KAAMA,EAAI,CACR,YAAK,KAAKA,CAAE,EACL,KAAK,OAAM,CACtB,CACE,KAAMA,EAAIC,EAAY,CAChBA,GAAY,KAAK,KAAKA,CAAU,EACpC,KAAK,MAAM,KAAK,KAAK,KAAK,EAC1B,KAAK,MAAQ,IAAIP,EAAMM,CAAE,CAC7B,CACE,QAASA,EAAIC,EAAY,CACvB,YAAK,KAAKD,EAAIC,CAAU,EACjB,KAAK,OAAM,CACtB,CACE,OAAQC,EAAO,CAEb,GAAI,KAAK,MAAM,SAAW,EAAG,MAAM,KAAK,MAAM,IAAIZ,EAAY,iBAAiB,CAAC,EAC5EY,IAAU,SAAWA,EAAQ,KAAK,MAAM,KAC5C,KAAK,MAAQ,KAAK,MAAM,IAAG,EAC3B,KAAK,MAAM,SAAWA,CAC1B,CACE,UAAWA,EAAO,CAChB,YAAK,OAAOA,CAAK,EACV,KAAK,OAAM,CACtB,CACE,SAAW,CAET,GAAI,KAAK,OAASb,EAAW,MAAM,KAAK,MAAM,IAAIC,EAAY,0BAA0B,CAAC,EACzF,KAAK,MAAM,KAAO,KAAK,KAAK,KAAK,EAAE,CACvC,CACE,MAAOa,EAAK,CACV,OAAAA,EAAI,KAAO,KAAK,KAChBA,EAAI,IAAM,KAAK,IACfA,EAAI,IAAM,KAAK,IACRA,CACX,CAEE,YAAc,CACZ,MAAM,IAAIb,EAAY,kCAAkC,CAC5D,CACA,CACA,OAAAM,EAAO,IAAMP,EACbO,EAAO,MAAQN,EACf,OAAiBM,sJC7HjB,eAAiBM,GAAS,CACxB,MAAME,EAAO,IAAI,KAAKF,CAAK,EAE3B,GAAI,MAAME,CAAI,EACZ,MAAM,IAAI,UAAU,kBAAkB,EAEtC,OAAOA,CAEX,sICRA,UAAiB,CAACC,EAAGC,IAAQ,CAE3B,IADAA,EAAM,OAAOA,CAAG,EACTA,EAAI,OAASD,GAAGC,EAAM,IAAMA,EACnC,OAAOA,CACT,wMCJA,MAAMC,EAAIC,iBAAA,EAEV,MAAMC,UAAyB,IAAK,CAClC,YAAaP,EAAO,CAClB,MAAMA,EAAQ,GAAG,EACjB,KAAK,WAAa,EACtB,CACE,aAAe,CACb,MAAME,EAAO,GAAG,KAAK,eAAc,CAAE,IAAIG,EAAE,EAAG,KAAK,cAAgB,CAAC,CAAC,IAAIA,EAAE,EAAG,KAAK,WAAU,CAAE,CAAC,GAC1FG,EAAO,GAAGH,EAAE,EAAG,KAAK,YAAW,CAAE,CAAC,IAAIA,EAAE,EAAG,KAAK,cAAa,CAAE,CAAC,IAAIA,EAAE,EAAG,KAAK,cAAa,CAAE,CAAC,IAAIA,EAAE,EAAG,KAAK,mBAAkB,CAAE,CAAC,GACvI,MAAO,GAAGH,CAAI,IAAIM,CAAI,EAC1B,CACA,CAEA,2BAAiBR,GAAS,CACxB,MAAME,EAAO,IAAIK,EAAiBP,CAAK,EAEvC,GAAI,MAAME,CAAI,EACZ,MAAM,IAAI,UAAU,kBAAkB,EAEtC,OAAOA,CAEX,2JCtBA,MAAMG,EAAIC,iBAAA,EACJG,EAAWC,eAAO,KAExB,MAAMC,UAAaF,CAAS,CAC1B,YAAaT,EAAO,CAClB,MAAMA,CAAK,EACX,KAAK,OAAS,EAClB,CACE,aAAe,CACb,MAAO,GAAG,KAAK,eAAc,CAAE,IAAIK,EAAE,EAAG,KAAK,YAAW,EAAK,CAAC,CAAC,IAAIA,EAAE,EAAG,KAAK,WAAU,CAAE,CAAC,EAC9F,CACA,CAEA,kBAAiBL,GAAS,CACxB,MAAME,EAAO,IAAIS,EAAKX,CAAK,EAE3B,GAAI,MAAME,CAAI,EACZ,MAAM,IAAI,UAAU,kBAAkB,EAEtC,OAAOA,CAEX,kJCrBA,MAAMG,EAAIC,iBAAA,EAEV,MAAMM,UAAa,IAAK,CACtB,YAAaZ,EAAO,CAClB,MAAM,cAAcA,CAAK,GAAG,EAC5B,KAAK,OAAS,EAClB,CACE,aAAe,CACb,MAAO,GAAGK,EAAE,EAAG,KAAK,YAAW,CAAE,CAAC,IAAIA,EAAE,EAAG,KAAK,cAAa,CAAE,CAAC,IAAIA,EAAE,EAAG,KAAK,cAAa,CAAE,CAAC,IAAIA,EAAE,EAAG,KAAK,mBAAkB,CAAE,CAAC,EACrI,CACA,CAEA,kBAAiBL,GAAS,CACxB,MAAME,EAAO,IAAIU,EAAKZ,CAAK,EAE3B,GAAI,MAAME,CAAI,EACZ,MAAM,IAAI,UAAU,kBAAkB,EAEtC,OAAOA,CAEX,+ICnBAW,WAAA,QAAiB,gBAAgBP,cAAA,CAAsB,EACvDO,WAAA,QAAA,gBAAiC,gBAEjC,MAAM,kBAAkB,KAAM,CAC5B,YAAaxB,EAAK,CAChB,MAAMA,CAAG,EACT,KAAK,KAAO,YAER,MAAM,mBAAmB,MAAM,kBAAkB,KAAM,SAAS,EACpE,KAAK,SAAW,GAChB,KAAK,QAAU,IACnB,CACA,CACA,UAAU,KAAOY,GAAO,CACtB,MAAMa,EAAO,IAAI,UAAUb,EAAI,OAAO,EACtC,OAAAa,EAAK,KAAOb,EAAI,KAChBa,EAAK,QAAUb,EACRa,CACT,EACAD,WAAA,QAAA,UAA2B,UAE3B,MAAM,eAAiBE,sBAAA,EACjB,oBAAsBC,2BAAA,EACtB,WAAaC,kBAAA,EACb,WAAaC,kBAAA,EAEb,OAAS,EACT,OAAS,GACT,OAAS,GACT,mBAAqB,GACrB,QAAU,GACV,UAAY,GACZ,SAAW,GACX,UAAY,GACZ,UAAY,GACZ,WAAa,GACb,YAAc,GACd,YAAc,GACd,OAAS,GACT,OAAS,GACT,OAAS,GACT,OAAS,GACT,WAAa,GACb,YAAc,GACd,OAAS,GACT,OAAS,GACT,OAAS,GACT,OAAS,GACT,OAAS,GACT,OAAS,GACT,YAAc,GACd,OAAS,GACT,OAAS,GACT,OAAS,IACT,OAAS,IACT,OAAS,IACT,OAAS,IACT,OAAS,IACT,OAAS,IACT,OAAS,IACT,OAAS,IACT,OAAS,IACT,OAAS,IACT,OAAS,IACT,OAAS,IACT,UAAY,IACZ,UAAY,IACZ,UAAY,GACZ,UAAY,GACZ,UAAY,GACZ,SAAW,IACX,gBAAkB,MAClB,eAAiB,MAEjB,QAAU,CACd,CAAC,MAAM,EAAG,KACV,CAAC,MAAM,EAAG,IACV,CAAC,MAAM,EAAG;AAAA,EACV,CAAC,MAAM,EAAG,KACV,CAAC,MAAM,EAAG,KACV,CAAC,SAAS,EAAG,IACb,CAAC,SAAS,EAAG,IACf,EAEA,SAAS,QAASC,EAAI,CACpB,OAAOA,GAAM,QAAUA,GAAM,MAC/B,CACA,SAAS,QAASA,EAAI,CACpB,OAAQA,GAAM,QAAUA,GAAM,QAAYA,GAAM,QAAUA,GAAM,QAAYA,GAAM,QAAUA,GAAM,MACpG,CACA,SAAS,MAAOA,EAAI,CAClB,OAAOA,IAAO,QAAUA,IAAO,MACjC,CACA,SAAS,QAASA,EAAI,CACpB,OAAQA,GAAM,QAAUA,GAAM,MAChC,CACA,SAAS,sBAAuBA,EAAI,CAClC,OAAQA,GAAM,QAAUA,GAAM,QACtBA,GAAM,QAAUA,GAAM,QACtBA,GAAM,QAAUA,GAAM,QACvBA,IAAO,WACPA,IAAO,WACPA,IAAO,aACPA,IAAO,WAChB,CACA,SAAS,iBAAkBA,EAAI,CAC7B,OAAQA,GAAM,QAAUA,GAAM,QACtBA,GAAM,QAAUA,GAAM,QACtBA,GAAM,QAAUA,GAAM,QACvBA,IAAO,aACPA,IAAO,WAChB,CACA,MAAM,MAAQ,OAAO,MAAM,EACrB,UAAY,OAAO,UAAU,EAE7B,eAAiB,OAAO,UAAU,eAClC,eAAiB,OAAO,eACxB,WAAa,CAAC,aAAc,GAAM,WAAY,GAAM,SAAU,GAAM,MAAO,MAAS,EAE1F,SAAS,OAAQC,EAAKC,EAAK,CACzB,OAAI,eAAe,KAAKD,EAAKC,CAAG,EAAU,IACtCA,IAAQ,aAAa,eAAeD,EAAK,YAAa,UAAU,EAC7D,GACT,CAEA,MAAM,aAAe,OAAO,cAAc,EAC1C,SAAS,aAAe,CACtB,OAAO,OAAO,iBAAiB,GAAI,CACjC,CAAC,KAAK,EAAG,CAAC,MAAO,YAAY,EAC9B,CACH,CACA,SAAS,cAAeA,EAAK,CAC3B,OAAIA,IAAQ,MAAQ,OAAQA,GAAS,SAAiB,GAC/CA,EAAI,KAAK,IAAM,YACxB,CAEA,MAAM,MAAQ,OAAO,OAAO,EAC5B,SAAS,OAAS,CAChB,OAAO,OAAO,iBAAiB,GAAI,CACjC,CAAC,KAAK,EAAG,CAAC,MAAO,KAAK,EACtB,CAAC,SAAS,EAAG,CAAC,MAAO,GAAO,SAAU,EAAI,EAC3C,CACH,CACA,SAAS,QAASA,EAAK,CACrB,OAAIA,IAAQ,MAAQ,OAAQA,GAAS,SAAiB,GAC/CA,EAAI,KAAK,IAAM,KACxB,CAEA,MAAM,aAAe,OAAO,cAAc,EACpC,YAAc,OAAO,aAAa,EACxC,SAAS,WAAYE,EAAM,CACzB,OAAO,OAAO,iBAAiB,GAAI,CACjC,CAAC,KAAK,EAAG,CAAC,MAAO,WAAW,EAC5B,CAAC,YAAY,EAAG,CAAC,MAAOA,CAAI,EAC7B,CACH,CACA,SAAS,aAAcF,EAAK,CAC1B,OAAIA,IAAQ,MAAQ,OAAQA,GAAS,SAAiB,GAC/CA,EAAI,KAAK,IAAM,WACxB,CAEA,MAAM,KAAO,OAAO,MAAM,EAC1B,SAAS,MAAQ,CACf,OAAO,OAAO,iBAAiB,GAAI,CACjC,CAAC,KAAK,EAAG,CAAC,MAAO,IAAI,EACtB,CACH,CACA,SAAS,OAAQA,EAAK,CACpB,OAAIA,IAAQ,MAAQ,OAAQA,GAAS,SAAiB,GAC/CA,EAAI,KAAK,IAAM,IACxB,CAGA,IAAI,QACJ,GAAI,CACF,MAAM,YAAc,KAAK,yBAAyB,EAClD,QAAU,YAAY,MACxB,OAASG,EAAG,CAEZ,CAEA,MAAM,SAAW,SAAW,UAE5B,MAAM,WAAY,CAChB,YAAavB,EAAO,CAClB,GAAI,CACF,KAAK,MAAQU,eAAO,OAAO,OAAO,GAAIV,CAAK,CACjD,MAAgB,CAEV,KAAK,MAAQ,IACnB,CACI,OAAO,eAAe,KAAM,MAAO,CAAC,MAAO,OAAO,CAAC,CACvD,CACE,OAAS,CACP,OAAO,KAAK,QAAU,IAC1B,CAEE,UAAY,CACV,OAAO,OAAO,KAAK,KAAK,CAC5B,CAEE,CAAC,QAAQ,GAAK,CACZ,MAAO,YAAY,KAAK,SAAQ,CAAE,IACtC,CACE,SAAW,CACT,OAAO,KAAK,KAChB,CACA,CAEA,MAAM,QAAU,OAAO,SAAS,EAChC,SAAS,QAASA,EAAO,CACvB,IAAII,EAAM,OAAOJ,CAAK,EAItB,OAFI,OAAO,GAAGI,EAAK,EAAE,IAAGA,EAAM,GAE1BM,eAAO,QAAU,CAAC,OAAO,cAAcN,CAAG,EACrC,IAAI,YAAYJ,CAAK,EAGrB,OAAO,iBAAiB,IAAI,OAAOI,CAAG,EAAG,CAC9C,MAAO,CAAC,MAAO,UAAY,CAAE,OAAO,MAAM,IAAI,EAAG,EACjD,CAAC,KAAK,EAAG,CAAC,MAAO,OAAO,EACxB,CAAC,QAAQ,EAAG,CAAC,MAAO,IAAM,aAAaJ,CAAK,GAAG,EAChD,CAEL,CACA,SAAS,UAAWoB,EAAK,CACvB,OAAIA,IAAQ,MAAQ,OAAQA,GAAS,SAAiB,GAC/CA,EAAI,KAAK,IAAM,OACxB,CAEA,MAAM,MAAQ,OAAO,OAAO,EAC5B,SAAS,MAAOpB,EAAO,CAErB,OAAO,OAAO,iBAAiB,IAAI,OAAOA,CAAK,EAAG,CAChD,CAAC,KAAK,EAAG,CAAC,MAAO,KAAK,EACtB,CAAC,QAAQ,EAAG,CAAC,MAAO,IAAM,WAAWA,CAAK,GAAG,EAC9C,CACH,CACA,SAAS,QAASoB,EAAK,CACrB,OAAIA,IAAQ,MAAQ,OAAQA,GAAS,SAAiB,GAC/CA,EAAI,KAAK,IAAM,KACxB,CAEA,SAAS,SAAUpB,EAAO,CACxB,MAAMsB,EAAO,OAAOtB,EACpB,GAAIsB,IAAS,SAAU,CAErB,GAAItB,IAAU,KAAM,MAAO,OAC3B,GAAIA,aAAiB,KAAM,MAAO,WAElC,GAAI,SAASA,EACX,OAAQA,EAAM,KAAK,EAAC,CAClB,KAAK,aAAc,MAAO,eAC1B,KAAK,YAAa,MAAO,cAEzB,KAAK,MAAO,MAAO,QAEnB,KAAK,KAAM,MAAO,OAClB,KAAK,MAAO,MAAO,QACnB,KAAK,QAAS,MAAO,SAC7B,CAEA,CACE,OAAOsB,CACT,CAEA,SAAS,gBAAiB5B,EAAQ,CAChC,MAAM8B,UAAmB9B,CAAO,CAC9B,aAAe,CACb,MAAK,EACL,KAAK,IAAM,KAAK,IAAM,MAAK,CACjC,CAGI,aAAe,CACb,OAAO,KAAK,OAAS,UAAY,KAAK,OAAS,QAAU,KAAK,OAAS,SAAW,KAAK,YAAW,CACxG,CACI,aAAe,CACb,OAAO,KAAK,OAASA,EAAO,KAAO,KAAK,OAAS,QAAU,KAAK,OAAS,MAC/E,CAEI,YAAc,CACZ,GAAI,KAAK,OAASA,EAAO,IACvB,OAAO,KACF,GAAI,KAAK,OAAS,UACvB,OAAO,KAAK,KAAK,KAAK,gBAAgB,EACjC,GAAI,KAAK,OAAS,SACvB,OAAO,KAAK,KAAK,KAAK,YAAY,EAC7B,GAAI,KAAK,OAAS,QAAU,KAAK,OAAS,SAAW,KAAK,OAAS,QAAU,KAAK,OAAS,OAChG,OAAO,KACF,GAAI,sBAAsB,KAAK,IAAI,EACxC,OAAO,KAAK,QAAQ,KAAK,oBAAoB,EAE7C,MAAM,KAAK,MAAM,IAAI,UAAU,sBAAsB,KAAK,IAAI,GAAG,CAAC,CAE1E,CAII,sBAAwB,CACtB,GAAI,KAAK,OAAS,SAAW,KAAK,OAAS,QAAU,KAAK,OAAS,OACjE,OAAO,KACF,GAAI,KAAK,OAAS,SACvB,OAAO,KAAK,KAAK,KAAK,YAAY,EAC7B,GAAI,KAAK,OAASA,EAAO,KAAO,KAAK,OAAS,OACnD,OAAO,KAAK,OAAM,EAElB,MAAM,KAAK,MAAM,IAAI,UAAU,6EAA6E,CAAC,CAErH,CAGI,sBAAwB,CACtB,OAAO,KAAK,QAAQ,KAAK,YAAa,KAAK,qBAAqB,CACtE,CACI,sBAAuB+B,EAAI,CACzB,IAAIC,EAAS,KAAK,IACdC,EAAWF,EAAG,IAAI,IAAG,EACzB,QAASG,KAAMH,EAAG,IAAK,CACrB,GAAI,OAAOC,EAAQE,CAAE,GAAK,CAAC,QAAQF,EAAOE,CAAE,CAAC,EAC3C,MAAM,KAAK,MAAM,IAAI,UAAU,6BAA6B,CAAC,EAE/DF,EAASA,EAAOE,CAAE,EAAIF,EAAOE,CAAE,GAAK,MAAK,CACjD,CACM,GAAI,OAAOF,EAAQC,CAAQ,EACzB,MAAM,KAAK,MAAM,IAAI,UAAU,6BAA6B,CAAC,EAE/D,OAAAD,EAAO,SAAS,EAAI,GAEhB,UAAUD,EAAG,KAAK,GAAK,QAAQA,EAAG,KAAK,EACzCC,EAAOC,CAAQ,EAAIF,EAAG,MAAM,QAAO,EAEnCC,EAAOC,CAAQ,EAAIF,EAAG,MAEjB,KAAK,KAAK,KAAK,oBAAoB,CAChD,CAGI,aAAe,CACb,OAAO,KAAK,QAAQ,KAAK,aAAc,KAAK,mBAAmB,CACrE,CACI,oBAAqBJ,EAAK,CACxB,OAAI,KAAK,MAAM,YACb,KAAK,MAAM,YAAY,KAAKA,CAAG,EAE/B,KAAK,MAAM,YAAc,CAACA,CAAG,EAExB,KAAK,KAAK,KAAK,wBAAwB,CACpD,CACI,0BAA4B,CAC1B,GAAI,KAAK,OAAS,YAChB,OAAO,KAAK,KAAK,KAAK,yBAAyB,EAC1C,GAAI,KAAK,OAAS,SAAW,KAAK,OAAS,OAChD,OAAO,KAAK,KAAK,KAAK,gBAAgB,CAE9C,CACI,2BAA6B,CAC3B,GAAI,KAAK,OAAS,SAAW,KAAK,OAAS,OACzC,OAAO,KAAK,QAAQ,KAAK,aAAc,KAAK,mBAAmB,CAEvE,CAEI,kBAAoB,CAClB,GAAI,KAAK,OAAS,YAChB,OAAO,KAAK,KAAK,KAAK,mBAAmB,EAEzC,MAAM,KAAK,MAAM,IAAI,UAAU,iCAAiC,CAAC,CAEzE,CACI,qBAAuB,CACrB,OAAI,KAAK,OAAS,SAAW,KAAK,OAAS,OAClC,KAEA,KAAK,QAAQ,KAAK,WAAY,KAAK,iBAAiB,CAEnE,CACI,kBAAmBrB,EAAO,CACxB,OAAO,KAAK,UAAU,CAAC,IAAK,KAAK,MAAM,YAAa,MAAOA,CAAK,CAAC,CACvE,CAGI,cAAgB,CACd,EAAG,CACD,GAAI,KAAK,OAASN,EAAO,KAAO,KAAK,OAAS,OAC5C,OAAO,KAAK,OAAM,EACb,GAAI,KAAK,OAAS,UAAa,KAAK,MAAQ,oBAAsB,KAAK,OAAS,OACrF,MAAM,KAAK,mBAAmB,UAAU,CAElD,OAAe,KAAK,SAAQ,EAC5B,CAGI,kBAAoB,CAClB,GAAI,KAAK,OAAS,UAChB,KAAK,KAAK,KAAK,SAAS,MAExB,QAAO,KAAK,KAAK,KAAK,UAAU,CAExC,CAGI,YAAc,CACZ,YAAK,IAAM,KAAK,IACT,KAAK,KAAK,KAAK,cAAc,CAC1C,CACI,gBAAkB,CAChB,OAAI,KAAK,OAAS,SAAW,KAAK,OAAS,OAClC,KAEA,KAAK,QAAQ,KAAK,aAAc,KAAK,cAAc,CAElE,CACI,eAAgBmC,EAAS,CACvB,GAAI,KAAK,OAAS,SAAW,KAAK,OAAS,OACzC,OAAO,KACF,GAAI,KAAK,OAAS,UAAW,CAClC,GAAI,OAAO,KAAK,IAAKA,CAAO,IAAM,CAAC,QAAQ,KAAK,IAAIA,CAAO,CAAC,GAAK,KAAK,IAAIA,CAAO,EAAE,SAAS,GAC1F,MAAM,KAAK,MAAM,IAAI,UAAU,6BAA6B,CAAC,EAE7D,YAAK,IAAM,KAAK,IAAIA,CAAO,EAAI,KAAK,IAAIA,CAAO,GAAK,MAAK,EACzD,KAAK,IAAI,SAAS,EAAI,GAEjB,KAAK,KAAK,KAAK,oBAAoB,CAClD,SAAiB,KAAK,OAAS,YAAa,CACpC,GAAI,CAAC,OAAO,KAAK,IAAKA,CAAO,EAC3B,KAAK,IAAM,KAAK,IAAIA,CAAO,EAAI,MAAK,UAC3B,QAAQ,KAAK,IAAIA,CAAO,CAAC,EAClC,KAAK,IAAM,KAAK,IAAIA,CAAO,UAClB,OAAO,KAAK,IAAIA,CAAO,CAAC,EACjC,KAAK,IAAM,KAAK,IAAIA,CAAO,EAAE,KAAK,IAAIA,CAAO,EAAE,OAAS,CAAC,MAEzD,OAAM,KAAK,MAAM,IAAI,UAAU,6BAA6B,CAAC,EAE/D,OAAO,KAAK,KAAK,KAAK,cAAc,CAC5C,KACQ,OAAM,KAAK,MAAM,IAAI,UAAU,mDAAmD,CAAC,CAE3F,CAGI,WAAa,CACX,YAAK,IAAM,KAAK,IACT,KAAK,KAAK,KAAK,aAAa,CACzC,CACI,eAAiB,CACf,OAAI,KAAK,OAAS,SAAW,KAAK,OAAS,OAClC,KAEA,KAAK,QAAQ,KAAK,aAAc,KAAK,aAAa,CAEjE,CACI,cAAeA,EAAS,CACtB,GAAI,KAAK,OAAS,SAAW,KAAK,OAAS,OACzC,OAAO,KACF,GAAI,KAAK,OAAS,UAAW,CAIlC,GAHK,OAAO,KAAK,IAAKA,CAAO,IAC3B,KAAK,IAAIA,CAAO,EAAI,KAAI,GAEtB,aAAa,KAAK,IAAIA,CAAO,CAAC,EAChC,MAAM,KAAK,MAAM,IAAI,UAAU,8BAA8B,CAAC,EACzD,GAAI,OAAO,KAAK,IAAIA,CAAO,CAAC,EAAG,CACpC,MAAMC,EAAO,MAAK,EAClB,KAAK,IAAID,CAAO,EAAE,KAAKC,CAAI,EAC3B,KAAK,IAAMA,CACrB,KACU,OAAM,KAAK,MAAM,IAAI,UAAU,gCAAgC,CAAC,EAElE,OAAO,KAAK,KAAK,KAAK,YAAY,CAC1C,SAAiB,KAAK,OAAS,YAAa,CACpC,GAAI,CAAC,OAAO,KAAK,IAAKD,CAAO,EAC3B,KAAK,IAAM,KAAK,IAAIA,CAAO,EAAI,MAAK,MAC/B,IAAI,aAAa,KAAK,IAAIA,CAAO,CAAC,EACvC,MAAM,KAAK,MAAM,IAAI,UAAU,8BAA8B,CAAC,EACzD,GAAI,cAAc,KAAK,IAAIA,CAAO,CAAC,EACxC,MAAM,KAAK,MAAM,IAAI,UAAU,8BAA8B,CAAC,EACzD,GAAI,OAAO,KAAK,IAAIA,CAAO,CAAC,EACjC,KAAK,IAAM,KAAK,IAAIA,CAAO,EAAE,KAAK,IAAIA,CAAO,EAAE,OAAS,CAAC,UAChD,QAAQ,KAAK,IAAIA,CAAO,CAAC,EAClC,KAAK,IAAM,KAAK,IAAIA,CAAO,MAE3B,OAAM,KAAK,MAAM,IAAI,UAAU,gCAAgC,CAAC,EAElE,OAAO,KAAK,KAAK,KAAK,aAAa,CAC3C,KACQ,OAAM,KAAK,MAAM,IAAI,UAAU,mDAAmD,CAAC,CAE3F,CACI,aAAcA,EAAS,CACrB,GAAI,KAAK,OAAS,UAChB,OAAO,KAAK,KAAK,KAAK,oBAAoB,EAE1C,MAAM,KAAK,MAAM,IAAI,UAAU,mDAAmD,CAAC,CAE3F,CAGI,YAAc,CACZ,GAAI,KAAK,OAASnC,EAAO,IACvB,MAAM,KAAK,MAAM,IAAI,UAAU,mBAAmB,CAAC,EAC9C,GAAI,KAAK,OAAS,UACvB,OAAO,KAAK,KAAK,KAAK,iBAAiB,EACvC,GAAI,KAAK,OAAS,UAClB,OAAO,KAAK,KAAK,KAAK,iBAAiB,EAClC,GAAI,KAAK,OAAS,aAAe,KAAK,OAAS,UACpD,OAAO,KAAK,KAAK,KAAK,eAAe,EAChC,GAAI,KAAK,OAAS,OACvB,OAAO,KAAK,KAAK,KAAK,QAAQ,EACzB,GAAI,KAAK,OAAS,OACvB,OAAO,KAAK,KAAK,KAAK,QAAQ,EACzB,GAAI,QAAQ,KAAK,IAAI,EAC1B,OAAO,KAAK,KAAK,KAAK,qBAAqB,EACtC,GAAI,KAAK,OAAS,QAAU,KAAK,OAAS,OAC/C,OAAO,KAAK,KAAK,KAAK,YAAY,EAC7B,GAAI,KAAK,OAAS,UACvB,OAAO,KAAK,KAAK,KAAK,gBAAiB,KAAK,WAAW,EAClD,GAAI,KAAK,OAAS,UACvB,OAAO,KAAK,KAAK,KAAK,iBAAkB,KAAK,WAAW,EAExD,MAAM,KAAK,MAAM,IAAI,UAAU,iGAAiG,CAAC,CAEzI,CACI,YAAaM,EAAO,CAClB,OAAO,KAAK,UAAUA,CAAK,CACjC,CAEI,UAAY,CACV,GAAI,KAAK,OAAS,OAChB,OAAO,KAAK,KAAK,KAAK,SAAS,EAE/B,MAAM,KAAK,MAAM,IAAI,UAAU,wDAAwD,CAAC,CAEhG,CACI,WAAa,CACX,GAAI,KAAK,OAAS,OAChB,OAAI,KAAK,MAAM,MAAQ,IACd,KAAK,OAAO,IAAS,EAErB,KAAK,OAAO,GAAQ,EAG7B,MAAM,KAAK,MAAM,IAAI,UAAU,wDAAwD,CAAC,CAEhG,CAEI,UAAY,CACV,GAAI,KAAK,OAAS,OAChB,OAAO,KAAK,KAAK,KAAK,SAAS,EAE/B,MAAM,KAAK,MAAM,IAAI,UAAU,sCAAsC,CAAC,CAE9E,CACI,WAAa,CACX,GAAI,KAAK,OAAS,OAChB,OAAO,KAAK,OAAO,GAAG,EAEtB,MAAM,KAAK,MAAM,IAAI,UAAU,sCAAsC,CAAC,CAE9E,CAGI,cAAgB,CACd,OAAI,KAAK,OAAS,UACT,KAAK,KAAK,KAAK,gBAAgB,EAC7B,KAAK,OAAS,UAChB,KAAK,KAAK,KAAK,kBAAkB,EAEjC,KAAK,KAAK,KAAK,YAAY,CAE1C,CAGI,cAAgB,CACd,EAAG,CACD,GAAI,KAAK,OAASN,EAAO,IACvB,MAAM,KAAK,MAAM,IAAI,UAAU,yBAAyB,CAAC,EACpD,GAAI,iBAAiB,KAAK,IAAI,EACnC,KAAK,QAAO,MACP,IAAI,KAAK,MAAM,IAAI,SAAW,EACnC,MAAM,KAAK,MAAM,IAAI,UAAU,iCAAiC,CAAC,EAEjE,OAAO,KAAK,UAAS,EAE/B,OAAe,KAAK,SAAQ,EAC5B,CAGI,mBAAqB,CACnB,OAAI,KAAK,OAAS,UACT,KAAK,KAAK,KAAK,4BAA4B,EAE3C,KAAK,KAAK,KAAK,kBAAkB,CAEhD,CACI,oBAAsB,CACpB,EAAG,CACD,GAAI,KAAK,OAAS,UAChB,OAAO,KAAK,OAAM,EACb,GAAI,KAAK,cACd,MAAM,KAAK,MAAM,IAAI,UAAU,qBAAqB,CAAC,EAChD,GAAI,KAAK,OAAS,UAAa,KAAK,MAAQ,oBAAsB,KAAK,OAAS,OACrF,MAAM,KAAK,mBAAmB,SAAS,EAEvC,KAAK,QAAO,CAEtB,OAAe,KAAK,SAAQ,EAC5B,CACI,8BAAgC,CAC9B,OAAI,KAAK,OAAS,UACT,KAAK,KAAK,KAAK,uBAAuB,EAEtC,KAAK,UAAS,CAE7B,CACI,yBAA2B,CACzB,OAAI,KAAK,OAAS,OACT,KACE,KAAK,OAAS,OAChB,KAAK,KAAK,KAAK,8BAA8B,EAE7C,KAAK,KAAK,KAAK,8BAA8B,CAE5D,CACI,gCAAkC,CAChC,EAAG,CACD,GAAI,KAAK,OAAS,UAChB,OAAO,KAAK,KAAK,KAAK,oBAAoB,EACrC,GAAI,KAAK,OAASA,EAAO,IAC9B,MAAM,KAAK,MAAM,IAAI,UAAU,gCAAgC,CAAC,EAC3D,GAAI,KAAK,OAAS,UAAa,KAAK,MAAQ,oBAAsB,KAAK,OAAS,QAAU,KAAK,OAAS,QAAU,KAAK,OAAS,OACrI,MAAM,KAAK,mBAAmB,SAAS,EAEvC,KAAK,QAAO,CAEtB,OAAe,KAAK,SAAQ,EAC5B,CACI,sBAAwB,CACtB,OAAI,KAAK,OAAS,UACT,KAAK,KAAK,KAAK,qBAAqB,GAE3C,KAAK,MAAM,KAAO,IACX,KAAK,KAAK,KAAK,8BAA8B,EAE5D,CACI,uBAAyB,CACvB,OAAI,KAAK,OAAS,UACT,KAAK,KAAK,KAAK,qBAAqB,GAE3C,KAAK,MAAM,KAAO,KACX,KAAK,KAAK,KAAK,8BAA8B,EAE5D,CACI,uBAAyB,CACvB,OAAI,KAAK,OAAS,WAChB,KAAK,MAAM,KAAO,IACX,KAAK,KAAK,KAAK,qBAAqB,GAEpC,KAAK,UAAS,CAE7B,CACI,uBAAyB,CACvB,OAAI,KAAK,OAAS,WAChB,KAAK,MAAM,KAAO,IACX,KAAK,OAAM,GAEX,KAAK,UAAS,CAE7B,CAGI,mBAAqB,CACnB,OAAI,KAAK,OAAS,UACT,KAAK,KAAK,KAAK,qBAAqB,EAEpC,KAAK,KAAK,KAAK,gBAAgB,CAE9C,CACI,kBAAoB,CAClB,EAAG,CACD,GAAI,KAAK,OAAS,UAChB,OAAO,KAAK,KAAK,KAAK,YAAa,KAAK,uBAAuB,EAC1D,GAAI,KAAK,OAAS,UACvB,OAAO,KAAK,OAAM,EACb,GAAI,KAAK,cACd,MAAM,KAAK,MAAM,IAAI,UAAU,qBAAqB,CAAC,EAChD,GAAI,KAAK,OAAS,UAAa,KAAK,MAAQ,oBAAsB,KAAK,OAAS,OACrF,MAAM,KAAK,mBAAmB,SAAS,EAEvC,KAAK,QAAO,CAEtB,OAAe,KAAK,SAAQ,EAC5B,CACI,wBAAyBqC,EAAa,CACpC,YAAK,MAAM,KAAOA,EACX,KAAK,KAAK,KAAK,gBAAgB,CAC5C,CACI,uBAAyB,CACvB,OAAI,KAAK,OAAS,UACT,KAAK,KAAK,KAAK,gBAAgB,EAE/B,KAAK,UAAS,CAE7B,CACI,kBAAoB,CAClB,OAAI,KAAK,OAAS,OACT,KACE,KAAK,OAAS,OAChB,KAAK,KAAK,KAAK,uBAAuB,EAEtC,KAAK,KAAK,KAAK,uBAAuB,CAErD,CACI,yBAA2B,CACzB,EAAG,CACD,GAAI,KAAK,OAAS,UAChB,OAAO,KAAK,KAAK,KAAK,iBAAkB,KAAK,4BAA4B,EACpE,GAAI,KAAK,OAAS,UACvB,OAAO,KAAK,KAAK,KAAK,aAAa,EAC9B,GAAI,KAAK,OAASrC,EAAO,IAC9B,MAAM,KAAK,MAAM,IAAI,UAAU,gCAAgC,CAAC,EAC3D,GAAI,KAAK,OAAS,UAAa,KAAK,MAAQ,oBAAsB,KAAK,OAAS,QAAU,KAAK,OAAS,QAAU,KAAK,OAAS,OACrI,MAAM,KAAK,mBAAmB,SAAS,EAEvC,KAAK,QAAO,CAEtB,OAAe,KAAK,SAAQ,EAC5B,CACI,mBAAoB4B,EAAM,CACxB,IAAIU,EAAc,QAClB,OAAI,KAAK,KAAO,KACdA,GAAe,KAEjBA,GAAe,KAAK,KAAK,SAAS,EAAE,EAE7B,KAAK,MAAM,IAAI,UAAU,iEAAiEV,CAAI,SAASU,CAAW,UAAU,CAAC,CAC1I,CACI,6BAA8BD,EAAa,CACzC,YAAK,MAAM,KAAOA,EACX,KAAK,KAAK,KAAK,uBAAuB,CACnD,CACI,eAAiB,CACf,OAAI,KAAK,OAAS,UACT,KAAK,KAAK,KAAK,cAAc,GAEpC,KAAK,MAAM,KAAO,IACX,KAAK,KAAK,KAAK,uBAAuB,EAErD,CACI,gBAAkB,CAChB,OAAI,KAAK,OAAS,UACT,KAAK,KAAK,KAAK,cAAc,GAEpC,KAAK,MAAM,KAAO,KACX,KAAK,KAAK,KAAK,uBAAuB,EAErD,CACI,gBAAkB,CAChB,OAAI,KAAK,OAAS,WAChB,KAAK,MAAM,KAAO,IACX,KAAK,KAAK,KAAK,cAAc,GAE7B,KAAK,UAAS,CAE7B,CACI,gBAAkB,CAChB,OAAI,KAAK,OAAS,WAChB,KAAK,MAAM,KAAO,IACX,KAAK,OAAM,GAEX,KAAK,UAAS,CAE7B,CACI,kBAAoB,CAClB,OAAI,KAAK,OAAS,QAAU,KAAK,OAAS,OACjC,KAAK,KAAK,KAAK,cAAc,EAC3B,KAAK,OAAS,SAAW,KAAK,OAAS,OACzC,KAAK,KAAK,KAAK,iBAAiB,EAEhC,KAAK,KAAK,KAAK,WAAW,CAEzC,CACI,mBAAqB,CACnB,GAAI,KAAK,OAAS,SAAW,KAAK,OAAS,OACzC,OAAO,KACF,GAAI,KAAK,OAAS,QAAU,KAAK,OAAS,OAC/C,OAAO,KAAK,KAAK,KAAK,cAAc,EAEpC,MAAM,KAAK,MAAM,IAAI,UAAU,yBAAyB,CAAC,CAEjE,CACI,gBAAkB,CAEhB,OAAI,KAAK,OAAS,QAAU,KAAK,OAAS,SAAW,KAAK,OAAS,QAAU,KAAK,OAAS,OAClF,KAEA,KAAK,UAAS,CAE7B,CACI,aAAe,CACb,GAAI,KAAK,QAAQ,QACf,OAAO,KAAK,OAAO,QAAQ,KAAK,IAAI,CAAC,EAChC,GAAI,KAAK,OAAS,OACvB,OAAO,KAAK,KAAK,KAAK,kBAAmB,KAAK,kBAAkB,EAC3D,GAAI,KAAK,OAAS,OACvB,OAAO,KAAK,KAAK,KAAK,kBAAmB,KAAK,kBAAkB,EAEhE,MAAM,KAAK,MAAM,IAAI,UAAU,6BAA+B,KAAK,IAAI,CAAC,CAEhF,CACI,mBAAoBE,EAAM,CACxB,GAAI,CACF,MAAMC,EAAY,SAASD,EAAM,EAAE,EACnC,GAAIC,GAAa,iBAAmBA,GAAa,eAC/C,MAAM,KAAK,MAAM,IAAI,UAAU,iEAAiE,CAAC,EAEnG,OAAO,KAAK,UAAU,OAAO,cAAcA,CAAS,CAAC,CAC7D,OAAejC,EAAK,CACZ,MAAM,KAAK,MAAM,UAAU,KAAKA,CAAG,CAAC,CAC5C,CACA,CACI,mBAAqB,CACnB,GAAK,QAAQ,KAAK,IAAI,GAIpB,GADA,KAAK,QAAO,EACR,KAAK,MAAM,IAAI,QAAU,EAAG,OAAO,KAAK,OAAM,MAHlD,OAAM,KAAK,MAAM,IAAI,UAAU,qDAAqD,CAAC,CAK7F,CACI,mBAAqB,CACnB,GAAK,QAAQ,KAAK,IAAI,GAIpB,GADA,KAAK,QAAO,EACR,KAAK,MAAM,IAAI,QAAU,EAAG,OAAO,KAAK,OAAM,MAHlD,OAAM,KAAK,MAAM,IAAI,UAAU,qDAAqD,CAAC,CAK7F,CAGI,iBAAmB,CACjB,YAAK,QAAO,EACL,KAAK,KAAK,KAAK,wBAAwB,CACpD,CACI,0BAA4B,CAC1B,OAAI,KAAK,OAAS,OACT,KAAK,KAAK,KAAK,QAAQ,EACrB,KAAK,OAAS,OAChB,KAAK,KAAK,KAAK,QAAQ,EAEvB,KAAK,QAAQ,KAAK,aAAc,KAAK,uBAAuB,CAE3E,CACI,yBAA2B,CACzB,OAAI,KAAK,OAAS,QAChB,KAAK,QAAO,EACL,KAAK,KAAK,KAAK,mCAAmC,GAElD,KAAK,KAAK,KAAK,kBAAkB,CAEhD,CACI,qCAAuC,CACrC,OAAI,KAAK,OAAS,aAChB,KAAK,QAAO,EACL,KAAK,KAAK,KAAK,aAAc,KAAK,gBAAgB,GAChD,KAAK,OAAS,QAAU,KAAK,OAAS,QAC/C,KAAK,QAAO,EACL,KAAK,KAAK,KAAK,uBAAuB,GAEtC,KAAK,UAAU,QAAQ,KAAK,MAAM,GAAG,CAAC,CAErD,CACI,oBAAsB,CACpB,GAAI,QAAQ,KAAK,IAAI,EACnB,KAAK,QAAO,MACP,IAAI,KAAK,OAAS,YACvB,OAAO,KAAK,KAAK,KAAK,YAAY,EAC7B,GAAI,KAAK,OAAS,QAAU,KAAK,OAAS,OAC/C,YAAK,QAAO,EACL,KAAK,KAAK,KAAK,uBAAuB,EACxC,GAAI,KAAK,OAAS,YACvB,YAAK,QAAO,EACL,KAAK,KAAK,KAAK,aAAc,KAAK,gBAAgB,EACpD,CACL,MAAMkC,EAAS,QAAQ,KAAK,MAAM,GAAG,EAErC,GAAIA,EAAO,QACT,MAAM,KAAK,MAAM,IAAI,UAAU,gBAAgB,CAAC,EAEhD,OAAO,KAAK,UAAUA,CAAM,CAEtC,EACA,CACI,cAAgB,CACd,GAAI,KAAK,OAAS,aAAe,KAAK,OAAS,aAAe,KAAK,OAAS,QAAU,KAAK,OAAS,OAClG,MAAM,KAAK,MAAM,IAAI,UAAU,sCAAsC,CAAC,EACjE,GAAI,KAAK,cACd,MAAM,KAAK,MAAM,IAAI,UAAU,mBAAmB,CAAC,EAErD,OAAO,KAAK,UAAS,CAC3B,CACI,8BAAgC,CAC9B,GAAI,KAAK,OAAS,aAAe,KAAK,OAAS,YAC7C,MAAM,KAAK,MAAM,IAAI,UAAU,sCAAsC,CAAC,EACjE,GAAI,KAAK,cACd,MAAM,KAAK,MAAM,IAAI,UAAU,mBAAmB,CAAC,EAErD,OAAO,KAAK,UAAS,CAC3B,CACI,kBAAoB,CAClB,GAAI,KAAK,OAAS,YAChB,OAAO,KAAK,KAAK,KAAK,aAAc,KAAK,gBAAgB,EACpD,GAAI,QAAQ,KAAK,IAAI,EAC1B,KAAK,QAAO,MACP,QAAI,KAAK,OAAS,QAAU,KAAK,OAAS,QAC/C,KAAK,QAAO,EACL,KAAK,KAAK,KAAK,uBAAuB,GAEtC,KAAK,UAAU,MAAM,KAAK,MAAM,GAAG,CAAC,CAEnD,CACI,yBAA2B,CACzB,GAAI,QAAQ,KAAK,IAAI,EACnB,OAAO,KAAK,KAAK,KAAK,mBAAmB,EACpC,GAAI,KAAK,OAAS,aAAe,KAAK,OAAS,UACpD,KAAK,QAAO,EACZ,KAAK,KAAK,KAAK,aAAc,KAAK,mBAAmB,MAErD,OAAM,KAAK,MAAM,IAAI,UAAU,8CAA8C,CAAC,CAEtF,CACI,qBAAuB,CACrB,GAAI,QAAQ,KAAK,IAAI,EACnB,KAAK,QAAO,MACP,QAAI,KAAK,OAAS,YAChB,KAAK,KAAK,KAAK,YAAY,EAE3B,KAAK,UAAU,MAAM,KAAK,MAAM,GAAG,CAAC,CAEnD,CAGI,uBAAyB,CACvB,OAAI,KAAK,OAAS,QAChB,KAAK,QAAO,EACL,KAAK,KAAK,KAAK,yBAAyB,GAExC,KAAK,KAAK,KAAK,yBAAyB,CAEvD,CACI,2BAA6B,CAE3B,GAAI,KAAK,OAAS,YAChB,OAAO,KAAK,KAAK,KAAK,aAAc,KAAK,kBAAkB,EACtD,GAAI,QAAQ,KAAK,IAAI,EAC1B,KAAK,QAAO,EACR,KAAK,MAAM,IAAI,OAAS,GAAG,KAAK,KAAK,KAAK,kBAAkB,MAC3D,QAAI,KAAK,OAAS,QAAU,KAAK,OAAS,QAC/C,KAAK,QAAO,EACL,KAAK,KAAK,KAAK,uBAAuB,GACpC,KAAK,OAAS,aACvB,KAAK,QAAO,EACL,KAAK,KAAK,KAAK,aAAc,KAAK,gBAAgB,GAChD,KAAK,OAAS,YAChB,KAAK,KAAK,KAAK,aAAa,EAC1B,KAAK,OAAS,WAChB,KAAK,KAAK,KAAK,iBAAiB,EAEhC,KAAK,UAAU,QAAQ,KAAK,MAAM,GAAG,CAAC,CAErD,CACI,mBAAqB,CACnB,GAAI,KAAK,MAAM,IAAI,OAAS,EAAG,CAC7B,GAAI,QAAQ,KAAK,IAAI,EACnB,OAAO,KAAK,QAAO,EACd,GAAI,KAAK,OAAS,WACvB,OAAO,KAAK,KAAK,KAAK,iBAAiB,EAEvC,MAAM,KAAK,MAAM,IAAI,UAAU,kDAAkD,CAAC,CAE5F,KAAa,CACL,GAAI,KAAK,OAAS,YAChB,OAAO,KAAK,KAAK,KAAK,aAAa,EAEnC,MAAM,KAAK,MAAM,IAAI,UAAU,qDAAqD,CAAC,CAE/F,CACA,CACI,2BAA6B,CAC3B,OAAI,KAAK,OAAS,QAChB,KAAK,QAAO,EACL,KAAK,KAAK,KAAK,6BAA8B,KAAK,eAAe,GAC/D,KAAK,OAAS,QACvB,KAAK,QAAO,EACL,KAAK,KAAK,KAAK,6BAA8B,KAAK,eAAe,GAC/D,KAAK,OAAS,QACvB,KAAK,QAAO,EACL,KAAK,KAAK,KAAK,6BAA8B,KAAK,eAAe,GAC/D,KAAK,OAAS,YAChB,KAAK,KAAK,KAAK,kBAAkB,EAC/B,QAAQ,KAAK,IAAI,EACnB,KAAK,KAAK,KAAK,iBAAiB,EAEhC,KAAK,UAAU,QAAQ,KAAK,MAAM,GAAG,CAAC,CAErD,CACI,iBAAmB,CACjB,GAAI,QAAQ,KAAK,IAAI,EACnB,KAAK,QAAO,MACP,IAAI,KAAK,OAAS,YACvB,OAAO,KAAK,KAAK,KAAK,4BAA4B,EAC7C,CACL,MAAMA,EAAS,QAAQ,KAAK,MAAM,GAAG,EAErC,GAAIA,EAAO,QACT,MAAM,KAAK,MAAM,IAAI,UAAU,gBAAgB,CAAC,EAEhD,OAAO,KAAK,UAAUA,CAAM,CAEtC,EACA,CACI,iBAAmB,CACjB,GAAI,QAAQ,KAAK,IAAI,EACnB,KAAK,QAAO,MACP,IAAI,KAAK,OAAS,YACvB,OAAO,KAAK,KAAK,KAAK,4BAA4B,EAC7C,CACL,MAAMA,EAAS,QAAQ,KAAK,MAAM,GAAG,EAErC,GAAIA,EAAO,QACT,MAAM,KAAK,MAAM,IAAI,UAAU,gBAAgB,CAAC,EAEhD,OAAO,KAAK,UAAUA,CAAM,CAEtC,EACA,CACI,iBAAmB,CACjB,GAAI,MAAM,KAAK,IAAI,EACjB,KAAK,QAAO,MACP,IAAI,KAAK,OAAS,YACvB,OAAO,KAAK,KAAK,KAAK,4BAA4B,EAC7C,CACL,MAAMA,EAAS,QAAQ,KAAK,MAAM,GAAG,EAErC,GAAIA,EAAO,QACT,MAAM,KAAK,MAAM,IAAI,UAAU,gBAAgB,CAAC,EAEhD,OAAO,KAAK,UAAUA,CAAM,CAEtC,EACA,CAGI,eAAiB,CAEf,GAAI,KAAK,MAAM,IAAI,OAAS,EAC1B,MAAM,KAAK,MAAM,IAAI,UAAU,6DAA6D,CAAC,EAE/F,YAAK,MAAM,OAAS,KAAK,MAAM,IAC/B,KAAK,MAAM,IAAM,GACV,KAAK,KAAK,KAAK,cAAc,CAC1C,CACI,gBAAkB,CAChB,GAAI,KAAK,OAAS,YAAa,CAC7B,GAAI,KAAK,MAAM,IAAI,OAAS,EAC1B,MAAM,KAAK,MAAM,IAAI,UAAU,2DAA2D,CAAC,EAE7F,YAAK,MAAM,QAAU,IAAM,KAAK,MAAM,IACtC,KAAK,MAAM,IAAM,GACV,KAAK,KAAK,KAAK,YAAY,CAC1C,SAAiB,QAAQ,KAAK,IAAI,EAC1B,KAAK,QAAO,MAEZ,OAAM,KAAK,MAAM,IAAI,UAAU,qBAAqB,CAAC,CAE7D,CACI,cAAgB,CACd,GAAI,KAAK,OAAS,QAAU,KAAK,OAAS,QAAS,CACjD,GAAI,KAAK,MAAM,IAAI,OAAS,EAC1B,MAAM,KAAK,MAAM,IAAI,UAAU,yDAAyD,CAAC,EAE3F,YAAK,MAAM,QAAU,IAAM,KAAK,MAAM,IACtC,KAAK,MAAM,IAAM,GACV,KAAK,KAAK,KAAK,kBAAkB,CAChD,KAAa,IAAI,KAAK,cACd,OAAO,KAAK,UAAU,WAAW,KAAK,MAAM,OAAS,IAAM,KAAK,MAAM,GAAG,CAAC,EACrE,GAAI,QAAQ,KAAK,IAAI,EAC1B,KAAK,QAAO,MAEZ,OAAM,KAAK,MAAM,IAAI,UAAU,qBAAqB,CAAC,EAE7D,CACI,oBAAsB,CACpB,OAAI,KAAK,cACA,KAAK,UAAU,WAAW,KAAK,MAAM,MAAM,CAAC,EAE5C,KAAK,KAAK,KAAK,aAAa,CAE3C,CACI,eAAiB,CACf,GAAI,KAAK,OAAS,WAAY,CAC5B,GAAI,KAAK,MAAM,IAAI,OAAS,EAC1B,MAAM,KAAK,MAAM,IAAI,UAAU,0DAA0D,CAAC,EAE5F,YAAK,MAAM,QAAU,IAAM,KAAK,MAAM,IACtC,KAAK,MAAM,IAAM,GACV,KAAK,KAAK,KAAK,YAAY,CAC1C,SAAiB,QAAQ,KAAK,IAAI,EAC1B,KAAK,QAAO,MAEZ,OAAM,KAAK,MAAM,IAAI,UAAU,qBAAqB,CAAC,CAE7D,CACI,cAAgB,CACd,GAAI,KAAK,MAAM,IAAI,OAAS,GAAK,QAAQ,KAAK,IAAI,EAChD,KAAK,QAAO,MACP,IAAI,KAAK,MAAM,IAAI,SAAW,GAAK,KAAK,OAAS,WACtD,YAAK,MAAM,QAAU,IAAM,KAAK,MAAM,IACtC,KAAK,MAAM,IAAM,GACV,KAAK,KAAK,KAAK,YAAY,EAElC,MAAM,KAAK,MAAM,IAAI,UAAU,qBAAqB,CAAC,EAE7D,CACI,cAAgB,CACd,GAAI,QAAQ,KAAK,IAAI,GAEnB,GADA,KAAK,QAAO,EACR,KAAK,MAAM,IAAI,SAAW,EAC5B,YAAK,MAAM,QAAU,IAAM,KAAK,MAAM,IACtC,KAAK,MAAM,IAAM,GACV,KAAK,KAAK,KAAK,uBAAuB,MAG/C,OAAM,KAAK,MAAM,IAAI,UAAU,qBAAqB,CAAC,CAE7D,CAEI,mBAAqB,CAEnB,GAAI,KAAK,OAAS,WAAY,CAC5B,GAAI,KAAK,MAAM,IAAI,OAAS,EAC1B,MAAM,KAAK,MAAM,IAAI,UAAU,0DAA0D,CAAC,EAE5F,YAAK,MAAM,OAAS,KAAK,MAAM,IAC/B,KAAK,MAAM,IAAM,GACV,KAAK,KAAK,KAAK,gBAAgB,CAC9C,KACQ,OAAM,KAAK,MAAM,IAAI,UAAU,iBAAiB,CAAC,CAEzD,CACI,kBAAoB,CAClB,GAAI,KAAK,MAAM,IAAI,OAAS,GAAK,QAAQ,KAAK,IAAI,EAChD,KAAK,QAAO,MACP,IAAI,KAAK,MAAM,IAAI,SAAW,GAAK,KAAK,OAAS,WACtD,YAAK,MAAM,QAAU,IAAM,KAAK,MAAM,IACtC,KAAK,MAAM,IAAM,GACV,KAAK,KAAK,KAAK,gBAAgB,EAEtC,MAAM,KAAK,MAAM,IAAI,UAAU,iBAAiB,CAAC,EAEzD,CACI,kBAAoB,CAClB,GAAI,QAAQ,KAAK,IAAI,GAEnB,GADA,KAAK,QAAO,EACR,KAAK,MAAM,IAAI,SAAW,EAC5B,OAAO,KAAK,KAAK,KAAK,0BAA0B,MAGlD,OAAM,KAAK,MAAM,IAAI,UAAU,iBAAiB,CAAC,CAEzD,CACI,4BAA8B,CAE5B,GADA,KAAK,MAAM,QAAU,IAAM,KAAK,MAAM,IAClC,KAAK,OAAS,YAChB,KAAK,MAAM,IAAM,GACjB,KAAK,KAAK,KAAK,qBAAqB,MAEpC,QAAO,KAAK,OAAO,WAAW,KAAK,MAAM,MAAM,CAAC,CAExD,CACI,uBAAyB,CACvB,GAAI,QAAQ,KAAK,IAAI,EACnB,KAAK,QAAO,UACH,KAAK,cAAe,CAC7B,GAAI,KAAK,MAAM,IAAI,SAAW,EAAG,MAAM,KAAK,MAAM,IAAI,UAAU,gCAAgC,CAAC,EACjG,OAAO,KAAK,UAAU,WAAW,KAAK,MAAM,OAAS,IAAM,KAAK,MAAM,GAAG,CAAC,CAClF,KACQ,OAAM,KAAK,MAAM,IAAI,UAAU,iFAAiF,CAAC,CAEzH,CAEI,yBAA2B,CACzB,GAAI,KAAK,OAAS,YAChB,KAAK,QAAO,EACZ,KAAK,KAAK,KAAK,qBAAqB,UAC3B,KAAK,OAAS,aAAe,KAAK,OAAS,UACpD,KAAK,QAAO,EACZ,KAAK,KAAK,KAAK,iBAAiB,MAC3B,IAAI,KAAK,OAAS,OACvB,YAAK,QAAO,EACL,KAAK,OAAO,eAAe,KAAK,MAAM,OAAS,KAAK,MAAM,GAAG,CAAC,EAChE,GAAI,KAAK,cACd,OAAO,KAAK,UAAU,oBAAoB,KAAK,MAAM,OAAS,KAAK,MAAM,GAAG,CAAC,EAE7E,MAAM,KAAK,MAAM,IAAI,UAAU,iFAAiF,CAAC,EAEzH,CACI,uBAAyB,CACvB,GAAI,QAAQ,KAAK,IAAI,EACnB,KAAK,QAAO,MACP,IAAI,KAAK,MAAM,IAAI,SAAW,EACnC,MAAM,KAAK,MAAM,IAAI,UAAU,gCAAgC,CAAC,EAC3D,GAAI,KAAK,OAAS,aAAe,KAAK,OAAS,UACpD,KAAK,QAAO,EACZ,KAAK,KAAK,KAAK,iBAAiB,MAC3B,IAAI,KAAK,OAAS,OACvB,YAAK,QAAO,EACL,KAAK,OAAO,eAAe,KAAK,MAAM,OAAS,KAAK,MAAM,GAAG,CAAC,EAChE,GAAI,KAAK,cACd,OAAO,KAAK,UAAU,oBAAoB,KAAK,MAAM,OAAS,KAAK,MAAM,GAAG,CAAC,EAE7E,MAAM,KAAK,MAAM,IAAI,UAAU,iFAAiF,CAAC,GAEzH,CACI,mBAAqB,CACnB,GAAI,QAAQ,KAAK,IAAI,GAGnB,GAFA,KAAK,QAAO,EAER,QAAQ,KAAK,KAAK,MAAM,GAAG,EAAG,OAAO,KAAK,KAAK,KAAK,gBAAgB,MAExE,OAAM,KAAK,MAAM,IAAI,UAAU,kDAAkD,CAAC,CAE1F,CACI,kBAAoB,CAClB,GAAI,KAAK,OAAS,WAChB,KAAK,QAAO,EACZ,KAAK,KAAK,KAAK,gBAAgB,MAE/B,OAAM,KAAK,MAAM,IAAI,UAAU,kDAAkD,CAAC,CAE1F,CACI,kBAAoB,CAClB,GAAI,QAAQ,KAAK,IAAI,GAEnB,GADA,KAAK,QAAO,EACR,QAAQ,KAAK,KAAK,MAAM,GAAG,EAAG,OAAO,KAAK,OAAO,eAAe,KAAK,MAAM,OAAS,KAAK,MAAM,GAAG,CAAC,MAEvG,OAAM,KAAK,MAAM,IAAI,UAAU,kDAAkD,CAAC,CAE1F,CAGI,cAAgB,CAEd,GAAI,KAAK,OAAS,OAChB,YAAK,QAAO,EACL,KAAK,KAAK,KAAK,WAAW,EAC5B,GAAI,KAAK,OAAS,OACvB,YAAK,QAAO,EACL,KAAK,KAAK,KAAK,YAAY,CAE1C,CACI,aAAe,CACb,GAAI,KAAK,OAAS,OAChB,YAAK,QAAO,EACL,KAAK,KAAK,KAAK,WAAW,EAEjC,MAAM,KAAK,MAAM,IAAI,UAAU,yCAAyC,CAAC,CAEjF,CACI,aAAe,CACb,GAAI,KAAK,OAAS,OAChB,YAAK,QAAO,EACL,KAAK,KAAK,KAAK,WAAW,EAEjC,MAAM,KAAK,MAAM,IAAI,UAAU,yCAAyC,CAAC,CAEjF,CACI,aAAe,CACb,GAAI,KAAK,OAAS,OAChB,OAAO,KAAK,OAAO,EAAI,EAEvB,MAAM,KAAK,MAAM,IAAI,UAAU,yCAAyC,CAAC,CAEjF,CAEI,cAAgB,CACd,GAAI,KAAK,OAAS,OAChB,YAAK,QAAO,EACL,KAAK,KAAK,KAAK,YAAY,EAElC,MAAM,KAAK,MAAM,IAAI,UAAU,yCAAyC,CAAC,CAEjF,CAEI,cAAgB,CACd,GAAI,KAAK,OAAS,OAChB,YAAK,QAAO,EACL,KAAK,KAAK,KAAK,YAAY,EAElC,MAAM,KAAK,MAAM,IAAI,UAAU,yCAAyC,CAAC,CAEjF,CAEI,cAAgB,CACd,GAAI,KAAK,OAAS,OAChB,YAAK,QAAO,EACL,KAAK,KAAK,KAAK,YAAY,EAElC,MAAM,KAAK,MAAM,IAAI,UAAU,yCAAyC,CAAC,CAEjF,CAEI,cAAgB,CACd,GAAI,KAAK,OAAS,OAChB,OAAO,KAAK,OAAO,EAAK,EAExB,MAAM,KAAK,MAAM,IAAI,UAAU,yCAAyC,CAAC,CAEjF,CAGI,iBAAmB,CACjB,GAAI,KAAK,OAAS,SAAW,KAAK,OAAS,QAAU,KAAK,OAAS,QAAU,KAAK,OAAS,OACzF,OAAO,KACF,GAAI,KAAK,OAASzC,EAAO,IAC9B,MAAM,KAAK,MAAM,IAAI,UAAU,2BAA2B,CAAC,EACtD,OAAI,KAAK,OAAS,SAChB,KAAK,KAAK,KAAK,YAAY,EACzB,KAAK,OAAS,UAChB,KAAK,OAAO,KAAK,MAAM,WAAa,WAAU,CAAE,EAEhD,KAAK,QAAQ,KAAK,WAAY,KAAK,qBAAqB,CAEvE,CACI,sBAAuBM,EAAO,CAC5B,OAAK,KAAK,MAAM,YACd,KAAK,MAAM,UAAY,WAAW,SAASA,CAAK,CAAC,GAE/C,QAAQA,CAAK,GAAK,UAAUA,CAAK,EAEnC,KAAK,MAAM,UAAU,KAAKA,EAAM,QAAO,CAAE,EAEzC,KAAK,MAAM,UAAU,KAAKA,CAAK,EAE1B,KAAK,KAAK,KAAK,mBAAmB,CAC/C,CACI,qBAAuB,CACrB,GAAI,KAAK,OAAS,SAAW,KAAK,OAAS,QAAU,KAAK,OAAS,QAAU,KAAK,OAAS,OACzF,OAAO,KACF,GAAI,KAAK,OAAS,SACvB,OAAO,KAAK,KAAK,KAAK,YAAY,EAC7B,GAAI,KAAK,OAAS,WACvB,OAAO,KAAK,KAAK,KAAK,eAAe,EAChC,GAAI,KAAK,OAAS,UACvB,OAAO,KAAK,KAAK,KAAK,eAAe,EAErC,MAAM,KAAK,MAAM,IAAI,UAAU,wEAAwE,CAAC,CAEhH,CAGI,kBAAoB,CAClB,GAAI,KAAK,OAAS,SAAW,KAAK,OAAS,OACzC,OAAO,KACF,GAAI,KAAK,OAASN,EAAO,KAAO,KAAK,OAAS,UAAY,KAAK,OAAS,QAAU,KAAK,OAAS,OACrG,MAAM,KAAK,MAAM,IAAI,UAAU,2BAA2B,CAAC,EACtD,OAAI,KAAK,OAAS,UAChB,KAAK,OAAO,KAAK,MAAM,aAAe,YAAW,CAAE,GAErD,KAAK,MAAM,cAAa,KAAK,MAAM,YAAc,YAAW,GAC1D,KAAK,QAAQ,KAAK,YAAa,KAAK,sBAAsB,EAEzE,CACI,uBAAwB+B,EAAI,CAC1B,IAAIC,EAAS,KAAK,MAAM,YACpBC,EAAWF,EAAG,IAAI,IAAG,EACzB,QAASG,KAAMH,EAAG,IAAK,CACrB,GAAI,OAAOC,EAAQE,CAAE,IAAM,CAAC,QAAQF,EAAOE,CAAE,CAAC,GAAKF,EAAOE,CAAE,EAAE,SAAS,GACrE,MAAM,KAAK,MAAM,IAAI,UAAU,6BAA6B,CAAC,EAE/DF,EAASA,EAAOE,CAAE,EAAIF,EAAOE,CAAE,GAAK,MAAK,CACjD,CACM,GAAI,OAAOF,EAAQC,CAAQ,EACzB,MAAM,KAAK,MAAM,IAAI,UAAU,6BAA6B,CAAC,EAE/D,OAAI,UAAUF,EAAG,KAAK,GAAK,QAAQA,EAAG,KAAK,EACzCC,EAAOC,CAAQ,EAAIF,EAAG,MAAM,QAAO,EAEnCC,EAAOC,CAAQ,EAAIF,EAAG,MAEjB,KAAK,KAAK,KAAK,oBAAoB,CAChD,CACI,sBAAwB,CACtB,GAAI,KAAK,OAAS,SAAW,KAAK,OAAS,OACzC,OAAO,KACF,GAAI,KAAK,OAAS/B,EAAO,KAAO,KAAK,OAAS,UAAY,KAAK,OAAS,QAAU,KAAK,OAAS,OACrG,MAAM,KAAK,MAAM,IAAI,UAAU,2BAA2B,CAAC,EACtD,GAAI,KAAK,OAAS,WACvB,OAAO,KAAK,KAAK,KAAK,yBAAyB,EAC1C,GAAI,KAAK,OAAS,UACvB,OAAO,KAAK,KAAK,KAAK,gBAAgB,EAEtC,MAAM,KAAK,MAAM,IAAI,UAAU,wEAAwE,CAAC,CAEhH,CACI,2BAA6B,CAC3B,GAAI,KAAK,OAAS,SAAW,KAAK,OAAS,OACzC,OAAO,KACF,GAAI,KAAK,OAASA,EAAO,KAAO,KAAK,OAAS,UAAY,KAAK,OAAS,QAAU,KAAK,OAAS,OACrG,MAAM,KAAK,MAAM,IAAI,UAAU,2BAA2B,CAAC,EACtD,GAAI,KAAK,OAAS,WACvB,MAAM,KAAK,MAAM,IAAI,UAAU,mDAAmD,CAAC,EAC9E,GAAI,KAAK,OAAS,UACvB,MAAM,KAAK,MAAM,IAAI,UAAU,oDAAoD,CAAC,EAEpF,OAAO,KAAK,KAAK,KAAK,gBAAgB,CAE9C,CACA,CACE,OAAO8B,CACT,oMC34CA,iBAAiBY,EAEjB,SAASA,EAAanC,EAAKoC,EAAK,CAE9B,GAAIpC,EAAI,KAAO,MAAQA,EAAI,MAAQ,KAAM,OAAOA,EAChD,IAAIZ,EAAMY,EAAI,QAId,GAHAZ,GAAO,WAAWY,EAAI,KAAO,CAAC,SAASA,EAAI,IAAM,CAAC,SAASA,EAAI,GAAG;AAAA,EAG9DoC,GAAOA,EAAI,MAAO,CACpB,MAAMC,EAAQD,EAAI,MAAM,IAAI,EACtBE,EAAe,OAAO,KAAK,IAAID,EAAM,OAAQrC,EAAI,KAAO,CAAC,CAAC,EAAE,OAClE,IAAIuC,EAAc,IAClB,KAAOA,EAAY,OAASD,GAAcC,GAAe,IACzD,QAASC,EAAK,KAAK,IAAI,EAAGxC,EAAI,KAAO,CAAC,EAAGwC,EAAK,KAAK,IAAIH,EAAM,OAAQrC,EAAI,KAAO,CAAC,EAAG,EAAEwC,EAAI,CACxF,IAAIC,EAAU,OAAOD,EAAK,CAAC,EAE3B,GADIC,EAAQ,OAASH,IAAcG,EAAU,IAAMA,GAC/CzC,EAAI,OAASwC,EAAI,CACnBpD,GAAOqD,EAAU,KAAOJ,EAAMG,CAAE,EAAI;AAAA,EACpCpD,GAAOmD,EAAc,KACrB,QAASG,EAAK,EAAGA,EAAK1C,EAAI,IAAK,EAAE0C,EAC/BtD,GAAO,IAETA,GAAO;AAAA,CACf,MACQA,GAAOqD,EAAU,KAAOJ,EAAMG,CAAE,EAAI;AAAA,CAE5C,CACA,CACE,OAAAxC,EAAI,QAAUZ,EAAM;AAAA,EACbY,CACT,wKC/BA,cAAiB2C,EAEjB,MAAMpB,EAAalB,kBAAA,EACb8B,EAAcrB,wBAAA,EAEpB,SAAS6B,EAAajD,EAAK,CACrBe,eAAO,QAAUA,eAAO,OAAO,SAASf,CAAG,IAC7CA,EAAMA,EAAI,SAAS,MAAM,GAE3B,MAAMF,EAAS,IAAI+B,EACnB,GAAI,CACF,OAAA/B,EAAO,MAAME,CAAG,EACTF,EAAO,OAAM,CACxB,OAAWQ,EAAK,CACZ,MAAMmC,EAAYnC,EAAKN,CAAG,CAC9B,CACA,+JChBA,aAAiBkD,EAEjB,MAAMrB,EAAalB,kBAAA,EACb8B,EAAcrB,wBAAA,EAEpB,SAAS8B,EAAYlD,EAAKmD,EAAM,CACzBA,IAAMA,EAAO,CAAA,GAClB,MAAMC,EAAQ,EACRC,EAAYF,EAAK,WAAa,MAC9BrD,EAAS,IAAI+B,EACnB,OAAO,IAAI,QAAQ,CAACyB,EAASC,IAAW,CACtC,aAAaC,EAAgBJ,EAAOC,EAAWC,EAASC,CAAM,CAClE,CAAG,EACD,SAASC,EAAgBJ,EAAOC,EAAWC,EAASC,EAAQ,CAC1D,GAAIH,GAASpD,EAAI,OACf,GAAI,CACF,OAAOsD,EAAQxD,EAAO,OAAM,CAAE,CACtC,OAAeQ,EAAK,CACZ,OAAOiD,EAAOd,EAAYnC,EAAKN,CAAG,CAAC,CAC3C,CAEI,GAAI,CACFF,EAAO,MAAME,EAAI,MAAMoD,EAAOA,EAAQC,CAAS,CAAC,EAChD,aAAaG,EAAgBJ,EAAQC,EAAWA,EAAWC,EAASC,CAAM,CAChF,OAAajD,EAAK,CACZiD,EAAOd,EAAYnC,EAAKN,CAAG,CAAC,CAClC,CACA,CACA,wOC5BA,cAAiByD,EAEjB,MAAMC,EAAS,WACT7B,EAAaT,kBAAA,EAEnB,SAASqC,EAAaE,EAAK,CACzB,OAAIA,EACKC,EAAcD,CAAG,EAEjBE,EAAkB,CAE7B,CAEA,SAASD,EAAeD,EAAK,CAC3B,MAAM7D,EAAS,IAAI+B,EACnB,OAAA8B,EAAI,YAAY,MAAM,EACf,IAAI,QAAQ,CAACL,EAASC,IAAW,CACtC,IAAIO,EACAC,EAAQ,GACRC,EAAU,GACd,SAASC,GAAU,CAEjB,GADAF,EAAQ,GACJ,CAAAD,EACJ,GAAI,CACFR,EAAQxD,EAAO,OAAM,CAAE,CAC/B,OAAeQ,EAAK,CACZiD,EAAOjD,CAAG,CAClB,CACA,CACI,SAAS4D,EAAO5D,EAAK,CACnB0D,EAAU,GACVT,EAAOjD,CAAG,CAChB,CACIqD,EAAI,KAAK,MAAOM,CAAM,EACtBN,EAAI,KAAK,QAASO,CAAK,EACvBC,EAAQ,EAER,SAASA,GAAY,CACnBL,EAAW,GACX,IAAIM,EACJ,MAAQA,EAAOT,EAAI,KAAI,KAAQ,MAC7B,GAAI,CACF7D,EAAO,MAAMsE,CAAI,CAC3B,OAAiB9D,EAAK,CACZ,OAAO4D,EAAM5D,CAAG,CAC1B,CAIM,GAFAwD,EAAW,GAEPC,EAAO,OAAOE,EAAM,EAEpBD,GACJL,EAAI,KAAK,WAAYQ,CAAQ,CACnC,CACA,CAAG,CACH,CAEA,SAASN,GAAkB,CACzB,MAAM/D,EAAS,IAAI+B,EACnB,OAAO,IAAI6B,EAAO,UAAU,CAC1B,WAAY,GACZ,UAAWW,EAAOC,EAAUC,EAAI,CAC9B,GAAI,CACFzE,EAAO,MAAMuE,EAAM,SAASC,CAAQ,CAAC,CAC7C,OAAehE,EAAK,CACZ,KAAK,KAAK,QAASA,CAAG,CAC9B,CACMiE,EAAE,CACR,EACI,MAAOA,EAAI,CACT,GAAI,CACF,KAAK,KAAKzE,EAAO,OAAM,CAAE,CACjC,OAAeQ,EAAK,CACZ,KAAK,KAAK,QAASA,CAAG,CAC9B,CACMiE,EAAE,CACR,EACG,CACH,gHC9EAC,MAAA,QAAiB7D,mBAAA,EACjB6D,MAAA,QAAA,MAAuBpD,kBAAA,EACvBoD,MAAA,QAAA,OAAwBnD,mBAAA,EACxBmD,MAAA,QAAA,YAA6BlD,wBAAA,qKCH7BmD,UAAA,QAAiBC,EACjBD,UAAA,QAAA,MAAuBE,EAEvB,SAASD,EAAWjD,EAAK,CACvB,GAAIA,IAAQ,KAAM,MAAMmD,EAAU,MAAM,EACxC,GAAInD,IAAQ,OAAU,MAAMmD,EAAU,WAAW,EACjD,GAAI,OAAOnD,GAAQ,SAAU,MAAMmD,EAAU,OAAOnD,CAAG,EAGvD,GADI,OAAOA,EAAI,QAAW,aAAYA,EAAMA,EAAI,OAAM,GAClDA,GAAO,KAAM,OAAO,KACxB,MAAME,EAAOkD,EAASpD,CAAG,EACzB,GAAIE,IAAS,QAAS,MAAMiD,EAAUjD,CAAI,EAC1C,OAAOmD,EAAgB,GAAI,GAAIrD,CAAG,CACpC,CAEA,SAASmD,EAAWjD,EAAM,CACxB,OAAO,IAAI,MAAM,mCAAqCA,CAAI,CAC5D,CAEA,SAASoD,EAAetD,EAAK,CAC3B,OAAO,OAAO,KAAKA,CAAG,EAAE,OAAOC,GAAOsD,EAASvD,EAAIC,CAAG,CAAC,CAAC,CAC1D,CACA,SAASuD,EAAgBxD,EAAK,CAC5B,OAAO,OAAO,KAAKA,CAAG,EAAE,OAAOC,GAAO,CAACsD,EAASvD,EAAIC,CAAG,CAAC,CAAC,CAC3D,CAEA,SAASwD,EAAQzD,EAAK,CACpB,IAAI0D,EAAO,MAAM,QAAQ1D,CAAG,EAAI,CAAA,EAAK,OAAO,UAAU,eAAe,KAAKA,EAAK,WAAW,EAAI,CAAC,CAAC,WAAW,EAAG,MAAS,EAAI,CAAA,EAC3H,QAAS2D,KAAQ,OAAO,KAAK3D,CAAG,EAC1BA,EAAI2D,CAAI,GAAK,OAAO3D,EAAI2D,CAAI,EAAE,QAAW,YAAc,EAAE,gBAAiB3D,EAAI2D,CAAI,GACpFD,EAAKC,CAAI,EAAI3D,EAAI2D,CAAI,EAAE,OAAM,EAE7BD,EAAKC,CAAI,EAAI3D,EAAI2D,CAAI,EAGzB,OAAOD,CACT,CAEA,SAASL,EAAiBO,EAAQC,EAAQ7D,EAAK,CAC7CA,EAAMyD,EAAOzD,CAAG,EAChB,IAAI8D,EACAC,EACJD,EAAaR,EAActD,CAAG,EAC9B+D,EAAcP,EAAexD,CAAG,EAChC,MAAMe,EAAS,CAAA,EACTiD,EAAeH,GAAU,GAC/BC,EAAW,QAAQ7D,GAAO,CACxB,IAAIC,EAAOkD,EAASpD,EAAIC,CAAG,CAAC,EACxBC,IAAS,aAAeA,IAAS,QACnCa,EAAO,KAAKiD,EAAeC,EAAahE,CAAG,EAAI,MAAQiE,EAAmBlE,EAAIC,CAAG,EAAG,EAAI,CAAC,CAE/F,CAAG,EACGc,EAAO,OAAS,GAAGA,EAAO,KAAK,EAAE,EACrC,MAAMoD,EAAgBP,GAAUE,EAAW,OAAS,EAAID,EAAS,KAAO,GACxE,OAAAE,EAAY,QAAQ9D,GAAO,CACzBc,EAAO,KAAKqD,EAAiBR,EAAQO,EAAelE,EAAKD,EAAIC,CAAG,CAAC,CAAC,CACtE,CAAG,EACMc,EAAO,KAAK;AAAA,CAAI,CACzB,CAEA,SAASwC,EAAU3E,EAAO,CACxB,OAAQwE,EAASxE,CAAK,EAAC,CACrB,IAAK,YACL,IAAK,OACL,IAAK,UACL,IAAK,MACL,IAAK,QACL,IAAK,UACL,IAAK,SACL,IAAK,WACH,MAAO,GACT,IAAK,QACH,OAAOA,EAAM,SAAW,GAAKwE,EAASxE,EAAM,CAAC,CAAC,IAAM,QACtD,IAAK,QACH,OAAO,OAAO,KAAKA,CAAK,EAAE,SAAW,EAEvC,QACE,MAAO,EACb,CACA,CAEA,SAASwE,EAAUxE,EAAO,CACxB,OAAIA,IAAU,OACL,YACEA,IAAU,KACZ,OAEE,OAAOA,GAAU,UAAa,OAAO,UAAUA,CAAK,GAAK,CAAC,OAAO,GAAGA,EAAO,EAAE,EAC/E,UACE,OAAOA,GAAU,SACnB,QACE,OAAOA,GAAU,UACnB,UACE,OAAOA,GAAU,SACnB,SACE,gBAAiBA,EACnB,MAAMA,CAAK,EAAI,YAAc,WAC3B,MAAM,QAAQA,CAAK,EACrB,QAEA,OAEX,CAEA,SAASqF,EAAchE,EAAK,CAC1B,MAAMoE,EAAS,OAAOpE,CAAG,EACzB,MAAI,mBAAmB,KAAKoE,CAAM,EACzBA,EAEAC,EAAqBD,CAAM,CAEtC,CAEA,SAASC,EAAsB/F,EAAK,CAClC,MAAO,IAAMgG,EAAahG,CAAG,EAAE,QAAQ,KAAM,KAAK,EAAI,GACxD,CAEA,SAASiG,EAAwBjG,EAAK,CACpC,MAAO,IAAMA,EAAM,GACrB,CAEA,SAASkG,EAAQzF,EAAKT,EAAK,CACzB,KAAOA,EAAI,OAASS,GAAKT,EAAM,IAAMA,EACrC,OAAOA,CACT,CAEA,SAASgG,EAAchG,EAAK,CAC1B,OAAOA,EAAI,QAAQ,MAAO,MAAM,EAC7B,QAAQ,QAAS,KAAK,EACtB,QAAQ,MAAO,KAAK,EACpB,QAAQ,MAAO,KAAK,EACpB,QAAQ,MAAO,KAAK,EACpB,QAAQ,MAAO,KAAK,EAEpB,QAAQ,0BAA2BmG,GAAK,MAAQD,EAAO,EAAGC,EAAE,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAE7F,CAEA,SAASC,EAA0BpG,EAAK,CACtC,IAAIqG,EAAUrG,EAAI,MAAM,IAAI,EAAE,IAAIA,GACzBgG,EAAahG,CAAG,EAAE,QAAQ,WAAY,KAAK,CACnD,EAAE,KAAK;AAAA,CAAI,EACZ,OAAIqG,EAAQ,MAAM,EAAE,IAAM,MAAKA,GAAW;AAAA,GACnC;AAAA,EAAUA,EAAU,KAC7B,CAEA,SAASV,EAAoBtF,EAAOiG,EAAa,CAC/C,IAAI3E,EAAOkD,EAASxE,CAAK,EACzB,OAAIsB,IAAS,WACP2E,GAAe,KAAK,KAAKjG,CAAK,EAChCsB,EAAO,mBACE,CAAC,gBAAgB,KAAKtB,CAAK,GAAK,IAAI,KAAKA,CAAK,IACvDsB,EAAO,mBAGJgD,EAAgBtE,EAAOsB,CAAI,CACpC,CAEA,SAASgD,EAAiBtE,EAAOsB,EAAM,CAGrC,OADKA,IAAMA,EAAOkD,EAASxE,CAAK,GACxBsB,EAAI,CACV,IAAK,mBACH,OAAOyE,EAAyB/F,CAAK,EACvC,IAAK,SACH,OAAO0F,EAAqB1F,CAAK,EACnC,IAAK,iBACH,OAAO4F,EAAuB5F,CAAK,EACrC,IAAK,UACH,OAAOkG,EAAiBlG,CAAK,EAC/B,IAAK,QACH,OAAOmG,EAAenG,CAAK,EAC7B,IAAK,UACH,OAAOoG,EAAiBpG,CAAK,EAC/B,IAAK,WACH,OAAOqG,EAAkBrG,CAAK,EAChC,IAAK,QACH,OAAOsG,EAAqBtG,EAAM,OAAOuB,GAAKiD,EAASjD,CAAC,IAAM,QAAUiD,EAASjD,CAAC,IAAM,aAAeiD,EAASjD,CAAC,IAAM,KAAK,CAAC,EAC/H,IAAK,QACH,OAAOgF,EAAqBvG,CAAK,EAEnC,QACE,MAAMuE,EAAUjD,CAAI,CAC1B,CACA,CAEA,SAAS4E,EAAkBlG,EAAO,CAEhC,OAAO,OAAOA,CAAK,EAAE,QAAQ,wBAAyB,GAAG,CAC3D,CAEA,SAASmG,EAAgBnG,EAAO,CAC9B,GAAIA,IAAU,IACZ,MAAO,MACF,GAAIA,IAAU,KACnB,MAAO,OACF,GAAI,OAAO,GAAGA,EAAO,GAAG,EAC7B,MAAO,MACF,GAAI,OAAO,GAAGA,EAAO,EAAE,EAC5B,MAAO,OAET,KAAM,CAACwG,EAAKC,CAAG,EAAI,OAAOzG,CAAK,EAAE,MAAM,GAAG,EAC1C,OAAOkG,EAAiBM,CAAG,EAAI,IAAMC,CACvC,CAEA,SAASL,EAAkBpG,EAAO,CAChC,OAAO,OAAOA,CAAK,CACrB,CAEA,SAASqG,EAAmBrG,EAAO,CACjC,OAAOA,EAAM,YAAW,CAC1B,CAEA,SAASsG,EAAsBI,EAAQ,CACrCA,EAAS7B,EAAO6B,CAAM,EACtB,IAAIvE,EAAS,IACb,MAAMwE,EAAcD,EAAO,IAAInF,GAAK+C,EAAgB/C,CAAC,CAAC,EACtD,OAAIoF,EAAY,KAAK,IAAI,EAAE,OAAS,IAAM,KAAK,KAAKA,CAAW,EAC7DxE,GAAU;AAAA,IAASwE,EAAY,KAAK;AAAA,GAAO,EAAI;AAAA,EAE/CxE,GAAU,IAAMwE,EAAY,KAAK,IAAI,GAAKA,EAAY,OAAS,EAAI,IAAM,IAEpExE,EAAS,GAClB,CAEA,SAASoE,EAAsBvG,EAAO,CACpCA,EAAQ6E,EAAO7E,CAAK,EACpB,MAAMmC,EAAS,CAAA,EACf,cAAO,KAAKnC,CAAK,EAAE,QAAQqB,GAAO,CAChCc,EAAO,KAAKkD,EAAahE,CAAG,EAAI,MAAQiE,EAAmBtF,EAAMqB,CAAG,EAAG,EAAK,CAAC,CACjF,CAAG,EACM,KAAOc,EAAO,KAAK,IAAI,GAAKA,EAAO,OAAS,EAAI,IAAM,IAAM,GACrE,CAEA,SAASqD,EAAkBR,EAAQC,EAAQ5D,EAAKrB,EAAO,CACrD,MAAM4G,EAAYpC,EAASxE,CAAK,EAEhC,GAAI4G,IAAc,QAChB,OAAOC,EAAuB7B,EAAQC,EAAQ5D,EAAKrB,CAAK,EACnD,GAAI4G,IAAc,QACvB,OAAOE,EAAsB9B,EAAQC,EAAQ5D,EAAKrB,CAAK,EAEvD,MAAMuE,EAAUqC,CAAS,CAE7B,CAEA,SAASC,EAAwB7B,EAAQC,EAAQ5D,EAAKqF,EAAQ,CAC5DA,EAAS7B,EAAO6B,CAAM,EACtB,MAAMK,EAAiBvC,EAASkC,EAAO,CAAC,CAAC,EAEzC,GAAIK,IAAmB,QAAS,MAAMxC,EAAUwC,CAAc,EAC9D,MAAMC,EAAUhC,EAASK,EAAahE,CAAG,EACzC,IAAIc,EAAS,GACb,OAAAuE,EAAO,QAAQO,GAAS,CAClB9E,EAAO,OAAS,IAAGA,GAAU;AAAA,GACjCA,GAAU8C,EAAS,KAAO+B,EAAU;AAAA,EACpC7E,GAAUsC,EAAgBuC,EAAU,IAAK/B,EAAQgC,CAAK,CAC1D,CAAG,EACM9E,CACT,CAEA,SAAS2E,EAAuB9B,EAAQC,EAAQ5D,EAAKrB,EAAO,CAC1D,MAAMgH,EAAUhC,EAASK,EAAahE,CAAG,EACzC,IAAIc,EAAS,GACb,OAAIuC,EAAc1E,CAAK,EAAE,OAAS,IAChCmC,GAAU8C,EAAS,IAAM+B,EAAU;AAAA,GAE9B7E,EAASsC,EAAgBuC,EAAU,IAAK/B,EAAQjF,CAAK,CAC9D,gHC5QA,KAAA,MAAgBM,aAAA,EAChB,KAAA,UAAoBS,iBAAA,sCCgCb,MAAMmG,EAAN,MAAMA,UAAmBC,WAAAA,UAAW,CAApC,aAAA,CAAA,MAAA,GAAA,SAAA,EACL,KAAA,KAAO,OACP,KAAA,YAAc,OACd,KAAA,QAAU,QACV,KAAA,SAAW,EAAA,CAkDX,MAAM,OAAOC,EAAsD,CACjE,GAAI,CAAC,KAAK,WAAWA,EAAa,YAAY,EAC5C,OAAO,KAGT,MAAMC,EAAU,KAAK,SAASD,EAAa,YAAY,EACvD,GAAI,CAACC,EACH,MAAO,CACL,SAAU,OACV,KAAM,KAAK,eAAeD,CAAW,EACrC,aAAc,CAAA,EACd,aAAc,aACd,YAAAA,EACA,KAAM,CAAC,WAAW,CAAA,EAItB,MAAME,EAAW,KAAK,cAAcD,CAAO,EACrCE,EAAeD,EACjB,KAAK,gCAAgCA,CAAQ,EAC7C,KAAK,4BAA4BD,CAAO,EACtCG,EAAmB,KAAK,wBAAwBF,EAAUD,CAAO,EACjEI,EAAO,MAAM,KAAK,mBACtBL,EACAG,EACAD,EACAD,CAAA,EAsBF,MAnBkC,CAChC,SAAU,OACV,KACEC,GAAU,SAAS,MACnB,KAAK,uBAAuBD,CAAO,GACnC,KAAK,eAAeD,CAAW,EACjC,YACEE,GAAU,SAAS,aACnB,KAAK,8BAA8BD,CAAO,EAC5C,aAAAE,EACA,aAAc,aACd,YAAAH,EACA,iBACEI,EAAiB,OAAS,EAAIA,EAAmB,OACnD,KAAMC,EAAK,OAAS,EAAIA,EAAO,OAC/B,SAAUH,GAAU,SAAS,SAC7B,WAAYA,GAAU,SAAS,UAAA,CAInC,CAEA,cAAqC,CACnC,MAAO,CACL,CACE,KAAM,YACN,KAAM,CAAC,WAAW,EAClB,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wDAAA,EA6BX,CACE,KAAM,qBACN,KAAM,CAAC,eAAe,EACtB,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oEAAA,EA6BX,CACE,KAAM,wBACN,KAAM,CAAC,eAAe,EACtB,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+EAAA,CAiBX,CAEJ,CAEA,qBAAsB,CACpB,MAAO,CACL,MAAO,aACP,YAAa,aACb,OAAQ,cACR,MAAO,QACP,eAAgB,gBAChB,qBAAsB,gBACtB,WAAY,gBACZ,cAAe,gBACf,gBAAiB,gBACjB,KAAM,gBACN,cAAe,gBACf,YAAa,gBACb,WAAY,gBACZ,MAAO,gBACP,SAAU,gBACV,aAAc,gBACd,eAAgB,gBAChB,gBAAiB,gBACjB,cAAe,eAAA,CAEnB,CAEQ,cAAcD,EAAuC,CAC3D,GAAI,CACF,OAAOK,YAAAA,MAAML,CAAO,CACtB,MAAQ,CACN,OAAO,IACT,CACF,CAEQ,gCACNC,EACwB,CACxB,MAAMK,EAA+B,CAAA,EAMrC,GALA,KAAK,oBAAoBL,EAAS,aAAcK,CAAI,EACpD,KAAK,oBAAoBL,EAAS,kBAAkB,EAAGK,CAAI,EAC3D,KAAK,oBAAoBL,EAAS,oBAAoB,EAAGK,CAAI,EAC7D,KAAK,oBAAoBL,EAAS,WAAW,aAAcK,CAAI,EAE3DL,EAAS,OACX,UAAWM,KAAW,OAAO,OAAON,EAAS,MAAM,EAC5CM,IACL,KAAK,oBAAoBA,EAAQ,aAAcD,CAAI,EACnD,KAAK,oBAAoBC,EAAQ,kBAAkB,EAAGD,CAAI,EAC1D,KAAK,oBAAoBC,EAAQ,oBAAoB,EAAGD,CAAI,GAIhE,OAAOA,CACT,CAEQ,oBACNC,EACAC,EACM,CACN,GAAKD,EACL,SAAW,CAACE,EAAM9H,CAAK,IAAK,OAAO,QAAQ4H,CAAO,EAChDC,EAAYC,CAAI,EAAI,KAAK,2BAA2B9H,CAAK,CAE7D,CAEQ,2BAA2BA,EAAgC,CACjE,GAAI,OAAOA,GAAU,UAAY,OAAOA,GAAU,SAChD,OAAO,OAAOA,CAAK,EAGrB,GAAI,OAAOA,GAAU,UACnB,OAAOA,EAAQ,IAAM,WAGvB,GAAIA,GAAS,OAAOA,GAAU,SAAU,CACtC,MAAM+H,EAAS/H,EACTgI,EAAUD,EAAO,QACvB,GAAI,OAAOC,GAAY,SACrB,OAAOA,EAGT,MAAMC,EAAMF,EAAO,IACnB,GAAI,OAAOE,GAAQ,SAAU,CAC3B,MAAMC,EAAMH,EAAO,IACnB,OAAO,OAAOG,GAAQ,SAAW,OAAOD,CAAG,IAAIC,CAAG,GAAK,OAAOD,CAAG,EACnE,CAEA,MAAME,EAAOJ,EAAO,KACpB,GAAI,OAAOI,GAAS,SAClB,MAAO,QAAQA,CAAI,EAEvB,CAEA,MAAO,GACT,CAEQ,wBACNb,EACAD,EACU,CACV,OAAIC,GAAU,WAAW,SAAS,OACzBA,EAAS,UAAU,QACvB,IAAKc,GAAWA,EAAO,KAAA,CAAM,EAC7B,OAAO,OAAO,EAGZ,KAAK,yBAAyBf,CAAO,CAC9C,CAEQ,yBAAyBA,EAA2B,CAC1D,MAAMgB,EAAQhB,EAAQ,MACpB,mDAAA,EAEF,OAAKgB,EAIEA,EAAM,CAAC,EACX,MAAM,GAAG,EACT,IAAKD,GAAWA,EAAO,KAAA,EAAO,QAAQ,QAAS,EAAE,CAAC,EAClD,OAAO,OAAO,EANR,CAAA,CAOX,CAEQ,4BAA4Bf,EAAyC,CAC3E,MAAMM,EAA+B,CAAA,EAC/BW,EAAW,CACf,eACA,mBACA,qBACA,wBAAA,EAGF,UAAWV,KAAWU,EAAU,CAC9B,MAAMC,EAAQ,KAAK,eAAelB,EAASO,CAAO,EAC9CW,GACF,KAAK,qBAAqBA,EAAOZ,CAAI,CAEzC,CAEA,OAAOA,CACT,CAEQ,eAAeN,EAAiBmB,EAAoC,CAC1E,MAAMxC,EAAUwC,EAAY,QAAQ,IAAK,KAAK,EAExCH,EADQ,IAAI,OAAO,MAAMrC,CAAO,8BAA+B,GAAG,EACpD,KAAKqB,CAAO,EAChC,OAAOgB,EAAQA,EAAM,CAAC,EAAI,IAC5B,CAEQ,qBACNE,EACAZ,EACM,CACN,MAAMrF,EAAQiG,EAAM,MAAM;AAAA,CAAI,EAC9B,UAAWE,KAAWnG,EAAO,CAC3B,MAAMoG,EAAOD,EAAQ,KAAA,EACrB,GAAI,CAACC,GAAQA,EAAK,WAAW,GAAG,EAC9B,SAGF,MAAML,EAAQK,EAAK,MAAM,+BAA+B,EACxD,GAAI,CAACL,EACH,SAGF,KAAM,CAAA,CAAGP,EAAM9H,CAAK,EAAIqI,EAClBM,EAAe3I,EAAM,KAAA,EAC3B,GAAI2I,EAAa,WAAW,GAAG,EAAG,CAChC,MAAMC,EAAeD,EAAa,MAAM,yBAAyB,EAC3DE,EAAWF,EAAa,MAAM,qBAAqB,EACnDG,EAAYH,EAAa,MAAM,sBAAsB,EAC3DhB,EAAKG,CAAI,EACPc,IAAe,CAAC,IACfC,EACG,OAAOA,CAAQ,GACfC,EACE,QAAQA,CAAS,GACjB,IACV,MACEnB,EAAKG,CAAI,EAAIa,EAAa,QAAQ,KAAM,EAAE,CAE9C,CACF,CAEQ,uBAAuBtB,EAAqC,CAElE,OADcA,EAAQ,MAAM,yCAAyC,IACtD,CAAC,CAClB,CAEQ,8BAA8BA,EAAqC,CAIzE,OAHcA,EAAQ,MACpB,gDAAA,IAEa,CAAC,CAClB,CAEA,MAAc,mBACZD,EACAG,EACAD,EACAD,EACmB,CACnB,MAAMI,EAAO,IAAI,IAAY,CAAC,WAAW,CAAC,EACpCsB,EAAW,OAAO,KAAKxB,CAAY,EAAE,IAAKyB,GAAQA,EAAI,aAAa,EACnEC,EAAiBF,EAAS,KAAMC,GACpC9B,EAAW,sBAAsB,IAAI8B,CAAG,CAAA,EAGpCE,GAAY5B,GAAU,SAAS,UAAY,CAAA,GAAI,IAAKzF,GACxDA,EAAQ,YAAA,CAAY,EAEhBsH,GAAc7B,GAAU,SAAS,YAAc,CAAA,GAAI,IAAK8B,GAC5DA,EAAS,YAAA,CAAY,EAEjBC,EAAqBH,EAAS,KAAMrH,GACxCqF,EAAW,kBAAkB,IAAIrF,CAAO,CAAA,EAEpCyH,EAAsBH,EAAW,KAAMC,GAC3ClC,EAAW,kBAAkB,IAAIkC,CAAQ,CAAA,EAGrCG,EAAkBrC,EAAW,oBAAoB,KAAMsC,GAC3D,KAAK,WAAWpC,EAAaoC,CAAI,CAAA,EAE7BC,EAAiBvC,EAAW,mBAAmB,KAAMsC,GACzD,KAAK,WAAWpC,EAAaoC,CAAI,CAAA,EAG7BE,EAAiBpC,GAAU,SAAS,MAAM,eAAiB,GAC3DqC,EAAetC,EAAQ,YAAA,EACvBuC,EAAmB1C,EAAW,oBAAoB,KACrD2C,GAASH,EAAe,SAASG,CAAI,GAAKF,EAAa,SAASE,CAAI,CAAA,EAEjEC,EACJJ,EAAe,SAAS,eAAe,GACvCX,EAAS,KAAMC,GAAQA,EAAI,SAAS,eAAe,CAAC,EAEtD,OACEC,GACAI,GACAC,GACAC,GACAE,GACAG,IAEAnC,EAAK,IAAI,eAAe,EAGtBqC,GACFrC,EAAK,IAAI,eAAe,EAGnB,MAAM,KAAKA,CAAI,CACxB,CACF,EAzbEP,EAAwB,sBAAwB,IAAI,IAClD,CACE,gBACA,eACA,qBACA,WACA,cACA,gBACA,OACA,eACA,aACA,gBACA,gBACA,cACA,UACA,aACA,YACA,WACA,QACA,WACA,WACA,YAAA,EACA,IAAKY,GAASA,EAAK,aAAa,CAAA,EAGpCZ,EAAwB,sBAAwB,IAAI,CAClD,WACA,WACA,SACA,QACA,kBACA,WACA,MACA,YACA,YAAA,CACD,EAEDA,EAAwB,oBAAsB,CAC5C,WACA,gBACA,UAAA,EAEFA,EAAwB,mBAAqB,CAC3C,gBACA,oBAAA,EAEFA,EAAwB,oBAAsB,CAAC,WAAY,aAAa,EApDnE,IAAM,WAANA","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13]}