@budiauktioner/buildi-primitives 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/LICENSE +21 -0
  3. package/README.md +253 -0
  4. package/THIRD_PARTY_NOTICES.md +52 -0
  5. package/dist/banking/index.cjs +6491 -0
  6. package/dist/banking/index.cjs.map +1 -0
  7. package/dist/banking/index.d.cts +58 -0
  8. package/dist/banking/index.d.ts +58 -0
  9. package/dist/banking/index.js +6464 -0
  10. package/dist/banking/index.js.map +1 -0
  11. package/dist/contact/index.cjs +6678 -0
  12. package/dist/contact/index.cjs.map +1 -0
  13. package/dist/contact/index.d.cts +709 -0
  14. package/dist/contact/index.d.ts +709 -0
  15. package/dist/contact/index.js +6586 -0
  16. package/dist/contact/index.js.map +1 -0
  17. package/dist/country-BhD51LDL.d.cts +433 -0
  18. package/dist/country-p0n0EVQ9.d.ts +433 -0
  19. package/dist/finance/index.cjs +3592 -0
  20. package/dist/finance/index.cjs.map +1 -0
  21. package/dist/finance/index.d.cts +83 -0
  22. package/dist/finance/index.d.ts +83 -0
  23. package/dist/finance/index.js +3584 -0
  24. package/dist/finance/index.js.map +1 -0
  25. package/dist/geography/index.cjs +4227 -0
  26. package/dist/geography/index.cjs.map +1 -0
  27. package/dist/geography/index.d.cts +34 -0
  28. package/dist/geography/index.d.ts +34 -0
  29. package/dist/geography/index.js +4202 -0
  30. package/dist/geography/index.js.map +1 -0
  31. package/dist/index.cjs +14087 -0
  32. package/dist/index.cjs.map +1 -0
  33. package/dist/index.d.cts +75 -0
  34. package/dist/index.d.ts +75 -0
  35. package/dist/index.js +13868 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/isin-EeVPpNWu.d.ts +39 -0
  38. package/dist/isin-ZlQLBVm8.d.cts +39 -0
  39. package/dist/organization/index.cjs +2376 -0
  40. package/dist/organization/index.cjs.map +1 -0
  41. package/dist/organization/index.d.cts +117 -0
  42. package/dist/organization/index.d.ts +117 -0
  43. package/dist/organization/index.js +2346 -0
  44. package/dist/organization/index.js.map +1 -0
  45. package/dist/person/index.cjs +1144 -0
  46. package/dist/person/index.cjs.map +1 -0
  47. package/dist/person/index.d.cts +60 -0
  48. package/dist/person/index.d.ts +60 -0
  49. package/dist/person/index.js +1125 -0
  50. package/dist/person/index.js.map +1 -0
  51. package/dist/person-full-name-Cmc9Ynuc.d.cts +82 -0
  52. package/dist/person-full-name-D6Hbsab6.d.ts +82 -0
  53. package/dist/phone-number-C24--ggy.d.ts +139 -0
  54. package/dist/phone-number-DZ-YxCQQ.d.cts +139 -0
  55. package/dist/property/index.cjs +487 -0
  56. package/dist/property/index.cjs.map +1 -0
  57. package/dist/property/index.d.cts +56 -0
  58. package/dist/property/index.d.ts +56 -0
  59. package/dist/property/index.js +480 -0
  60. package/dist/property/index.js.map +1 -0
  61. package/dist/sample-data/index.cjs +12310 -0
  62. package/dist/sample-data/index.cjs.map +1 -0
  63. package/dist/sample-data/index.d.cts +260 -0
  64. package/dist/sample-data/index.d.ts +260 -0
  65. package/dist/sample-data/index.js +12302 -0
  66. package/dist/sample-data/index.js.map +1 -0
  67. package/dist/swedish-address-DNC3ftRF.d.cts +297 -0
  68. package/dist/swedish-address-GMzjqgxb.d.ts +297 -0
  69. package/dist/swedish-bank-account-holder-name-BFJ8h1aO.d.cts +45 -0
  70. package/dist/swedish-bank-account-holder-name-CAAru07F.d.ts +45 -0
  71. package/dist/swedish-municipality-DlUS7g7h.d.cts +87 -0
  72. package/dist/swedish-municipality-nDRHYRAd.d.ts +87 -0
  73. package/dist/swedish-organization-name-D7NvERxA.d.cts +33 -0
  74. package/dist/swedish-organization-name-rR0Q836C.d.ts +33 -0
  75. package/dist/swedish-organization-number-Bcj7V_lh.d.cts +130 -0
  76. package/dist/swedish-organization-number-DM8dpXwR.d.ts +130 -0
  77. package/dist/swedish-organization-type-CZOdETwG.d.cts +29 -0
  78. package/dist/swedish-organization-type-CZOdETwG.d.ts +29 -0
  79. package/dist/swedish-personal-identity-number-BiIg4io3.d.ts +149 -0
  80. package/dist/swedish-personal-identity-number-Cp9Coz55.d.cts +149 -0
  81. package/dist/swedish-property-designation-BM-gdd9x.d.ts +46 -0
  82. package/dist/swedish-property-designation-BaHXufqV.d.cts +46 -0
  83. package/dist/swedish-sni-code-Ccsswpni.d.ts +53 -0
  84. package/dist/swedish-sni-code-CuJFyM6l.d.cts +53 -0
  85. package/dist/swedish-swish-number-CL6Gx_h3.d.cts +397 -0
  86. package/dist/swedish-swish-number-DDG3mNDg.d.ts +397 -0
  87. package/dist/text-candidate-qg2bD9PY.d.cts +110 -0
  88. package/dist/text-candidate-qg2bD9PY.d.ts +110 -0
  89. package/dist/text-scanning/index.cjs +10414 -0
  90. package/dist/text-scanning/index.cjs.map +1 -0
  91. package/dist/text-scanning/index.d.cts +153 -0
  92. package/dist/text-scanning/index.d.ts +153 -0
  93. package/dist/text-scanning/index.js +10406 -0
  94. package/dist/text-scanning/index.js.map +1 -0
  95. package/dist/validation/index.cjs +83 -0
  96. package/dist/validation/index.cjs.map +1 -0
  97. package/dist/validation/index.d.cts +63 -0
  98. package/dist/validation/index.d.ts +63 -0
  99. package/dist/validation/index.js +79 -0
  100. package/dist/validation/index.js.map +1 -0
  101. package/dist/web/index.cjs +3994 -0
  102. package/dist/web/index.cjs.map +1 -0
  103. package/dist/web/index.d.cts +203 -0
  104. package/dist/web/index.d.ts +203 -0
  105. package/dist/web/index.js +3987 -0
  106. package/dist/web/index.js.map +1 -0
  107. package/package.json +211 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/primitives-defaults.ts","../../src/internal/input-sanitization.ts","../../src/person/person-name-normalization.ts","../../src/person/person-given-name.ts","../../src/person/person-family-name.ts","../../src/person/person-full-name.ts","../../src/internal/clock.ts","../../src/person/person-age.ts","../../src/person/person-masking.ts","../../src/text-scanning/text-candidate-category.ts","../../src/text-scanning/text-candidate.ts","../../src/text-scanning/text-match-confidence.ts","../../src/validation/validation-error-reason.ts","../../src/validation/validation-issue.ts","../../src/validation/validation-result.ts","../../src/internal/luhn.ts","../../src/person/personnummer-parser.ts","../../src/person/swedish-personal-identity-number.ts","../../src/person/swedish-coordination-number.ts"],"names":["collapseWhitespace","MAX_INPUT_LENGTH","SCAN_PATTERN"],"mappings":";AASA,IAAM,eAAA,GAAkB,OAAA;AACxB,IAAM,kBAAA,GAAqB,OAAA;AAW3B,IAAM,KAAA,GAAiC;AAAA,EACrC,OAAA,EAAS,eAAA;AAAA,EACT,SAAA,EAAW,kBAGb,CAAA;AAWO,IAAM,kBAAA,GAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKhC,IAAI,OAAA,GAAkB;AACpB,IAAA,OAAO,KAAA,CAAM,OAAA;AAAA,EACf,CAAA;AAAA,EACA,IAAI,QAAQ,KAAA,EAAe;AACzB,IAAA,KAAA,CAAM,OAAA,GAAU,KAAA;AAAA,EAClB,CAAA;AAAA,EAkCA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,wBAAA,GAAoC;AACtC,IAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,WAAA,GAAc,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACvD,IAAA,OAAO,IAAA,KAAS,IAAA;AAAA,EAClB,CASF,CAAA;;;AClFA,IAAM,sBAAA,GAAyB,iBAAA;AAC/B,IAAM,eAAA,GAAkB,uBAAA;AACxB,IAAM,OAAA,GAAU,SAAA;AAQT,SAAS,cAAc,KAAA,EAAuB;AACnD,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AAErB,IAAA,IAAI,MAAM,QAAA,IAAY,CAAA,KAAM,YAAY,CAAA,KAAM,QAAA,IAAY,MAAM,QAAA,EAAU;AACxE,MAAA,GAAA,IAAO,GAAA;AACP,MAAA;AAAA,IACF;AAEA,IAAA,IACE,CAAA,KAAM,QAAA,IACN,CAAA,KAAM,QAAA,IACN,CAAA,KAAM,QAAA,IACN,CAAA,KAAM,QAAA,IACN,CAAA,KAAM,MAAA,IACN,CAAA,KAAM,MAAA,EACN;AACA,MAAA,GAAA,IAAO,GAAA;AACP,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,sBAAA,CAAuB,IAAA,CAAK,CAAC,CAAA,EAAG;AAElC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG;AACnB,MAAA,IAAI,MAAM,GAAA,IAAQ,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,MAAM,GAAA,IAAO,GAAA;AACnD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,eAAA,CAAgB,IAAA,CAAK,CAAC,CAAA,EAAG;AAC3B,MAAA,GAAA,IAAO,GAAA;AACP,MAAA;AAAA,IACF;AAEA,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,GAAA;AACT;AAEA,IAAM,cAAA,GAAiB,MAAA;AAMhB,SAAS,mBAAmB,KAAA,EAA0C;AAC3E,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,EAAA;AAC1B,EAAA,OAAO,cAAc,KAAK,CAAA,CAAE,MAAK,CAAE,OAAA,CAAQ,gBAAgB,GAAG,CAAA;AAChE;;;ACtEO,IAAM,mBAAA,GACX,6EAAA;AAIF,IAAM,UAAA,GAAa;AAAA,EACjB,WAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;AAEO,SAASA,oBAAmB,KAAA,EAA0C;AAC3E,EAAA,IAAI,MAAA,GAAS,mBAAa,KAAK,CAAA;AAC/B,EAAA,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,UAAA,EAAY,GAAG,CAAA;AACvC,EAAA,MAAM,QAAQ,MAAA,CACX,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,YAAA,EAAc,EAAE,CAAC,CAAA,CACtC,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAC,CAAA;AAC7B,EAAA,MAAA,GAAS,KAAA,CAAM,KAAK,GAAG,CAAA;AACvB,EAAA,OAAO,sBAAsB,MAAM,CAAA;AACrC;AAEA,SAAS,sBAAsB,KAAA,EAAuB;AACpD,EAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,EAAY;AAChC,EAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,IAAA,IAAI,KAAA,CAAM,MAAA,IAAU,CAAA,CAAE,MAAA,EAAQ;AAC9B,IAAA,IAAI,CAAC,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA,EAAG;AAC1B,IAAA,IAAI,KAAA,CAAM,CAAA,CAAE,MAAM,CAAA,KAAM,GAAA,EAAK;AAC7B,IAAA,OAAO,KAAA,CAAM,KAAA,CAAM,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,KAAA;AACT;AAMO,SAAS,gBAAgB,KAAA,EAAuB;AACrD,EAAA,MAAM,OAAA,GAAU,CAAC,GAAG,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,QAAA,CAAS,IAAA,CAAK,CAAC,CAAC,CAAA;AACzD,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AACjC,EAAA,MAAM,UAAU,kBAAA,CAAmB,OAAA;AACnC,EAAA,MAAM,QAAA,GAAW,QAAQ,KAAA,CAAM,CAAC,MAAM,CAAA,KAAM,CAAA,CAAE,iBAAA,CAAkB,OAAO,CAAC,CAAA;AACxE,EAAA,MAAM,QAAA,GAAW,QAAQ,KAAA,CAAM,CAAC,MAAM,CAAA,KAAM,CAAA,CAAE,iBAAA,CAAkB,OAAO,CAAC,CAAA;AACxE,EAAA,OAAO,QAAA,IAAY,QAAA,GAAW,kBAAA,CAAmB,KAAK,CAAA,GAAI,KAAA;AAC5D;AAEO,SAAS,iBAAiB,KAAA,EAA2C;AAC1E,EAAA,IAAI,SAAS,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,KAAA;AACjD,EAAA,IAAI,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA,EAAG,OAAO,KAAA;AACpC,EAAA,IAAI,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA,EAAG,OAAO,KAAA;AACpC,EAAA,OAAO,mBAAA,CAAoB,KAAK,KAAK,CAAA;AACvC;AAEO,SAAS,mBAAmB,KAAA,EAA2C;AAC5E,EAAA,IAAI,SAAS,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,KAAA;AACjD,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAE,CAAA;AACrD,EAAA,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,MAAM,gBAAgB,CAAA;AACzD;AAEA,SAAS,mBAAmB,KAAA,EAAuB;AACjD,EAAA,OAAO,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,GAAA,CAAI,oBAAoB,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC5E;AAEA,SAAS,qBAAqB,IAAA,EAAsB;AAClD,EAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA,CAAE,IAAI,cAAc,CAAA,CAAE,KAAK,GAAG,CAAA;AACrD;AAEA,SAAS,eAAe,IAAA,EAAsB;AAC5C,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,UAAU,kBAAA,CAAmB,OAAA;AACnC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAC9C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,IAAI,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAE,CAAA,EAAG;AAC9B,MAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,IAAI,OAAA,CAAQ,CAAC,CAAA,CAAG,iBAAA,CAAkB,OAAO,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,IAC3F;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;;;ACrFA,IAAM,gBAAA,GAAmB,GAAA;AAGlB,IAAM,eAAA,GAAN,MAAM,gBAAA,CAAgB;AAAA,EAC3B,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,YAAA;AAAA,IACb,aAAA,EAAe,YAAA;AAAA,IACf,KAAA,EAAO,cAAA;AAAA,IACP,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,MACrB,mFAAA;AAAA,MACA;AAAA,KACD;AAAA,GACF,CAAA;AAAA,EAEQ,KAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EAED,WAAA,CAAY,KAAA,EAAe,KAAA,EAA0B,aAAA,EAA8B;AACzF,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,KAAK,CAAC,CAAA;AACrC,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AAAA,EACvB;AAAA,EAEA,OAAO,QAAA,CACL,KAAA,EACA,OAAA,EACwB;AACxB,IAAA,MAAM,SAAA,GAAYA,oBAAmB,KAAK,CAAA;AAC1C,IAAA,IAAI,UAAU,MAAA,KAAW,CAAA,IAAK,SAAA,CAAU,MAAA,GAAS,kBAAkB,OAAO,IAAA;AAC1E,IAAA,MAAM,UAAA,GAAa,gBAAgB,SAAS,CAAA;AAC5C,IAAA,IAAI,CAAC,kBAAA,CAAmB,UAAU,CAAA,EAAG,OAAO,IAAA;AAC5C,IAAA,MAAM,KAAA,GAAQ,WAAW,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAE,CAAA;AAC1D,IAAA,IAAI,SAAA,GAA2B,IAAA;AAC/B,IAAA,MAAM,cAAA,GAAiB,SAAS,aAAA,IAAiB,IAAA;AACjD,IAAA,IAAI,cAAA,IAAkB,IAAA,IAAQ,cAAA,CAAe,IAAA,OAAW,EAAA,EAAI;AAC1D,MAAA,MAAM,EAAA,GAAK,eAAA,CAAgBA,mBAAAA,CAAmB,cAAc,CAAC,CAAA;AAC7D,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAY,KAAM,EAAA,CAAG,WAAA,EAAa,CAAA,IAAK,IAAA;AACzE,MAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,MAAA,SAAA,GAAY,KAAA;AAAA,IACd;AACA,IAAA,OAAO,IAAI,gBAAA,CAAgB,UAAA,EAAY,KAAA,EAAO,SAAS,CAAA;AAAA,EACzD;AAAA,EAEA,OAAO,KAAA,CAAM,KAAA,EAAe,OAAA,EAA8D;AACxF,IAAA,MAAM,CAAA,GAAI,gBAAA,CAAgB,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AACjD,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,wBAAwB,CAAA;AACxD,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,gBAAA,CAAgB,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EAC7C;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,gBAAA,CAAgB,QAAA,CAAS,KAAK,CAAA;AACxC,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,KAAA;AAChB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,OAAO,gBAAA,CAAgB,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,EAC9C;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,gBAAA,CAAgB,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EAC/D;AAAA,EAEA,kBAAkB,aAAA,EAAwC;AACxD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAY,KAAM,aAAA,CAAc,WAAA,EAAa,CAAA,IAAK,IAAA;AACzF,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,IAClE;AACA,IAAA,OAAO,IAAI,gBAAA,CAAgB,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EAC1D;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EACA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,OAAO,KAAA,EAAoD;AACzD,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,KAAA;AAAA,EAC/C;AAAA,EACA,UAAU,KAAA,EAAmD;AAC3D,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI,CAAA;AAAA,EACxE;AACF;;;ACnGA,IAAMC,iBAAAA,GAAmB,GAAA;AAGlB,IAAM,gBAAA,GAAN,MAAM,iBAAA,CAAiB;AAAA,EAC5B,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,aAAA;AAAA,IACb,aAAA,EAAe,WAAA;AAAA,IACf,KAAA,EAAO,WAAA;AAAA,IACP,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,MACrB,mFAAA;AAAA,MACA;AAAA,KACD;AAAA,GACF,CAAA;AAAA,EAEQ,KAAA;AAAA,EAED,YAAY,KAAA,EAAe;AACjC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EAEA,OAAO,SAAS,KAAA,EAA2D;AACzE,IAAA,MAAM,SAAA,GAAYD,oBAAmB,KAAK,CAAA;AAC1C,IAAA,IAAI,UAAU,MAAA,KAAW,CAAA,IAAK,SAAA,CAAU,MAAA,GAASC,mBAAkB,OAAO,IAAA;AAC1E,IAAA,MAAM,UAAA,GAAa,gBAAgB,SAAS,CAAA;AAC5C,IAAA,IAAI,CAAC,gBAAA,CAAiB,UAAU,CAAA,EAAG,OAAO,IAAA;AAC1C,IAAA,OAAO,IAAI,kBAAiB,UAAU,CAAA;AAAA,EACxC;AAAA,EAEA,OAAO,MAAM,KAAA,EAAiC;AAC5C,IAAA,MAAM,CAAA,GAAI,iBAAA,CAAiB,QAAA,CAAS,KAAK,CAAA;AACzC,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,sBAAsB,CAAA;AACtD,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,iBAAA,CAAiB,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EAC9C;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,iBAAA,CAAiB,QAAA,CAAS,KAAK,CAAA;AACzC,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,KAAA;AAChB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,OAAO,iBAAA,CAAiB,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,EAC/C;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,iBAAA,CAAiB,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EAChE;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EACA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,OAAO,KAAA,EAAqD;AAC1D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,KAAA;AAAA,EAC/C;AAAA,EACA,UAAU,KAAA,EAAoD;AAC5D,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI,CAAA;AAAA,EACxE;AACF;;;AC7EA,IAAMA,iBAAAA,GAAmB,GAAA;AAGlB,IAAM,cAAA,GAAN,MAAM,eAAA,CAAe;AAAA,EAC1B,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,WAAA;AAAA,IACb,aAAA,EAAe,sBAAA;AAAA,IACf,KAAA,EAAO,WAAA;AAAA,IACP,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,MACrB,mFAAA;AAAA,MACA;AAAA,KACD;AAAA,GACF,CAAA;AAAA,EAEQ,SAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EAET,IAAI,aAAA,GAA+B;AACjC,IAAA,OAAO,KAAK,SAAA,CAAU,aAAA;AAAA,EACxB;AAAA,EAEQ,WAAA,CAAY,KAAA,EAAwB,MAAA,EAA0B,KAAA,EAAe;AACnF,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAClB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EAEA,OAAO,MAAA,CAAO,SAAA,EAA4B,UAAA,EAA8C;AACtF,IAAA,OAAO,IAAI,eAAA,CAAe,SAAA,EAAW,UAAA,EAAY,CAAA,EAAG,UAAU,KAAK,CAAA,CAAA,EAAI,UAAA,CAAW,KAAK,CAAA,CAAE,CAAA;AAAA,EAC3F;AAAA,EAEA,OAAO,QAAA,CACL,KAAA,EACA,OAAA,EACuB;AACvB,IAAA,MAAM,SAAA,GAAYD,oBAAmB,KAAK,CAAA;AAC1C,IAAA,IAAI,UAAU,MAAA,KAAW,CAAA,IAAK,SAAA,CAAU,MAAA,GAASC,mBAAkB,OAAO,IAAA;AAC1E,IAAA,MAAM,MAAA,GAAS,UAAU,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAE,CAAA;AAC1D,IAAA,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,OAAO,IAAA;AAC9B,IAAA,MAAM,SAAA,GAAY,OAAO,KAAA,CAAM,CAAA,EAAG,OAAO,MAAA,GAAS,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC7D,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,QAAA,CAAS,SAAA,EAAW,OAAO,CAAA;AACzD,IAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,IAAA,MAAM,SAAS,gBAAA,CAAiB,QAAA,CAAS,OAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAE,CAAA;AACnE,IAAA,IAAI,MAAA,KAAW,MAAM,OAAO,IAAA;AAC5B,IAAA,OAAO,IAAI,eAAA,CAAe,KAAA,EAAO,MAAA,EAAQ,CAAA,EAAG,MAAM,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAAA,EAC3E;AAAA,EAEA,OAAO,KAAA,CAAM,KAAA,EAAe,OAAA,EAA6D;AACvF,IAAA,MAAM,CAAA,GAAI,eAAA,CAAe,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AAChD,IAAA,IAAI,MAAM,IAAA,EAAM;AACd,MAAA,MAAM,IAAI,MAAM,2EAA2E,CAAA;AAAA,IAC7F;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,eAAA,CAAe,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EAC5C;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,eAAA,CAAe,QAAA,CAAS,KAAK,CAAA;AACvC,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,KAAA;AAChB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,OAAO,eAAA,CAAe,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,EAC7C;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,eAAA,CAAe,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EAC9D;AAAA,EAEA,kBAAkB,aAAA,EAAuC;AACvD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,iBAAA,CAAkB,aAAa,CAAA;AAC5D,IAAA,OAAO,IAAI,eAAA,CAAe,KAAA,EAAO,IAAA,CAAK,UAAA,EAAY,KAAK,KAAK,CAAA;AAAA,EAC9D;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EACA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,OAAO,KAAA,EAAmD;AACxD,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,KAAA;AAAA,EAC/C;AAAA,EACA,UAAU,KAAA,EAAkD;AAC1D,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI,CAAA;AAAA,EACxE;AACF;;;AC5FO,IAAM,WAAA,GAAqB;AAAA,EAChC,GAAA,EAAK,sBAAM,IAAI,IAAA;AACjB,CAAA;;;ACdA,IAAM,SAAA,GAAY,GAAA;AAClB,IAAM,aAAA,GAAgB,GAAA;AACtB,IAAM,cAAA,GAAiB,EAAA;AACvB,IAAM,iBAAiB,SAAA,GAAY,aAAA;AAEnC,IAAM,aAAA,GAAgB,8CAAA;AACtB,IAAM,cAAA,GAAiB,8CAAA;AACvB,IAAM,YAAA,GAAe,wCAAA;AAGd,IAAM,SAAA,GAAN,MAAM,UAAA,CAAU;AAAA,EACrB,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,KAAA;AAAA,IACb,aAAA,EAAe,UAAA;AAAA,IACf,KAAA,EAAO,WAAA;AAAA,IACP,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,MACrB,uHAAA;AAAA,MACA;AAAA,KACD;AAAA,GACF,CAAA;AAAA,EAEQ,KAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EAET,IAAI,mBAAA,GAA+B;AACjC,IAAA,OAAO,KAAK,KAAA,IAAS,EAAA;AAAA,EACvB;AAAA,EACA,IAAI,8BAAA,GAA0C;AAC5C,IAAA,OAAO,KAAK,KAAA,IAAS,EAAA;AAAA,EACvB;AAAA,EACA,IAAI,wBAAA,GAAoC;AACtC,IAAA,OAAO,KAAK,KAAA,IAAS,EAAA;AAAA,EACvB;AAAA,EAEQ,WAAA,CAAY,KAAA,EAAe,WAAA,EAAqB,SAAA,EAAmB;AACzE,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,EACnB;AAAA,EAEA,OAAO,SAAS,KAAA,EAAoD;AAClE,IAAA,IAAI,SAAS,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,IAAA;AACjD,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,EAAK;AAC7B,IAAA,IAAI,SAAA,CAAU,MAAA,GAAS,EAAA,EAAI,OAAO,IAAA;AAElC,IAAA,IAAI,CAAA,GAAI,YAAA,CAAa,IAAA,CAAK,SAAS,CAAA;AACnC,IAAA,IAAI,CAAA,EAAG;AACL,MAAA,MAAM,CAAA,GAAI,QAAA,CAAS,CAAA,CAAE,CAAC,GAAI,EAAE,CAAA;AAC5B,MAAA,OAAO,YAAY,CAAC,CAAA;AAAA,IACtB;AACA,IAAA,CAAA,GAAI,cAAA,CAAe,KAAK,SAAS,CAAA;AACjC,IAAA,IAAI,CAAA,EAAG;AACL,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,CAAA,CAAE,CAAC,GAAI,EAAE,CAAA;AACjC,MAAA,OAAO,cAAc,MAAM,CAAA;AAAA,IAC7B;AACA,IAAA,CAAA,GAAI,aAAA,CAAc,KAAK,SAAS,CAAA;AAChC,IAAA,IAAI,CAAA,EAAG;AACL,MAAA,MAAM,KAAA,GAAQ,WAAW,CAAA,CAAE,CAAC,EAAG,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAC,CAAA;AAChD,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,KAAA,GAAQ,GAAG,OAAO,IAAA;AACjD,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AACjC,MAAA,IAAI,KAAA,KAAU,QAAA,EAAU,OAAO,YAAA,CAAa,QAAQ,CAAA;AACpD,MAAA,OAAO,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,aAAa,CAAC,CAAA;AAAA,IACtD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,KAAA,EAA0B;AACrC,IAAA,MAAM,CAAA,GAAI,UAAA,CAAU,QAAA,CAAS,KAAK,CAAA;AAClC,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,qBAAqB,CAAA;AACrD,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,UAAA,CAAU,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EACvC;AAAA,EAEA,OAAO,UAAU,KAAA,EAA0B;AACzC,IAAA,IAAI,KAAA,GAAQ,KAAK,KAAA,GAAQ,SAAA,IAAa,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,EAAG;AAC9D,MAAA,MAAM,IAAI,UAAA,CAAW,CAAA,4BAAA,EAA+B,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,IAClE;AACA,IAAA,OAAO,IAAI,UAAA,CAAU,KAAA,EAAO,KAAA,GAAQ,EAAA,EAAI,QAAQ,aAAa,CAAA;AAAA,EAC/D;AAAA,EAEA,OAAO,WAAW,MAAA,EAA2B;AAC3C,IAAA,IAAI,MAAA,GAAS,KAAK,MAAA,GAAS,SAAA,GAAY,MAAM,CAAC,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,EAAG;AACtE,MAAA,MAAM,IAAI,UAAA,CAAW,CAAA,6BAAA,EAAgC,SAAA,GAAY,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,IACxE;AACA,IAAA,OAAO,IAAI,WAAU,IAAA,CAAK,KAAA,CAAM,SAAS,EAAE,CAAA,EAAG,MAAA,EAAQ,MAAA,GAAS,cAAc,CAAA;AAAA,EAC/E;AAAA,EAEA,OAAO,SAAS,IAAA,EAAyB;AACvC,IAAA,IAAI,IAAA,GAAO,KAAK,IAAA,GAAO,cAAA,IAAkB,CAAC,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA,EAAG;AAChE,MAAA,MAAM,IAAI,UAAA,CAAW,CAAA,2BAAA,EAA8B,cAAc,CAAA,CAAA,CAAG,CAAA;AAAA,IACtE;AACA,IAAA,OAAO,IAAI,UAAA,CAAU,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,aAAa,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,cAAc,CAAA,EAAG,IAAI,CAAA;AAAA,EAChG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,aAAA,CACL,SAAA,EACA,OAAA,EACW;AACX,IAAA,MAAM,GAAA,GAAM,SAAS,aAAA,IAAiB,OAAA,EAAS,OAAO,GAAA,EAAI,IAAK,YAAY,GAAA,EAAI;AAC/E,IAAA,MAAM,QAAQ,IAAI,IAAA;AAAA,MAChB,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,cAAA,EAAe,EAAG,UAAU,WAAA,EAAY,EAAG,SAAA,CAAU,UAAA,EAAY;AAAA,KACtF;AACA,IAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,IAAA,CAAK,IAAI,GAAA,CAAI,cAAA,EAAe,EAAG,GAAA,CAAI,WAAA,EAAY,EAAG,GAAA,CAAI,UAAA,EAAY,CAAC,CAAA;AAC1F,IAAA,IAAI,KAAA,GAAQ,KAAA;AACV,MAAA,MAAM,IAAI,WAAW,oEAAoE,CAAA;AAE3F,IAAA,MAAM,SAAA,GAAY,KAAK,KAAA,CAAA,CAAO,KAAA,CAAM,SAAQ,GAAI,KAAA,CAAM,OAAA,EAAQ,IAAK,KAAQ,CAAA;AAC3E,IAAA,IAAI,KAAA,GAAQ,KAAA,CAAM,cAAA,EAAe,GAAI,MAAM,cAAA,EAAe;AAC1D,IAAA,IACE,MAAM,WAAA,EAAY,GAAI,KAAA,CAAM,WAAA,MAC3B,KAAA,CAAM,WAAA,EAAY,KAAM,KAAA,CAAM,aAAY,IAAK,KAAA,CAAM,YAAW,GAAI,KAAA,CAAM,YAAW,EACtF;AACA,MAAA,KAAA,EAAA;AAAA,IACF;AACA,IAAA,IAAI,YAAY,IAAI,IAAA;AAAA,MAClB,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,cAAA,EAAe,GAAI,KAAA,EAAO,KAAA,CAAM,WAAA,EAAY,EAAG,KAAA,CAAM,UAAA,EAAY;AAAA,KAClF;AACA,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,SAAS,CAAA;AAC/B,MAAA,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,WAAA,EAAY,GAAI,CAAC,CAAA;AACvC,MAAA,IAAI,OAAO,KAAA,EAAO;AAClB,MAAA,SAAA,GAAY,IAAA;AACZ,MAAA,MAAA,EAAA;AAAA,IACF;AACA,IAAA,OAAO,IAAI,UAAA,CAAU,KAAA,EAAO,KAAA,GAAQ,EAAA,GAAK,QAAQ,SAAS,CAAA;AAAA,EAC5D;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,UAAA,CAAU,QAAA,CAAS,KAAK,CAAA;AAClC,IAAA,IAAI,CAAA,EAAG,OAAO,CAAA,CAAE,QAAA,EAAS;AACzB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,UAAA,CAAU,QAAA,CAAS,KAAK,CAAA;AAClC,IAAA,IAAI,CAAA,EAAG,OAAO,CAAA,CAAE,kBAAA,EAAmB;AACnC,IAAA,IAAI,OAAA,EAAS,iCAAA,IAAqC,KAAA,IAAS,IAAA,EAAM;AAC/D,MAAA,MAAM,CAAA,GAAI,MAAM,IAAA,EAAK;AACrB,MAAA,OAAO,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,IAAA;AAAA,IAC5B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,UAAA,CAAU,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EACzD;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,EAC1B;AAAA,EAEA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,SAAS,CAAA,GAAI,CAAA,EAAG,KAAK,KAAK,CAAA,MAAA,CAAA,GAAQ,CAAA,EAAG,IAAA,CAAK,WAAW,CAAA,WAAA,CAAA;AAAA,EACnE;AAAA,EAEA,OAAO,KAAA,EAA8C;AACnD,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,SAAA,KAAc,KAAA,CAAM,SAAA;AAAA,EACnD;AAAA,EACA,UAAU,KAAA,EAA6C;AACrD,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,YAAY,KAAA,CAAM,SAAA;AAAA,EAChC;AACF;AAEA,SAAS,aAAa,KAAA,EAAiC;AACrD,EAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,SAAA,EAAW,OAAO,IAAA;AAC3C,EAAA,OAAO,SAAA,CAAU,UAAU,KAAK,CAAA;AAClC;AAEA,SAAS,cAAc,MAAA,EAAkC;AACvD,EAAA,IAAI,MAAA,GAAS,CAAA,IAAK,MAAA,GAAS,SAAA,GAAY,IAAI,OAAO,IAAA;AAClD,EAAA,IAAI,MAAA,GAAS,cAAA,GAAiB,cAAA,EAAgB,OAAO,IAAA;AACrD,EAAA,OAAO,SAAA,CAAU,WAAW,MAAM,CAAA;AACpC;AAEA,SAAS,YAAY,IAAA,EAAgC;AACnD,EAAA,IAAI,IAAA,GAAO,CAAA,IAAK,IAAA,GAAO,cAAA,EAAgB,OAAO,IAAA;AAC9C,EAAA,OAAO,SAAA,CAAU,SAAS,IAAI,CAAA;AAChC;;;ACnMA,IAAM,cAAA,GAAiB,KAAA;AAWhB,SAAS,aAAA,CAAc,OAAwB,OAAA,EAA4C;AAChG,EAAA,IAAI,OAAA,EAAS,aAAa,OAAO,KAAA,CAAM,MAAM,GAAA,CAAI,SAAS,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACpE,EAAA,OAAO,MAAM,KAAA,CAAM,GAAA,CAAI,MAAM,cAAc,CAAA,CAAE,KAAK,GAAG,CAAA;AACvD;AAGO,SAAS,cAAA,CACd,OACA,OAAA,EACQ;AACR,EAAA,IAAI,OAAA,EAAS,WAAA,EAAa,OAAO,SAAA,CAAU,MAAM,KAAK,CAAA;AACtD,EAAA,OAAO,cAAA;AACT;AAGO,SAAS,YAAA,CAAa,OAAuB,OAAA,EAA0C;AAC5F,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,KAAA,CAAM,UAAA,EAAY,OAAO,CAAA;AACvD,EAAA,IAAI,OAAA,EAAS,eAAe,OAAO,CAAA,EAAG,MAAM,SAAA,CAAU,KAAK,IAAI,MAAM,CAAA,CAAA;AACrE,EAAA,OAAO,GAAG,aAAA,CAAc,KAAA,CAAM,WAAW,OAAO,CAAC,IAAI,MAAM,CAAA,CAAA;AAC7D;AAGO,SAAS,cAAc,KAAA,EAA0B;AACtD,EAAA,IAAI,KAAA,CAAM,KAAA,IAAS,CAAA,EAAG,OAAO,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,CAAE,MAAM,CAAC,CAAA,MAAA,CAAA;AACtE,EAAA,OAAO,CAAA,EAAG,IAAI,MAAA,CAAO,MAAA,CAAO,MAAM,WAAW,CAAA,CAAE,MAAM,CAAC,CAAA,WAAA,CAAA;AACxD;AAEA,SAAS,UAAU,KAAA,EAAuB;AACxC,EAAA,OAAO,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAA;AACpB;;;ACzCO,IAAM,qBAAA,GAAwB;AAAA,EACnC,kBAAA,EAAoB,oBAStB,CAAA;;;ACJO,IAAM,gBAAN,MAAiC;AAAA;AAAA,EAE7B,UAAA;AAAA;AAAA,EAEA,MAAA;AAAA;AAAA,EAEA,YAAA;AAAA;AAAA;AAAA;AAAA,EAIA,QAAA;AAAA;AAAA,EAEA,QAAA;AAAA;AAAA,EAEA,cAAA;AAAA;AAAA,EAEA,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA;AAAA;AAAA,EAEA,UAAA;AAAA;AAAA,EAEA,KAAA;AAAA,EAET,YAAY,IAAA,EAWT;AACD,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,UAAA;AACvB,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,YAAA;AACzB,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,QAAA;AACrB,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,QAAA;AACrB,IAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,cAAA;AAC3B,IAAA,IAAA,CAAK,gBAAgB,IAAA,CAAK,aAAA;AAC1B,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,UAAA;AACvB,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,UAAA;AACvB,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA;AAAA,EACpB;AAAA;AAAA,EAGA,IAAI,QAAA,GAAmB;AACrB,IAAA,OAAO,IAAA,CAAK,aAAa,IAAA,CAAK,MAAA;AAAA,EAChC;AAAA;AAAA,EAGA,SAAS,KAAA,EAA+B;AACtC,IAAA,OAAO,KAAK,UAAA,GAAa,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,aAAa,IAAA,CAAK,QAAA;AAAA,EACrE;AAAA;AAAA,EAGA,SAAS,KAAA,EAA+B;AACtC,IAAA,OAAO,KAAK,UAAA,IAAc,KAAA,CAAM,UAAA,IAAc,IAAA,CAAK,YAAY,KAAA,CAAM,QAAA;AAAA,EACvE;AACF,CAAA;;;ACtEO,IAAM,mBAAA,GAAsB;AAAA,EAWzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMR,IAAA,EAAM;AACR,CAAA;;;ACjBO,IAAM,qBAAA,GAAwB;AAAA;AAAA,EAEnC,YAAA,EAAc,cAAA;AAAA,EACd,YAAA,EAAc,cAAA;AAAA,EAGd,aAAA,EAAe,eA2BjB,CAAA;;;AC/BO,IAAM,kBAAN,MAAsB;AAAA,EAClB,MAAA;AAAA,EACA,kBAAA;AAAA,EACA,oBAAA;AAAA,EAET,WAAA,CACE,MAAA,EACA,kBAAA,EACA,oBAAA,EACA;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,kBAAA,GAAqB,kBAAA;AAC1B,IAAA,IAAA,CAAK,oBAAA,GAAuB,oBAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,WAAA,GAAsB;AACxB,IAAA,OAAO,kBAAA,CAAmB,wBAAA,GACtB,IAAA,CAAK,oBAAA,GACL,IAAA,CAAK,kBAAA;AAAA,EACX;AACF,CAAA;;;ACzBO,IAAM,mBAAN,MAAuB;AAAA,EACnB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA;AAAA,EAGT,WAAA,CACE,QAAA,EACA,OAAA,EACA,MAAA,EACA;AACA,IAAA,IAAA,CAAK,WAAW,QAAA,IAAY,IAAA;AAC5B,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,MAAM,CAAC,CAAA;AAAA,EACzC;AACF,CAAA;AAGO,SAAS,YAAY,QAAA,EAAuD;AACjF,EAAA,OAAO,IAAI,gBAAA,CAAiB,QAAA,EAAU,IAAA,EAAM,EAAE,CAAA;AAChD;AAGO,SAAS,aAAA,CACd,QAAA,EACA,cAAA,EACA,kBAAA,EACA,oBAAA,EACkB;AAClB,EAAA,IAAI,OAAO,mBAAmB,QAAA,EAAU;AACtC,IAAA,IAAI,kBAAA,KAAuB,MAAA,IAAa,oBAAA,KAAyB,MAAA,EAAW;AAC1E,MAAA,MAAM,IAAI,MAAM,gEAAgE,CAAA;AAAA,IAClF;AACA,IAAA,OAAO,IAAI,gBAAA,CAAiB,QAAA,EAAU,KAAA,EAAO;AAAA,MAC3C,IAAI,eAAA,CAAgB,cAAA,EAAgB,kBAAA,EAAoB,oBAAoB;AAAA,KAC7E,CAAA;AAAA,EACH;AACA,EAAA,OAAO,IAAI,gBAAA,CAAiB,QAAA,EAAU,KAAA,EAAO,cAAc,CAAA;AAC7D;;;ACxCO,SAAS,YAAY,MAAA,EAAyB;AACnD,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AAEpB,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,MAAM,MAAM,MAAA,CAAO,MAAA;AACnB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC5B,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AAChC,IAAA,IAAI,IAAA,GAAO,EAAA,IAAQ,IAAA,GAAO,EAAA,EAAM,OAAO,KAAA;AACvC,IAAA,IAAI,IAAI,IAAA,GAAO,EAAA;AACf,IAAA,IAAA,CAAK,GAAA,GAAM,CAAA,IAAK,CAAA,KAAM,CAAA,EAAG;AACvB,MAAA,CAAA,IAAK,CAAA;AACL,MAAA,IAAI,CAAA,GAAI,GAAG,CAAA,IAAK,CAAA;AAAA,IAClB;AACA,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAM,EAAA,KAAO,CAAA;AACtB;;;ACFA,IAAM,YAAA,GAAsB,WAAA;AAuB5B,IAAM,MAAA,GAAS,oCAAA;AACf,IAAM,GAAA,GAAM,oCAAA;AACZ,IAAM,YAAA,GAAe,0CAAA;AACrB,IAAM,eAAA,GAAkB,0CAAA;AAEjB,SAAS,QAAA,CAAS,KAAA,EAAe,KAAA,GAAe,YAAA,EAAgC;AACrF,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEjC,EAAA,IAAI,MAAc,KAAA,EAAe,GAAA;AACjC,EAAA,IAAI,UAAA,EAAoB,KAAA;AACxB,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,IAAI,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAC3B,EAAA,IAAI,CAAA,EAAG;AACL,IAAA,IAAA,GAAO,CAAC,EAAE,CAAC,CAAA;AACX,IAAA,KAAA,GAAQ,CAAC,EAAE,CAAC,CAAA;AACZ,IAAA,GAAA,GAAM,CAAC,EAAE,CAAC,CAAA;AACV,IAAA,UAAA,GAAa,EAAE,CAAC,CAAA;AAChB,IAAA,KAAA,GAAQ,EAAE,CAAC,CAAA;AACX,IAAA,QAAA,GAAW,IAAA;AAAA,EACb,CAAA,MAAA,IAAY,CAAA,GAAI,GAAA,CAAI,IAAA,CAAK,OAAO,CAAA,EAAI;AAClC,IAAA,MAAM,EAAA,GAAK,CAAC,CAAA,CAAE,CAAC,CAAA;AACf,IAAA,IAAA,GAAO,uBAAA,CAAwB,EAAA,EAAI,KAAA,EAAO,KAAK,CAAA;AAC/C,IAAA,KAAA,GAAQ,CAAC,EAAE,CAAC,CAAA;AACZ,IAAA,GAAA,GAAM,CAAC,EAAE,CAAC,CAAA;AACV,IAAA,UAAA,GAAa,EAAE,CAAC,CAAA;AAChB,IAAA,KAAA,GAAQ,EAAE,CAAC,CAAA;AAAA,EACb,CAAA,MAAA,IAAY,CAAA,GAAI,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA,EAAI;AAC3C,IAAA,MAAM,EAAA,GAAK,CAAC,CAAA,CAAE,CAAC,CAAA;AACf,IAAA,OAAA,GAAU,CAAA,CAAE,CAAC,CAAA,KAAM,GAAA;AACnB,IAAA,IAAA,GAAO,uBAAA,CAAwB,EAAA,EAAI,OAAA,EAAS,KAAK,CAAA;AACjD,IAAA,KAAA,GAAQ,CAAC,EAAE,CAAC,CAAA;AACZ,IAAA,GAAA,GAAM,CAAC,EAAE,CAAC,CAAA;AACV,IAAA,UAAA,GAAa,EAAE,CAAC,CAAA;AAChB,IAAA,KAAA,GAAQ,EAAE,CAAC,CAAA;AAAA,EACb,CAAA,MAAA,IAAY,CAAA,GAAI,eAAA,CAAgB,IAAA,CAAK,OAAO,CAAA,EAAI;AAC9C,IAAA,IAAA,GAAO,CAAC,EAAE,CAAC,CAAA;AACX,IAAA,KAAA,GAAQ,CAAC,EAAE,CAAC,CAAA;AACZ,IAAA,GAAA,GAAM,CAAC,EAAE,CAAC,CAAA;AACV,IAAA,UAAA,GAAa,EAAE,CAAC,CAAA;AAChB,IAAA,KAAA,GAAQ,EAAE,CAAC,CAAA;AACX,IAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,GAAA,EAAK,OAAO,IAAA;AAAA,EAC3B,CAAA,MAAO;AACL,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,EAAA,EAAI,OAAO,IAAA;AAEpC,EAAA,MAAM,cAAA,GAAiB,GAAA,IAAO,EAAA,IAAM,GAAA,IAAO,EAAA;AAC3C,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,IAAA,GAAO,cAAA;AACP,IAAA,OAAA,GAAU,GAAA,KAAQ,EAAA,GAAK,CAAA,GAAI,GAAA,GAAM,EAAA;AACjC,IAAA,IAAI,OAAA,KAAY,KAAK,CAAC,UAAA,CAAW,MAAM,KAAA,EAAO,OAAO,GAAG,OAAO,IAAA;AAAA,EACjE,CAAA,MAAO;AACL,IAAA,IAAA,GAAO,UAAA;AACP,IAAA,IAAI,CAAC,UAAA,CAAW,IAAA,EAAM,KAAA,EAAO,GAAG,GAAG,OAAO,IAAA;AAC1C,IAAA,OAAA,GAAU,GAAA;AAAA,EACZ;AAEA,EAAA,MAAM,SAAA,GACJ,OAAO,IAAA,GAAO,GAAG,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA,GAClC,MAAA,CAAO,KAAK,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA,GAC7B,MAAA,CAAO,GAAG,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA,GAC3B,UAAA,GACA,KAAA;AACF,EAAA,IAAI,CAAC,WAAA,CAAY,SAAS,CAAA,EAAG,OAAO,IAAA;AAGpC,EAAA,IAAI,QAAA,KAAa,IAAA,GAAO,IAAA,IAAQ,IAAA,GAAO,OAAO,OAAO,IAAA;AAErD,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA,EAAY,KAAA;AAAA,IACZ,gBAAA,EAAkB;AAAA,GACpB;AACF;AAEA,SAAS,UAAA,CAAW,IAAA,EAAc,KAAA,EAAe,GAAA,EAAsB;AACrE,EAAA,IAAI,GAAA,GAAM,GAAG,OAAO,KAAA;AACpB,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,IAAA,EAAM,KAAK,CAAA;AACnC,EAAA,OAAO,GAAA,IAAO,GAAA;AAChB;AAEA,SAAS,WAAA,CAAY,MAAc,KAAA,EAAuB;AACxD,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,MAAM,IAAA,GAAQ,OAAO,CAAA,KAAM,CAAA,IAAK,OAAO,GAAA,KAAQ,CAAA,IAAM,OAAO,GAAA,KAAQ,CAAA;AACpE,IAAA,OAAO,OAAO,EAAA,GAAK,EAAA;AAAA,EACrB;AACA,EAAA,IAAI,CAAC,GAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,EAAA;AAC1C,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,uBAAA,CAAwB,EAAA,EAAY,aAAA,EAAwB,KAAA,EAAsB;AACzF,EAAA,MAAM,GAAA,GAAM,MAAM,GAAA,EAAI;AACtB,EAAA,MAAM,WAAA,GAAc,IAAI,cAAA,EAAe;AACvC,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,WAAA,GAAc,GAAG,CAAA;AACnD,EAAA,MAAM,SAAA,GAAY,iBAAiB,GAAA,GAAM,EAAA;AACzC,EAAA,IAAI,IAAA,GAAO,SAAA;AACX,EAAA,IAAI,IAAA,GAAO,aAAa,IAAA,IAAQ,GAAA;AAChC,EAAA,IAAI,eAAe,IAAA,IAAQ,GAAA;AAC3B,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,aAAa,CAAA,EAAsB;AACjD,EAAA,MAAM,GAAA,GAAM,CAAA,CAAE,IAAA,KAAS,cAAA,GAAkB,CAAA,CAAE,OAAA,KAAY,CAAA,GAAI,EAAA,GAAK,CAAA,CAAE,OAAA,GAAU,EAAA,GAAM,CAAA,CAAE,OAAA;AACpF,EAAA,OACE,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA,GAC9B,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA,CAAE,SAAS,CAAA,EAAG,GAAG,CAAA,GAC/B,MAAA,CAAO,GAAG,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA,GAC3B,CAAA,CAAE,UAAA,GACF,CAAA,CAAE,UAAA;AAEN;AAGO,SAAS,YAAA,CAAa,CAAA,EAAc,KAAA,GAAe,YAAA,EAAsB;AAC9E,EAAA,MAAM,GAAA,GAAM,CAAA,CAAE,IAAA,KAAS,cAAA,GAAkB,CAAA,CAAE,OAAA,KAAY,CAAA,GAAI,EAAA,GAAK,CAAA,CAAE,OAAA,GAAU,EAAA,GAAM,CAAA,CAAE,OAAA;AACpF,EAAA,MAAM,EAAA,GAAK,OAAO,CAAA,CAAE,IAAA,GAAO,GAAG,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAC/C,EAAA,MAAM,MAAM,UAAA,CAAW,CAAA,EAAG,KAAK,CAAA,IAAK,MAAM,GAAA,GAAM,GAAA;AAChD,EAAA,OACE,KACA,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA,GAC/B,OAAO,GAAG,CAAA,CAAE,SAAS,CAAA,EAAG,GAAG,IAC3B,GAAA,GACA,CAAA,CAAE,aACF,CAAA,CAAE,UAAA;AAEN;AAEA,SAAS,UAAA,CAAW,GAAc,KAAA,EAAsB;AACtD,EAAA,IAAI,EAAE,IAAA,KAAS,cAAA,IAAkB,CAAA,CAAE,OAAA,KAAY,GAAG,OAAO,CAAA;AACzD,EAAA,MAAM,GAAA,GAAM,MAAM,GAAA,EAAI;AACtB,EAAA,MAAM,MAAM,CAAA,CAAE,IAAA,KAAS,cAAA,GAAiB,CAAA,CAAE,UAAU,CAAA,CAAE,OAAA;AACtD,EAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,EAAG,GAAA,IAAO,CAAC,CAAC,CAAA;AAC9D,EAAA,MAAM,EAAA,GAAK,GAAA,CAAI,OAAA,EAAQ,GAAI,MAAM,OAAA,EAAQ;AACzC,EAAA,OAAO,KAAK,KAAA,CAAM,EAAA,IAAM,MAAA,GAAS,EAAA,GAAK,OAAO,GAAA,CAAK,CAAA;AACpD;AAGO,SAAS,UAAU,CAAA,EAAiC;AACzD,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,CAAA,CAAE,UAAA,CAAW,MAAA,CAAO,EAAE,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,EAAG,EAAE,CAAA;AACnE,EAAA,OAAO,CAAA,GAAI,CAAA,KAAM,CAAA,GAAI,QAAA,GAAW,MAAA;AAClC;AAGO,SAAS,eAAe,CAAA,EAA2B;AACxD,EAAA,IAAI,EAAE,IAAA,KAAS,cAAA,IAAkB,CAAA,CAAE,OAAA,KAAY,GAAG,OAAO,IAAA;AACzD,EAAA,OAAO,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,EAAG,CAAA,CAAE,OAAO,CAAC,CAAA;AAC1D;AAGO,SAAS,aAAA,CAAc,CAAA,EAAc,KAAA,GAAe,YAAA,EAA6B;AACtF,EAAA,IAAI,EAAE,IAAA,KAAS,cAAA,IAAkB,CAAA,CAAE,OAAA,KAAY,GAAG,OAAO,IAAA;AACzD,EAAA,OAAO,UAAA,CAAW,GAAG,KAAK,CAAA;AAC5B;;;AC7LA,IAAMA,iBAAAA,GAAmB,EAAA;AAEzB,IAAM,YAAA,GAAe,sCAAA;AAGd,IAAM,6BAAA,GAAN,MAAM,8BAAA,CAA8B;AAAA,EACzC,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,0BAAA;AAAA,IACb,aAAA,EAAe,cAAA;AAAA,IACf,KAAA,EAAO,WAAA;AAAA,IACP,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,MACrB,2FAAA;AAAA,MACA,sDAAA;AAAA,MACA;AAAA,KACD;AAAA,GACF,CAAA;AAAA,EAEQ,IAAA;AAAA,EACA,MAAA;AAAA,EAED,WAAA,CAAY,KAAgB,KAAA,EAAc;AAChD,IAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AAAA,EAChB;AAAA,EAEA,IAAI,SAAA,GAAoB;AACtB,IAAA,OAAO,YAAA,CAAa,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA;AAAA,EAC5C;AAAA,EACA,IAAI,KAAA,GAAgB;AAClB,IAAA,OAAO,YAAA,CAAa,KAAK,IAAI,CAAA;AAAA,EAC/B;AAAA,EACA,IAAI,eAAA,GAAwB;AAC1B,IAAA,MAAM,CAAA,GAAI,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AAClC,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAC3D,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EACA,IAAI,OAAA,GAAkB;AACpB,IAAA,MAAM,CAAA,GAAI,aAAA,CAAc,IAAA,CAAK,IAAA,EAAM,KAAK,MAAM,CAAA;AAC9C,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,iBAAiB,CAAA;AACjD,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EACA,IAAI,UAAA,GAAgC;AAClC,IAAA,OAAO,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,EAC5B;AAAA,EAEA,OAAO,QAAA,CACL,KAAA,EACA,OAAA,EACsC;AACtC,IAAA,IAAI,SAAS,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,IAAA;AACjD,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAK,CAAA,CAAE,IAAA,EAAK;AAC5C,IAAA,IAAI,UAAU,MAAA,KAAW,CAAA,IAAK,SAAA,CAAU,MAAA,GAASA,mBAAkB,OAAO,IAAA;AAC1E,IAAA,MAAM,KAAA,GAAQ,SAAS,KAAA,IAAS,WAAA;AAChC,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,SAAA,EAAW,KAAK,CAAA;AACrC,IAAA,IAAI,GAAA,KAAQ,MAAM,OAAO,IAAA;AACzB,IAAA,IAAI,GAAA,CAAI,IAAA,KAAS,UAAA,EAAY,OAAO,IAAA;AACpC,IAAA,OAAO,IAAI,8BAAA,CAA8B,GAAA,EAAK,KAAK,CAAA;AAAA,EACrD;AAAA,EAEA,OAAO,KAAA,CAAM,KAAA,EAAe,OAAA,EAA4D;AACtF,IAAA,MAAM,CAAA,GAAI,8BAAA,CAA8B,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AAC/D,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAC3E,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,8BAAA,CAA8B,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EAC3D;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,8BAAA,CAA8B,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AAC/D,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,SAAA;AAChB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,8BAAA,CAA8B,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AAC/D,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,KAAA;AAChB,IAAA,IAAI,OAAA,EAAS,iCAAA,IAAqC,KAAA,IAAS,IAAA,EAAM;AAC/D,MAAA,MAAM,CAAA,GAAI,MAAM,IAAA,EAAK;AACrB,MAAA,OAAO,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,IAAA;AAAA,IAC5B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,8BAAA,CAA8B,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EAC7E;AAAA,EAEA,OAAO,SAAS,KAAA,EAAoD;AAClE,IAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACxC,MAAA,OAAO,aAAA;AAAA,QACL,KAAA;AAAA,QACA,qBAAA,CAAsB,YAAA;AAAA,QACtB,+BAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAK,CAAA,CAAE,IAAA,EAAK;AAC5C,IAAA,IAAI,SAAA,CAAU,SAASA,iBAAAA,EAAkB;AACvC,MAAA,OAAO,aAAA;AAAA,QACL,KAAA;AAAA,QACA,qBAAA,CAAsB,YAAA;AAAA,QACtB,qCAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM,SAAS,SAAS,CAAA;AAC9B,IAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,GAAA,CAAI,IAAA,KAAS,UAAA,EAAY;AAC3C,MAAA,OAAO,aAAA;AAAA,QACL,KAAA;AAAA,QACA,qBAAA,CAAsB,aAAA;AAAA,QACtB,0CAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EACA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,eAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EACA,eAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,OAAO,qBACL,IAAA,EACyD;AACzD,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AACnB,IAAA,MAAM,MAAsD,EAAC;AAC7D,IAAA,YAAA,CAAa,SAAA,GAAY,CAAA;AACzB,IAAA,IAAI,CAAA;AACJ,IAAA,OAAA,CAAQ,CAAA,GAAI,YAAA,CAAa,IAAA,CAAK,IAAI,OAAO,IAAA,EAAM;AAC7C,MAAA,MAAM,GAAA,GAAM,8BAAA,CAA8B,QAAA,CAAS,CAAA,CAAE,CAAC,CAAC,CAAA;AACvD,MAAA,IAAI,CAAC,GAAA,EAAK;AACV,MAAA,GAAA,CAAI,IAAA;AAAA,QACF,IAAI,aAAA,CAA6C;AAAA,UAC/C,YAAY,CAAA,CAAE,KAAA;AAAA,UACd,MAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,CAAE,MAAA;AAAA,UACb,YAAA,EAAc,EAAE,CAAC,CAAA;AAAA,UACjB,QAAA,EAAU,+BAAA;AAAA,UACV,UAAU,qBAAA,CAAsB,kBAAA;AAAA,UAChC,cAAA,EAAgB,IAAI,kBAAA,EAAmB;AAAA,UACvC,aAAA,EAAe,IAAI,QAAA,EAAS;AAAA,UAC5B,UAAA,EAAY,2BAA2B,GAAG,CAAA;AAAA,UAC1C,YAAY,mBAAA,CAAoB,IAAA;AAAA,UAChC,KAAA,EAAO;AAAA,SACR;AAAA,OACH;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,OAAO,KAAA,EAAkE;AACvE,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,KAAA;AAAA,EAC/C;AAAA,EACA,UAAU,KAAA,EAAiE;AACzE,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI,CAAA;AAAA,EACxE;AACF;AAGO,SAAS,0BAAA,CACd,GACA,OAAA,EACQ;AACR,EAAA,MAAM,IAAI,CAAA,CAAE,SAAA;AACZ,EAAA,IAAI,OAAA,EAAS,eAAe,OAAO,aAAA;AACnC,EAAA,OAAO,EAAE,KAAA,CAAM,CAAA,EAAG,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA,GAAI,MAAA;AACpC;;;AC3LA,IAAMA,iBAAAA,GAAmB,EAAA;AAEzB,IAAMC,aAAAA,GAAe,sCAAA;AAGd,IAAM,yBAAA,GAAN,MAAM,0BAAA,CAA0B;AAAA,EACrC,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,qBAAA;AAAA,IACb,aAAA,EAAe,mBAAA;AAAA,IACf,KAAA,EAAO,WAAA;AAAA,IACP,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,MACrB,gGAAA;AAAA,MACA;AAAA,KACD;AAAA,GACF,CAAA;AAAA,EAEQ,IAAA;AAAA,EACA,MAAA;AAAA,EAED,WAAA,CAAY,KAAgB,KAAA,EAAc;AAChD,IAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AAAA,EAChB;AAAA,EAEA,IAAI,SAAA,GAAoB;AACtB,IAAA,OAAO,YAAA,CAAa,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA;AAAA,EAC5C;AAAA,EACA,IAAI,KAAA,GAAgB;AAClB,IAAA,OAAO,YAAA,CAAa,KAAK,IAAI,CAAA;AAAA,EAC/B;AAAA,EACA,IAAI,OAAA,GAAkB;AACpB,IAAA,OAAO,KAAK,IAAA,CAAK,OAAA;AAAA,EACnB;AAAA,EACA,IAAI,eAAA,GAA+B;AACjC,IAAA,OAAO,cAAA,CAAe,KAAK,IAAI,CAAA;AAAA,EACjC;AAAA,EACA,IAAI,OAAA,GAAyB;AAC3B,IAAA,OAAO,aAAA,CAAc,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA;AAAA,EAC7C;AAAA,EACA,IAAI,UAAA,GAAgC;AAClC,IAAA,OAAO,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,EAC5B;AAAA,EAEA,OAAO,QAAA,CACL,KAAA,EACA,OAAA,EACkC;AAClC,IAAA,IAAI,SAAS,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,IAAA;AACjD,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAK,CAAA,CAAE,IAAA,EAAK;AAC5C,IAAA,IAAI,UAAU,MAAA,KAAW,CAAA,IAAK,SAAA,CAAU,MAAA,GAASD,mBAAkB,OAAO,IAAA;AAC1E,IAAA,MAAM,KAAA,GAAQ,SAAS,KAAA,IAAS,WAAA;AAChC,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,SAAA,EAAW,KAAK,CAAA;AACrC,IAAA,IAAI,GAAA,KAAQ,MAAM,OAAO,IAAA;AACzB,IAAA,IAAI,GAAA,CAAI,IAAA,KAAS,cAAA,EAAgB,OAAO,IAAA;AACxC,IAAA,OAAO,IAAI,0BAAA,CAA0B,GAAA,EAAK,KAAK,CAAA;AAAA,EACjD;AAAA,EAEA,OAAO,KAAA,CAAM,KAAA,EAAe,OAAA,EAAwD;AAClF,IAAA,MAAM,CAAA,GAAI,0BAAA,CAA0B,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AAC3D,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,sCAAsC,CAAA;AACtE,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,0BAAA,CAA0B,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EACvD;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,0BAAA,CAA0B,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AAC3D,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,SAAA;AAChB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,0BAAA,CAA0B,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AAC3D,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,KAAA;AAChB,IAAA,IAAI,OAAA,EAAS,iCAAA,IAAqC,KAAA,IAAS,IAAA,EAAM;AAC/D,MAAA,MAAM,CAAA,GAAI,MAAM,IAAA,EAAK;AACrB,MAAA,OAAO,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,IAAA;AAAA,IAC5B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,0BAAA,CAA0B,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EACzE;AAAA,EAEA,OAAO,SAAS,KAAA,EAAoD;AAClE,IAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACxC,MAAA,OAAO,aAAA;AAAA,QACL,KAAA;AAAA,QACA,qBAAA,CAAsB,YAAA;AAAA,QACtB,+BAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAK,CAAA,CAAE,IAAA,EAAK;AAC5C,IAAA,IAAI,SAAA,CAAU,SAASA,iBAAAA,EAAkB;AACvC,MAAA,OAAO,aAAA;AAAA,QACL,KAAA;AAAA,QACA,qBAAA,CAAsB,YAAA;AAAA,QACtB,qCAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM,SAAS,SAAS,CAAA;AAC9B,IAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,GAAA,CAAI,IAAA,KAAS,cAAA,EAAgB;AAC/C,MAAA,OAAO,aAAA;AAAA,QACL,KAAA;AAAA,QACA,qBAAA,CAAsB,aAAA;AAAA,QACtB,qCAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EACA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EACA,eAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EACA,eAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,OAAO,qBAAqB,IAAA,EAAmE;AAC7F,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AACnB,IAAA,MAAM,MAAkD,EAAC;AACzD,IAAAC,cAAa,SAAA,GAAY,CAAA;AACzB,IAAA,IAAI,CAAA;AACJ,IAAA,OAAA,CAAQ,CAAA,GAAIA,aAAAA,CAAa,IAAA,CAAK,IAAI,OAAO,IAAA,EAAM;AAC7C,MAAA,MAAM,EAAA,GAAK,0BAAA,CAA0B,QAAA,CAAS,CAAA,CAAE,CAAC,CAAC,CAAA;AAClD,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,GAAA,CAAI,IAAA;AAAA,QACF,IAAI,aAAA,CAAyC;AAAA,UAC3C,YAAY,CAAA,CAAE,KAAA;AAAA,UACd,MAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,CAAE,MAAA;AAAA,UACb,YAAA,EAAc,EAAE,CAAC,CAAA;AAAA,UACjB,QAAA,EAAU,2BAAA;AAAA,UACV,UAAU,qBAAA,CAAsB,kBAAA;AAAA,UAChC,cAAA,EAAgB,GAAG,kBAAA,EAAmB;AAAA,UACtC,aAAA,EAAe,GAAG,QAAA,EAAS;AAAA,UAC3B,UAAA,EAAY,uBAAuB,EAAE,CAAA;AAAA,UACrC,YAAY,mBAAA,CAAoB,IAAA;AAAA,UAChC,KAAA,EAAO;AAAA,SACR;AAAA,OACH;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,OAAO,KAAA,EAA8D;AACnE,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,KAAA;AAAA,EAC/C;AAAA,EACA,UAAU,KAAA,EAA6D;AACrE,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI,CAAA;AAAA,EACxE;AACF;AAGO,SAAS,sBAAA,CACd,GACA,OAAA,EACQ;AACR,EAAA,MAAM,IAAI,CAAA,CAAE,SAAA;AACZ,EAAA,IAAI,OAAA,EAAS,eAAe,OAAO,aAAA;AACnC,EAAA,OAAO,EAAE,KAAA,CAAM,CAAA,EAAG,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA,GAAI,MAAA;AACpC","file":"index.js","sourcesContent":["/**\n * Configurable defaults that control locale-sensitive behaviour across all\n * primitive types. When not explicitly set, values fall back to safe Swedish\n * defaults (the .NET version derives them from `CultureInfo.CurrentCulture`,\n * which has no direct equivalent in standard JavaScript).\n *\n * Set properties at application startup or override per-request as needed.\n */\n\nconst DEFAULT_CULTURE = \"sv-SE\";\nconst DEFAULT_UI_CULTURE = \"sv-SE\";\nconst DEFAULT_COUNTRY = \"SE\";\nconst DEFAULT_CALLING_CODE = \"46\";\n\ninterface PrimitivesDefaultsState {\n culture: string;\n uiCulture: string;\n countryAlpha2Code: string;\n defaultCallingCode: string;\n}\n\nconst state: PrimitivesDefaultsState = {\n culture: DEFAULT_CULTURE,\n uiCulture: DEFAULT_UI_CULTURE,\n countryAlpha2Code: DEFAULT_COUNTRY,\n defaultCallingCode: DEFAULT_CALLING_CODE,\n};\n\n/**\n * Configurable global defaults for locale, UI language, and default country.\n *\n * These mirror the .NET `PrimitivesDefaults` static class. `culture` controls\n * formatting and casing (Swedish-aware character handling for `Å`/`Ä`/`Ö`),\n * `uiCulture` controls display-name language selection (Swedish vs English),\n * and `countryAlpha2Code` is used as the default ISO 3166-1 alpha-2 country\n * when no explicit country is supplied.\n */\nexport const PrimitivesDefaults = {\n /**\n * BCP-47 locale tag used for casing and number formatting.\n * Defaults to `'sv-SE'`.\n */\n get culture(): string {\n return state.culture;\n },\n set culture(value: string) {\n state.culture = value;\n },\n\n /**\n * BCP-47 locale tag used for display-name language selection.\n * Defaults to `'sv-SE'`.\n */\n get uiCulture(): string {\n return state.uiCulture;\n },\n set uiCulture(value: string) {\n state.uiCulture = value;\n },\n\n /**\n * Default ISO 3166-1 alpha-2 country code. Used by types like\n * `PhoneNumber` and `SwedishOrganizationIdentifierParser` when no explicit\n * country is supplied. Defaults to `'SE'`.\n */\n get countryAlpha2Code(): string {\n return state.countryAlpha2Code;\n },\n set countryAlpha2Code(value: string) {\n state.countryAlpha2Code = value;\n },\n\n /**\n * Default phone calling code (digits only, no `+`). Used by {@link PhoneNumber}\n * for inputs without an explicit country prefix. Defaults to `'46'` (Sweden).\n */\n get defaultCallingCode(): string {\n return state.defaultCallingCode;\n },\n set defaultCallingCode(value: string) {\n state.defaultCallingCode = value;\n },\n\n /**\n * `true` when {@link uiCulture} is Swedish (`sv` or `sv-*`).\n * Types use this to select between localized and English display names.\n */\n get useLocalizedDisplayNames(): boolean {\n const lang = state.uiCulture.toLowerCase().split(\"-\")[0];\n return lang === \"sv\";\n },\n\n /** Resets all overrides to the package defaults. */\n reset(): void {\n state.culture = DEFAULT_CULTURE;\n state.uiCulture = DEFAULT_UI_CULTURE;\n state.countryAlpha2Code = DEFAULT_COUNTRY;\n state.defaultCallingCode = DEFAULT_CALLING_CODE;\n },\n};\n","/**\n * Shared input sanitization for text inputs across domain types.\n * Provides invisible-character stripping, whitespace normalization, and common\n * character-filtering helpers (digits-only, alphanumeric-only, collapse whitespace).\n *\n * Real-world inputs (e.g. from CRM/banking systems) commonly contain invisible\n * Unicode characters that break validation while being completely invisible in UIs\n * and logs. The most frequent offender is `U+202A` LEFT-TO-RIGHT EMBEDDING,\n * especially on values originating from RTL-language contexts (Arabic, Hebrew).\n * Other common contaminants include non-breaking spaces from web/PDF copy-paste,\n * null bytes from binary data, stray newlines from multi-line form fields,\n * and typographic (smart/curly) quotes from mobile keyboards and word processors.\n *\n * Equivalent of `Buildi.Primitives.InputSanitization` (internal in .NET).\n * Exposed via `internal/` and not re-exported from the public package entry.\n */\n\nconst FORMAT_OR_NOT_ASSIGNED = /[\\p{Cf}\\p{Cn}]/u;\nconst SPACE_SEPARATOR = /[\\p{Zs}\\p{Zl}\\p{Zp}]/u;\nconst CONTROL = /\\p{Cc}/u;\n\n/**\n * Strips invisible/non-printable characters, normalizes all whitespace variants\n * to ASCII space (`U+0020`), normalizes typographic single quotes to ASCII\n * apostrophe (`'`), and normalizes typographic and guillemet double quotes to\n * ASCII quotation mark (`\"`).\n */\nexport function sanitizeInput(input: string): string {\n let out = \"\";\n for (const c of input) {\n // Smart single quotes -> ASCII apostrophe.\n if (c === \"\\u2018\" || c === \"\\u2019\" || c === \"\\u201A\" || c === \"\\u201B\") {\n out += \"'\";\n continue;\n }\n // Smart and guillemet double quotes -> ASCII quotation mark.\n if (\n c === \"\\u201C\" ||\n c === \"\\u201D\" ||\n c === \"\\u201E\" ||\n c === \"\\u201F\" ||\n c === \"\\u00AB\" ||\n c === \"\\u00BB\"\n ) {\n out += '\"';\n continue;\n }\n\n if (FORMAT_OR_NOT_ASSIGNED.test(c)) {\n // Drop format characters (Cf) and unassigned code points (Cn).\n continue;\n }\n\n if (CONTROL.test(c)) {\n if (c === \"\\t\" || c === \"\\n\" || c === \"\\r\") out += \" \";\n continue;\n }\n\n if (SPACE_SEPARATOR.test(c)) {\n out += \" \";\n continue;\n }\n\n out += c;\n }\n return out;\n}\n\nconst WHITESPACE_RUN = /\\s+/g;\n\n/**\n * Sanitizes the input, trims, and collapses whitespace runs to a single space.\n * Returns an empty string when `input` is `null` or `undefined`.\n */\nexport function collapseWhitespace(input: string | null | undefined): string {\n if (input == null) return \"\";\n return sanitizeInput(input).trim().replace(WHITESPACE_RUN, \" \");\n}\n\n/** Keeps only ASCII digits (`0`-`9`), stripping everything else. */\nexport function keepDigits(input: string): string {\n let out = \"\";\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n if (c >= 0x30 && c <= 0x39) out += input[i];\n }\n return out;\n}\n\n/**\n * Keeps only ASCII letters and digits, uppercasing letters.\n * Strips whitespace, hyphens, and all other non-alphanumeric characters.\n */\nexport function keepAsciiAlphanumericUppercase(input: string): string {\n let out = \"\";\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n if (c >= 0x30 && c <= 0x39) out += input[i];\n else if (c >= 0x41 && c <= 0x5a) out += input[i];\n else if (c >= 0x61 && c <= 0x7a) out += String.fromCharCode(c - 32);\n }\n return out;\n}\n","import { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { collapseWhitespace as baseCollapse } from \"../internal/input-sanitization.js\";\n\n// Single-letter name parts (e.g. \"B N\" returned by an identity provider) are\n// not officially valid full names in most jurisdictions, but they appear in\n// real-world data from Skatteverket, BankID and other identity providers.\n// Normalization must preserve them rather than discard the name.\nexport const SINGLE_PART_PATTERN =\n /^(?:[\\p{L}\\p{M}]+|['\\p{L}\\p{M}]{2,}|[\\p{Lo}])(?:['\\p{Zs}-][\\p{L}\\p{M}]+)*$/u;\n\nexport const FULL_NAME_PATTERN = /^[\\p{L}\\p{M}][\\p{L}\\p{M}']*(?:\\s+[\\p{L}\\p{M}][\\p{L}\\p{M}']*)+$/u;\n\nconst HONORIFICS = [\n \"fröken\",\n \"froken\",\n \"froeken\",\n \"prof\",\n \"miss\",\n \"mrs\",\n \"mr\",\n \"ms\",\n \"dr\",\n \"herr\",\n \"fru\",\n];\n\nexport function collapseWhitespace(input: string | null | undefined): string {\n let result = baseCollapse(input);\n result = result.replace(/\\s*-\\s*/g, \"-\");\n const parts = result\n .split(\" \")\n .map((p) => p.replace(/^\\.+|\\.+$/g, \"\"))\n .filter((p) => p.length > 0);\n result = parts.join(\" \");\n return stripLeadingHonorific(result);\n}\n\nfunction stripLeadingHonorific(input: string): string {\n const lower = input.toLowerCase();\n for (const h of HONORIFICS) {\n if (input.length <= h.length) continue;\n if (!lower.startsWith(h)) continue;\n if (input[h.length] !== \" \") continue;\n return input.slice(h.length + 1);\n }\n return input;\n}\n\n/**\n * If every letter in `input` has the same case (all lower or all upper),\n * capitalize each word and hyphenated sub-word. Otherwise keep original casing.\n */\nexport function normalizeCasing(input: string): string {\n const letters = [...input].filter((c) => /\\p{L}/u.test(c));\n if (letters.length === 0) return input;\n const culture = PrimitivesDefaults.culture;\n const allLower = letters.every((c) => c === c.toLocaleLowerCase(culture));\n const allUpper = letters.every((c) => c === c.toLocaleUpperCase(culture));\n return allLower || allUpper ? capitalizeEachWord(input) : input;\n}\n\nexport function validateNamePart(value: string | null | undefined): boolean {\n if (value == null || value.trim() === \"\") return false;\n if (/[\\p{Cc}]/u.test(value)) return false;\n if (/[\\p{Cn}]/u.test(value)) return false;\n return SINGLE_PART_PATTERN.test(value);\n}\n\nexport function validateGivenNames(value: string | null | undefined): boolean {\n if (value == null || value.trim() === \"\") return false;\n const parts = value.split(\" \").filter((p) => p !== \"\");\n return parts.length > 0 && parts.every(validateNamePart);\n}\n\nfunction capitalizeEachWord(input: string): string {\n return input.split(\" \").filter(Boolean).map(capitalizeHyphenated).join(\" \");\n}\n\nfunction capitalizeHyphenated(word: string): string {\n return word.split(\"-\").map(capitalizeWord).join(\"-\");\n}\n\nfunction capitalizeWord(word: string): string {\n if (!word) return word;\n const culture = PrimitivesDefaults.culture;\n const lowered = word.toLocaleLowerCase(culture);\n for (let i = 0; i < lowered.length; i++) {\n if (/\\p{L}/u.test(lowered[i]!)) {\n return lowered.slice(0, i) + lowered[i]!.toLocaleUpperCase(culture) + lowered.slice(i + 1);\n }\n }\n return lowered;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport {\n collapseWhitespace,\n normalizeCasing,\n validateGivenNames,\n} from \"./person-name-normalization.js\";\n\nconst MAX_INPUT_LENGTH = 200;\n\n/** A person's given names (`förnamn`). */\nexport class PersonGivenName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Given Name\",\n localizedName: \"Förnamn\",\n emoji: \"\\u{270F}\\uFE0F\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/namn.4.18e1b10334ebe8bc80004083.html\",\n \"https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/lag-20161013-om-personnamn_sfs-2016-1013/\",\n ]),\n });\n\n readonly value: string;\n readonly names: readonly string[];\n readonly preferredName: string | null;\n\n private constructor(value: string, names: readonly string[], preferredName: string | null) {\n this.value = value;\n this.names = Object.freeze([...names]);\n this.preferredName = preferredName;\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { preferredName?: string | null },\n ): PersonGivenName | null {\n const collapsed = collapseWhitespace(input);\n if (collapsed.length === 0 || collapsed.length > MAX_INPUT_LENGTH) return null;\n const normalized = normalizeCasing(collapsed);\n if (!validateGivenNames(normalized)) return null;\n const names = normalized.split(\" \").filter((p) => p !== \"\");\n let preferred: string | null = null;\n const preferredInput = options?.preferredName ?? null;\n if (preferredInput != null && preferredInput.trim() !== \"\") {\n const np = normalizeCasing(collapseWhitespace(preferredInput));\n const found = names.find((n) => n.toLowerCase() === np.toLowerCase()) ?? null;\n if (found === null) return null;\n preferred = found;\n }\n return new PersonGivenName(normalized, names, preferred);\n }\n\n static parse(input: string, options?: { preferredName?: string | null }): PersonGivenName {\n const r = PersonGivenName.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid given name(s).\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PersonGivenName.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PersonGivenName.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return PersonGivenName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PersonGivenName.normalize(input) === input;\n }\n\n withPreferredName(preferredName: string): PersonGivenName {\n const found = this.names.find((n) => n.toLowerCase() === preferredName.toLowerCase()) ?? null;\n if (found === null) {\n throw new Error(\"Preferred name must be one of the given names.\");\n }\n return new PersonGivenName(this.value, this.names, found);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: PersonGivenName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: PersonGivenName | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport {\n collapseWhitespace,\n normalizeCasing,\n validateNamePart,\n} from \"./person-name-normalization.js\";\n\nconst MAX_INPUT_LENGTH = 200;\n\n/** A person's family name (`efternamn`). */\nexport class PersonFamilyName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Family Name\",\n localizedName: \"Efternamn\",\n emoji: \"\\u{1F4DB}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/namn.4.18e1b10334ebe8bc80004083.html\",\n \"https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/lag-20161013-om-personnamn_sfs-2016-1013/\",\n ]),\n });\n\n readonly value: string;\n\n private constructor(value: string) {\n this.value = value;\n }\n\n static tryParse(input: string | null | undefined): PersonFamilyName | null {\n const collapsed = collapseWhitespace(input);\n if (collapsed.length === 0 || collapsed.length > MAX_INPUT_LENGTH) return null;\n const normalized = normalizeCasing(collapsed);\n if (!validateNamePart(normalized)) return null;\n return new PersonFamilyName(normalized);\n }\n\n static parse(input: string): PersonFamilyName {\n const r = PersonFamilyName.tryParse(input);\n if (r === null) throw new Error(\"Invalid family name.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PersonFamilyName.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PersonFamilyName.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return PersonFamilyName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PersonFamilyName.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: PersonFamilyName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: PersonFamilyName | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { collapseWhitespace } from \"./person-name-normalization.js\";\nimport { PersonGivenName } from \"./person-given-name.js\";\nimport { PersonFamilyName } from \"./person-family-name.js\";\n\nconst MAX_INPUT_LENGTH = 500;\n\n/** A person's full name (`fullständigt namn`). */\nexport class PersonFullName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Full Name\",\n localizedName: \"Fullständigt namn\",\n emoji: \"\\u{1F4C7}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/namn.4.18e1b10334ebe8bc80004083.html\",\n \"https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/lag-20161013-om-personnamn_sfs-2016-1013/\",\n ]),\n });\n\n readonly givenName: PersonGivenName;\n readonly familyName: PersonFamilyName;\n readonly value: string;\n\n get preferredName(): string | null {\n return this.givenName.preferredName;\n }\n\n private constructor(given: PersonGivenName, family: PersonFamilyName, value: string) {\n this.givenName = given;\n this.familyName = family;\n this.value = value;\n }\n\n static create(givenName: PersonGivenName, familyName: PersonFamilyName): PersonFullName {\n return new PersonFullName(givenName, familyName, `${givenName.value} ${familyName.value}`);\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { preferredName?: string | null },\n ): PersonFullName | null {\n const collapsed = collapseWhitespace(input);\n if (collapsed.length === 0 || collapsed.length > MAX_INPUT_LENGTH) return null;\n const tokens = collapsed.split(\" \").filter((t) => t !== \"\");\n if (tokens.length < 2) return null;\n const givenPart = tokens.slice(0, tokens.length - 1).join(\" \");\n const given = PersonGivenName.tryParse(givenPart, options);\n if (given === null) return null;\n const family = PersonFamilyName.tryParse(tokens[tokens.length - 1]!);\n if (family === null) return null;\n return new PersonFullName(given, family, `${given.value} ${family.value}`);\n }\n\n static parse(input: string, options?: { preferredName?: string | null }): PersonFullName {\n const r = PersonFullName.tryParse(input, options);\n if (r === null) {\n throw new Error(\"Invalid full name. Must contain at least given name(s) and a family name.\");\n }\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PersonFullName.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PersonFullName.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return PersonFullName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PersonFullName.normalize(input) === input;\n }\n\n withPreferredName(preferredName: string): PersonFullName {\n const given = this.givenName.withPreferredName(preferredName);\n return new PersonFullName(given, this.familyName, this.value);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: PersonFullName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: PersonFullName | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n","/**\n * Provides the current date/time for date-dependent primitives such as\n * `SwedishPersonalIdentityNumber` (century derivation), `PersonAge`, and\n * coordination numbers.\n *\n * The .NET equivalent is `IBudiTimeProvider`. JS doesn't have an idiomatic\n * \"ambient clock\" abstraction, so date-dependent functions accept an optional\n * `Clock` parameter and fall back to {@link systemClock} when absent.\n */\nexport interface Clock {\n /** Returns the current date/time. */\n now(): Date;\n}\n\n/** A {@link Clock} backed by `new Date()`. */\nexport const systemClock: Clock = {\n now: () => new Date(),\n};\n\n/**\n * Creates a {@link Clock} that always returns the same {@link Date} instance\n * (the date object is cloned on each `now()` call so callers can't mutate it).\n */\nexport function fixedClock(date: Date): Clock {\n const ms = date.getTime();\n return { now: () => new Date(ms) };\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Clock, systemClock } from \"../internal/clock.js\";\n\nconst MAX_YEARS = 200;\nconst DAYS_PER_YEAR = 365;\nconst DAYS_PER_MONTH = 30;\nconst MAX_TOTAL_DAYS = MAX_YEARS * DAYS_PER_YEAR;\n\nconst YEARS_PATTERN = /^\\s*(\\d+(?:[.,]\\d+)?)\\s*(?:år|years?)?\\s*$/iu;\nconst MONTHS_PATTERN = /^\\s*(\\d+)\\s+(?:månader?|månad|months?)\\s*$/iu;\nconst DAYS_PATTERN = /^\\s*(\\d+)\\s+(?:dagar?|dag|days?)\\s*$/iu;\n\n/** A person's age (`ålder`). */\nexport class PersonAge {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Age\",\n localizedName: \"Ålder\",\n emoji: \"\\u{1F382}\",\n sources: Object.freeze([\n \"https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/foraldrabalk-1949381_sfs-1949-381/\",\n \"https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/brottsbalk-1962700_sfs-1962-700/\",\n ]),\n });\n\n readonly years: number;\n readonly totalMonths: number;\n readonly totalDays: number;\n\n get isOfSwedishLegalAge(): boolean {\n return this.years >= 18;\n }\n get isSwedishCriminallyResponsible(): boolean {\n return this.years >= 15;\n }\n get isOfSwedishRetirementAge(): boolean {\n return this.years >= 65;\n }\n\n private constructor(years: number, totalMonths: number, totalDays: number) {\n this.years = years;\n this.totalMonths = totalMonths;\n this.totalDays = totalDays;\n }\n\n static tryParse(input: string | null | undefined): PersonAge | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = input.trim();\n if (sanitized.length > 50) return null;\n\n let m = DAYS_PATTERN.exec(sanitized);\n if (m) {\n const d = parseInt(m[1]!, 10);\n return tryFromDays(d);\n }\n m = MONTHS_PATTERN.exec(sanitized);\n if (m) {\n const months = parseInt(m[1]!, 10);\n return tryFromMonths(months);\n }\n m = YEARS_PATTERN.exec(sanitized);\n if (m) {\n const value = parseFloat(m[1]!.replace(\",\", \".\"));\n if (!Number.isFinite(value) || value < 0) return null;\n const intYears = Math.trunc(value);\n if (value === intYears) return tryFromYears(intYears);\n return tryFromDays(Math.trunc(value * DAYS_PER_YEAR));\n }\n return null;\n }\n\n static parse(input: string): PersonAge {\n const r = PersonAge.tryParse(input);\n if (r === null) throw new Error(\"Invalid person age.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PersonAge.tryParse(input) !== null;\n }\n\n static fromYears(years: number): PersonAge {\n if (years < 0 || years > MAX_YEARS || !Number.isInteger(years)) {\n throw new RangeError(`Years must be between 0 and ${MAX_YEARS}.`);\n }\n return new PersonAge(years, years * 12, years * DAYS_PER_YEAR);\n }\n\n static fromMonths(months: number): PersonAge {\n if (months < 0 || months > MAX_YEARS * 12 || !Number.isInteger(months)) {\n throw new RangeError(`Months must be between 0 and ${MAX_YEARS * 12}.`);\n }\n return new PersonAge(Math.trunc(months / 12), months, months * DAYS_PER_MONTH);\n }\n\n static fromDays(days: number): PersonAge {\n if (days < 0 || days > MAX_TOTAL_DAYS || !Number.isInteger(days)) {\n throw new RangeError(`Days must be between 0 and ${MAX_TOTAL_DAYS}.`);\n }\n return new PersonAge(Math.trunc(days / DAYS_PER_YEAR), Math.trunc(days / DAYS_PER_MONTH), days);\n }\n\n /**\n * Build a {@link PersonAge} from a birth date and an optional reference date.\n * `birthDate` and `referenceDate` are interpreted as UTC midnights of the date\n * portion of the supplied {@link Date} values.\n */\n static fromBirthDate(\n birthDate: Date,\n options?: { referenceDate?: Date; clock?: Clock },\n ): PersonAge {\n const ref = options?.referenceDate ?? options?.clock?.now() ?? systemClock.now();\n const birth = new Date(\n Date.UTC(birthDate.getUTCFullYear(), birthDate.getUTCMonth(), birthDate.getUTCDate()),\n );\n const today = new Date(Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate()));\n if (birth > today)\n throw new RangeError(\"Birth date cannot be in the future relative to the reference date.\");\n\n const totalDays = Math.floor((today.getTime() - birth.getTime()) / 86400000);\n let years = today.getUTCFullYear() - birth.getUTCFullYear();\n if (\n today.getUTCMonth() < birth.getUTCMonth() ||\n (today.getUTCMonth() === birth.getUTCMonth() && today.getUTCDate() < birth.getUTCDate())\n ) {\n years--;\n }\n let monthDate = new Date(\n Date.UTC(birth.getUTCFullYear() + years, birth.getUTCMonth(), birth.getUTCDate()),\n );\n let months = 0;\n while (true) {\n const next = new Date(monthDate);\n next.setUTCMonth(next.getUTCMonth() + 1);\n if (next > today) break;\n monthDate = next;\n months++;\n }\n return new PersonAge(years, years * 12 + months, totalDays);\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PersonAge.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PersonAge.tryParse(input);\n if (r) return r.toNormalizedString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PersonAge.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return String(this.years);\n }\n\n toString(): string {\n return this.years >= 1 ? `${this.years} år` : `${this.totalMonths} månader`;\n }\n\n equals(other: PersonAge | null | undefined): boolean {\n return other != null && this.totalDays === other.totalDays;\n }\n compareTo(other: PersonAge | null | undefined): number {\n if (other == null) return 1;\n return this.totalDays - other.totalDays;\n }\n}\n\nfunction tryFromYears(years: number): PersonAge | null {\n if (years < 0 || years > MAX_YEARS) return null;\n return PersonAge.fromYears(years);\n}\n\nfunction tryFromMonths(months: number): PersonAge | null {\n if (months < 0 || months > MAX_YEARS * 12) return null;\n if (months * DAYS_PER_MONTH > MAX_TOTAL_DAYS) return null;\n return PersonAge.fromMonths(months);\n}\n\nfunction tryFromDays(days: number): PersonAge | null {\n if (days < 0 || days > MAX_TOTAL_DAYS) return null;\n return PersonAge.fromDays(days);\n}\n","import { PersonAge } from \"./person-age.js\";\nimport { PersonFamilyName } from \"./person-family-name.js\";\nimport { PersonFullName } from \"./person-full-name.js\";\nimport { PersonGivenName } from \"./person-given-name.js\";\n\nconst MaskedNamePart = \"***\";\n\nexport interface PersonNameMaskingOptions {\n readonly useInitials?: boolean;\n}\n\nexport interface FullNameMaskingOptions extends PersonNameMaskingOptions {\n readonly showGivenName?: boolean;\n}\n\n/** Mask given names, e.g. `Anna Maria` -> `*** ***`. */\nexport function maskGivenName(value: PersonGivenName, options?: PersonNameMaskingOptions): string {\n if (options?.useInitials) return value.names.map(toInitial).join(\" \");\n return value.names.map(() => MaskedNamePart).join(\" \");\n}\n\n/** Mask a family name, e.g. `Andersson` -> `***`. */\nexport function maskFamilyName(\n value: PersonFamilyName,\n options?: PersonNameMaskingOptions,\n): string {\n if (options?.useInitials) return toInitial(value.value);\n return MaskedNamePart;\n}\n\n/** Mask a full name, e.g. `Anna Andersson` -> `*** ***`. */\nexport function maskFullName(value: PersonFullName, options?: FullNameMaskingOptions): string {\n const family = maskFamilyName(value.familyName, options);\n if (options?.showGivenName) return `${value.givenName.value} ${family}`;\n return `${maskGivenName(value.givenName, options)} ${family}`;\n}\n\n/** Mask an age, keeping only its magnitude, e.g. `42` -> `** år`. */\nexport function maskPersonAge(value: PersonAge): string {\n if (value.years >= 1) return `${\"*\".repeat(String(value.years).length)} år`;\n return `${\"*\".repeat(String(value.totalMonths).length)} månader`;\n}\n\nfunction toInitial(value: string): string {\n return `${value[0]}.`;\n}\n","/**\n * Broad classification of a {@link TextCandidate} for filtering and selective\n * masking.\n */\nexport const TextCandidateCategory = {\n PersonalIdentifier: \"PersonalIdentifier\",\n OrganizationIdentifier: \"OrganizationIdentifier\",\n Financial: \"Financial\",\n Contact: \"Contact\",\n Vehicle: \"Vehicle\",\n Property: \"Property\",\n Product: \"Product\",\n Geography: \"Geography\",\n Measurement: \"Measurement\",\n} as const;\n\nexport type TextCandidateCategory =\n (typeof TextCandidateCategory)[keyof typeof TextCandidateCategory];\n","import { TextCandidateCategory } from \"./text-candidate-category.js\";\nimport { TextMatchConfidence } from \"./text-match-confidence.js\";\n\n/**\n * A potential match of a structured type found in unstructured text.\n *\n * Text scanning is heuristic-based. Candidates may be false positives, and\n * valid occurrences may be missed. No guarantee is made that the matched text\n * actually represents the identified type in its original context.\n */\nexport class TextCandidate<T = unknown> {\n /** Zero-based start position in the scanned text. */\n readonly startIndex: number;\n /** Number of characters in the original matched span. */\n readonly length: number;\n /** The raw substring from the input text that was matched. */\n readonly originalText: string;\n /**\n * Short type name, e.g. `EmailAddress` or `SwedishPersonalIdentityNumber`.\n */\n readonly typeName: string;\n /** Broad category of the matched type. */\n readonly category: TextCandidateCategory;\n /** Machine-comparable canonical form of the matched value. */\n readonly normalizedForm: string;\n /** Human-readable display form of the matched value. */\n readonly formattedForm: string;\n /**\n * Display form with sensitive content masked (e.g. `990807-****`).\n * Produced by the type's `toMaskedString()` helper.\n */\n readonly maskedForm: string;\n /** Heuristic confidence level. */\n readonly confidence: TextMatchConfidence;\n /** The successfully parsed instance of the matched type. */\n readonly value: T;\n\n constructor(opts: {\n startIndex: number;\n length: number;\n originalText: string;\n typeName: string;\n category: TextCandidateCategory;\n normalizedForm: string;\n formattedForm: string;\n maskedForm: string;\n confidence: TextMatchConfidence;\n value: T;\n }) {\n this.startIndex = opts.startIndex;\n this.length = opts.length;\n this.originalText = opts.originalText;\n this.typeName = opts.typeName;\n this.category = opts.category;\n this.normalizedForm = opts.normalizedForm;\n this.formattedForm = opts.formattedForm;\n this.maskedForm = opts.maskedForm;\n this.confidence = opts.confidence;\n this.value = opts.value;\n }\n\n /** Exclusive end position (`startIndex + length`). */\n get endIndex(): number {\n return this.startIndex + this.length;\n }\n\n /** Returns `true` if this candidate's span overlaps with `other`. */\n overlaps(other: TextCandidate): boolean {\n return this.startIndex < other.endIndex && other.startIndex < this.endIndex;\n }\n\n /** Returns `true` if this candidate's span fully contains `other`. */\n contains(other: TextCandidate): boolean {\n return this.startIndex <= other.startIndex && this.endIndex >= other.endIndex;\n }\n}\n","/**\n * Indicates the confidence level of a candidate found by text scanning.\n * Higher confidence means stronger structural evidence, but no level guarantees\n * the absence of false positives.\n */\nexport const TextMatchConfidence = {\n /**\n * Pattern match only. High false-positive risk — the matched text merely\n * fits a syntactic pattern (e.g. a run of digits that happens to be the\n * right length).\n */\n Low: 0,\n /**\n * Structural match with partial validation — the format is correct but no\n * checksum or strong distinguishing feature confirms the match.\n */\n Medium: 1,\n /**\n * Strong match with checksum or format-specific validation (e.g. a personal\n * identity number with a valid Luhn check digit and plausible date, or an\n * IBAN with valid MOD-97).\n */\n High: 2,\n} as const;\n\nexport type TextMatchConfidence = (typeof TextMatchConfidence)[keyof typeof TextMatchConfidence];\n","/**\n * Describes why a value failed validation. Shared across all types that support\n * the `validate` method. Not every reason applies to every type.\n *\n * Maps 1:1 to the .NET `ValidationErrorReason` enum.\n */\nexport const ValidationErrorReason = {\n // --- Common ---\n InputIsEmpty: \"InputIsEmpty\",\n InputTooLong: \"InputTooLong\",\n InputTooShort: \"InputTooShort\",\n InvalidLength: \"InvalidLength\",\n InvalidFormat: \"InvalidFormat\",\n InvalidCharacters: \"InvalidCharacters\",\n InvalidCheckDigit: \"InvalidCheckDigit\",\n\n // --- Banking / clearing ---\n UnknownClearingRange: \"UnknownClearingRange\",\n InvalidSwedbankFormat: \"InvalidSwedbankFormat\",\n InvalidAccountLengthForBank: \"InvalidAccountLengthForBank\",\n InvalidClearingNumber: \"InvalidClearingNumber\",\n\n // --- Identity / organization ---\n InvalidDate: \"InvalidDate\",\n InvalidPrefix: \"InvalidPrefix\",\n InvalidEntityPattern: \"InvalidEntityPattern\",\n\n // --- International / country ---\n UnknownCountryCode: \"UnknownCountryCode\",\n InvalidCountryPrefix: \"InvalidCountryPrefix\",\n InvalidLengthForCountry: \"InvalidLengthForCountry\",\n\n // --- OCR ---\n InvalidLengthDigit: \"InvalidLengthDigit\",\n\n // --- Email ---\n MissingAtSign: \"MissingAtSign\",\n InvalidLocalPart: \"InvalidLocalPart\",\n InvalidDomain: \"InvalidDomain\",\n} as const;\n\nexport type ValidationErrorReason =\n (typeof ValidationErrorReason)[keyof typeof ValidationErrorReason];\n","import { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { ValidationErrorReason } from \"./validation-error-reason.js\";\n\n/**\n * A single validation problem detected during `validate`, carrying a\n * machine-readable {@link reason} and human-readable descriptions in English\n * and the current locale.\n */\nexport class ValidationIssue {\n readonly reason: ValidationErrorReason;\n readonly englishDescription: string;\n readonly localizedDescription: string;\n\n constructor(\n reason: ValidationErrorReason,\n englishDescription: string,\n localizedDescription: string,\n ) {\n this.reason = reason;\n this.englishDescription = englishDescription;\n this.localizedDescription = localizedDescription;\n }\n\n /**\n * Returns {@link localizedDescription} when\n * {@link PrimitivesDefaults.useLocalizedDisplayNames} is `true`, otherwise\n * {@link englishDescription}.\n */\n get description(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames\n ? this.localizedDescription\n : this.englishDescription;\n }\n}\n","import { ValidationIssue } from \"./validation-issue.js\";\nimport { ValidationErrorReason } from \"./validation-error-reason.js\";\n\n/**\n * The outcome of a `validate` call, carrying the original input, a validity\n * flag, and zero or more {@link ValidationIssue} entries that explain why the\n * input is invalid.\n */\nexport class ValidationResult {\n readonly rawInput: string | null;\n readonly isValid: boolean;\n readonly issues: readonly ValidationIssue[];\n\n /** @internal — use `validResult` / `invalidResult` factories. */\n constructor(\n rawInput: string | null | undefined,\n isValid: boolean,\n issues: readonly ValidationIssue[],\n ) {\n this.rawInput = rawInput ?? null;\n this.isValid = isValid;\n this.issues = Object.freeze([...issues]);\n }\n}\n\n/** @internal Factory for `validate` implementations. Not part of the public API. */\nexport function validResult(rawInput: string | null | undefined): ValidationResult {\n return new ValidationResult(rawInput, true, []);\n}\n\n/** @internal Factory for `validate` implementations. Not part of the public API. */\nexport function invalidResult(\n rawInput: string | null | undefined,\n reasonOrIssues: ValidationErrorReason | readonly ValidationIssue[],\n englishDescription?: string,\n localizedDescription?: string,\n): ValidationResult {\n if (typeof reasonOrIssues === \"string\") {\n if (englishDescription === undefined || localizedDescription === undefined) {\n throw new Error(\"invalidResult requires both english and localized descriptions\");\n }\n return new ValidationResult(rawInput, false, [\n new ValidationIssue(reasonOrIssues, englishDescription, localizedDescription),\n ]);\n }\n return new ValidationResult(rawInput, false, reasonOrIssues);\n}\n","/**\n * Validates a standard Luhn (mod 10) checksum.\n * Checks the entire string: the last digit is assumed to be the control digit.\n *\n * Equivalent of `Buildi.Primitives.Luhn.IsValid` (internal in .NET).\n */\nexport function luhnIsValid(digits: string): boolean {\n if (!digits) return false;\n\n let sum = 0;\n const len = digits.length;\n for (let i = 0; i < len; i++) {\n const code = digits.charCodeAt(i);\n if (code < 0x30 || code > 0x39) return false;\n let d = code - 0x30;\n if ((len - i) % 2 === 0) {\n d *= 2;\n if (d > 9) d -= 9;\n }\n sum += d;\n }\n return sum % 10 === 0;\n}\n","/**\n * Local parser for Swedish personnummer and samordningsnummer.\n *\n * Replaces the .NET dependency on ActiveLogin.Identity with an in-house\n * implementation that supports the same input shapes:\n *\n * - 12 digits: `199908072391`\n * - 10 digits: `9908072391` (century inferred)\n * - Separator forms: `YYMMDD-NNNC` or `YYYYMMDD-NNNC`. The separator may be\n * `-` (standard) or `+` (used when the person is 100 years or older;\n * only valid when the input was given in 10-digit form).\n *\n * For coordination numbers (`samordningsnummer`) the day-of-month is shifted\n * by 60 (i.e. real day = day - 60), so valid days for coordination numbers\n * are 61-91 (or 60 when day-of-month is unknown).\n */\n\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { Clock, systemClock } from \"../internal/clock.js\";\n\nconst defaultClock: Clock = systemClock;\n\nexport type PinKind = \"personal\" | \"coordination\";\n\nexport interface ParsedPin {\n kind: PinKind;\n /** Full 4-digit year. */\n year: number;\n /** 1-12. */\n month: number;\n /**\n * For personal numbers: 1-31. For coordination numbers: realDay (1-31) or\n * `0` when the day-of-month is unknown (raw day was 60).\n */\n realDay: number;\n /** Three-digit individual number. */\n individual: string;\n /** Single check digit. */\n checkDigit: string;\n /** Whether the input had a `+` separator (indicates 100+ years old at parse time). */\n hadPlusSeparator: boolean;\n}\n\nconst TWELVE = /^(\\d{4})(\\d{2})(\\d{2})(\\d{3})(\\d)$/;\nconst TEN = /^(\\d{2})(\\d{2})(\\d{2})(\\d{3})(\\d)$/;\nconst TEN_WITH_SEP = /^(\\d{2})(\\d{2})(\\d{2})([-+])(\\d{3})(\\d)$/;\nconst TWELVE_WITH_SEP = /^(\\d{4})(\\d{2})(\\d{2})([-+])(\\d{3})(\\d)$/;\n\nexport function parsePin(input: string, clock: Clock = defaultClock): ParsedPin | null {\n if (!input) return null;\n const cleaned = input.trim();\n if (cleaned.length === 0) return null;\n\n let year: number, month: number, day: number;\n let individual: string, check: string;\n let hadPlus = false;\n let isTwelve = false;\n\n let m = TWELVE.exec(cleaned);\n if (m) {\n year = +m[1]!;\n month = +m[2]!;\n day = +m[3]!;\n individual = m[4]!;\n check = m[5]!;\n isTwelve = true;\n } else if ((m = TEN.exec(cleaned))) {\n const yy = +m[1]!;\n year = inferCenturyForTenDigit(yy, false, clock);\n month = +m[2]!;\n day = +m[3]!;\n individual = m[4]!;\n check = m[5]!;\n } else if ((m = TEN_WITH_SEP.exec(cleaned))) {\n const yy = +m[1]!;\n hadPlus = m[4] === \"+\";\n year = inferCenturyForTenDigit(yy, hadPlus, clock);\n month = +m[2]!;\n day = +m[3]!;\n individual = m[5]!;\n check = m[6]!;\n } else if ((m = TWELVE_WITH_SEP.exec(cleaned))) {\n year = +m[1]!;\n month = +m[2]!;\n day = +m[3]!;\n individual = m[5]!;\n check = m[6]!;\n if (m[4] === \"+\") return null;\n } else {\n return null;\n }\n\n if (month < 1 || month > 12) return null;\n\n const isCoordination = day >= 60 && day <= 91;\n let realDay: number;\n let kind: PinKind;\n if (isCoordination) {\n kind = \"coordination\";\n realDay = day === 60 ? 0 : day - 60;\n if (realDay !== 0 && !isValidDay(year, month, realDay)) return null;\n } else {\n kind = \"personal\";\n if (!isValidDay(year, month, day)) return null;\n realDay = day;\n }\n\n const luhnInput =\n String(year % 100).padStart(2, \"0\") +\n String(month).padStart(2, \"0\") +\n String(day).padStart(2, \"0\") +\n individual +\n check;\n if (!luhnIsValid(luhnInput)) return null;\n\n // 12-digit form must use a 4-digit year that matches the inferred century.\n if (isTwelve && (year < 1800 || year > 2200)) return null;\n\n return {\n kind,\n year,\n month,\n realDay,\n individual,\n checkDigit: check,\n hadPlusSeparator: hadPlus,\n };\n}\n\nfunction isValidDay(year: number, month: number, day: number): boolean {\n if (day < 1) return false;\n const dim = daysInMonth(year, month);\n return day <= dim;\n}\n\nfunction daysInMonth(year: number, month: number): number {\n if (month === 2) {\n const leap = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n return leap ? 29 : 28;\n }\n if ([4, 6, 9, 11].includes(month)) return 30;\n return 31;\n}\n\nfunction inferCenturyForTenDigit(yy: number, plusSeparator: boolean, clock: Clock): number {\n const now = clock.now();\n const currentYear = now.getUTCFullYear();\n const currentCentury = Math.floor(currentYear / 100);\n const candidate = currentCentury * 100 + yy;\n let year = candidate;\n if (year > currentYear) year -= 100;\n if (plusSeparator) year -= 100;\n return year;\n}\n\n/** Build the canonical 12-digit form. */\nexport function pinTo12Digit(p: ParsedPin): string {\n const day = p.kind === \"coordination\" ? (p.realDay === 0 ? 60 : p.realDay + 60) : p.realDay;\n return (\n String(p.year).padStart(4, \"0\") +\n String(p.month).padStart(2, \"0\") +\n String(day).padStart(2, \"0\") +\n p.individual +\n p.checkDigit\n );\n}\n\n/** Build the canonical 10-digit display form (`YYMMDD-NNNC` or `YYMMDD+NNNC`). */\nexport function pinTo10Digit(p: ParsedPin, clock: Clock = defaultClock): string {\n const day = p.kind === \"coordination\" ? (p.realDay === 0 ? 60 : p.realDay + 60) : p.realDay;\n const yy = String(p.year % 100).padStart(2, \"0\");\n const sep = ageInYears(p, clock) >= 100 ? \"+\" : \"-\";\n return (\n yy +\n String(p.month).padStart(2, \"0\") +\n String(day).padStart(2, \"0\") +\n sep +\n p.individual +\n p.checkDigit\n );\n}\n\nfunction ageInYears(p: ParsedPin, clock: Clock): number {\n if (p.kind === \"coordination\" && p.realDay === 0) return 0;\n const now = clock.now();\n const day = p.kind === \"coordination\" ? p.realDay : p.realDay;\n const birth = new Date(Date.UTC(p.year, p.month - 1, day || 1));\n const ms = now.getTime() - birth.getTime();\n return Math.floor(ms / (365.25 * 24 * 3600 * 1000));\n}\n\n/** Estimate gender. The third digit of the individual portion is even for female, odd for male. */\nexport function pinGender(p: ParsedPin): \"female\" | \"male\" {\n const d = parseInt(p.individual.charAt(p.individual.length - 1), 10);\n return d % 2 === 0 ? \"female\" : \"male\";\n}\n\n/** Best-effort date of birth (`null` if coordination day is unknown). */\nexport function pinDateOfBirth(p: ParsedPin): Date | null {\n if (p.kind === \"coordination\" && p.realDay === 0) return null;\n return new Date(Date.UTC(p.year, p.month - 1, p.realDay));\n}\n\n/** Age in whole years (`null` if coordination day is unknown). */\nexport function pinAgeInYears(p: ParsedPin, clock: Clock = defaultClock): number | null {\n if (p.kind === \"coordination\" && p.realDay === 0) return null;\n return ageInYears(p, clock);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Clock, systemClock } from \"../internal/clock.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport {\n ParsedPin,\n parsePin,\n pinAgeInYears,\n pinDateOfBirth,\n pinGender,\n pinTo10Digit,\n pinTo12Digit,\n} from \"./personnummer-parser.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\nconst SCAN_PATTERN = /(?<!\\d)(\\d{6,8})([-+])(\\d{4})(?!\\d)/g;\n\n/** A Swedish Personal Identity Number (`personnummer`). */\nexport class SwedishPersonalIdentityNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Personal Identity Number\",\n localizedName: \"Personnummer\",\n emoji: \"\\u{1FAAA}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/personnummer.4.3810a01c150939e893f18c29.html\",\n \"https://sv.wikipedia.org/wiki/Personnummer_i_Sverige\",\n \"https://en.wikipedia.org/wiki/Luhn_algorithm\",\n ]),\n });\n\n readonly _pin: ParsedPin;\n readonly _clock: Clock;\n\n private constructor(pin: ParsedPin, clock: Clock) {\n this._pin = pin;\n this._clock = clock;\n }\n\n get formatted(): string {\n return pinTo10Digit(this._pin, this._clock);\n }\n get value(): string {\n return pinTo12Digit(this._pin);\n }\n get dateOfBirthHint(): Date {\n const d = pinDateOfBirth(this._pin);\n if (d === null) throw new Error(\"Date of birth is unknown.\");\n return d;\n }\n get ageHint(): number {\n const a = pinAgeInYears(this._pin, this._clock);\n if (a === null) throw new Error(\"Age is unknown.\");\n return a;\n }\n get genderHint(): \"female\" | \"male\" {\n return pinGender(this._pin);\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { clock?: Clock },\n ): SwedishPersonalIdentityNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > MAX_INPUT_LENGTH) return null;\n const clock = options?.clock ?? systemClock;\n const pin = parsePin(sanitized, clock);\n if (pin === null) return null;\n if (pin.kind !== \"personal\") return null;\n return new SwedishPersonalIdentityNumber(pin, clock);\n }\n\n static parse(input: string, options?: { clock?: Clock }): SwedishPersonalIdentityNumber {\n const r = SwedishPersonalIdentityNumber.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid Swedish personal identity number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishPersonalIdentityNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishPersonalIdentityNumber.tryParse(input, options);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishPersonalIdentityNumber.tryParse(input, options);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishPersonalIdentityNumber.normalize(input) === input;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n }\n const pin = parsePin(sanitized);\n if (pin === null || pin.kind !== \"personal\") {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"Invalid personal identity number format.\",\n \"Ogiltigt format för personnummer.\",\n );\n }\n return validResult(input);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n\n to10DigitString(): string {\n return this.formatted;\n }\n to12DigitString(): string {\n return this.value;\n }\n\n static findCandidatesInText(\n text: string,\n ): readonly TextCandidate<SwedishPersonalIdentityNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishPersonalIdentityNumber>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const pin = SwedishPersonalIdentityNumber.tryParse(m[0]);\n if (!pin) continue;\n out.push(\n new TextCandidate<SwedishPersonalIdentityNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishPersonalIdentityNumber\",\n category: TextCandidateCategory.PersonalIdentifier,\n normalizedForm: pin.toNormalizedString(),\n formattedForm: pin.toString(),\n maskedForm: maskPersonalIdentityNumber(pin),\n confidence: TextMatchConfidence.High,\n value: pin,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishPersonalIdentityNumber | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishPersonalIdentityNumber | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\n/** Mask a personal identity number, e.g. `990807-2391` -> `990807-****`. */\nexport function maskPersonalIdentityNumber(\n p: SwedishPersonalIdentityNumber,\n options?: { maskBirthDate?: boolean },\n): string {\n const f = p.formatted;\n if (options?.maskBirthDate) return \"******-****\";\n return f.slice(0, f.length - 4) + \"****\";\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Clock, systemClock } from \"../internal/clock.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport {\n ParsedPin,\n parsePin,\n pinAgeInYears,\n pinDateOfBirth,\n pinGender,\n pinTo10Digit,\n pinTo12Digit,\n} from \"./personnummer-parser.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\nconst SCAN_PATTERN = /(?<!\\d)(\\d{6,8})([-+])(\\d{4})(?!\\d)/g;\n\n/** A Swedish Coordination Number (`samordningsnummer`). */\nexport class SwedishCoordinationNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Coordination Number\",\n localizedName: \"Samordningsnummer\",\n emoji: \"\\u{1F194}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/samordningsnummer.4.5c281c7015abecc2e201130b.html\",\n \"https://sv.wikipedia.org/wiki/Samordningsnummer\",\n ]),\n });\n\n readonly _pin: ParsedPin;\n readonly _clock: Clock;\n\n private constructor(pin: ParsedPin, clock: Clock) {\n this._pin = pin;\n this._clock = clock;\n }\n\n get formatted(): string {\n return pinTo10Digit(this._pin, this._clock);\n }\n get value(): string {\n return pinTo12Digit(this._pin);\n }\n get realDay(): number {\n return this._pin.realDay;\n }\n get dateOfBirthHint(): Date | null {\n return pinDateOfBirth(this._pin);\n }\n get ageHint(): number | null {\n return pinAgeInYears(this._pin, this._clock);\n }\n get genderHint(): \"female\" | \"male\" {\n return pinGender(this._pin);\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { clock?: Clock },\n ): SwedishCoordinationNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > MAX_INPUT_LENGTH) return null;\n const clock = options?.clock ?? systemClock;\n const pin = parsePin(sanitized, clock);\n if (pin === null) return null;\n if (pin.kind !== \"coordination\") return null;\n return new SwedishCoordinationNumber(pin, clock);\n }\n\n static parse(input: string, options?: { clock?: Clock }): SwedishCoordinationNumber {\n const r = SwedishCoordinationNumber.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid Swedish coordination number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishCoordinationNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishCoordinationNumber.tryParse(input, options);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishCoordinationNumber.tryParse(input, options);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishCoordinationNumber.normalize(input) === input;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n }\n const pin = parsePin(sanitized);\n if (pin === null || pin.kind !== \"coordination\") {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"Invalid coordination number format.\",\n \"Ogiltigt format för samordningsnummer.\",\n );\n }\n return validResult(input);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n to10DigitString(): string {\n return this.formatted;\n }\n to12DigitString(): string {\n return this.value;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishCoordinationNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishCoordinationNumber>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const cn = SwedishCoordinationNumber.tryParse(m[0]);\n if (!cn) continue;\n out.push(\n new TextCandidate<SwedishCoordinationNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishCoordinationNumber\",\n category: TextCandidateCategory.PersonalIdentifier,\n normalizedForm: cn.toNormalizedString(),\n formattedForm: cn.toString(),\n maskedForm: maskCoordinationNumber(cn),\n confidence: TextMatchConfidence.High,\n value: cn,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishCoordinationNumber | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishCoordinationNumber | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\n/** Mask a coordination number, e.g. `680164-2395` -> `680164-****`. */\nexport function maskCoordinationNumber(\n c: SwedishCoordinationNumber,\n options?: { maskBirthDate?: boolean },\n): string {\n const f = c.formatted;\n if (options?.maskBirthDate) return \"******-****\";\n return f.slice(0, f.length - 4) + \"****\";\n}\n"]}
@@ -0,0 +1,82 @@
1
+ import { P as PrimitiveTypeInfo } from './text-candidate-qg2bD9PY.cjs';
2
+
3
+ /** A person's given names (`förnamn`). */
4
+ declare class PersonGivenName {
5
+ static readonly typeInfo: PrimitiveTypeInfo;
6
+ readonly value: string;
7
+ readonly names: readonly string[];
8
+ readonly preferredName: string | null;
9
+ private constructor();
10
+ static tryParse(input: string | null | undefined, options?: {
11
+ preferredName?: string | null;
12
+ }): PersonGivenName | null;
13
+ static parse(input: string, options?: {
14
+ preferredName?: string | null;
15
+ }): PersonGivenName;
16
+ static isValid(input: string | null | undefined): boolean;
17
+ static format(input: string | null | undefined, options?: {
18
+ fallbackToTrimmedInputWhenInvalid?: boolean;
19
+ }): string | null;
20
+ static normalize(input: string | null | undefined, options?: {
21
+ fallbackToTrimmedInputWhenInvalid?: boolean;
22
+ }): string | null;
23
+ static isNormalized(input: string | null | undefined): boolean;
24
+ withPreferredName(preferredName: string): PersonGivenName;
25
+ toNormalizedString(): string;
26
+ toString(): string;
27
+ equals(other: PersonGivenName | null | undefined): boolean;
28
+ compareTo(other: PersonGivenName | null | undefined): number;
29
+ }
30
+
31
+ /** A person's family name (`efternamn`). */
32
+ declare class PersonFamilyName {
33
+ static readonly typeInfo: PrimitiveTypeInfo;
34
+ readonly value: string;
35
+ private constructor();
36
+ static tryParse(input: string | null | undefined): PersonFamilyName | null;
37
+ static parse(input: string): PersonFamilyName;
38
+ static isValid(input: string | null | undefined): boolean;
39
+ static format(input: string | null | undefined, options?: {
40
+ fallbackToTrimmedInputWhenInvalid?: boolean;
41
+ }): string | null;
42
+ static normalize(input: string | null | undefined, options?: {
43
+ fallbackToTrimmedInputWhenInvalid?: boolean;
44
+ }): string | null;
45
+ static isNormalized(input: string | null | undefined): boolean;
46
+ toNormalizedString(): string;
47
+ toString(): string;
48
+ equals(other: PersonFamilyName | null | undefined): boolean;
49
+ compareTo(other: PersonFamilyName | null | undefined): number;
50
+ }
51
+
52
+ /** A person's full name (`fullständigt namn`). */
53
+ declare class PersonFullName {
54
+ static readonly typeInfo: PrimitiveTypeInfo;
55
+ readonly givenName: PersonGivenName;
56
+ readonly familyName: PersonFamilyName;
57
+ readonly value: string;
58
+ get preferredName(): string | null;
59
+ private constructor();
60
+ static create(givenName: PersonGivenName, familyName: PersonFamilyName): PersonFullName;
61
+ static tryParse(input: string | null | undefined, options?: {
62
+ preferredName?: string | null;
63
+ }): PersonFullName | null;
64
+ static parse(input: string, options?: {
65
+ preferredName?: string | null;
66
+ }): PersonFullName;
67
+ static isValid(input: string | null | undefined): boolean;
68
+ static format(input: string | null | undefined, options?: {
69
+ fallbackToTrimmedInputWhenInvalid?: boolean;
70
+ }): string | null;
71
+ static normalize(input: string | null | undefined, options?: {
72
+ fallbackToTrimmedInputWhenInvalid?: boolean;
73
+ }): string | null;
74
+ static isNormalized(input: string | null | undefined): boolean;
75
+ withPreferredName(preferredName: string): PersonFullName;
76
+ toNormalizedString(): string;
77
+ toString(): string;
78
+ equals(other: PersonFullName | null | undefined): boolean;
79
+ compareTo(other: PersonFullName | null | undefined): number;
80
+ }
81
+
82
+ export { PersonFamilyName as P, PersonFullName as a, PersonGivenName as b };
@@ -0,0 +1,82 @@
1
+ import { P as PrimitiveTypeInfo } from './text-candidate-qg2bD9PY.js';
2
+
3
+ /** A person's given names (`förnamn`). */
4
+ declare class PersonGivenName {
5
+ static readonly typeInfo: PrimitiveTypeInfo;
6
+ readonly value: string;
7
+ readonly names: readonly string[];
8
+ readonly preferredName: string | null;
9
+ private constructor();
10
+ static tryParse(input: string | null | undefined, options?: {
11
+ preferredName?: string | null;
12
+ }): PersonGivenName | null;
13
+ static parse(input: string, options?: {
14
+ preferredName?: string | null;
15
+ }): PersonGivenName;
16
+ static isValid(input: string | null | undefined): boolean;
17
+ static format(input: string | null | undefined, options?: {
18
+ fallbackToTrimmedInputWhenInvalid?: boolean;
19
+ }): string | null;
20
+ static normalize(input: string | null | undefined, options?: {
21
+ fallbackToTrimmedInputWhenInvalid?: boolean;
22
+ }): string | null;
23
+ static isNormalized(input: string | null | undefined): boolean;
24
+ withPreferredName(preferredName: string): PersonGivenName;
25
+ toNormalizedString(): string;
26
+ toString(): string;
27
+ equals(other: PersonGivenName | null | undefined): boolean;
28
+ compareTo(other: PersonGivenName | null | undefined): number;
29
+ }
30
+
31
+ /** A person's family name (`efternamn`). */
32
+ declare class PersonFamilyName {
33
+ static readonly typeInfo: PrimitiveTypeInfo;
34
+ readonly value: string;
35
+ private constructor();
36
+ static tryParse(input: string | null | undefined): PersonFamilyName | null;
37
+ static parse(input: string): PersonFamilyName;
38
+ static isValid(input: string | null | undefined): boolean;
39
+ static format(input: string | null | undefined, options?: {
40
+ fallbackToTrimmedInputWhenInvalid?: boolean;
41
+ }): string | null;
42
+ static normalize(input: string | null | undefined, options?: {
43
+ fallbackToTrimmedInputWhenInvalid?: boolean;
44
+ }): string | null;
45
+ static isNormalized(input: string | null | undefined): boolean;
46
+ toNormalizedString(): string;
47
+ toString(): string;
48
+ equals(other: PersonFamilyName | null | undefined): boolean;
49
+ compareTo(other: PersonFamilyName | null | undefined): number;
50
+ }
51
+
52
+ /** A person's full name (`fullständigt namn`). */
53
+ declare class PersonFullName {
54
+ static readonly typeInfo: PrimitiveTypeInfo;
55
+ readonly givenName: PersonGivenName;
56
+ readonly familyName: PersonFamilyName;
57
+ readonly value: string;
58
+ get preferredName(): string | null;
59
+ private constructor();
60
+ static create(givenName: PersonGivenName, familyName: PersonFamilyName): PersonFullName;
61
+ static tryParse(input: string | null | undefined, options?: {
62
+ preferredName?: string | null;
63
+ }): PersonFullName | null;
64
+ static parse(input: string, options?: {
65
+ preferredName?: string | null;
66
+ }): PersonFullName;
67
+ static isValid(input: string | null | undefined): boolean;
68
+ static format(input: string | null | undefined, options?: {
69
+ fallbackToTrimmedInputWhenInvalid?: boolean;
70
+ }): string | null;
71
+ static normalize(input: string | null | undefined, options?: {
72
+ fallbackToTrimmedInputWhenInvalid?: boolean;
73
+ }): string | null;
74
+ static isNormalized(input: string | null | undefined): boolean;
75
+ withPreferredName(preferredName: string): PersonFullName;
76
+ toNormalizedString(): string;
77
+ toString(): string;
78
+ equals(other: PersonFullName | null | undefined): boolean;
79
+ compareTo(other: PersonFullName | null | undefined): number;
80
+ }
81
+
82
+ export { PersonFamilyName as P, PersonFullName as a, PersonGivenName as b };
@@ -0,0 +1,139 @@
1
+ import { P as PrimitiveTypeInfo, T as TextCandidate } from './text-candidate-qg2bD9PY.js';
2
+ import { a as Country } from './country-p0n0EVQ9.js';
3
+
4
+ /** A phone country calling code (`landsnummer`) e.g. `+46` for Sweden. */
5
+ declare class PhoneCallingCode {
6
+ static readonly typeInfo: PrimitiveTypeInfo;
7
+ readonly value: string;
8
+ readonly countryCode: string | null;
9
+ private constructor();
10
+ /** @internal */
11
+ static _new(value: string, countryCode: string | null): PhoneCallingCode;
12
+ /** @internal */
13
+ static fromResolvedDigits(digits: string): PhoneCallingCode;
14
+ static tryParse(input: string | null | undefined): PhoneCallingCode | null;
15
+ static parse(input: string): PhoneCallingCode;
16
+ static isValid(input: string | null | undefined): boolean;
17
+ static format(input: string | null | undefined, options?: {
18
+ fallbackToTrimmedInputWhenInvalid?: boolean;
19
+ }): string | null;
20
+ static normalize(input: string | null | undefined, options?: {
21
+ fallbackToTrimmedInputWhenInvalid?: boolean;
22
+ }): string | null;
23
+ static isNormalized(input: string | null | undefined): boolean;
24
+ static get all(): readonly PhoneCallingCode[];
25
+ toNormalizedString(): string;
26
+ toString(): string;
27
+ equals(other: PhoneCallingCode | null | undefined): boolean;
28
+ compareTo(other: PhoneCallingCode | null | undefined): number;
29
+ /** Sweden (+46). */
30
+ static get Sweden(): PhoneCallingCode;
31
+ /** Norway (+47). */
32
+ static get Norway(): PhoneCallingCode;
33
+ /** Finland (+358). */
34
+ static get Finland(): PhoneCallingCode;
35
+ /** Denmark (+45). */
36
+ static get Denmark(): PhoneCallingCode;
37
+ /** Germany (+49). */
38
+ static get Germany(): PhoneCallingCode;
39
+ /** Poland (+48). */
40
+ static get Poland(): PhoneCallingCode;
41
+ /** Estonia (+372). */
42
+ static get Estonia(): PhoneCallingCode;
43
+ /** Lithuania (+370). */
44
+ static get Lithuania(): PhoneCallingCode;
45
+ /** Romania (+40). */
46
+ static get Romania(): PhoneCallingCode;
47
+ /** Bulgaria (+359). */
48
+ static get Bulgaria(): PhoneCallingCode;
49
+ /** Latvia (+371). */
50
+ static get Latvia(): PhoneCallingCode;
51
+ /** Czech Republic (+420). */
52
+ static get CzechRepublic(): PhoneCallingCode;
53
+ /** Spain (+34). */
54
+ static get Spain(): PhoneCallingCode;
55
+ /** Netherlands (+31). */
56
+ static get Netherlands(): PhoneCallingCode;
57
+ /** Greece (+30). */
58
+ static get Greece(): PhoneCallingCode;
59
+ /** Italy (+39). */
60
+ static get Italy(): PhoneCallingCode;
61
+ /** Slovenia (+386). */
62
+ static get Slovenia(): PhoneCallingCode;
63
+ /** Croatia (+385). */
64
+ static get Croatia(): PhoneCallingCode;
65
+ /** Portugal (+351). */
66
+ static get Portugal(): PhoneCallingCode;
67
+ /** Hungary (+36). */
68
+ static get Hungary(): PhoneCallingCode;
69
+ /** France (+33). */
70
+ static get France(): PhoneCallingCode;
71
+ /** Slovakia (+421). */
72
+ static get Slovakia(): PhoneCallingCode;
73
+ /** Belgium (+32). */
74
+ static get Belgium(): PhoneCallingCode;
75
+ /** United Kingdom (+44). */
76
+ static get UnitedKingdom(): PhoneCallingCode;
77
+ /** Austria (+43). */
78
+ static get Austria(): PhoneCallingCode;
79
+ /** Cyprus (+357). */
80
+ static get Cyprus(): PhoneCallingCode;
81
+ /** Iceland (+354). */
82
+ static get Iceland(): PhoneCallingCode;
83
+ /** Switzerland (+41). */
84
+ static get Switzerland(): PhoneCallingCode;
85
+ /** Ireland (+353). */
86
+ static get Ireland(): PhoneCallingCode;
87
+ /** Luxembourg (+352). */
88
+ static get Luxembourg(): PhoneCallingCode;
89
+ /** Malta (+356). */
90
+ static get Malta(): PhoneCallingCode;
91
+ /** Liechtenstein (+423). */
92
+ static get Liechtenstein(): PhoneCallingCode;
93
+ /** United States (+1). */
94
+ static get UnitedStates(): PhoneCallingCode;
95
+ /** Russia (+7). */
96
+ static get Russia(): PhoneCallingCode;
97
+ }
98
+
99
+ /**
100
+ * A phone number (`telefonnummer`). Stored normalized as `00` + country code +
101
+ * subscriber digits (e.g. `0046701740633`). Use {@link toE164String} for the
102
+ * `+`-prefixed E.164 form.
103
+ */
104
+ declare class PhoneNumber {
105
+ static readonly typeInfo: PrimitiveTypeInfo;
106
+ readonly digits: string;
107
+ readonly countryCallingCode: PhoneCallingCode;
108
+ readonly country: Country | null;
109
+ readonly isSwedish: boolean;
110
+ readonly isMobile: boolean;
111
+ private constructor();
112
+ get isSwedishTestPhoneNumber(): boolean;
113
+ get formatted(): string;
114
+ static tryParse(input: string | null | undefined, defaultCallingCode?: string | PhoneCallingCode | Country | null): PhoneNumber | null;
115
+ static parse(input: string, defaultCallingCode?: string | PhoneCallingCode | Country | null): PhoneNumber;
116
+ static isValid(input: string | null | undefined, defaultCallingCode?: string | PhoneCallingCode | Country | null): boolean;
117
+ static format(input: string | null | undefined, options?: {
118
+ defaultCallingCode?: string | PhoneCallingCode | Country | null;
119
+ fallbackToTrimmedInputWhenInvalid?: boolean;
120
+ }): string | null;
121
+ static normalize(input: string | null | undefined, options?: {
122
+ defaultCallingCode?: string | PhoneCallingCode | Country | null;
123
+ fallbackToTrimmedInputWhenInvalid?: boolean;
124
+ }): string | null;
125
+ static isNormalized(input: string | null | undefined): boolean;
126
+ static findCandidatesInText(text: string): readonly TextCandidate<PhoneNumber>[];
127
+ toNormalizedString(): string;
128
+ toLocalString(defaultCallingCode?: PhoneCallingCode | Country): string;
129
+ toE164String(): string;
130
+ toInternationalString(): string;
131
+ toDisplayInternationalString(): string;
132
+ toString(): string;
133
+ equals(other: PhoneNumber | null | undefined): boolean;
134
+ compareTo(other: PhoneNumber | null | undefined): number;
135
+ }
136
+ /** Mask a phone number, keeping country code and last 4 digits visible. */
137
+ declare function maskPhoneNumber(p: PhoneNumber): string;
138
+
139
+ export { PhoneCallingCode as P, PhoneNumber as a, maskPhoneNumber as m };