@itwin/core-backend 5.9.0 → 5.9.2

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 (36) hide show
  1. package/CHANGELOG.md +15 -1
  2. package/lib/cjs/BriefcaseManager.d.ts +17 -59
  3. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  4. package/lib/cjs/BriefcaseManager.js +45 -162
  5. package/lib/cjs/BriefcaseManager.js.map +1 -1
  6. package/lib/cjs/IModelJsFs.d.ts +2 -0
  7. package/lib/cjs/IModelJsFs.d.ts.map +1 -1
  8. package/lib/cjs/IModelJsFs.js +14 -0
  9. package/lib/cjs/IModelJsFs.js.map +1 -1
  10. package/lib/cjs/TxnManager.d.ts +3 -0
  11. package/lib/cjs/TxnManager.d.ts.map +1 -1
  12. package/lib/cjs/TxnManager.js +95 -13
  13. package/lib/cjs/TxnManager.js.map +1 -1
  14. package/lib/cjs/internal/cross-package.d.ts +1 -1
  15. package/lib/cjs/internal/cross-package.d.ts.map +1 -1
  16. package/lib/cjs/internal/cross-package.js +2 -1
  17. package/lib/cjs/internal/cross-package.js.map +1 -1
  18. package/lib/esm/BriefcaseManager.d.ts +17 -59
  19. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  20. package/lib/esm/BriefcaseManager.js +46 -163
  21. package/lib/esm/BriefcaseManager.js.map +1 -1
  22. package/lib/esm/IModelJsFs.d.ts +2 -0
  23. package/lib/esm/IModelJsFs.d.ts.map +1 -1
  24. package/lib/esm/IModelJsFs.js +14 -0
  25. package/lib/esm/IModelJsFs.js.map +1 -1
  26. package/lib/esm/TxnManager.d.ts +3 -0
  27. package/lib/esm/TxnManager.d.ts.map +1 -1
  28. package/lib/esm/TxnManager.js +96 -14
  29. package/lib/esm/TxnManager.js.map +1 -1
  30. package/lib/esm/internal/cross-package.d.ts +1 -1
  31. package/lib/esm/internal/cross-package.d.ts.map +1 -1
  32. package/lib/esm/internal/cross-package.js +1 -1
  33. package/lib/esm/internal/cross-package.js.map +1 -1
  34. package/lib/esm/test/hubaccess/SemanticRebase.test.js +2276 -70
  35. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  36. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"SemanticRebase.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/SemanticRebase.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,IAAI,EAAc,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAyB,MAAM,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChG,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AACtE,OAAO,EAAe,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,SAAS,YAAY,CAAC,MAAmB,EAAE,WAAW,GAAG,iBAAiB;IACxE,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7C,GAAG,CAAC,KAAK,EAAE,CAAC;IACZ,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,GAAY;IAC9B,IAAI,GAAG,CAAC,QAAQ;QACd,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,GAAY,EAAE,OAAiB;IAChE,IAAI,GAAG,CAAC,QAAQ;QACd,GAAG,CAAC,WAAW,EAAE,CAAC;IACpB,MAAM,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAY,EAAE,WAAmB;IAC1D,MAAM,SAAS,GAAG,GAAG,CAAC,MAAqB,CAAC;IAC5C,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,MAAM,SAAS,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAY;IACrC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAqB,CAAC;IAC5C,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU;IACP,QAAQ,GAAe,EAAE,CAAC;IAC1B,cAAc,GAAe,EAAE,CAAC;IAChC,iBAAiB,GAAe,EAAE,CAAC;IACnC,GAAG,CAAc;IACjB,KAAK,CAAc;IAE1B,YAAoB,QAAoB,EAAE,cAA0B,EAAE,iBAA6B,EAAE,GAAgB,EAAE,KAAkB;QACvI,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,iFAAiF;IAC1E,MAAM,CAAU,OAAO,GAAG;QAC/B,iDAAiD;QACjD,SAAS,EAAE;;;;;;;;;;;;;;;gBAeC;QAEZ,mEAAmE;QACnE,kBAAkB,EAAE;;;;;;;;;;;;;;;;gBAgBR;QAEZ,mEAAmE;QACnE,kBAAkB,EAAE;;;;;;;;;;;;;;;;;gBAiBR;QAEZ,6FAA6F;QAC7F,qBAAqB,EAAE;;;;;;;;;;;;;;;;gBAgBX;QAEZ,yIAAyI;QACzI,sBAAsB,EAAE;;;;;;;;;;;;;;;;;gBAiBZ;QAEZ,iGAAiG;QACjG,8BAA8B,EAAE;;;;;;;;;;;;;;;;gBAgBpB;QAEZ,mGAAmG;QACnG,8BAA8B,EAAE;;;;;;;;;;;;;;;;gBAgBpB;QAEZ,sFAAsF;QACtF,8BAA8B,EAAE;;;;;;;;;;;;;;;;gBAgBpB;QAEZ,2HAA2H;QAC3H,kBAAkB,EAAE;;;;;;;;;;;;;;;;gBAgBR;KACb,CAAC;IAEF;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC7C,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAExD,IAAI,GAA4B,CAAC;QACjC,IAAI,KAA8B,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC;gBAC7C,WAAW,EAAE,UAAU;gBACvB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,UAAU,EAAE,QAAQ;gBACpB,WAAW,EAAE,mDAAmD,QAAQ,EAAE;aAC3E,CAAC,CAAC;YAEH,mDAAmD;YACnD,GAAG,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC;gBAC/C,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ;gBACR,WAAW,EAAE,UAAU;aACxB,CAAC,CAAC;YACH,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YACjE,8BAA8B;YAC9B,MAAM,GAAG,CAAC,mBAAmB,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;YAC9D,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAE7D,4BAA4B;YAC5B,MAAM,SAAS,GAAG,eAAe,CAAC,kBAAkB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAC1E,MAAM,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YAC9D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,2BAA2B,EAAE,CAAC,GAAG,EAAE,EAAE;gBAChG,MAAM,CAAC,EAAE,iBAAiB,CAAC,GAAG,eAAe,CAAC,uCAAuC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBACtG,MAAM,oBAAoB,GAAG,eAAe,CAAC,MAAM,CACjD,GAAG,EACH,MAAM,CAAC,YAAY,EACnB,iBAAiB,EACjB,IAAI,qBAAqB,EAAE,CAC5B,CAAC;gBACF,OAAO,CAAC,iBAAiB,EAAE,oBAAoB,CAAU,CAAC;YAC5D,CAAC,CAAC,CAAC;YACH,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,2BAA2B,EAAE,CAAC,CAAC;YAEpE,uBAAuB;YACvB,KAAK,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC;gBACjD,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ;gBACR,WAAW,EAAE,YAAY;aAC1B,CAAC,CAAC;YACH,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAEnE,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACjF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,EAAE,MAAM;gBACf,KAAK,CAAC,KAAK,EAAE,CAAC;YAEhB,IAAI,GAAG,EAAE,MAAM;gBACb,GAAG,CAAC,KAAK,EAAE,CAAC;YAEd,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEM,aAAa,CAClB,GAAY,EACZ,SAAiB,EACjB,UAA+B;QAE/B,MAAM,SAAS,GAAG,GAAG,CAAC,MAAqB,CAAC;QAC5C,MAAM,YAAY,GAA0B;YAC1C,aAAa,EAAE,SAAS;YACxB,KAAK,EAAE,IAAI,CAAC,cAAc;YAC1B,QAAQ,EAAE,IAAI,CAAC,iBAAiB;YAChC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,GAAG,UAAU;SACd,CAAC;QACF,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAC/D,OAAO,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAEM,aAAa,CAAC,GAAY,EAAE,SAAqB,EAAE,OAA4B;QACpF,MAAM,SAAS,GAAG,GAAG,CAAC,MAAqB,CAAC;QAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,CAAC;IAEM,UAAU,CAAC,SAAsB,EAAE,SAAqB;QAC7D,OAAO,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAEM,mBAAmB,CAAC,SAAsB,EAAE,KAAa,EAAE,cAAuB;QACvF,IAAI,cAAc;YAChB,OAAO,gBAAgB,CAAC,gCAAgC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7E,OAAO,gBAAgB,CAAC,8BAA8B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IAEM,yBAAyB,CAAC,SAAsB;QACrD,MAAM,UAAU,GAAG,gBAAgB,CAAC,sCAAsC,CAAC,SAAS,CAAC,CAAC;QACtF,OAAO,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAEM,QAAQ;QACb,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACjB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,QAAQ,EAAE,CAAC;IACrB,CAAC;;AAGH;;GAEG;AACH,QAAQ,CAAC,iBAAiB,EAAE;IAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAyB;IAC9C,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,iKAAiK;QACpM,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,kFAAkF;IACpH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;QACzD,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,8DAA8D,CAAC,CAAC;QACrG,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,4DAA4D,CAAC,CAAC;QAE/F,2BAA2B;QAC3B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC1D,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACvC,MAAM,WAAW,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QACnD,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,8DAA8D,CAAC,CAAC;QAEjG,sDAAsD;QACtD,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,4DAA4D,CAAC,CAAC;QAC3F,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE3E,8EAA8E;QAC9E,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC9E,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAE/C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEzE,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAEnD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEvH,2CAA2C;QAC3C,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAClE,QAAQ,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAE9C,oEAAoE;QACpE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,kDAAkD;QAClD,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,2CAA2C,CAAC,CAAC;QACnG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;QAErF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,uCAAuC,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACtD,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,8DAA8D,CAAC,CAAC;QACrG,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,4DAA4D,CAAC,CAAC;QAE/F,2BAA2B;QAC3B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC1D,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACvC,MAAM,WAAW,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QACnD,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,8DAA8D,CAAC,CAAC;QAEjG,uCAAuC;QACvC,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,8EAA8E;QAC9E,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAChF,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAEjD,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAG3E,qCAAqC;QACrC,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,4DAA4D,CAAC,CAAC;QAC3F,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAC1C,MAAM,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAElD,yEAAyE;QACzE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,+DAA+D;QAE3I,gEAAgE;QAChE,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,4CAA4C,CAAC,CAAC;QAClG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;QAErF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,yCAAyC,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAChD,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,qDAAqD,CAAC,CAAC;QAC5F,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,mDAAmD,CAAC,CAAC;QAEtF,6BAA6B;QAC7B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,UAAU;SAClB,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,UAAU;SAClB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6DAA6D;QAC5H,MAAM,WAAW,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;QACpD,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,qDAAqD,CAAC,CAAC;QACxF,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6DAA6D;QAE5H,4BAA4B;QAC5B,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,mDAAmD,CAAC,CAAC;QAClF,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6DAA6D;QAC1H,MAAM,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6DAA6D;QAG1H,8CAA8C;QAC9C,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACnE,QAAQ,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6DAA6D;QAE5H,0BAA0B;QAC1B,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6DAA6D;QAE5H,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,qCAAqC,CAAC,CAAC;QACxF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,6CAA6C,CAAC,CAAC;QAEpG,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,4CAA4C,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,qCAAqC,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,qFAAqF,CAAC,CAAC;QAC9H,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,mFAAmF,CAAC,CAAC;QAExH,sCAAsC;QACtC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE3E,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEzE,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAEnD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEvH,2DAA2D;QAC3D,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAGhF,0BAA0B;QAC1B,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,sFAAsF;QAEvK,iDAAiD;QACjD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,0CAA0C,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;QAClG,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,wFAAwF,CAAC,CAAC;QACjI,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,sFAAsF,CAAC,CAAC;QAE3H,yDAAyD;QACzD,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE3E,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEzE,MAAM,WAAW,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QAExD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEvH,qDAAqD;QACrD,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAGhF,0BAA0B;QAC1B,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,+GAA+G;QACjM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,+GAA+G;QAE9K,+EAA+E;QAC/E,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,+DAA+D,CAAC,CAAC;IACpH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,2EAA2E,CAAC,CAAC;QACpH,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,yEAAyE,CAAC,CAAC;QAE9G,sCAAsC;QACtC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE3E,8EAA8E;QAC9E,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC9E,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAE/C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEzE,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEvH,iDAAiD;QACjD,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAGhF,0BAA0B;QAC1B,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,oEAAoE;QACtJ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,+GAA+G;QAE9K,kDAAkD;QAClD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qGAAqG,EAAE,KAAK,IAAI,EAAE;QACnH,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,qFAAqF,CAAC,CAAC;QAC9H,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,mFAAmF,CAAC,CAAC;QAEtH,6DAA6D;QAC7D,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE3E,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEzE,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QACnD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,mFAAmF,CAAC,CAAC;QAElH,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEvH,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE,cAAc;SACvB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,uCAAuC,CAAC,CAAC;QAC5D,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,wEAAwE;QACxE,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAGhF,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC/D,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,eAAe;YACtB,MAAM,EAAE,gBAAgB;SACzB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,yCAAyC,CAAC,CAAC;QAEhE,0BAA0B;QAC1B,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,oEAAoE;QACtJ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,+GAA+G;QAE9K,kDAAkD;QAClD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;QAE/E,6DAA6D;QAC7D,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,uCAAuC,CAAC,CAAC;QAC/F,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,uCAAuC,CAAC,CAAC;QAC/F,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,wCAAwC,CAAC,CAAC;QAElG,MAAM,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,yCAAyC,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,yCAAyC,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,0CAA0C,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,+DAA+D,CAAC,CAAC;QACxG,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,6DAA6D,CAAC,CAAC;QAElG,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAEnD,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAEzF,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,yFAAyF;QACtH,sJAAsJ;QAEtJ,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,2DAA2D,CAAC,CAAC;QACpG,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,yDAAyD,CAAC,CAAC;QAE9F,sCAAsC;QACtC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAEnD,+EAA+E;QAC/E,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,0BAA0B;QAC1B,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,6CAA6C;QAC7C,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,kDAAkD,CAAC,CAAC;QACrG,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,MAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,MAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,8DAA8D,CAAC,CAAC;QACvG,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,4DAA4D,CAAC,CAAC;QAEjG,kEAAkE;QAClE,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QAExD,wEAAwE;QACxE,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,0BAA0B;QAC1B,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,gDAAgD;QAChD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,kDAAkD,CAAC,CAAC;QACrG,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,MAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,MAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,oEAAoE,CAAC,CAAC;QAC7G,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,kEAAkE,CAAC,CAAC;QAEvG,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAEnD,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAEzF,4EAA4E;QAC5E,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,uEAAuE,CAAC,CAAC;QAChH,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,qEAAqE,CAAC,CAAC;QAE1G,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACvF,MAAM,WAAW,CAAC,MAAM,EAAE,qCAAqC,CAAC,CAAC;QAEjE,4FAA4F;QAC5F,wEAAwE;QACxE,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,4EAA4E;QAC5E,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,0EAA0E,CAAC,CAAC;QAC/G,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,4EAA4E,CAAC,CAAC;QAErH,uDAAuD;QACvD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QAEzC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE3E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE1G,MAAM,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,8DAA8D;QAC9D,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC/D,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,eAAe;SACvB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAE7C,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAEhF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE9G,2EAA2E;QAC3E,MAAM,WAAW,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAE3G,sEAAsE;QACtE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAC3F,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,uCAAuC,CAAC,CAAC;QAC/F,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,uDAAuD,CAAC,CAAC;QAE/G,MAAM,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,yCAAyC,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,yDAAyD,CAAC,CAAC;IACvH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,0EAA0E,CAAC,CAAC;QAC/G,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,4EAA4E,CAAC,CAAC;QAErH,4DAA4D;QAC5D,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QAEzC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9E,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,yDAAyD;QACzD,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC/D,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,eAAe;SACvB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAE7C,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE9G,2EAA2E;QAC3E,MAAM,WAAW,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAE3G,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAC3F,mEAAmE;QACnE,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,uCAAuC,CAAC,CAAC;QAC/F,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,gEAAgE,CAAC,CAAC;QAExH,MAAM,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,yCAAyC,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,kEAAkE,CAAC,CAAC;IAChI,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,+EAA+E,CAAC,CAAC;QACpH,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,iFAAiF,CAAC,CAAC;QAE1H,2FAA2F;QAC3F,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YAC1D,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YAC1D,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAE1C,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAE9E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE1G,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAC1C,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,4GAA4G;QAC5G,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC9D,KAAK,EAAE,iBAAiB;YACxB,KAAK,EAAE,eAAe;SACvB,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC9D,KAAK,EAAE,iBAAiB;YACxB,KAAK,EAAE,eAAe;SACvB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAE9C,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAEjF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE9G,QAAQ,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;QACxD,oDAAoD;QACpD,MAAM,WAAW,CAAC,QAAQ,EAAE,iCAAiC,CAAC,CAAC;QAE/D,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAE3G,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QACzF,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAC3F,wDAAwD;QACxD,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,yCAAyC,CAAC,CAAC;QACjG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,+DAA+D,CAAC,CAAC;QAErH,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,yCAAyC,CAAC,CAAC;QACjG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,+DAA+D,CAAC,CAAC;QAErH,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,2CAA2C,CAAC,CAAC;QACvG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,iEAAiE,CAAC,CAAC;QAE3H,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,2CAA2C,CAAC,CAAC;QACvG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,iEAAiE,CAAC,CAAC;IAC7H,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC9D,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,gEAAgE,CAAC,CAAC;QACnG,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,kEAAkE,CAAC,CAAC;QAEzG,yDAAyD;QACzD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YACxD,KAAK,EAAE,iBAAiB;YACxB,KAAK,EAAE,iBAAiB;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QACnD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,gEAAgE,CAAC,CAAC;QAE/F,iCAAiC;QACjC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,kEAAkE,CAAC,CAAC;QAErG,4DAA4D;QAC5D,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAE9E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE1G,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,qCAAqC;QACrC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACpE,QAAQ,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QAC3C,IAAI,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;QACpF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,sEAAsE,CAAC,CAAC;QAEhI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,oDAAoD;QAEnH,+EAA+E;QAC/E,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,iLAAiL;QACjL,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAE9D,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,iEAAiE;QACjE,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;QACpF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,qEAAqE,CAAC,CAAC;QAE/H,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,gEAAgE,CAAC,CAAC;QACrG,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,kEAAkE,CAAC,CAAC;QAE3G,yDAAyD;QACzD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,kDAAkD;QAC/G,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC/D,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,eAAe;SACvB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC7C,4DAA4D;QAC5D,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAChF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE9G,0CAA0C;QAC1C,MAAM,WAAW,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QAEnD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAE3G,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAEnF,MAAM,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC9D,mGAAmG;QACnG,wEAAwE;QACxE,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnC,MAAM,eAAe,GAAG,gBAAgB,CAAC,sCAAsC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzF,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC/B,MAAM,aAAa,GAAG,gBAAgB,CAAC,sCAAsC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACrF,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,gBAAgB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,oEAAoE;QACrI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,gBAAgB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,oEAAoE;IACrI,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,oCAAoC,CAAC,CAAC;QACtE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,+EAA+E,CAAC,CAAC;QAClH,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,iFAAiF,CAAC,CAAC;QAExH,kCAAkC;QAClC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC7C,MAAM,WAAW,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;QACtD,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,iFAAiF,CAAC,CAAC;QAEpH,4DAA4D;QAC5D,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,+EAA+E,CAAC,CAAC;QAC9G,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9E,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,gCAAgC;QAChC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACnE,QAAQ,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;QAE1C,sDAAsD;QACtD,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,kBAAkB;YACzB,KAAK,EAAE,kBAAkB;SAC1B,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC;QAEzD,8EAA8E;QAC9E,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,qEAAqE;QACrE,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,gDAAgD,CAAC,CAAC;QACzG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,yDAAyD,CAAC,CAAC;QAE7G,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,0CAA0C,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,0DAA0D,CAAC,CAAC;QAErH,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,oCAAoC,CAAC,CAAC;QACtE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,+EAA+E,CAAC,CAAC;QAClH,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,iFAAiF,CAAC,CAAC;QAExH,yBAAyB;QACzB,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YACzD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC3C,MAAM,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QACpD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,+EAA+E,CAAC,CAAC;QAE9G,8CAA8C;QAC9C,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,iFAAiF,CAAC,CAAC;QACpH,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAEhF,8BAA8B;QAC9B,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAE5C,oDAAoD;QACpD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YACzD,KAAK,EAAE,sBAAsB;YAC7B,KAAK,EAAE,sBAAsB;SAC9B,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC;QAC3D,MAAM,WAAW,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;QAEvD,+EAA+E;QAC/E,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,oFAAoF;QACpF,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,iDAAiD,CAAC,CAAC;QAC9G,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,yDAAyD,CAAC,CAAC;QAE7G,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE,gDAAgD,CAAC,CAAC;QAC/G,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE,0DAA0D,CAAC,CAAC;QAEzH,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,iDAAiD,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,mEAAmE,CAAC,CAAC;QAE5G,yCAAyC;QACzC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YACxC,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;QACH,8EAA8E;QAE9E,0CAA0C;QAC1C,MAAM,IAAI,CAAC,MAAM,CACf,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAC7E,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,8EAA8E,CAAC,CAAC;QAErG,yDAAyD;QACzD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,mCAAmC,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,QAAQ,CAAC,uCAAuC,EAAE;IAChD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAyB;IAC9C,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,iKAAiK;QACpM,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,kFAAkF;IACpH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,iDAAiD,CAAC,CAAC;QACtF,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,mDAAmD,CAAC,CAAC;QAE5F,IAAI,YAAY,GAAe,EAAE,CAAC;QAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACnD,yDAAyD;YACzD,YAAY,GAAG,CAAE,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;gBACtD,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAClD,MAAM,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QAErD,IAAI,cAAc,GAAe,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACrD,yDAAyD;YACzD,cAAc,GAAG,CAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;gBAC1D,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,eAAe;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,8EAA8E;QAC7I,MAAM,WAAW,CAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,8EAA8E;QAC7I,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE3F,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAEnF,MAAM,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,sCAAsC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,4DAA4D,CAAC,CAAC;QACjG,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,8DAA8D,CAAC,CAAC;QAEvG,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE3E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE1G,IAAI,YAAY,GAAe,EAAE,CAAC;QAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACnD,yDAAyD;YACzD,YAAY,GAAG,CAAE,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;gBACtD,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAClD,MAAM,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,mDAAmD;QACjI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,IAAI,cAAc,GAAe,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACrD,yDAAyD;YACzD,cAAc,GAAG,CAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;gBAC1D,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,eAAe;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6EAA6E;QAC5I,MAAM,WAAW,CAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE3F,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAEnF,MAAM,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,sCAAsC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,uEAAuE,CAAC,CAAC;QAC5G,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,yEAAyE,CAAC,CAAC;QAElH,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE1G,IAAI,YAAY,GAAe,EAAE,CAAC;QAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACnD,yDAAyD;YACzD,YAAY,GAAG,CAAE,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;gBACtD,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAClD,MAAM,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,mDAAmD;QACjI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7E,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE9G,IAAI,cAAc,GAAe,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACrD,yDAAyD;YACzD,cAAc,GAAG,CAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;gBAC1D,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,eAAe;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,sEAAsE;QACpI,MAAM,WAAW,CAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAC3G,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE3F,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAEnF,MAAM,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,kDAAkD,CAAC,CAAC;QACpF,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,yEAAyE,CAAC,CAAC;QAC9G,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,2EAA2E,CAAC,CAAC;QAEpH,IAAI,YAAY,GAAe,EAAE,CAAC;QAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACnD,yDAAyD;YACzD,YAAY,GAAG,CAAE,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;gBACtD,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAClD,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE1G,MAAM,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,mDAAmD;QACjI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,IAAI,cAAc,GAAe,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACrD,yDAAyD;YACzD,cAAc,GAAG,CAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;gBAC1D,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,eAAe;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6EAA6E;QAC5I,MAAM,WAAW,CAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE3F,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAEnF,MAAM,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;QAC3G,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,uEAAuE,CAAC,CAAC;QACzG,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,iGAAiG,CAAC,CAAC;QACtI,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,mGAAmG,CAAC,CAAC;QAE5I,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE1G,IAAI,YAAY,GAAe,EAAE,CAAC;QAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACnD,yDAAyD;YACzD,YAAY,GAAG,CAAE,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;gBACtD,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAClD,MAAM,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,mDAAmD;QACjI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAChF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE9G,IAAI,cAAc,GAAe,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACrD,yDAAyD;YACzD,cAAc,GAAG,CAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;gBAC1D,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,eAAe;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QACtD,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,+DAA+D;QACjJ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,iIAAiI;QAEhM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE3F,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAEnF,MAAM,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,qEAAqE;QAErE,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,sCAAsC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,yEAAyE,CAAC,CAAC;QAC9G,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,2EAA2E,CAAC,CAAC;QAEpH,IAAI,YAAY,GAAe,EAAE,CAAC;QAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACnD,yDAAyD;YACzD,YAAY,GAAG,CAAE,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;gBACtD,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAClD,MAAM,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QAErD,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAChF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE9G,IAAI,cAAc,GAAe,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACrD,yDAAyD;YACzD,cAAc,GAAG,CAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;gBAC1D,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,eAAe;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,sEAAsE;QAEpI,MAAM,WAAW,CAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;QAEtE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,mDAAmD;QAErI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE3F,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAEnF,MAAM,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { Code, GeometricElementProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\nimport * as chai from \"chai\";\nimport { Suite } from \"mocha\";\nimport { HubWrappers, IModelTestUtils, KnownTestLocations } from \"..\";\nimport { BriefcaseDb, BriefcaseManager, ChannelControl, DrawingCategory, IModelJsFs } from \"../../core-backend\";\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { EntityClass } from \"@itwin/ecschema-metadata\";\nimport { TestUtils } from \"../TestUtils\";\n\nfunction startTestTxn(iModel: BriefcaseDb, description = \"semantic rebase\"): EditTxn {\n const txn = new EditTxn(iModel, description);\n txn.start();\n return txn;\n}\n\nfunction endTestTxn(txn: EditTxn): void {\n if (txn.isActive)\n txn.end(\"abandon\");\n}\n\nasync function importSchemaStrings(txn: EditTxn, schemas: string[]): Promise<void> {\n if (txn.isActive)\n txn.saveChanges();\n await txn.iModel.importSchemaStrings(schemas);\n}\n\nasync function pushChanges(txn: EditTxn, description: string): Promise<void> {\n const briefcase = txn.iModel as BriefcaseDb;\n endTestTxn(txn);\n await briefcase.pushChanges({ description });\n}\n\nasync function pullChanges(txn: EditTxn): Promise<void> {\n const briefcase = txn.iModel as BriefcaseDb;\n endTestTxn(txn);\n await briefcase.pullChanges();\n}\n\n/**\n * Test infrastructure for rebase tests in this file.\n * Manages two briefcases (far and local)\n */\nclass TestIModel {\n public iModelId: Id64String = \"\";\n public drawingModelId: Id64String = \"\";\n public drawingCategoryId: Id64String = \"\";\n public far: BriefcaseDb;\n public local: BriefcaseDb;\n\n private constructor(iModelId: Id64String, drawingModelId: Id64String, drawingCategoryId: Id64String, far: BriefcaseDb, local: BriefcaseDb) {\n this.iModelId = iModelId;\n this.drawingModelId = drawingModelId;\n this.drawingCategoryId = drawingCategoryId;\n this.far = far;\n this.local = local;\n }\n\n /** Reusable schema definitions for testing rebase with schema transformations */\n public static readonly schemas = {\n /** Base schema v01.00.00 with classes A, C, D */\n v01x00x00: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.01 - Adds PropC2 to class C (trivial additive change) */\n v01x00x01AddPropC2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 - Adds PropD2 to class D (trivial additive change) */\n v01x00x02AddPropD2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropD2\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 - Moves PropC from C to A (requires data transformation) on top of v01.00.01 */\n v01x00x02MovePropCToA: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.03 - Builds on top of v01.00.02 and in addition moves PropD to base, so we can have incoming and local transforming changes */\n v01x00x03MovePropCAndD: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.03\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD2\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.01 (incompatible variant) - Adds PropC3 instead of PropC2 to class C (same version) */\n v01x00x01AddPropC3Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC3\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 (incompatible variant) - Adds PropC3 instead of PropC2 to class C (higher version) */\n v01x00x02AddPropC3Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC3\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 (incompatible variant) - Adds PropC2 (higher version, different type) */\n v01x00x02AddPropC2Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"int\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.03 - Adds PropC2 as string (used to test incompatibility when reinstated on top of v01.00.02 with PropC2:int) */\n v01x00x03AddPropC2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.03\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n };\n\n /**\n * Create and initialize a new test iModel with far and local briefcases.\n * @param testName Unique name for this test (passed to HubMock.startup)\n * @returns Fully initialized TestIModel with both briefcases open\n */\n public static async initialize(testName: string): Promise<TestIModel> {\n HubMock.startup(testName, KnownTestLocations.outputDir);\n\n let far: BriefcaseDb | undefined;\n let local: BriefcaseDb | undefined;\n try {\n const iModelId = await HubMock.createNewIModel({\n accessToken: \"far-user\",\n iTwinId: HubMock.iTwinId,\n iModelName: testName,\n description: `Rebase schema update with data transform tests: ${testName}`,\n });\n\n // Open far briefcase and use it for initialization\n far = await HubWrappers.downloadAndOpenBriefcase({\n iTwinId: HubMock.iTwinId,\n iModelId,\n accessToken: \"far-user\",\n });\n far.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n // Initialize with base schema\n await far.importSchemaStrings([TestIModel.schemas.v01x00x00]);\n await far.pushChanges({ description: \"import base schema\" });\n\n // Create model and category\n const modelCode = IModelTestUtils.getUniqueModelCode(far, \"DrawingModel\");\n await far.locks.acquireLocks({ shared: IModel.dictionaryId });\n const [drawingModelId, drawingCategoryId] = withEditTxn(far, \"create model and category\", (txn) => {\n const [, newDrawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, modelCode);\n const newDrawingCategoryId = DrawingCategory.insert(\n txn,\n IModel.dictionaryId,\n \"DrawingCategory\",\n new SubCategoryAppearance()\n );\n return [newDrawingModelId, newDrawingCategoryId] as const;\n });\n await far.pushChanges({ description: \"create model and category\" });\n\n // Open local briefcase\n local = await HubWrappers.downloadAndOpenBriefcase({\n iTwinId: HubMock.iTwinId,\n iModelId,\n accessToken: \"local-user\",\n });\n local.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n return new TestIModel(iModelId, drawingModelId, drawingCategoryId, far, local);\n } catch (error) {\n if (local?.isOpen)\n local.close();\n\n if (far?.isOpen)\n far.close();\n\n HubMock.shutdown();\n throw error;\n }\n }\n\n public insertElement(\n txn: EditTxn,\n className: string,\n properties: Record<string, any>\n ): Id64String {\n const briefcase = txn.iModel as BriefcaseDb;\n const elementProps: GeometricElementProps = {\n classFullName: className,\n model: this.drawingModelId,\n category: this.drawingCategoryId,\n code: Code.createEmpty(),\n ...properties,\n };\n const element = briefcase.elements.createElement(elementProps);\n return txn.insertElement(element.toJSON());\n }\n\n public updateElement(txn: EditTxn, elementId: Id64String, updates: Record<string, any>): void {\n const briefcase = txn.iModel as BriefcaseDb;\n const element = briefcase.elements.getElement(elementId);\n Object.assign(element, updates);\n txn.updateElement(element.toJSON());\n }\n\n public getElement(briefcase: BriefcaseDb, elementId: Id64String): any {\n return briefcase.elements.getElement(elementId);\n }\n\n public checkIfFolderExists(briefcase: BriefcaseDb, txnId: string, isSchemaFolder: boolean): boolean {\n if (isSchemaFolder)\n return BriefcaseManager.semanticRebaseSchemaFolderExists(briefcase, txnId);\n return BriefcaseManager.semanticRebaseDataFolderExists(briefcase, txnId);\n }\n\n public checkifRebaseFolderExists(briefcase: BriefcaseDb): boolean {\n const folderPath = BriefcaseManager.getBasePathForSemanticRebaseLocalFiles(briefcase);\n return IModelJsFs.existsSync(folderPath);\n }\n\n public shutdown(): void {\n this.far.close();\n this.local.close();\n HubMock.shutdown();\n }\n}\n\n/**\n * Test suite for rebase logic with schema changes that require data transformations.\n */\ndescribe(\"Semantic Rebase\", function (this: Suite) {\n this.timeout(60000); // operations can be slow\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend(); // Automatically TestUtils.startBackend() is called before every test suite starts we need to shut tht down and startup our new TestUtils with semantic rebase on\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend(); // restart normal backend so subsequent test suites aren't left without IModelHost\n })\n\n it(\"local data changes onto incoming trivial schema change\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIncoming\");\n let localTxn = startTestTxn(t.local, \"local data changes onto incoming trivial schema change local\");\n let farTxn = startTestTxn(t.far, \"local data changes onto incoming trivial schema change far\");\n\n // Local creates an element\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"value_a\",\n propC: \"value_c\",\n });\n localTxn.saveChanges(\"create element\");\n await pushChanges(localTxn, \"create test element\");\n localTxn = startTestTxn(t.local, \"local data changes onto incoming trivial schema change local\");\n\n // Far imports updated schema with new property PropC2\n await pullChanges(farTxn);\n farTxn = startTestTxn(t.far, \"local data changes onto incoming trivial schema change far\");\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Verify that we're holding a shared lock (not exclusive) for semantic rebase\n chai.expect(t.far.locks.holdsSharedLock(IModel.repositoryModelId)).to.be.true;\n chai.expect(t.far.holdsSchemaLock).to.be.false;\n\n const txnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\n\n await pushChanges(farTxn, \"add PropC2 to class C\");\n\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\n\n // Local makes local changes to the element\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(localTxn, elementId, { propA: \"local_update_a\" });\n localTxn.saveChanges(\"local update to propA\");\n\n // Local pulls and rebases local changes onto incoming schema change\n await pullChanges(localTxn);\n\n // Verify: local changes preserved, schema updated\n const element = t.getElement(t.local, elementId);\n chai.expect(element.propA).to.equal(\"local_update_a\", \"Local property update should be preserved\");\n chai.expect(element.propC).to.equal(\"value_c\", \"Original propC should be preserved\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be updated to v01.00.01\");\n });\n\n it(\"local trivial schema change onto incoming data changes\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaLocal\");\n let localTxn = startTestTxn(t.local, \"local trivial schema change onto incoming data changes local\");\n let farTxn = startTestTxn(t.far, \"local trivial schema change onto incoming data changes far\");\n\n // Local creates an element\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"value_a\",\n propC: \"value_c\",\n });\n localTxn.saveChanges(\"create element\");\n await pushChanges(localTxn, \"create test element\");\n localTxn = startTestTxn(t.local, \"local trivial schema change onto incoming data changes local\");\n\n // Local imports updated schema locally\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Verify that we're holding a shared lock (not exclusive) for semantic rebase\n chai.expect(t.local.locks.holdsSharedLock(IModel.repositoryModelId)).to.be.true;\n chai.expect(t.local.holdsSchemaLock).to.be.false;\n\n const txnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnProps!.id, true)).to.be.true;\n\n\n // Far pulls element, then updates it\n await pullChanges(farTxn);\n farTxn = startTestTxn(t.far, \"local trivial schema change onto incoming data changes far\");\n await t.far.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(farTxn, elementId, { propA: \"far_update_a\" });\n farTxn.saveChanges(\"far update to propA\");\n await pushChanges(farTxn, \"update element propA\");\n\n // Local pulls and rebases local schema change onto incoming data changes\n await pullChanges(localTxn);\n\n chai.expect(t.checkIfFolderExists(t.local, txnProps!.id, true)).to.be.true; // after rebase the folder should be there until push is called\n\n // Verify: incoming data changes applied, local schema preserved\n const element = t.getElement(t.local, elementId);\n chai.expect(element.propA).to.equal(\"far_update_a\", \"Incoming property update should be applied\");\n chai.expect(element.propC).to.equal(\"value_c\", \"Original propC should be preserved\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Local schema update should be preserved\");\n });\n\n it(\"local data changes onto incoming data changes\", async () => {\n t = await TestIModel.initialize(\"DataOntoData\");\n let localTxn = startTestTxn(t.local, \"local data changes onto incoming data changes local\");\n let farTxn = startTestTxn(t.far, \"local data changes onto incoming data changes far\");\n\n // Local creates two elements\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId1 = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"value_a1\",\n propC: \"value_c1\",\n });\n const elementId2 = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"value_a2\",\n propC: \"value_c2\",\n });\n localTxn.saveChanges(\"create elements\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\n await pushChanges(localTxn, \"create test elements\");\n localTxn = startTestTxn(t.local, \"local data changes onto incoming data changes local\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\n\n // Far updates first element\n await pullChanges(farTxn);\n farTxn = startTestTxn(t.far, \"local data changes onto incoming data changes far\");\n await t.far.locks.acquireLocks({ exclusive: elementId1 });\n t.updateElement(farTxn, elementId1, { propC: \"far_update_c\" });\n farTxn.saveChanges(\"far update to propC\");\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // its data changes on both sides semantic rebase is not used\n await pushChanges(farTxn, \"update element propC\");\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // its data changes on both sides semantic rebase is not used\n\n\n // Local makes local changes to second element\n await t.local.locks.acquireLocks({ exclusive: elementId2 });\n t.updateElement(localTxn, elementId2, { propA: \"local_update_a\" });\n localTxn.saveChanges(\"local update to propA\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\n\n // Verify: both changes applied to their respective elements\n const element1 = t.getElement(t.local, elementId1);\n chai.expect(element1.propA).to.equal(\"value_a1\", \"Element 1 propA should be unchanged\");\n chai.expect(element1.propC).to.equal(\"far_update_c\", \"Element 1 incoming update should be applied\");\n\n const element2 = t.getElement(t.local, elementId2);\n chai.expect(element2.propA).to.equal(\"local_update_a\", \"Element 2 local update should be preserved\");\n chai.expect(element2.propC).to.equal(\"value_c2\", \"Element 2 propC should be unchanged\");\n });\n\n it(\"local trivial schema changes onto incoming trivial schema changes (local newer)\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaLocalNewer\");\n const localTxn = startTestTxn(t.local, \"local trivial schema changes onto incoming trivial schema changes local newer local\");\n const farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming trivial schema changes local newer far\");\n\n // Far imports v01.00.01 (adds PropC2)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\n\n await pushChanges(farTxn, \"add PropC2 to class C\");\n\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\n\n // Local imports v01.00.02 (adds PropC2 and PropD2 - newer)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true;\n\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // after rebase the folder should be there because local is newer until push is called\n\n // Verify: local schema preserved (newer version)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Local schema (newer) should be preserved\");\n });\n\n it(\"local trivial schema changes onto incoming trivial schema changes (incoming newer)\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIncomingNewer\");\n const localTxn = startTestTxn(t.local, \"local trivial schema changes onto incoming trivial schema changes incoming newer local\");\n const farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming trivial schema changes incoming newer far\");\n\n // Far imports v01.00.02 (adds PropC2 and PropD2 - newer)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n\n const txnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\n\n await pushChanges(farTxn, \"update schema to v01.00.02\");\n\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\n\n // Local imports v01.00.01 (adds only PropC2 - older)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true;\n\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.false; // after rebase the folder should not be there because incoming is newer so while rebasing it should be a no op\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because the rebase folder is deleted after rebase if it contains nothing\n\n // Verify: incoming schema preserved (newer version, local should not override)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Incoming schema (newer) should win, local should not override\");\n });\n\n it(\"local trivial schema changes onto incoming identical schema changes\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIdentical\");\n const localTxn = startTestTxn(t.local, \"local trivial schema changes onto incoming identical schema changes local\");\n const farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming identical schema changes far\");\n\n // Far imports v01.00.01 (adds PropC2)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Verify that we're holding a shared lock (not exclusive) for semantic rebase\n chai.expect(t.far.locks.holdsSharedLock(IModel.repositoryModelId)).to.be.true;\n chai.expect(t.far.holdsSchemaLock).to.be.false;\n\n const txnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\n\n await pushChanges(farTxn, \"add PropC2 to class C\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\n\n // Local imports the same v01.00.01 (adds PropC2)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true;\n\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.false; // after rebase the folder should not be there as both are identical\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because the rebase folder is deleted if it contains nothing after rebase\n\n // Verify: schema preserved (both sides identical)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be v01.00.01\");\n });\n\n it(\"local trivial schema changes onto incoming identical schema changes with data changes on both sides\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIdenticalWithData\");\n const localTxn = startTestTxn(t.local, \"local trivial schema changes onto incoming identical schema changes with data local\");\n let farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming identical schema changes with data far\");\n\n // Far imports v01.00.01 (adds PropC2) and creates an element\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\n\n await pushChanges(farTxn, \"add PropC2 to class C\");\n farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming identical schema changes with data far\");\n\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\n\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElementId = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n propC2: \"far_value_c2\",\n });\n farTxn.saveChanges(\"far creates element with new property\");\n await pushChanges(farTxn, \"far creates element\");\n\n // Local imports the same v01.00.01 (adds PropC2) and creates an element\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true;\n\n\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n propC2: \"local_value_c2\",\n });\n localTxn.saveChanges(\"local creates element with new property\");\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.false; // after rebase the folder should not be there as both are identical\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because the rebase folder is deleted after rebase if it contains nothing\n\n // Verify: schema preserved (both sides identical)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be v01.00.01\");\n\n // Verify: both elements exist with their original properties\n const farElement = t.getElement(t.local, farElementId);\n chai.expect(farElement.propA).to.equal(\"far_value_a\", \"Far element propA should be preserved\");\n chai.expect(farElement.propC).to.equal(\"far_value_c\", \"Far element propC should be preserved\");\n chai.expect(farElement.propC2).to.equal(\"far_value_c2\", \"Far element propC2 should be preserved\");\n\n const localElement = t.getElement(t.local, localElementId);\n chai.expect(localElement.propA).to.equal(\"local_value_a\", \"Local element propA should be preserved\");\n chai.expect(localElement.propC).to.equal(\"local_value_c\", \"Local element propC should be preserved\");\n chai.expect(localElement.propC2).to.equal(\"local_value_c2\", \"Local element propC2 should be preserved\");\n });\n\n it(\"both add different properties, increment to same version number\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIncompatible\");\n const localTxn = startTestTxn(t.local, \"both add different properties increment to same version local\");\n const farTxn = startTestTxn(t.far, \"both add different properties increment to same version far\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"add PropC2 to class C\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC3Incompatible]);\n\n await pullChanges(localTxn); // TODO: this currently passes, because same version number means no upgrade is attempted\n //TODO: this should probably fail instead as both sides made incompatible changes to the same version, but this is unrelated to semantic rebase itself\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be v01.00.01\");\n });\n\n it(\"both add compatible properties, local version number higher\", async () => {\n t = await TestIModel.initialize(\"CompatibleSchemaLocalHigher\");\n const localTxn = startTestTxn(t.local, \"both add compatible properties local version higher local\");\n const farTxn = startTestTxn(t.far, \"both add compatible properties local version higher far\");\n\n // Far imports v01.00.01 (adds PropC2)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"add PropC2 to class C\");\n\n // Local imports v01.00.02 (adds PropC2 and PropD2 - compatible higher version)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n // Verify: Local schema wins (higher version)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be v01.00.02 (higher version wins)\");\n const classC = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"C\", EntityClass);\n chai.expect(classC).to.not.be.undefined;\n chai.expect(await classC!.getProperty(\"PropC2\")).to.exist;\n const classD = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"D\", EntityClass);\n chai.expect(classD).to.not.be.undefined;\n chai.expect(await classD!.getProperty(\"PropD2\")).to.exist;\n });\n\n it(\"both add compatible properties, incoming version number higher\", async () => {\n t = await TestIModel.initialize(\"CompatibleSchemaIncomingHigher\");\n const localTxn = startTestTxn(t.local, \"both add compatible properties incoming version higher local\");\n const farTxn = startTestTxn(t.far, \"both add compatible properties incoming version higher far\");\n\n // Far imports v01.00.02 (adds PropC2 and PropD2 - higher version)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n await pushChanges(farTxn, \"update schema to v01.00.02\");\n\n // Local imports v01.00.01 (adds only PropC2 - compatible lower version)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n // Verify: Incoming schema wins (higher version)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be v01.00.02 (higher version wins)\");\n const classC = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"C\", EntityClass);\n chai.expect(classC).to.not.be.undefined;\n chai.expect(await classC!.getProperty(\"PropC2\")).to.exist;\n const classD = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"D\", EntityClass);\n chai.expect(classD).to.not.be.undefined;\n chai.expect(await classD!.getProperty(\"PropD2\")).to.exist;\n });\n\n it(\"both add same but incompatible property, local version number higher\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIncompatible\");\n const localTxn = startTestTxn(t.local, \"both add same but incompatible property local version higher local\");\n const farTxn = startTestTxn(t.far, \"both add same but incompatible property local version higher far\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"add PropC2 to class C\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropC2Incompatible]);\n\n // Local pulls and rebases - this should detect the incompatibility and fail\n await chai.expect(pullChanges(localTxn)).to.be.rejectedWith(\"ECSchema Upgrade failed\");\n });\n\n it(\"both add same but incompatible property, incoming version number higher\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIncompatible\");\n const localTxn = startTestTxn(t.local, \"both add same but incompatible property incoming version higher local\");\n const farTxn = startTestTxn(t.far, \"both add same but incompatible property incoming version higher far\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropC2Incompatible]);\n await pushChanges(farTxn, \"import v01.00.02 with PropC2 as int\");\n\n // Local uses v01.00.03 with PropC2:string — higher version ensures the upgrade is attempted\n // during reinstatement, which detects the type mismatch (string vs int)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x03AddPropC2]);\n\n // Local pulls and rebases - this should detect the incompatibility and fail\n await chai.expect(pullChanges(localTxn)).to.be.rejectedWith(\"ECSchema Upgrade failed\");\n });\n\n it(\"local transforming schema change onto incoming trivial schema change\", async () => {\n t = await TestIModel.initialize(\"LocalTransformIncomingTrivial\");\n const farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming trivial schema change far\");\n const localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming trivial schema change local\");\n\n // Far: Insert Element and import trivial schema change\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElementId = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n farTxn.saveChanges(\"far create element\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnPropsFar = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnPropsFar).to.not.be.undefined;\n chai.expect(txnPropsFar!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnPropsFar!.id, true)).to.be.true; // schema folder should exist\n\n await pushChanges(farTxn, \"far add PropC2\");\n\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n // Local: Insert Element and import transforming schema change\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n localTxn.saveChanges(\"local create element\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\n\n // Local pulls and rebases transforming change onto incoming trivial change\n await pushChanges(localTxn, \"local move PropC to A\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\n\n // Verify: both elements have PropC intact, schema transformed locally\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n const farElement = t.getElement(t.local, farElementId);\n chai.expect(farElement.propA).to.equal(\"far_value_a\", \"Far element propA should be preserved\");\n chai.expect(farElement.propC).to.equal(\"far_value_c\", \"Far element propC should be preserved after transform\");\n\n const localElement = t.getElement(t.local, localElementId);\n chai.expect(localElement.propA).to.equal(\"local_value_a\", \"Local element propA should be preserved\");\n chai.expect(localElement.propC).to.equal(\"local_value_c\", \"Local element propC should be preserved after transform\");\n });\n\n it(\"local trivial schema change onto incoming transforming schema change\", async () => {\n t = await TestIModel.initialize(\"LocalTrivialIncomingTransform\");\n const farTxn = startTestTxn(t.far, \"local trivial schema change onto incoming transforming schema change far\");\n const localTxn = startTestTxn(t.local, \"local trivial schema change onto incoming transforming schema change local\");\n\n // Far: Insert Element and import transforming schema change\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElementId = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n farTxn.saveChanges(\"far create element\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n await pushChanges(farTxn, \"far move PropC to A\");\n\n // Local: Insert Element and import trivial schema change\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n localTxn.saveChanges(\"local create element\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\n\n // Local pulls and rebases trivial change onto incoming transforming change\n await pushChanges(localTxn, \"local add PropC2\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n // Verify: both elements have PropC intact after incoming transform\n const farElement = t.getElement(t.local, farElementId);\n chai.expect(farElement.propA).to.equal(\"far_value_a\", \"Far element propA should be preserved\");\n chai.expect(farElement.propC).to.equal(\"far_value_c\", \"Far element propC should be preserved after incoming transform\");\n\n const localElement = t.getElement(t.local, localElementId);\n chai.expect(localElement.propA).to.equal(\"local_value_a\", \"Local element propA should be preserved\");\n chai.expect(localElement.propC).to.equal(\"local_value_c\", \"Local element propC should be preserved after incoming transform\");\n });\n\n it(\"local transforming schema change onto incoming transforming schema change\", async () => {\n t = await TestIModel.initialize(\"BothTransforming\");\n const farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming transforming schema change far\");\n const localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming transforming schema change local\");\n\n // Far: Create elements with PropC and PropD, import transforming schema (moves PropC to A)\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElementC = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a_c\",\n propC: \"far_value_c\",\n });\n const farElementD = t.insertElement(farTxn, \"TestDomain:D\", {\n propA: \"far_value_a_d\",\n propD: \"far_value_d\",\n });\n farTxn.saveChanges(\"far create elements\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n\n const txnPropsFar = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnPropsFar).to.not.be.undefined;\n chai.expect(txnPropsFar!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnPropsFar!.id, true)).to.be.true; // schema folder should exist\n\n farTxn.saveChanges(\"far move PropC to A\");\n await pushChanges(farTxn, \"far transform PropC\");\n\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n // Local: Create elements with PropC and PropD, import transforming schema (moves both PropC and PropD to A)\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElementC = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a_c\",\n propC: \"local_value_c\",\n });\n const localElementD = t.insertElement(localTxn, \"TestDomain:D\", {\n propA: \"local_value_a_d\",\n propD: \"local_value_d\",\n });\n localTxn.saveChanges(\"local create elements\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x03MovePropCAndD]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\n\n localTxn.saveChanges(\"local move PropC and PropD to A\");\n // Local pulls and rebases both transforming changes\n await pushChanges(localTxn, \"local transform PropC and PropD\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\n\n t.far.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n // Verify: all elements have both PropC and PropD intact\n const farElemC = t.getElement(t.local, farElementC);\n chai.expect(farElemC.propA).to.equal(\"far_value_a_c\", \"Far element C propA should be preserved\");\n chai.expect(farElemC.propC).to.equal(\"far_value_c\", \"Far element C propC should be preserved after both transforms\");\n\n const farElemD = t.getElement(t.local, farElementD);\n chai.expect(farElemD.propA).to.equal(\"far_value_a_d\", \"Far element D propA should be preserved\");\n chai.expect(farElemD.propD).to.equal(\"far_value_d\", \"Far element D propD should be preserved after both transforms\");\n\n const localElemC = t.getElement(t.local, localElementC);\n chai.expect(localElemC.propA).to.equal(\"local_value_a_c\", \"Local element C propA should be preserved\");\n chai.expect(localElemC.propC).to.equal(\"local_value_c\", \"Local element C propC should be preserved after both transforms\");\n\n const localElemD = t.getElement(t.local, localElementD);\n chai.expect(localElemD.propA).to.equal(\"local_value_a_d\", \"Local element D propA should be preserved\");\n chai.expect(localElemD.propD).to.equal(\"local_value_d\", \"Local element D propD should be preserved after both transforms\");\n });\n\n it(\"local data update onto incoming transforming schema change\", async () => {\n t = await TestIModel.initialize(\"LocalDataIncomingTransform\");\n let farTxn = startTestTxn(t.far, \"local data update onto incoming transforming schema change far\");\n let localTxn = startTestTxn(t.local, \"local data update onto incoming transforming schema change local\");\n\n // Insert one instance and populate to both far and local\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"initial_value_a\",\n propC: \"initial_value_c\",\n });\n farTxn.saveChanges(\"far create element\");\n await pushChanges(farTxn, \"create shared element\");\n farTxn = startTestTxn(t.far, \"local data update onto incoming transforming schema change far\");\n\n // Local pulls to get the element\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"local data update onto incoming transforming schema change local\");\n\n // Far imports transforming schema (moves PropC from C to A)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n\n const txnPropsFar = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnPropsFar).to.not.be.undefined;\n chai.expect(txnPropsFar!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnPropsFar!.id, true)).to.be.true; // schema folder should exist\n\n await pushChanges(farTxn, \"far move PropC to A\");\n\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n // Local updates PropC on the element\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(localTxn, elementId, { propC: \"local_modified_c\" });\n localTxn.saveChanges(\"local update propC\");\n let element = t.getElement(t.local, elementId);\n chai.expect(element.propA).to.equal(\"initial_value_a\", \"PropA should be unchanged\");\n chai.expect(element.propC).to.equal(\"local_modified_c\", \"PropC should have the local modified value before incoming transform\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // no schema change yet on local so no rebase folder\n\n // Local pulls and rebases data change onto incoming transforming schema change\n await pullChanges(localTxn);\n\n // after rebase the folder should not be there because data change folder is created on the fly and removed once rebased and rebase folder is also removed if it contains nothing\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n // Verify: PropC has the modified local value after the transform\n element = t.getElement(t.local, elementId);\n chai.expect(element.propA).to.equal(\"initial_value_a\", \"PropA should be unchanged\");\n chai.expect(element.propC).to.equal(\"local_modified_c\", \"PropC should have the local modified value after incoming transform\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Incoming data update onto local transforming schema change\", async () => {\n t = await TestIModel.initialize(\"IncomingDataLocalTransform\");\n const farTxn = startTestTxn(t.far, \"Incoming data update onto local transforming schema change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data update onto local transforming schema change local\");\n\n // Insert one instance and populate to both far and local\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementIdFar = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n farTxn.saveChanges(\"far create element\");\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // no schema change yet on far so no rebase folder\n await pushChanges(farTxn, \"create shared element\");\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementIdLocal = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n localTxn.saveChanges(\"local create element\");\n // Far imports transforming schema (moves PropC from C to A)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\n\n // local pulls and rebases and then pushes\n await pushChanges(localTxn, \"far move PropC to A\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElement(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElement(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Check if associated rebase folders get deleted when a briefcase is deleted or not\", async () => {\n t = await TestIModel.initialize(\"IncomingDataLocalTransform\");\n // Must close briefcases before deleting their files - on Windows, open files are locked by the OS.\n // Save paths before closing since pathName getter throws on closed dbs.\n const localPath = t.local.pathName;\n const localRebasePath = BriefcaseManager.getBasePathForSemanticRebaseLocalFiles(t.local);\n const farPath = t.far.pathName;\n const farRebasePath = BriefcaseManager.getBasePathForSemanticRebaseLocalFiles(t.far);\n t.local.close();\n await BriefcaseManager.deleteBriefcaseFiles(localPath);\n chai.expect(IModelJsFs.existsSync(localRebasePath)).to.be.false; // after briefcase deletion the rebase folder should also be deleted\n t.far.close();\n await BriefcaseManager.deleteBriefcaseFiles(farPath);\n chai.expect(IModelJsFs.existsSync(farRebasePath)).to.be.false; // after briefcase deletion the rebase folder should also be deleted\n });\n\n it(\"local multiple data transactions onto incoming transforming schema change\", async () => {\n t = await TestIModel.initialize(\"LocalMultipleDataIncomingTransform\");\n let farTxn = startTestTxn(t.far, \"local multiple data transactions onto incoming transforming schema change far\");\n let localTxn = startTestTxn(t.local, \"local multiple data transactions onto incoming transforming schema change local\");\n\n // Insert initial element and push\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId1 = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"initial_a\",\n propC: \"initial_c\",\n });\n localTxn.saveChanges(\"create first element\");\n await pushChanges(localTxn, \"create initial element\");\n localTxn = startTestTxn(t.local, \"local multiple data transactions onto incoming transforming schema change local\");\n\n // Far imports transforming schema (moves PropC from C to A)\n await pullChanges(farTxn);\n farTxn = startTestTxn(t.far, \"local multiple data transactions onto incoming transforming schema change far\");\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n await pushChanges(farTxn, \"far move PropC to A\");\n\n // Local makes first data change\n await t.local.locks.acquireLocks({ exclusive: elementId1 });\n t.updateElement(localTxn, elementId1, { propA: \"first_update_a\" });\n localTxn.saveChanges(\"first data change\");\n\n // Local makes second data change - create new element\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId2 = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"second_element_a\",\n propC: \"second_element_c\",\n });\n localTxn.saveChanges(\"second data change - new element\");\n\n // Local pulls and rebases both transactions onto incoming transforming schema\n await pullChanges(localTxn);\n\n t.local.clearCaches();\n\n // Verify: both local data changes preserved after incoming transform\n const element1 = t.getElement(t.local, elementId1);\n chai.expect(element1.propA).to.equal(\"first_update_a\", \"First element propA update should be preserved\");\n chai.expect(element1.propC).to.equal(\"initial_c\", \"First element propC should be preserved after transform\");\n\n const element2 = t.getElement(t.local, elementId2);\n chai.expect(element2.propA).to.equal(\"second_element_a\", \"Second element propA should be preserved\");\n chai.expect(element2.propC).to.equal(\"second_element_c\", \"Second element propC should be preserved after transform\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"local transforming schema change onto incoming multiple data transactions\", async () => {\n t = await TestIModel.initialize(\"LocalTransformIncomingMultipleData\");\n let farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming multiple data transactions far\");\n let localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming multiple data transactions local\");\n\n // Create initial element\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId1 = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"initial_a\",\n propC: \"initial_c\",\n });\n farTxn.saveChanges(\"create first element\");\n await pushChanges(farTxn, \"create initial element\");\n farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming multiple data transactions far\");\n\n // Local pulls and imports transforming schema\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming multiple data transactions local\");\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n\n // Far makes first data change\n await t.far.locks.acquireLocks({ exclusive: elementId1 });\n t.updateElement(farTxn, elementId1, { propA: \"far_first_update_a\" });\n farTxn.saveChanges(\"far first data change\");\n\n // Far makes second data change - create new element\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId2 = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_second_element_a\",\n propC: \"far_second_element_c\",\n });\n farTxn.saveChanges(\"far second data change - new element\");\n await pushChanges(farTxn, \"far multiple data changes\");\n\n // Local pulls and rebases local transforming schema onto incoming data changes\n await pullChanges(localTxn);\n\n t.local.clearCaches();\n\n // Verify: both incoming data changes applied, local schema transformation preserved\n const element1 = t.getElement(t.local, elementId1);\n chai.expect(element1.propA).to.equal(\"far_first_update_a\", \"First element incoming update should be applied\");\n chai.expect(element1.propC).to.equal(\"initial_c\", \"First element propC should be preserved after transform\");\n\n const element2 = t.getElement(t.local, elementId2);\n chai.expect(element2.propA).to.equal(\"far_second_element_a\", \"Second element should exist with correct propA\");\n chai.expect(element2.propC).to.equal(\"far_second_element_c\", \"Second element propC should be preserved after transform\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Local schema transformation should be preserved\");\n });\n\n it(\"should fail when importing schema with unsaved data changes\", async () => {\n t = await TestIModel.initialize(\"UnsavedDataChangesSchemaImport\");\n const localTxn = startTestTxn(t.local, \"should fail when importing schema with unsaved data changes local\");\n\n // Create element but DO NOT save changes\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"unsaved_a\",\n propC: \"unsaved_c\",\n });\n // Intentionally not saving the active local transaction before schema import.\n\n // Try to import schema - this should fail\n await chai.expect(\n localTxn.iModel.importSchemaStrings([TestIModel.schemas.v01x00x01AddPropC2])\n ).to.be.rejectedWith(\"Cannot import schemas with unsaved changes when useSemanticRebase flag is on\");\n\n // Verify: element was not saved, schema was not imported\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.00\", \"Schema should remain at v01.00.00\");\n });\n\n});\n\n/**\n * Test suite for tests related to rebase logic with schema changes (for indirect changes) that require data transformations.\n */\ndescribe(\"Semantic Rebase with indirect changes\", function (this: Suite) {\n this.timeout(60000); // operations can be slow\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend(); // Automatically TestUtils.startBackend() is called before every test suite starts we need to shut tht down and startup our new TestUtils with semantic rebase on\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend(); // restart normal backend so subsequent test suites aren't left without IModelHost\n });\n\n it(\"Incoming data update onto local data change\", async () => { // This doesnot actually take the semantic rebase route as both incoming and local have data changes only\n t = await TestIModel.initialize(\"IncomingDataLocalDataChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data update onto local data change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data update onto local data change local\");\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await pushChanges(farTxn, \"create indirect element\");\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on either side\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on either side\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElement(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElement(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n });\n\n it(\"Incoming data and schema update onto local data change\", async () => {\n t = await TestIModel.initialize(\"IncomingDataAndSchemaLocalDataChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data and schema update onto local data change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data and schema update onto local data change local\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(farTxnProps).to.not.be.undefined;\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await pushChanges(farTxn, \"create indirect element\");\n\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on local side\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false;\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElement(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElement(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Incoming data and schema update onto local data and schema change\", async () => {\n t = await TestIModel.initialize(\"IncomingDataLocalDataAndSchemaChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data and schema update onto local data and schema change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data and schema update onto local data and schema change local\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(farTxnProps).to.not.be.undefined;\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await pushChanges(farTxn, \"create indirect element\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n const localTxnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(localTxnProps).to.not.be.undefined;\n chai.expect(localTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.true; // there should be a rebase folder because schema change on local side\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElement(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElement(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Incoming data and Transforming schema update onto local data change\", async () => {\n t = await TestIModel.initialize(\"IncomingDataAndTransformingSchemaLocalDataChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data and Transforming schema update onto local data change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data and Transforming schema update onto local data change local\");\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(farTxnProps).to.not.be.undefined;\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n await pushChanges(farTxn, \"create indirect element\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on local side\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false;\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElement(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElement(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Incoming data and transforming schema update onto local data and transforming schema change\", async () => {\n t = await TestIModel.initialize(\"IncomingDataAndTransformingSchemaLocalDataAndTransformingSchemaChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data and transforming schema update onto local data and transforming schema change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data and transforming schema update onto local data and transforming schema change local\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(farTxnProps).to.not.be.undefined;\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await pushChanges(farTxn, \"create indirect element\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n const localTxnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(localTxnProps).to.not.be.undefined;\n chai.expect(localTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n await pullChanges(localTxn);\n\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.false; // because it is a no op change we are importing similar schema\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // schema change is no op and data changes are generated on the fly and removed once rebased so rebase folder should not be there\n\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElement(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElement(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Incoming data update onto local data and transforming schema change\", async () => {\n // This test fails but should not fail actually - needs investigation\n\n t = await TestIModel.initialize(\"IncomingDataAndSchemaLocalDataChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data update onto local data and transforming schema change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data update onto local data and transforming schema change local\");\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await pushChanges(farTxn, \"create indirect element\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n const localTxnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(localTxnProps).to.not.be.undefined;\n chai.expect(localTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.true; // there should be a rebase folder because schema change on local side\n\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\n\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\n\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElement(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElement(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n});\n\n\n"]}
1
+ {"version":3,"file":"SemanticRebase.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/SemanticRebase.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,IAAI,EAAc,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,IAAI,EAA6C,MAAM,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACpI,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AACtE,OAAO,EAAe,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,SAAS,YAAY,CAAC,MAAmB,EAAE,WAAW,GAAG,iBAAiB;IACxE,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7C,GAAG,CAAC,KAAK,EAAE,CAAC;IACZ,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,GAAY;IAC9B,IAAI,GAAG,CAAC,QAAQ;QACd,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,GAAY,EAAE,OAAiB;IAChE,IAAI,GAAG,CAAC,QAAQ;QACd,GAAG,CAAC,WAAW,EAAE,CAAC;IACpB,MAAM,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAY,EAAE,WAAmB;IAC1D,MAAM,SAAS,GAAG,GAAG,CAAC,MAAqB,CAAC;IAC5C,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,MAAM,SAAS,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAY;IACrC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAqB,CAAC;IAC5C,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU;IACP,QAAQ,GAAe,EAAE,CAAC;IAC1B,cAAc,GAAe,EAAE,CAAC;IAChC,iBAAiB,GAAe,EAAE,CAAC;IACnC,GAAG,CAAc;IACjB,KAAK,CAAc;IAE1B,YAAoB,QAAoB,EAAE,cAA0B,EAAE,iBAA6B,EAAE,GAAgB,EAAE,KAAkB;QACvI,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,iFAAiF;IAC1E,MAAM,CAAU,OAAO,GAAG;QAC/B,iDAAiD;QACjD,SAAS,EAAE;;;;;;;;;;;;;;;gBAeC;QAEZ,mEAAmE;QACnE,kBAAkB,EAAE;;;;;;;;;;;;;;;;gBAgBR;QAEZ,mEAAmE;QACnE,kBAAkB,EAAE;;;;;;;;;;;;;;;;;gBAiBR;QAEZ,6FAA6F;QAC7F,qBAAqB,EAAE;;;;;;;;;;;;;;;;gBAgBX;QAEZ,yIAAyI;QACzI,sBAAsB,EAAE;;;;;;;;;;;;;;;;;gBAiBZ;QAEZ,iGAAiG;QACjG,8BAA8B,EAAE;;;;;;;;;;;;;;;;gBAgBpB;QAEZ,mGAAmG;QACnG,8BAA8B,EAAE;;;;;;;;;;;;;;;;gBAgBpB;QAEZ,sFAAsF;QACtF,8BAA8B,EAAE;;;;;;;;;;;;;;;;gBAgBpB;QAEZ,2HAA2H;QAC3H,kBAAkB,EAAE;;;;;;;;;;;;;;;;gBAgBR;KACb,CAAC;IAEF,sDAAsD;IAC/C,MAAM,CAAU,eAAe,GAAG;QACvC,kHAAkH;QAClH,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;gBAmBT;QAEZ,iHAAiH;QACjH,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;gBAoBd;QAEZ,4FAA4F;QAC5F,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;gBAmBR;QAEZ,mEAAmE;QACnE,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;gBAoBd;QAEZ,wGAAwG;QACxG,uBAAuB,EAAE;;;;;;;;;;;;;;;;;;gBAkBb;QAEZ,wEAAwE;QACxE,+BAA+B,EAAE;;;;;;;;;;;;;;;;;;;gBAmBrB;QAEZ,wGAAwG;QACxG,mCAAmC,EAAE;;;;;;;;;;;;;;;;;;gBAkBzB;QAEZ,6GAA6G;QAC7G,qBAAqB,EAAE;;;;;;;;;;;;;;;gBAeX;QACZ,+DAA+D;QAC/D,uBAAuB,EAAE;;;;;;;;;;;;;;;;gBAgBb;QACZ,mGAAmG;QACnG,gCAAgC,EAAE;;;;;;;;;;;;;;;;;gBAiBtB;KACb,CAAC;IAEF;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC7C,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAExD,IAAI,GAA4B,CAAC;QACjC,IAAI,KAA8B,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC;gBAC7C,WAAW,EAAE,UAAU;gBACvB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,UAAU,EAAE,QAAQ;gBACpB,WAAW,EAAE,mDAAmD,QAAQ,EAAE;aAC3E,CAAC,CAAC;YAEH,mDAAmD;YACnD,GAAG,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC;gBAC/C,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ;gBACR,WAAW,EAAE,UAAU;aACxB,CAAC,CAAC;YACH,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YACjE,8BAA8B;YAC9B,MAAM,GAAG,CAAC,mBAAmB,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;YAC9D,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAE7D,4BAA4B;YAC5B,MAAM,SAAS,GAAG,eAAe,CAAC,kBAAkB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAC1E,MAAM,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YAC9D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,2BAA2B,EAAE,CAAC,GAAG,EAAE,EAAE;gBAChG,MAAM,CAAC,EAAE,iBAAiB,CAAC,GAAG,eAAe,CAAC,uCAAuC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBACtG,MAAM,oBAAoB,GAAG,eAAe,CAAC,MAAM,CACjD,GAAG,EACH,MAAM,CAAC,YAAY,EACnB,iBAAiB,EACjB,IAAI,qBAAqB,EAAE,CAC5B,CAAC;gBACF,OAAO,CAAC,iBAAiB,EAAE,oBAAoB,CAAU,CAAC;YAC5D,CAAC,CAAC,CAAC;YACH,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,2BAA2B,EAAE,CAAC,CAAC;YAEpE,uBAAuB;YACvB,KAAK,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC;gBACjD,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ;gBACR,WAAW,EAAE,YAAY;aAC1B,CAAC,CAAC;YACH,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAEnE,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACjF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,EAAE,MAAM;gBACf,KAAK,CAAC,KAAK,EAAE,CAAC;YAEhB,IAAI,GAAG,EAAE,MAAM;gBACb,GAAG,CAAC,KAAK,EAAE,CAAC;YAEd,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEM,aAAa,CAClB,GAAY,EACZ,SAAiB,EACjB,UAA+B;QAE/B,MAAM,SAAS,GAAG,GAAG,CAAC,MAAqB,CAAC;QAC5C,MAAM,YAAY,GAA0B;YAC1C,aAAa,EAAE,SAAS;YACxB,KAAK,EAAE,IAAI,CAAC,cAAc;YAC1B,QAAQ,EAAE,IAAI,CAAC,iBAAiB;YAChC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,GAAG,UAAU;SACd,CAAC;QACF,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAC/D,OAAO,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAEM,aAAa,CAAC,GAAY,EAAE,SAAqB,EAAE,OAA4B;QACpF,MAAM,SAAS,GAAG,GAAG,CAAC,MAAqB,CAAC;QAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAEM,eAAe,CAAC,SAAsB,EAAE,SAAqB;QAClE,OAAO,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;IAEM,aAAa,CAAC,SAAsB,EAAE,OAAmB;QAC9D,OAAO,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC;IAEM,mBAAmB,CAAC,SAAsB,EAAE,KAAa,EAAE,cAAuB;QACvF,IAAI,cAAc;YAChB,OAAO,gBAAgB,CAAC,gCAAgC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7E,OAAO,gBAAgB,CAAC,8BAA8B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IAEM,yBAAyB,CAAC,SAAsB;QACrD,MAAM,UAAU,GAAG,gBAAgB,CAAC,sCAAsC,CAAC,SAAS,CAAC,CAAC;QACtF,OAAO,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;OAOG;IACI,YAAY,CAAC,GAAY,EAAE,SAAqB,EAAE,eAAuB,EAAE,UAA+B;QAC/G,MAAM,WAAW,GAAuB;YACtC,aAAa,EAAE,eAAe;YAC9B,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,iCAAiC,EAAE;YAC3E,GAAG,UAAU;SACd,CAAC;QACF,OAAO,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACI,YAAY,CAAC,GAAY,EAAE,SAAqB,EAAE,eAAuB,EAAE,OAA4B;QAC5G,MAAM,SAAS,GAAG,GAAG,CAAC,MAAqB,CAAC;QAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,wCAAwC,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,YAAY,CAAC,GAAY,EAAE,SAAqB,EAAE,eAAuB;QAC9E,MAAM,SAAS,GAAG,GAAG,CAAC,MAAqB,CAAC;QAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,wCAAwC,CAAC,CAAC;QAC3F,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,SAAsB,EAAE,SAAqB,EAAE,eAAuB;QACrF,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAC1E,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,kBAAkB,CAAC,cAAsB,YAAY;QAChE,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC;YACvD,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW;SACZ,CAAC,CAAC;QACH,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,SAAsB,EAAE,KAAa;QAClE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmC,CAAC;QAC1D,MAAM,MAAM,GAAG,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC/G,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,EAAyB,CAAC;YAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAgB,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,QAAQ;QACb,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACjB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,QAAQ,EAAE,CAAC;IACrB,CAAC;;AAGH;;GAEG;AACH,QAAQ,CAAC,iBAAiB,EAAE;IAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAyB;IAC9C,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,iKAAiK;QACpM,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,kFAAkF;IACpH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;QACzD,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,8DAA8D,CAAC,CAAC;QACrG,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,4DAA4D,CAAC,CAAC;QAE/F,2BAA2B;QAC3B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC1D,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACvC,MAAM,WAAW,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QACnD,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,8DAA8D,CAAC,CAAC;QAEjG,sDAAsD;QACtD,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,4DAA4D,CAAC,CAAC;QAC3F,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE3E,8EAA8E;QAC9E,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC9E,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAE/C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEzE,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAEnD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEvH,2CAA2C;QAC3C,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAClE,QAAQ,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAE9C,oEAAoE;QACpE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,kDAAkD;QAClD,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,2CAA2C,CAAC,CAAC;QACnG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;QAErF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,uCAAuC,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACtD,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,8DAA8D,CAAC,CAAC;QACrG,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,4DAA4D,CAAC,CAAC;QAE/F,2BAA2B;QAC3B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC1D,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACvC,MAAM,WAAW,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QACnD,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,8DAA8D,CAAC,CAAC;QAEjG,uCAAuC;QACvC,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,8EAA8E;QAC9E,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAChF,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAEjD,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAG3E,qCAAqC;QACrC,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,4DAA4D,CAAC,CAAC;QAC3F,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAC1C,MAAM,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAElD,yEAAyE;QACzE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,+DAA+D;QAE3I,gEAAgE;QAChE,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,4CAA4C,CAAC,CAAC;QAClG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;QAErF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,yCAAyC,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAChD,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,qDAAqD,CAAC,CAAC;QAC5F,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,mDAAmD,CAAC,CAAC;QAEtF,6BAA6B;QAC7B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,UAAU;SAClB,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,UAAU;SAClB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6DAA6D;QAC5H,MAAM,WAAW,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;QACpD,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,qDAAqD,CAAC,CAAC;QACxF,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6DAA6D;QAE5H,4BAA4B;QAC5B,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,mDAAmD,CAAC,CAAC;QAClF,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6DAA6D;QAC1H,MAAM,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6DAA6D;QAG1H,8CAA8C;QAC9C,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACnE,QAAQ,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6DAA6D;QAE5H,0BAA0B;QAC1B,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6DAA6D;QAE5H,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,qCAAqC,CAAC,CAAC;QACxF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,6CAA6C,CAAC,CAAC;QAEpG,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,4CAA4C,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,qCAAqC,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,qFAAqF,CAAC,CAAC;QAC9H,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,mFAAmF,CAAC,CAAC;QAExH,sCAAsC;QACtC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE3E,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEzE,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAEnD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEvH,2DAA2D;QAC3D,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAGhF,0BAA0B;QAC1B,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,sFAAsF;QAEvK,iDAAiD;QACjD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,0CAA0C,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;QAClG,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,wFAAwF,CAAC,CAAC;QACjI,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,sFAAsF,CAAC,CAAC;QAE3H,yDAAyD;QACzD,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE3E,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEzE,MAAM,WAAW,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QAExD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEvH,qDAAqD;QACrD,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAGhF,0BAA0B;QAC1B,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,+GAA+G;QACjM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,+GAA+G;QAE9K,+EAA+E;QAC/E,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,+DAA+D,CAAC,CAAC;IACpH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qGAAqG,EAAE,KAAK,IAAI,EAAE;QACnH,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,qFAAqF,CAAC,CAAC;QAC9H,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,mFAAmF,CAAC,CAAC;QAEtH,6DAA6D;QAC7D,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE3E,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEzE,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QACnD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,mFAAmF,CAAC,CAAC;QAElH,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEvH,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE,cAAc;SACvB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,uCAAuC,CAAC,CAAC;QAC5D,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,wEAAwE;QACxE,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAGhF,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC/D,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,eAAe;YACtB,MAAM,EAAE,gBAAgB;SACzB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,yCAAyC,CAAC,CAAC;QAEhE,0BAA0B;QAC1B,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,oEAAoE;QACtJ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,+GAA+G;QAE9K,kDAAkD;QAClD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;QAE/E,6DAA6D;QAC7D,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,uCAAuC,CAAC,CAAC;QAC/F,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,uCAAuC,CAAC,CAAC;QAC/F,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,wCAAwC,CAAC,CAAC;QAElG,MAAM,YAAY,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,yCAAyC,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,yCAAyC,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,0CAA0C,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,+DAA+D,CAAC,CAAC;QACxG,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,6DAA6D,CAAC,CAAC;QAElG,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAEnD,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAEzF,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,yFAAyF;QACtH,sJAAsJ;QAEtJ,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,2DAA2D,CAAC,CAAC;QACpG,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,yDAAyD,CAAC,CAAC;QAE9F,sCAAsC;QACtC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAEnD,+EAA+E;QAC/E,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,0BAA0B;QAC1B,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,6CAA6C;QAC7C,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,kDAAkD,CAAC,CAAC;QACrG,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,MAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,MAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,8DAA8D,CAAC,CAAC;QACvG,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,4DAA4D,CAAC,CAAC;QAEjG,kEAAkE;QAClE,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QAExD,wEAAwE;QACxE,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,0BAA0B;QAC1B,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,gDAAgD;QAChD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,kDAAkD,CAAC,CAAC;QACrG,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,MAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,MAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,oEAAoE,CAAC,CAAC;QAC7G,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,kEAAkE,CAAC,CAAC;QAEvG,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAEnD,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAEzF,4EAA4E;QAC5E,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,uEAAuE,CAAC,CAAC;QAChH,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,qEAAqE,CAAC,CAAC;QAE1G,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACvF,MAAM,WAAW,CAAC,MAAM,EAAE,qCAAqC,CAAC,CAAC;QAEjE,4FAA4F;QAC5F,wEAAwE;QACxE,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,4EAA4E;QAC5E,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,0EAA0E,CAAC,CAAC;QAC/G,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,4EAA4E,CAAC,CAAC;QAErH,uDAAuD;QACvD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QAEzC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE3E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE1G,MAAM,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,8DAA8D;QAC9D,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC/D,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,eAAe;SACvB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAE7C,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAEhF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE9G,2EAA2E;QAC3E,MAAM,WAAW,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAE3G,sEAAsE;QACtE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAC3F,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,uCAAuC,CAAC,CAAC;QAC/F,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,uDAAuD,CAAC,CAAC;QAE/G,MAAM,YAAY,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,yCAAyC,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,yDAAyD,CAAC,CAAC;IACvH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,0EAA0E,CAAC,CAAC;QAC/G,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,4EAA4E,CAAC,CAAC;QAErH,4DAA4D;QAC5D,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QAEzC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9E,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,yDAAyD;QACzD,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC/D,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,eAAe;SACvB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAE7C,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE9G,2EAA2E;QAC3E,MAAM,WAAW,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAE3G,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAC3F,mEAAmE;QACnE,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,uCAAuC,CAAC,CAAC;QAC/F,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,gEAAgE,CAAC,CAAC;QAExH,MAAM,YAAY,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,yCAAyC,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,kEAAkE,CAAC,CAAC;IAChI,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,+EAA+E,CAAC,CAAC;QACpH,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,iFAAiF,CAAC,CAAC;QAE1H,2FAA2F;QAC3F,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YAC1D,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YAC1D,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAE1C,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAE9E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE1G,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAC1C,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,4GAA4G;QAC5G,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC9D,KAAK,EAAE,iBAAiB;YACxB,KAAK,EAAE,eAAe;SACvB,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC9D,KAAK,EAAE,iBAAiB;YACxB,KAAK,EAAE,eAAe;SACvB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAE9C,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAEjF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE9G,QAAQ,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;QACxD,oDAAoD;QACpD,MAAM,WAAW,CAAC,QAAQ,EAAE,iCAAiC,CAAC,CAAC;QAE/D,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAE3G,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QACzF,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAC3F,wDAAwD;QACxD,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,yCAAyC,CAAC,CAAC;QACjG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,+DAA+D,CAAC,CAAC;QAErH,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,yCAAyC,CAAC,CAAC;QACjG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,+DAA+D,CAAC,CAAC;QAErH,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,2CAA2C,CAAC,CAAC;QACvG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,iEAAiE,CAAC,CAAC;QAE3H,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,2CAA2C,CAAC,CAAC;QACvG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,iEAAiE,CAAC,CAAC;IAC7H,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC9D,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,gEAAgE,CAAC,CAAC;QACnG,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,kEAAkE,CAAC,CAAC;QAEzG,yDAAyD;QACzD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YACxD,KAAK,EAAE,iBAAiB;YACxB,KAAK,EAAE,iBAAiB;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QACnD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,gEAAgE,CAAC,CAAC;QAE/F,iCAAiC;QACjC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,kEAAkE,CAAC,CAAC;QAErG,4DAA4D;QAC5D,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAE9E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE1G,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,qCAAqC;QACrC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACpE,QAAQ,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QAC3C,IAAI,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;QACpF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,sEAAsE,CAAC,CAAC;QAEhI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,oDAAoD;QAEnH,+EAA+E;QAC/E,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,iLAAiL;QACjL,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAE9D,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,iEAAiE;QACjE,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;QACpF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,qEAAqE,CAAC,CAAC;QAE/H,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,gEAAgE,CAAC,CAAC;QACrG,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,kEAAkE,CAAC,CAAC;QAE3G,yDAAyD;QACzD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,kDAAkD;QAC/G,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC/D,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,eAAe;SACvB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC7C,4DAA4D;QAC5D,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAChF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE9G,0CAA0C;QAC1C,MAAM,WAAW,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QAEnD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAE3G,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAEnF,MAAM,YAAY,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC9D,mGAAmG;QACnG,wEAAwE;QACxE,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnC,MAAM,eAAe,GAAG,gBAAgB,CAAC,sCAAsC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzF,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC/B,MAAM,aAAa,GAAG,gBAAgB,CAAC,sCAAsC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACrF,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,gBAAgB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,oEAAoE;QACrI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,gBAAgB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,oEAAoE;IACrI,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,oCAAoC,CAAC,CAAC;QACtE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,+EAA+E,CAAC,CAAC;QAClH,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,iFAAiF,CAAC,CAAC;QAExH,kCAAkC;QAClC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC7C,MAAM,WAAW,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;QACtD,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,iFAAiF,CAAC,CAAC;QAEpH,4DAA4D;QAC5D,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,+EAA+E,CAAC,CAAC;QAC9G,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9E,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,gCAAgC;QAChC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACnE,QAAQ,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;QAE1C,sDAAsD;QACtD,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC3D,KAAK,EAAE,kBAAkB;YACzB,KAAK,EAAE,kBAAkB;SAC1B,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC;QAEzD,8EAA8E;QAC9E,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,qEAAqE;QACrE,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,gDAAgD,CAAC,CAAC;QACzG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,yDAAyD,CAAC,CAAC;QAE7G,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,0CAA0C,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,0DAA0D,CAAC,CAAC;QAErH,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,oCAAoC,CAAC,CAAC;QACtE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,+EAA+E,CAAC,CAAC;QAClH,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,iFAAiF,CAAC,CAAC;QAExH,yBAAyB;QACzB,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YACzD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC3C,MAAM,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QACpD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,+EAA+E,CAAC,CAAC;QAE9G,8CAA8C;QAC9C,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,iFAAiF,CAAC,CAAC;QACpH,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAEhF,8BAA8B;QAC9B,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAE5C,oDAAoD;QACpD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YACzD,KAAK,EAAE,sBAAsB;YAC7B,KAAK,EAAE,sBAAsB;SAC9B,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC;QAC3D,MAAM,WAAW,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;QAEvD,+EAA+E;QAC/E,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,oFAAoF;QACpF,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,iDAAiD,CAAC,CAAC;QAC9G,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,yDAAyD,CAAC,CAAC;QAE7G,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE,gDAAgD,CAAC,CAAC;QAC/G,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE,0DAA0D,CAAC,CAAC;QAEzH,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,iDAAiD,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sFAAsF,EAAE,KAAK;QAC9F,MAAM,iBAAiB,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;YAChD,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,eAAe,KAAK,EAAE,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,sBAAsB,CAAC,CAAC;YACnE,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,wBAAwB,CAAC,CAAC;YAEzE,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;YAC/D,MAAM,UAAU,GAAa,EAAE,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;oBACxD,KAAK,EAAE,UAAU,CAAC,EAAE;oBACpB,KAAK,EAAE,UAAU,CAAC,EAAE;iBACrB,CAAC,CAAC,CAAC;YACN,CAAC;YACD,QAAQ,CAAC,WAAW,CAAC,gBAAgB,KAAK,WAAW,CAAC,CAAC;YAEvD,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC9E,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;YAEjD,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,4BAA4B,CAAC,CAAC;gBAC7F,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,4CAA4C,CAAC,CAAC;YAC/G,CAAC;YAED,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;YAC9F,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC,CAAC;QAEF,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,mEAAmE,CAAC,CAAC;QAE5G,yCAAyC;QACzC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YACxC,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;QACH,8EAA8E;QAE9E,0CAA0C;QAC1C,MAAM,IAAI,CAAC,MAAM,CACf,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAC7E,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,8EAA8E,CAAC,CAAC;QAErG,yDAAyD;QACzD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,mCAAmC,CAAC,CAAC;QACtF,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACzC,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,QAAQ,CAAC,uCAAuC,EAAE;IAChD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAyB;IAC9C,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,iKAAiK;QACpM,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,kFAAkF;IACpH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,iDAAiD,CAAC,CAAC;QACtF,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,mDAAmD,CAAC,CAAC;QAE5F,IAAI,YAAY,GAAe,EAAE,CAAC;QAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACnD,yDAAyD;YACzD,YAAY,GAAG,CAAE,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;gBACtD,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAClD,MAAM,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QAErD,IAAI,cAAc,GAAe,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACrD,yDAAyD;YACzD,cAAc,GAAG,CAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;gBAC1D,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,eAAe;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,8EAA8E;QAC7I,MAAM,WAAW,CAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,8EAA8E;QAC7I,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE3F,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAEnF,MAAM,YAAY,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,sCAAsC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,4DAA4D,CAAC,CAAC;QACjG,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,8DAA8D,CAAC,CAAC;QAEvG,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE3E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE1G,IAAI,YAAY,GAAe,EAAE,CAAC;QAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACnD,yDAAyD;YACzD,YAAY,GAAG,CAAE,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;gBACtD,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAClD,MAAM,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,mDAAmD;QACjI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,IAAI,cAAc,GAAe,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACrD,yDAAyD;YACzD,cAAc,GAAG,CAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;gBAC1D,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,eAAe;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6EAA6E;QAC5I,MAAM,WAAW,CAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE3F,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAEnF,MAAM,YAAY,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,sCAAsC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,uEAAuE,CAAC,CAAC;QAC5G,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,yEAAyE,CAAC,CAAC;QAElH,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE1G,IAAI,YAAY,GAAe,EAAE,CAAC;QAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACnD,yDAAyD;YACzD,YAAY,GAAG,CAAE,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;gBACtD,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAClD,MAAM,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,mDAAmD;QACjI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7E,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE9G,IAAI,cAAc,GAAe,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACrD,yDAAyD;YACzD,cAAc,GAAG,CAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;gBAC1D,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,eAAe;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,sEAAsE;QACpI,MAAM,WAAW,CAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAC3G,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE3F,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAEnF,MAAM,YAAY,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,kDAAkD,CAAC,CAAC;QACpF,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,yEAAyE,CAAC,CAAC;QAC9G,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,2EAA2E,CAAC,CAAC;QAEpH,IAAI,YAAY,GAAe,EAAE,CAAC;QAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACnD,yDAAyD;YACzD,YAAY,GAAG,CAAE,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;gBACtD,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAClD,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE1G,MAAM,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,mDAAmD;QACjI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,IAAI,cAAc,GAAe,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACrD,yDAAyD;YACzD,cAAc,GAAG,CAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;gBAC1D,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,eAAe;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,6EAA6E;QAC5I,MAAM,WAAW,CAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE3F,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAEnF,MAAM,YAAY,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;QAC3G,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,uEAAuE,CAAC,CAAC;QACzG,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,iGAAiG,CAAC,CAAC;QACtI,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,mGAAmG,CAAC,CAAC;QAE5I,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE1G,IAAI,YAAY,GAAe,EAAE,CAAC;QAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACnD,yDAAyD;YACzD,YAAY,GAAG,CAAE,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;gBACtD,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAClD,MAAM,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,mDAAmD;QACjI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4CAA4C;QAEzG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAChF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE9G,IAAI,cAAc,GAAe,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACrD,yDAAyD;YACzD,cAAc,GAAG,CAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;gBAC1D,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,eAAe;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QACtD,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,+DAA+D;QACjJ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,iIAAiI;QAEhM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE3F,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAEnF,MAAM,YAAY,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,qEAAqE;QAErE,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,sCAAsC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,yEAAyE,CAAC,CAAC;QAC9G,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,2EAA2E,CAAC,CAAC;QAEpH,IAAI,YAAY,GAAe,EAAE,CAAC;QAClC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACnD,yDAAyD;YACzD,YAAY,GAAG,CAAE,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;gBACtD,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAClD,MAAM,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QAErD,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAChF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;QAE9G,IAAI,cAAc,GAAe,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;YACrD,yDAAyD;YACzD,cAAc,GAAG,CAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;gBAC1D,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,eAAe;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,sEAAsE;QAEpI,MAAM,WAAW,CAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;QAEtE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,mDAAmD;QAErI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE3F,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,oEAAoE;QAE3F,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAEnF,MAAM,YAAY,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,QAAQ,CAAC,mDAAmD,EAAE;IAC5D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,gFAAgF;IAChF,4EAA4E;IAE5E,EAAE,CAAC,mHAAmH,EAAE,KAAK,IAAI,EAAE;QACjI,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,0CAA0C,CAAC,CAAC;QAC5E,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACjD,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAE3C,6CAA6C;QAC7C,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACtG,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAC5C,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QACnD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,qEAAqE;QACrE,wEAAwE;QACxE,iEAAiE;QACjE,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACnE,QAAQ,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QAC3C,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAEhF,2FAA2F;QAC3F,yFAAyF;QACzF,oFAAoF;QACpF,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;QAEzD,eAAe;QACf,4CAA4C;QAC5C,YAAY;QACZ,sGAAsG;QACtG,wEAAwE;QACxE,2FAA2F;QAC3F,wFAAwF;QACxF,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,mEAAmE,CAAC,CAAC;QAE5H,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,4CAA4C,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sJAAsJ,EAAE,KAAK,IAAI,EAAE;QACpK,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;QAC7D,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACjD,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAE3C,oFAAoF;QACpF,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACtG,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAC5C,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QACnD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,4FAA4F;QAC5F,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9E,MAAM,WAAW,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;QAE5D,mFAAmF;QACnF,0EAA0E;QAC1E,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAClC,QAAQ,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAE7C,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;QAChE,MAAM,mBAAmB,GAAG,YAAY,CAAC,YAAY,CAAC;QAEtD,qFAAqF;QACrF,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAE,CAAC,eAAe,CAAC,CAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAEzF,MAAM,iBAAiB,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;QACrE,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,YAAY,CAAC;QAE1D,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,EAAE,oEAAoE,CAAC,CAAC,CAAC,6BAA6B;QAEtK,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,uCAAuC,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2GAA2G,EAAE,KAAK,IAAI,EAAE;QACzH,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC;QAClE,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACjD,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAE3C,wBAAwB;QACxB,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACtG,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAC5C,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QACnD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,6DAA6D;QAC7D,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAEhD,0CAA0C;QAC1C,qFAAqF;QACrF,0FAA0F;QAC1F,sEAAsE;QACtE,yFAAyF;QACzF,uFAAuF;QACvF,gDAAgD;QAChD,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAEhF,yFAAyF;QACzF,sFAAsF;QACtF,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,kDAAkD;QAClD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAE,CAAC,eAAe,CAAC,CAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAEzF,gEAAgE;QAChE,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,0EAA0E,CAAC,CAAC;IAC/H,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kJAAkJ,EAAE,KAAK,IAAI,EAAE;QAChK,4DAA4D;QAC5D,8FAA8F;QAC9F,iEAAiE;QACjE,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAE7C,2DAA2D;QAC3D,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5E,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAEhD,6CAA6C;QAC7C,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,8EAA8E;QAC9E,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/F,QAAQ,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAE/C,qEAAqE;QACrE,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1E,QAAQ,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAE/C,6BAA6B;QAC7B,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7B,QAAQ,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAE/C,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAE,CAAC,eAAe,CAAC,CAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kJAAkJ,EAAE,KAAK,IAAI,EAAE;QAChK,2FAA2F;QAC3F,wFAAwF;QACxF,mGAAmG;QACnG,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAE7C,qCAAqC;QACrC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9E,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAEhD,oEAAoE;QACpE,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,kFAAkF;QAClF,8EAA8E;QAC9E,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAE/D,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACjF,QAAQ,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAE9C,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QACpG,QAAQ,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAE9C,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QACpG,QAAQ,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAE9C,uFAAuF;QACvF,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAErC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,mFAAmF;QACnF,MAAM,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,qDAAqD,CAAC,CAAC;QACtG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,uCAAuC,CAAC,CAAC;QACnG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAElD,MAAM,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,qDAAqD,CAAC,CAAC;QACtG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,uCAAuC,CAAC,CAAC;QACnG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAEjD,MAAM,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,qDAAqD,CAAC,CAAC;QACtG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,uCAAuC,CAAC,CAAC;QACnG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAEjD,+FAA+F;QAC/F,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,CACzC,CAAC,CAAC,KAAK,EACP,6EAA6E,CAC9E,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,2CAA2C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACjG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,2CAA2C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACjG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,2CAA2C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEjG,+DAA+D;QAC/D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAChE,sDAAsD,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAChE,sDAAsD,CAAC,CAAC;QAE1D,oDAAoD;QACpD,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE7C,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,QAAQ,CAAC,oDAAoD,EAAE;IAC7D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+FAA+F,EAAE,KAAK,IAAI,EAAE;QAC7G,iDAAiD;QACjD,yDAAyD;QACzD,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEnD,6BAA6B;QAC7B,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,MAAM,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,WAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,qBAAqB;QAEnG,6EAA6E;QAC7E,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7E,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,gBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEnF,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7E,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,gBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEnF,qGAAqG;QACrG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,kEAAkE;QAClE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,gBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACpF,4BAA4B;QAC5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,gBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEnF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,gDAAgD,CAAC,CAAC;QACnG,sCAAsC;QACtC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,MAAM,MAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+FAA+F,EAAE,KAAK,IAAI,EAAE;QAC7G,+CAA+C;QAC/C,sEAAsE;QACtE,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;QACjE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,qCAAqC;QACrC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACtG,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACrC,MAAM,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC5C,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,6BAA6B;QAC7B,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,gCAAgC;QAChC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACrC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,gCAAgC;QAChC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAErC,iDAAiD;QACjD,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACnE,QAAQ,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QAE3C,sFAAsF;QACtF,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,4EAA4E,CAAC,CAAC;QACrI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;QAE9E,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,8DAA8D,CAAC,CAAC;QACjH,sCAAsC;QACtC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,MAAM,MAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,MAAM,MAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;QACpG,gEAAgE;QAChE,sDAAsD;QACtD,2EAA2E;QAC3E,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;QAChE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,8CAA8C;QAC9C,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACtG,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACtG,MAAM,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC;QACjD,MAAM,WAAW,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QACxD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,YAAY;QACZ,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,6CAA6C;QAC7C,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC3C,MAAM,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAElD,wCAAwC;QACxC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACpE,QAAQ,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAEpD,yCAAyC;QACzC,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,oDAAoD;QACpD,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;QACrI,QAAQ,CAAC,WAAW,CAAC,uCAAuC,CAAC,CAAC;QAE9D,yCAAyC;QACzC,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,wEAAwE;QACxE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,qCAAqC;QACrC,MAAM,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,2CAA2C,CAAC,CAAC;QAEjG,uCAAuC;QACvC,MAAM,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,+CAA+C,CAAC,CAAC;QAEvG,wDAAwD;QACxD,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,8CAA8C,CAAC,CAAC;QACnG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,+CAA+C,CAAC,CAAC;QAEtG,gEAAgE;QAChE,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,wDAAwD,CAAC,CAAC;IAC7G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;QACrG,6DAA6D;QAC7D,yEAAyE;QACzE,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,mCAAmC,CAAC,CAAC;QACrE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,+BAA+B;QAC/B,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChG,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAChD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,oBAAoB;QACpB,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,iBAAiB;QACjB,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACrC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,iBAAiB;QACjB,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACrC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,8CAA8C;QAC9C,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC/E,MAAM,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAErC,0BAA0B;QAC1B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC7F,QAAQ,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAE7C,8DAA8D;QAC9D,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,+DAA+D;QAC/D,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,+DAA+D,CAAC,CAAC;QACxH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,+DAA+D,CAAC,CAAC;QAExH,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,gEAAgE,CAAC,CAAC;IACrH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,QAAQ,CAAC,yCAAyC,EAAE;IAClD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gGAAgG,EAAE,KAAK,IAAI,EAAE;QAC9G,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;QACjE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,qDAAqD;QACrD,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACpF,MAAM,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAClD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,iCAAiC;QACjC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChG,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAChD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,sBAAsB;QACtB,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,iEAAiE;QACjE,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACzF,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,gDAAgD;QAChD,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,0BAA0B,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACtG,QAAQ,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAE5C,8DAA8D;QAC9D,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,+CAA+C;QAC/C,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC5E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,6CAA6C,CAAC,CAAC;QAE7G,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,gDAAgD,CAAC,CAAC;IACrG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wGAAwG,EAAE,KAAK,IAAI,EAAE;QACtH,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,iCAAiC,CAAC,CAAC;QACnE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,qDAAqD;QACrD,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACpF,MAAM,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAClD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,8BAA8B;QAC9B,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChG,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAChD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,sBAAsB;QACtB,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,yFAAyF;QACzF,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACzF,MAAM,WAAW,CAAC,MAAM,EAAE,mDAAmD,CAAC,CAAC;QAE/E,+BAA+B;QAC/B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,0BAA0B,EAAE,EAAE,UAAU,EAAE,yBAAyB,EAAE,CAAC,CAAC;QAC3G,QAAQ,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAE5C,yEAAyE;QACzE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,4BAA4B;QAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,sDAAsD,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAChG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,sCAAsC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAE3G,uCAAuC;QACvC,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mGAAmG,EAAE,KAAK,IAAI,EAAE;QACjH,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;QACjE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,mCAAmC;QACnC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACpF,MAAM,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAClD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,+CAA+C;QAC/C,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,0BAA0B,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAChG,MAAM,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAClD,MAAM,WAAW,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;QACzD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,4CAA4C;QAC5C,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,yEAAyE;QACzE,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACzF,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,wCAAwC;QACxC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,0BAA0B,EAAE,EAAE,UAAU,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACxG,QAAQ,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAE5C,8DAA8D;QAC9D,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE,+DAA+D,CAAC,CAAC;QAEjI,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oGAAoG,EAAE,KAAK,IAAI,EAAE;QAClH,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;QACjE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,6BAA6B;QAC7B,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACpF,MAAM,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAClD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,uCAAuC;QACvC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,0BAA0B,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAChG,MAAM,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAClD,MAAM,WAAW,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;QACzD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,4CAA4C;QAC5C,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,qCAAqC;QACrC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACzF,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,2BAA2B;QAC3B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;QAChE,QAAQ,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAE5C,uEAAuE;QACvE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,oDAAoD;QACpD,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,yCAAyC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAEpF,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,oDAAoD,CAAC,CAAC;QAE9F,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mGAAmG,EAAE,KAAK,IAAI,EAAE;QACjH,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,qCAAqC,CAAC,CAAC;QACvE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,kCAAkC;QAClC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACpF,MAAM,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAClD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,uDAAuD;QACvD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACjG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,0BAA0B,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;QAC/F,MAAM,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAElD,yDAAyD;QACzD,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACzF,MAAM,WAAW,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC;QAEtE,kFAAkF;QAClF,oEAAoE;QACpE,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACzG,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,0BAA0B,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;QACrG,QAAQ,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QAEtD,wFAAwF;QACxF,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,6CAA6C;QAC7C,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,EAAE,0BAA0B,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAEzD,sDAAsD;QACtD,MAAM,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,EAAE,0BAA0B,CAAC,CAAC;QACrF,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,8DAA8D,CAAC,CAAC;QAE7H,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,QAAQ,CAAC,4CAA4C,EAAE;IACrD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,oDAAoD;QACpD,6EAA6E;QAC7E,4DAA4D;QAC5D,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;QAC1D,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,uCAAuC;QACvC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACxF,MAAM,WAAW,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;QAC1D,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,+DAA+D;QAC/D,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC1D,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE,gBAAgB;YACvB,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,OAAO;YACpB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;QACxD,MAAM,WAAW,CAAC,QAAQ,EAAE,2BAA2B,CAAC,CAAC;QACzD,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,oEAAoE;QACpE,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAChG,MAAM,WAAW,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QAExD,4CAA4C;QAC5C,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1E,QAAQ,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;QAElD,2DAA2D;QAC3D,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,yCAAyC,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,oDAAoD,CAAC,CAAC;QACzG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,6CAA6C,CAAC,CAAC;QAC9F,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,qCAAqC,CAAC,CAAC;QAE7F,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;QACpG,mGAAmG;QACnG,kGAAkG;QAClG,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,iCAAiC,CAAC,CAAC;QACnE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,mCAAmC;QACnC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACxF,MAAM,WAAW,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;QAC1D,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,qCAAqC;QACrC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YACxD,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QACpD,MAAM,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAChD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,oBAAoB;QACpB,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,yDAAyD;QACzD,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,mCAAmC,CAAC,CAAC,CAAC;QACpG,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,yDAAyD;QACzD,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7F,QAAQ,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QAEtD,iDAAiD;QACjD,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,mEAAmE,CAAC,CAAC;QAChH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,qCAAqC,CAAC,CAAC;QAClG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,sCAAsC,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;QAC1G,oEAAoE;QACpE,oEAAoE;QACpE,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QACxD,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,iEAAiE;QACjE,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjF,0DAA0D;QAC1D,QAAQ,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;QAC1D,MAAM,WAAW,CAAC,QAAQ,EAAE,oCAAoC,CAAC,CAAC;QAClE,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,oEAAoE;QACpE,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9E,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,4CAA4C;QAC5C,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC7D,QAAQ,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;QAEhD,sEAAsE;QACtE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,kCAAkC,CAAC,CAAC;QACrF,+EAA+E;QAC/E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI;YACnG,oEAAoE,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0GAA0G,EAAE,KAAK,IAAI,EAAE;QACxH,2DAA2D;QAC3D,+FAA+F;QAC/F,wFAAwF;QACxF,gGAAgG;QAChG,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACtD,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,8CAA8C;QAC9C,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACxF,MAAM,WAAW,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;QAC3D,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,0FAA0F;QAC1F,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE;YAC1D,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE,UAAU;SACrB,CAAC,CAAC;QACH,QAAQ,CAAC,WAAW,CAAC,uCAAuC,CAAC,CAAC;QAC9D,MAAM,WAAW,CAAC,QAAQ,EAAE,iCAAiC,CAAC,CAAC;QAC/D,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,gGAAgG;QAChG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,gCAAgC,CAAC,CAAC,CAAC;QACjG,MAAM,WAAW,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QAExD,+EAA+E;QAC/E,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/D,QAAQ,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;QAEjD,2EAA2E;QAC3E,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,oDAAoD,CAAC,CAAC;QACjH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAsB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CACnE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EACtB,8EAA8E,CAC/E,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,qCAAqC,CAAC,CAAC;QAC1F,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAEhF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,sCAAsC,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,QAAQ,CAAC,kDAAkD,EAAE;IAC3D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iIAAiI,EAAE,KAAK,IAAI,EAAE;QAC/I,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;QACjE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,6BAA6B;QAC7B,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,gBAAgB,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACrG,MAAM,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpG,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAC1C,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QACjD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,2CAA2C;QAC3C,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;QAEzD,wEAAwE;QACxE,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;QAC5E,QAAQ,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;QAElD,cAAc;QACd,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,iCAAiC;QACjC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAE,CAAC,eAAe,CAAC,CAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,kDAAkD,CAAC,CAAC;QAEpJ,0CAA0C;QAC1C,MAAM,WAAW,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE,iDAAiD,CAAC,CAAC;QAEnH,0BAA0B;QAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,QAAQ,CAAC,6CAA6C,EAAE;IACtD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;QAC1G,gCAAgC;QAChC,oCAAoC;QACpC,+BAA+B;QAC/B,6EAA6E;QAC7E,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEnD,4CAA4C;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAC1D,IAAI,CAAC;YACH,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YACnE,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACjD,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC7E,MAAM,WAAW,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC;QACzD,CAAC;gBAAS,CAAC;YACT,qEAAqE;YACrE,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QAED,wDAAwD;QACxD,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAChD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpH,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QAC1C,MAAM,WAAW,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;QAEjD,2EAA2E;QAC3E,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACzG,QAAQ,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAE7C,wFAAwF;QACxF,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,kCAAkC;QAClC,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,4CAA4C,CAAC,CAAC;QAC9F,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;QAE5F,2CAA2C;QAC3C,MAAM,YAAY,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,gDAAgD,CAAC,CAAC;QACtG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,yCAAyC,CAAC,CAAC;QAE/F,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,8CAA8C,CAAC,CAAC;IACnG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mGAAmG,EAAE,KAAK,IAAI,EAAE;QACjH,6BAA6B;QAC7B,wCAAwC;QACxC,gEAAgE;QAChE,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEnD,yCAAyC;QACzC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACpG,MAAM,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;QAChD,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAEnD,sBAAsB;QACtB,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAEtD,4BAA4B;QAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACrD,MAAM,mBAAmB,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC9E,MAAM,WAAW,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC;QAC5D,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QAED,qDAAqD;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,eAAe;YAC3C,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACrD,MAAM,mBAAmB,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC9E,MAAM,WAAW,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC;QAC5D,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QAED,yDAAyD;QACzD,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACpE,SAAS,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QAE5C,mFAAmF;QACnF,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,0FAA0F,CAAC,CAAC;QAEnJ,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,qDAAqD,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;;GAIG;AACH,QAAQ,CAAC,+CAA+C,EAAE;IACxD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;QAClG,2EAA2E;QAC3E,0FAA0F;QAC1F,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC9D,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,wBAAwB;QACxB,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACtG,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACrC,MAAM,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC5C,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,0CAA0C;QAC1C,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QACvC,MAAM,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAC9C,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,2BAA2B;QAC3B,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,eAAe;QACf,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,uCAAuC,CAAC,CAAC;QAExH,0CAA0C;QAC1C,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC/C,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QACvC,MAAM,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAE9C,sDAAsD;QACtD,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,4BAA4B;QAC5B,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,+CAA+C;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,qDAAqD,CAAC,CAAC;QAEtI,0CAA0C;QAC1C,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,oCAAoC,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8FAA8F,EAAE,KAAK,IAAI,EAAE;QAC5G,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEnD,+CAA+C;QAC/C,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7E,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEhF,0DAA0D;QAC1D,qEAAqE;QACrE,MAAM,wBAAwB,GAAG,gBAAgB,CAAC,sCAAsC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAElG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,kEAAkE;QAClE,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,sCAAsC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACjG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvE,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,uBAAuB,EAAE,iCAAiC,CAAC,CAAC;QAE3G,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,mDAAmD,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,QAAQ,CAAC,gDAAgD,EAAE;IACzD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wGAAwG,EAAE,KAAK,IAAI,EAAE;QACtH,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,mCAAmC,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEnD,6EAA6E;QAC7E,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACnF,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAClG,MAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC3C,MAAM,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAElD,6DAA6D;QAC7D,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1G,QAAQ,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAE/C,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,6CAA6C;QAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,8CAA8C,CAAC,CAAC;QAC7F,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,sCAAsC,CAAC,CAAC;QAEnF,wCAAwC;QACxC,MAAM,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,kDAAkD,CAAC,CAAC;QAEnG,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,4CAA4C,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+FAA+F,EAAE,KAAK,IAAI,EAAE;QAC7G,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEnD,oDAAoD;QACpD,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACnF,MAAM,WAAW,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;QAEzD,2FAA2F;QAC3F,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAE3F,gDAAgD;QAChD,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,qCAAqC,CAAC,CAAC;QAExF,qDAAqD;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,MAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,MAAM,MAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uHAAuH,EAAE,KAAK,IAAI,EAAE;QACrI,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC;QACpE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,kDAAkD;QAClD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QAC3G,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QACvC,MAAM,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAC9C,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,6FAA6F;QAC7F,oCAAoC;QACpC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;gBAmBrB,CAAC;QACb,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAC9D,MAAM,WAAW,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;QAE5D,+EAA+E;QAC/E,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACrF,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACvG,QAAQ,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAE/C,oEAAoE;QACpE,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACpE,QAAQ,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC;QAErD,4FAA4F;QAC5F,yEAAyE;QACzE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,4DAA4D;QAC5D,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,8CAA8C,CAAC,CAAC;QAEjG,+BAA+B;QAC/B,MAAM,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,qCAAqC,CAAC,CAAC;QACtF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC;QAE1E,8EAA8E;QAC9E,MAAM,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,+DAA+D,CAAC,CAAC;IACxH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,QAAQ,CAAC,oDAAoD,EAAE;IAC7D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qHAAqH,EAAE,KAAK,IAAI,EAAE;QACnI,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEnD,yEAAyE;QACzE,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAEnD,wEAAwE;QACxE,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,sEAAsE;QACtE,IAAI,uBAA0C,CAAC;QAC/C,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YACvD,IAAI,CAAC;gBACH,2EAA2E;gBAC3E,MAAM,CAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC9E,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,uBAAuB,GAAG,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,gDAAgD;QAChD,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;QACvE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,0CAA0C,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,uCAAuC,CAAC,CAAC;IACtH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,0FAA0F;QAC1F,mFAAmF;QACnF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;QAC/D,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,8BAA8B;QAC9B,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACpF,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACrC,MAAM,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC5C,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,yFAAyF;QACzF,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;QAE1D,sGAAsG;QACtG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAEzF,iEAAiE;QACjE,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;QAEvF,iEAAiE;QACjE,+DAA+D;QAC/D,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAChE,+EAA+E;QAC/E,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,iDAAiD,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAEvG,mDAAmD;QACnD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,oDAAoD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iGAAiG,EAAE,KAAK,IAAI,EAAE;QAC/G,sFAAsF;QACtF,4FAA4F;QAC5F,6FAA6F;QAC7F,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC;QAClE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,yBAAyB;QACzB,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACtG,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACrC,MAAM,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC5C,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,iCAAiC;QACjC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACjC,MAAM,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAEhD,2BAA2B;QAC3B,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7E,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,mBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEtF,mDAAmD;QACnD,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;QAExD,wEAAwE;QACxE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,mBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEtF,+EAA+E;QAC/E,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7E,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,oBAAqB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEvF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,mDAAmD,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;;GAIG;AACH,QAAQ,CAAC,0DAA0D,EAAE;IACnE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wHAAwH,EAAE,KAAK,IAAI,EAAE;QACtI,kFAAkF;QAClF,wCAAwC;QACxC,iFAAiF;QACjF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEnD,6CAA6C;QAC7C,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9E,MAAM,WAAW,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;QAE5D,+BAA+B;QAC/B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtG,QAAQ,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC;QAEvD,mCAAmC;QACnC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACtE,QAAQ,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC;QAEvD,mCAAmC;QACnC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QACtC,QAAQ,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC;QAEvD,0FAA0F;QAC1F,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,qDAAqD;QACrD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAE,CAAC,eAAe,CAAC,CAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,wCAAwC,CAAC,CAAC;QAEvI,0BAA0B;QAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,sCAAsC,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4GAA4G,EAAE,KAAK,IAAI,EAAE;QAC1H,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEnD,qCAAqC;QACrC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;QAEvD,gFAAgF;QAChF,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/F,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACxG,QAAQ,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC;QAEvD,0CAA0C;QAC1C,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACrE,QAAQ,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;QAE1D,yCAAyC;QACzC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/B,QAAQ,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC;QAEvD,qEAAqE;QACrE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,8BAA8B;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAE,CAAC,eAAe,CAAC,CAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,wCAAwC,CAAC,CAAC;QAEhI,yCAAyC;QACzC,MAAM,WAAW,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,yCAAyC,CAAC,CAAC;QACxG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,2CAA2C,CAAC,CAAC;QAElG,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qHAAqH,EAAE,KAAK,IAAI,EAAE;QACnI,qFAAqF;QACrF,0DAA0D;QAC1D,uEAAuE;QACvE,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;QACjE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,oDAAoD;QACpD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACnG,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAC5C,MAAM,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QACnD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,6DAA6D;QAC7D,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;QAChD,MAAM,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAE7C,iCAAiC;QACjC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7F,QAAQ,CAAC,WAAW,CAAC,uCAAuC,CAAC,CAAC;QAE9D,0CAA0C;QAC1C,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7E,+DAA+D;QAC/D,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;QACrH,QAAQ,CAAC,WAAW,CAAC,uCAAuC,CAAC,CAAC;QAE9D,oEAAoE;QACpE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,gDAAgD;QAChD,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,0CAA0C,CAAC,CAAC;QAC/F,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,oCAAoC,CAAC,CAAC;QAE9F,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,uCAAuC,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,6DAA6D,CAAC,CAAC;QAE7G,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,uCAAuC,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,8DAA8D,CAAC,CAAC;QAEtH,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uHAAuH,EAAE,KAAK,IAAI,EAAE;QACrI,yFAAyF;QACzF,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC;QACpE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,kDAAkD;QAClD,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAiB,EAAE,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1G,CAAC;QACD,MAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC3C,MAAM,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAClD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,gEAAgE;QAChE,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9E,MAAM,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QAErD,uDAAuD;QACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxD,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,mBAAmB,CAAC,EAAE,EAAE,KAAK,EAAE,mBAAmB,CAAC,EAAE,EAAE,CAAC,CAAC;YACpG,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,wEAAwE;QACxE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtB,8DAA8D;QAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,EAAE,WAAW,CAAC,4BAA4B,CAAC,CAAC;YACnG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,EAAE,WAAW,CAAC,4CAA4C,CAAC,CAAC;QACrH,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,mDAAmD,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,QAAQ,CAAC,gDAAgD,EAAE;IACzD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;QAC/D,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,kBAAkB;QAClB,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACtG,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAChD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,4BAA4B;QAC5B,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACzC,MAAM,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAEhD,+CAA+C;QAC/C,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7E,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,cAAe,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEjF,4DAA4D;QAC5D,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,2EAA2E;QAC3E,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,cAAe,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACjF,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE7D,wDAAwD;QACxD,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;QACxD,MAAM,WAAW,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAEjD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9D,+CAA+C;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,cAAe,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAElF,yDAAyD;QACzD,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;QACxD,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;QACrG,oEAAoE;QACpE,qGAAqG;QACrG,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC9D,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,gDAAgD;QAChD,sDAAsD;QACtD,MAAM,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7E,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,cAAe,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEjF,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,+BAA+B;QAE5D,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,cAAe,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,qBAAqB;QAEvG,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC;QAC/D,MAAM,WAAW,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,cAAe,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,kBAAkB;QACrG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAE9D,qEAAqE;QACrE,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB;QAC3C,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEjD,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QACpD,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACzG,QAAQ,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAEpD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,mCAAmC;QAClG,uFAAuF;QACvF,sEAAsE;QACtE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,mCAAmC;QAElG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,qCAAqC,CAAC,CAAC;QAE1F,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,uCAAuC,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2CAA2C,EAAE;IACpD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,IAAI,CAAyB,CAAC;IAE9B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,gFAAgF;IAChF,kDAAkD;IAClD,6DAA6D;IAC7D,6EAA6E;IAE7E,EAAE,CAAC,+FAA+F,EAAE,KAAK,IAAI,EAAE;QAC7G,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;QAChE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,6EAA6E;QAC7E,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACjG,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACjG,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACjG,MAAM,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC;QACnD,MAAM,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QACpD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,4EAA4E;QAC5E,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QACvC,MAAM,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC3C,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7F,QAAQ,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAE/C,UAAU;QACV,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,kDAAkD;QAClD,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,iDAAiD,CAAC,CAAC;QACnG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,4CAA4C,CAAC,CAAC;QAChG,gBAAgB;QAChB,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,4CAA4C,CAAC,CAAC;QAChG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,4CAA4C,CAAC,CAAC;QAChG,kDAAkD;QAClD,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,uDAAuD,CAAC,CAAC;QACtG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,uDAAuD,CAAC,CAAC;QACtG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,oDAAoD,CAAC,CAAC;QAClG,gBAAgB;QAChB,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,4CAA4C,CAAC,CAAC;QAChG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,4CAA4C,CAAC,CAAC;QAChG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,0BAA0B,CAAC,CAAC;QAE3G,2EAA2E;QAC3E,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QACvC,MAAM,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC3C,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QACvD,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC/D,QAAQ,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAE/C,UAAU;QACV,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,mDAAmD,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,4CAA4C,CAAC,CAAC;QAChG,gBAAgB;QAChB,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,4CAA4C,CAAC,CAAC;QAChG,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,mDAAmD,CAAC,CAAC;QAC1G,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,uDAAuD,CAAC,CAAC;QACtG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,oDAAoD,CAAC,CAAC;QAClG,iCAAiC;QACjC,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,iDAAiD,CAAC,CAAC;QACnG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,4CAA4C,CAAC,CAAC;QAChG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,gDAAgD,CAAC,CAAC;QAC1F,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,0BAA0B,CAAC,CAAC;QAE3G,4EAA4E;QAC5E,6EAA6E;QAC7E,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QACvC,MAAM,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAE3C,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QACvD,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9E,QAAQ,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAE/C,uCAAuC;QACvC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,uFAAuF;QACvF,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,mDAAmD,CAAC,CAAC;QACrG,sCAAsC;QACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,iDAAiD,CAAC,CAAC;QACnG,qEAAqE;QACrE,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,gEAAgE,CAAC,CAAC;QACvH,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,oDAAoD,CAAC,CAAC;QAClG,yBAAyB;QACzB,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,mDAAmD,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,gDAAgD,CAAC,CAAC;QAC1F,iCAAiC;QACjC,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,uDAAuD,CAAC,CAAC;QACtG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,oDAAoD,CAAC,CAAC;QAElG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,0CAA0C,CAAC,CAAC;IAC7H,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,sEAAsE;IACtE,4EAA4E;IAC5E,2DAA2D;IAC3D,6EAA6E;IAE7E,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;QACjE,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,6EAA6E;QAC7E,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACpG,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACpG,MAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAC7C,MAAM,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAC7C,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,4EAA4E;QAC5E,gFAAgF;QAChF,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAC5C,MAAM,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC3C,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,0EAA0E;QAC1E,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,WAAW,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAClG,QAAQ,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;QAElD,4CAA4C;QAC5C,MAAM,UAAU,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACzG,QAAQ,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;QAEjD,6CAA6C;QAC7C,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACpC,QAAQ,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;QAElD,oGAAoG;QACpG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAE,CAAC,eAAe,CAAC,CAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,mDAAmD,CAAC,CAAC;QAChJ,MAAM,YAAY,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,sDAAsD,CAAC,CAAC;QAC9G,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,sDAAsD,CAAC,CAAC;QAC9G,MAAM,aAAa,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,sDAAsD,CAAC,CAAC;QAC7G,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,iDAAiD,CAAC,CAAC;QAC1G,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAClD,MAAM,aAAa,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,iDAAiD,CAAC,CAAC;QAC1G,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,iDAAiD,CAAC,CAAC;IAC5G,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,wDAAwD;IACxD,8EAA8E;IAC9E,yEAAyE;IACzE,6EAA6E;IAE7E,EAAE,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;QACtG,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACtD,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,6EAA6E;QAC7E,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3F,MAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC3C,MAAM,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC3C,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE/C,wDAAwD;QACxD,6EAA6E;QAC7E,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAC/C,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,kCAAkC;QAClC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC7D,QAAQ,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAE/C,mCAAmC;QACnC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACpG,QAAQ,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;QAEhD,UAAU;QACV,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,uCAAuC;QACvC,MAAM,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,mDAAmD,CAAC,CAAC;QAC3G,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,gDAAgD,CAAC,CAAC;QACjG,oBAAoB;QACpB,MAAM,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,gDAAgD,CAAC,CAAC;QACjG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,gDAAgD,CAAC,CAAC;QACjG,mDAAmD;QACnD,MAAM,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,wDAAwD,CAAC,CAAC;QAC5G,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,wDAAwD,CAAC,CAAC;QAC5G,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,mDAAmD,CAAC,CAAC;QACjG,oBAAoB;QACpB,MAAM,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,gDAAgD,CAAC,CAAC;QACjG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,gDAAgD,CAAC,CAAC;QACjG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,0BAA0B,CAAC,CAAC;QAE3G,wEAAwE;QACxE,6EAA6E;QAC7E,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC3C,MAAM,WAAW,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;QAC/D,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAChD,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC9D,QAAQ,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;QAEhD,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACpG,QAAQ,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;QAEhD,UAAU;QACV,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,uCAAuC;QACvC,MAAM,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,uDAAuD,CAAC,CAAC;QAC/G,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,gDAAgD,CAAC,CAAC;QACjG,qCAAqC;QACrC,MAAM,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,oDAAoD,CAAC,CAAC;QAC5G,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,wDAAwD,CAAC,CAAC;QAC5G,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,mDAAmD,CAAC,CAAC;QACjG,qCAAqC;QACrC,MAAM,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,qDAAqD,CAAC,CAAC;QACzG,4BAA4B;QAC5B,MAAM,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,wDAAwD,CAAC,CAAC;QAC5G,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,wDAAwD,CAAC,CAAC;QAC5G,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,mDAAmD,CAAC,CAAC;QACjG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,0BAA0B,CAAC,CAAC;QAE3G,gFAAgF;QAChF,yCAAyC;QACzC,EAAE;QACF,kFAAkF;QAClF,sEAAsE;QACtE,oFAAoF;QACpF,sFAAsF;QACtF,uFAAuF;QACvF,0FAA0F;QAC1F,oDAAoD;QACpD,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC3C,MAAM,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAE3C,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QACvD,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QACzD,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAChC,QAAQ,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;QAEhD,uCAAuC;QACvC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,uCAAuC;QACvC,MAAM,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,uDAAuD,CAAC,CAAC;QAC/G,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,gDAAgD,CAAC,CAAC;QAEjG,iGAAiG;QACjG,MAAM,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,8CAA8C,CAAC,CAAC;QAClG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,gDAAgD,CAAC,CAAC;QAEjG,2BAA2B;QAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAE,CAAC,eAAe,CAAC,CAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,yCAAyC,CAAC,CAAC;QAClI,qCAAqC;QACrC,MAAM,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,qDAAqD,CAAC,CAAC;QACzG,4BAA4B;QAC5B,MAAM,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,wDAAwD,CAAC,CAAC;QAC5G,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,wDAAwD,CAAC,CAAC;QAC5G,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,mDAAmD,CAAC,CAAC;QACjG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,0BAA0B,CAAC,CAAC;IAC7G,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,sDAAsD;IACtD,8EAA8E;IAC9E,yEAAyE;IACzE,6EAA6E;IAE7E,EAAE,CAAC,oHAAoH,EAAE,KAAK,IAAI,EAAE;QAClI,CAAC,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QACxD,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEjD,4EAA4E;QAC5E,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAClG,MAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAC7C,MAAM,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QACpD,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC/C,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3D,QAAQ,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QAEtD,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC5C,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,MAAM,sBAAsB,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEnE,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,sBAAuB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,kEAAkE,CAAC,CAAC;QACrI,IAAI,CAAC,MAAM,CAAC,sBAAuB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,kEAAkE,CAAC,CAAC;QACpI,IAAI,CAAC,MAAM,CAAC,sBAAuB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAE5D,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9E,MAAM,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC5C,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,MAAM,qBAAqB,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,qBAAsB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,mEAAmE,CAAC,CAAC;QACrI,IAAI,CAAC,MAAM,CAAC,qBAAsB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,mEAAmE,CAAC,CAAC;QACpI,IAAI,CAAC,MAAM,CAAC,qBAAsB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAE3D,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,kCAAkC,CAAC,CAAC;IACrH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { Code, ElementAspectProps, GeometricElementProps, IModel, QueryRowFormat, SubCategoryAppearance } from \"@itwin/core-common\";\nimport * as chai from \"chai\";\nimport { Suite } from \"mocha\";\nimport { HubWrappers, IModelTestUtils, KnownTestLocations } from \"..\";\nimport { BriefcaseDb, BriefcaseManager, ChannelControl, DrawingCategory, IModelJsFs } from \"../../core-backend\";\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { EntityClass } from \"@itwin/ecschema-metadata\";\nimport { TestUtils } from \"../TestUtils\";\n\nfunction startTestTxn(iModel: BriefcaseDb, description = \"semantic rebase\"): EditTxn {\n const txn = new EditTxn(iModel, description);\n txn.start();\n return txn;\n}\n\nfunction endTestTxn(txn: EditTxn): void {\n if (txn.isActive)\n txn.end(\"abandon\");\n}\n\nasync function importSchemaStrings(txn: EditTxn, schemas: string[]): Promise<void> {\n if (txn.isActive)\n txn.saveChanges();\n await txn.iModel.importSchemaStrings(schemas);\n}\n\nasync function pushChanges(txn: EditTxn, description: string): Promise<void> {\n const briefcase = txn.iModel as BriefcaseDb;\n endTestTxn(txn);\n await briefcase.pushChanges({ description });\n}\n\nasync function pullChanges(txn: EditTxn): Promise<void> {\n const briefcase = txn.iModel as BriefcaseDb;\n endTestTxn(txn);\n await briefcase.pullChanges();\n}\n\n/**\n * Test infrastructure for rebase tests in this file.\n * Manages two briefcases (far and local)\n */\nclass TestIModel {\n public iModelId: Id64String = \"\";\n public drawingModelId: Id64String = \"\";\n public drawingCategoryId: Id64String = \"\";\n public far: BriefcaseDb;\n public local: BriefcaseDb;\n\n private constructor(iModelId: Id64String, drawingModelId: Id64String, drawingCategoryId: Id64String, far: BriefcaseDb, local: BriefcaseDb) {\n this.iModelId = iModelId;\n this.drawingModelId = drawingModelId;\n this.drawingCategoryId = drawingCategoryId;\n this.far = far;\n this.local = local;\n }\n\n /** Reusable schema definitions for testing rebase with schema transformations */\n public static readonly schemas = {\n /** Base schema v01.00.00 with classes A, C, D */\n v01x00x00: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.01 - Adds PropC2 to class C (trivial additive change) */\n v01x00x01AddPropC2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 - Adds PropD2 to class D (trivial additive change) */\n v01x00x02AddPropD2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropD2\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 - Moves PropC from C to A (requires data transformation) on top of v01.00.01 */\n v01x00x02MovePropCToA: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.03 - Builds on top of v01.00.02 and in addition moves PropD to base, so we can have incoming and local transforming changes */\n v01x00x03MovePropCAndD: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.03\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD2\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.01 (incompatible variant) - Adds PropC3 instead of PropC2 to class C (same version) */\n v01x00x01AddPropC3Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC3\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 (incompatible variant) - Adds PropC3 instead of PropC2 to class C (higher version) */\n v01x00x02AddPropC3Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC3\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 (incompatible variant) - Adds PropC2 (higher version, different type) */\n v01x00x02AddPropC2Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"int\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.03 - Adds PropC2 as string (used to test incompatibility when reinstated on top of v01.00.02 with PropC2:int) */\n v01x00x03AddPropC2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.03\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n };\n\n /** Additional schemas for extended edge-case tests */\n public static readonly extendedSchemas = {\n /** v01x00x01 - Adds CUniqueAspect class (ElementUniqueAspect subclass) with AspectProp for aspect rebase tests */\n v01x00x01WithAspect: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"CUniqueAspect\" modifier=\"None\">\n <BaseClass>bis:ElementUniqueAspect</BaseClass>\n <ECProperty propertyName=\"AspectProp\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01x00x02 - Extends v01WithAspect by adding AspectProp2 to CUniqueAspect (trivial aspect schema evolution) */\n v01x00x02WithAspectProp2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"CUniqueAspect\" modifier=\"None\">\n <BaseClass>bis:ElementUniqueAspect</BaseClass>\n <ECProperty propertyName=\"AspectProp\" typeName=\"string\"/>\n <ECProperty propertyName=\"AspectProp2\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01x00x01 - Adds new entity class E extending A with PropE (tests new class addition) */\n v01x00x01AddClassE: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"E\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropE\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01x00x02 - Extends v01AddClassE by adding PropE2 to class E */\n v01x00x02AddClassEPropE2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"E\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropE\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropE2\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01x00x01 - Adds multi-type properties (int, double, boolean) to class C for type-variation tests */\n v01x00x01MultiTypeProps: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropCInt\" typeName=\"int\"/>\n <ECProperty propertyName=\"PropCDouble\" typeName=\"double\"/>\n <ECProperty propertyName=\"PropCBool\" typeName=\"boolean\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01x00x02 - Extends v01MultiTypeProps by adding PropD2 to class D */\n v01x00x02MultiTypePropsExtended: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropCInt\" typeName=\"int\"/>\n <ECProperty propertyName=\"PropCDouble\" typeName=\"double\"/>\n <ECProperty propertyName=\"PropCBool\" typeName=\"boolean\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropD2\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01x00x01 - Adds multi-type properties (int, double, boolean) to class C for type-variation tests */\n v01x00x02MultiTypePropsMovePropDToA: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropCInt\" typeName=\"int\"/>\n <ECProperty propertyName=\"PropCDouble\" typeName=\"double\"/>\n <ECProperty propertyName=\"PropCBool\" typeName=\"boolean\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01x00x02 - Moves PropD from class D to class A (transforming change for D, analogous to MovePropCToA) */\n v01x00x02MovePropDToA: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n </ECEntityClass>\n </ECSchema>`,\n /** v01x00x01 - Adds a binary property (PropCBin) to class C */\n v01x00x01WithBinaryProp: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropCBin\" typeName=\"binary\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n /** v01x00x02 - Extends v01x00x01WithBinaryProp with PropD2 on class D (trivial additive change) */\n v01x00x02WithBinaryPropAndPropD2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropCBin\" typeName=\"binary\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropD2\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n };\n\n /**\n * Create and initialize a new test iModel with far and local briefcases.\n * @param testName Unique name for this test (passed to HubMock.startup)\n * @returns Fully initialized TestIModel with both briefcases open\n */\n public static async initialize(testName: string): Promise<TestIModel> {\n HubMock.startup(testName, KnownTestLocations.outputDir);\n\n let far: BriefcaseDb | undefined;\n let local: BriefcaseDb | undefined;\n try {\n const iModelId = await HubMock.createNewIModel({\n accessToken: \"far-user\",\n iTwinId: HubMock.iTwinId,\n iModelName: testName,\n description: `Rebase schema update with data transform tests: ${testName}`,\n });\n\n // Open far briefcase and use it for initialization\n far = await HubWrappers.downloadAndOpenBriefcase({\n iTwinId: HubMock.iTwinId,\n iModelId,\n accessToken: \"far-user\",\n });\n far.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n // Initialize with base schema\n await far.importSchemaStrings([TestIModel.schemas.v01x00x00]);\n await far.pushChanges({ description: \"import base schema\" });\n\n // Create model and category\n const modelCode = IModelTestUtils.getUniqueModelCode(far, \"DrawingModel\");\n await far.locks.acquireLocks({ shared: IModel.dictionaryId });\n const [drawingModelId, drawingCategoryId] = withEditTxn(far, \"create model and category\", (txn) => {\n const [, newDrawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, modelCode);\n const newDrawingCategoryId = DrawingCategory.insert(\n txn,\n IModel.dictionaryId,\n \"DrawingCategory\",\n new SubCategoryAppearance()\n );\n return [newDrawingModelId, newDrawingCategoryId] as const;\n });\n await far.pushChanges({ description: \"create model and category\" });\n\n // Open local briefcase\n local = await HubWrappers.downloadAndOpenBriefcase({\n iTwinId: HubMock.iTwinId,\n iModelId,\n accessToken: \"local-user\",\n });\n local.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n return new TestIModel(iModelId, drawingModelId, drawingCategoryId, far, local);\n } catch (error) {\n if (local?.isOpen)\n local.close();\n\n if (far?.isOpen)\n far.close();\n\n HubMock.shutdown();\n throw error;\n }\n }\n\n public insertElement(\n txn: EditTxn,\n className: string,\n properties: Record<string, any>\n ): Id64String {\n const briefcase = txn.iModel as BriefcaseDb;\n const elementProps: GeometricElementProps = {\n classFullName: className,\n model: this.drawingModelId,\n category: this.drawingCategoryId,\n code: Code.createEmpty(),\n ...properties,\n };\n const element = briefcase.elements.createElement(elementProps);\n return txn.insertElement(element.toJSON());\n }\n\n public updateElement(txn: EditTxn, elementId: Id64String, updates: Record<string, any>): void {\n const briefcase = txn.iModel as BriefcaseDb;\n const element = briefcase.elements.getElementProps(elementId);\n Object.assign(element, updates);\n txn.updateElement(element);\n }\n\n public getElementProps(briefcase: BriefcaseDb, elementId: Id64String): any {\n return briefcase.elements.getElementProps(elementId);\n }\n\n public getModelProps(briefcase: BriefcaseDb, modelId: Id64String): any {\n return briefcase.models.tryGetModelProps(modelId);\n }\n\n public checkIfFolderExists(briefcase: BriefcaseDb, txnId: string, isSchemaFolder: boolean): boolean {\n if (isSchemaFolder)\n return BriefcaseManager.semanticRebaseSchemaFolderExists(briefcase, txnId);\n return BriefcaseManager.semanticRebaseDataFolderExists(briefcase, txnId);\n }\n\n public checkifRebaseFolderExists(briefcase: BriefcaseDb): boolean {\n const folderPath = BriefcaseManager.getBasePathForSemanticRebaseLocalFiles(briefcase);\n return IModelJsFs.existsSync(folderPath);\n }\n\n /**\n * Insert a UniqueAspect onto an element within the given EditTxn.\n * @param txn Active EditTxn\n * @param elementId Owning element's Id\n * @param aspectClassName Full class name, e.g. \"TestDomain:CUniqueAspect\"\n * @param properties Additional property key/value pairs\n * @returns The new aspect's ECInstanceId\n */\n public insertAspect(txn: EditTxn, elementId: Id64String, aspectClassName: string, properties: Record<string, any>): Id64String {\n const aspectProps: ElementAspectProps = {\n classFullName: aspectClassName,\n element: { id: elementId, relClassName: \"BisCore.ElementOwnsUniqueAspect\" },\n ...properties,\n };\n return txn.insertAspect(aspectProps);\n }\n\n /**\n * Update a UniqueAspect property within the given EditTxn.\n * Reads the existing aspect, merges updates, writes back.\n */\n public updateAspect(txn: EditTxn, elementId: Id64String, aspectClassName: string, updates: Record<string, any>): void {\n const briefcase = txn.iModel as BriefcaseDb;\n const aspects = briefcase.elements.getAspects(elementId, aspectClassName);\n chai.expect(aspects.length).to.be.greaterThan(0, \"Expected at least one aspect to update\");\n const aspect = aspects[0];\n Object.assign(aspect, updates);\n txn.updateAspect(aspect.toJSON());\n }\n\n /**\n * Delete a UniqueAspect within the given EditTxn.\n * Reads the existing aspect, then deletes it by instanceId.\n */\n public deleteAspect(txn: EditTxn, elementId: Id64String, aspectClassName: string): void {\n const briefcase = txn.iModel as BriefcaseDb;\n const aspects = briefcase.elements.getAspects(elementId, aspectClassName);\n chai.expect(aspects.length).to.be.greaterThan(0, \"Expected at least one aspect to delete\");\n txn.deleteAspect(aspects[0].id);\n }\n\n /**\n * Read a UniqueAspect from a briefcase and return it as a plain object.\n */\n public getAspect(briefcase: BriefcaseDb, elementId: Id64String, aspectClassName: string): any {\n const aspects = briefcase.elements.getAspects(elementId, aspectClassName);\n return aspects.length > 0 ? aspects[0] : undefined;\n }\n\n /**\n * Open and return a third briefcase connected to this iModel (useful for three-briefcase tests).\n * The caller is responsible for closing the returned briefcase.\n */\n public async openExtraBriefcase(accessToken: string = \"extra-user\"): Promise<BriefcaseDb> {\n const extra = await HubWrappers.downloadAndOpenBriefcase({\n iTwinId: HubMock.iTwinId,\n iModelId: this.iModelId,\n accessToken,\n });\n extra.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n return extra;\n }\n\n /**\n * Execute an ECSql SELECT and collect all rows into a Map keyed by ECInstanceId.\n * The SELECT must list ECInstanceId as the first column. Any additional columns are captured\n * by the caller-supplied names and stored in the returned row objects.\n *\n * Rows are returned using {@link QueryRowFormat.UseJsPropertyNames} so:\n * ECInstanceId → row.id\n * ec_className(ECClassId) → row.className (when aliased as `className`)\n * PropA → row.propA\n * PropC2 → row.propC2\n * etc.\n *\n * @param briefcase The open iModel to query.\n * @param ecsql Complete ECSql SELECT statement whose first projected column is ECInstanceId.\n */\n public static async queryToMap(briefcase: BriefcaseDb, ecsql: string): Promise<Map<Id64String, Record<string, any>>> {\n const result = new Map<Id64String, Record<string, any>>();\n const reader = briefcase.createQueryReader(ecsql, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n for await (const row of reader) {\n const r = row.toRow() as Record<string, any>;\n result.set(r.id as Id64String, r);\n }\n return result;\n }\n\n public shutdown(): void {\n this.far.close();\n this.local.close();\n HubMock.shutdown();\n }\n}\n\n/**\n * Test suite for rebase logic with schema changes that require data transformations.\n */\ndescribe(\"Semantic Rebase\", function (this: Suite) {\n this.timeout(90000); // operations can be slow\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend(); // Automatically TestUtils.startBackend() is called before every test suite starts we need to shut tht down and startup our new TestUtils with semantic rebase on\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend(); // restart normal backend so subsequent test suites aren't left without IModelHost\n })\n\n it(\"local data changes onto incoming trivial schema change\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIncoming\");\n let localTxn = startTestTxn(t.local, \"local data changes onto incoming trivial schema change local\");\n let farTxn = startTestTxn(t.far, \"local data changes onto incoming trivial schema change far\");\n\n // Local creates an element\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"value_a\",\n propC: \"value_c\",\n });\n localTxn.saveChanges(\"create element\");\n await pushChanges(localTxn, \"create test element\");\n localTxn = startTestTxn(t.local, \"local data changes onto incoming trivial schema change local\");\n\n // Far imports updated schema with new property PropC2\n await pullChanges(farTxn);\n farTxn = startTestTxn(t.far, \"local data changes onto incoming trivial schema change far\");\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Verify that we're holding a shared lock (not exclusive) for semantic rebase\n chai.expect(t.far.locks.holdsSharedLock(IModel.repositoryModelId)).to.be.true;\n chai.expect(t.far.holdsSchemaLock).to.be.false;\n\n const txnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\n\n await pushChanges(farTxn, \"add PropC2 to class C\");\n\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\n\n // Local makes local changes to the element\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(localTxn, elementId, { propA: \"local_update_a\" });\n localTxn.saveChanges(\"local update to propA\");\n\n // Local pulls and rebases local changes onto incoming schema change\n await pullChanges(localTxn);\n\n // Verify: local changes preserved, schema updated\n const element = t.getElementProps(t.local, elementId);\n chai.expect(element.propA).to.equal(\"local_update_a\", \"Local property update should be preserved\");\n chai.expect(element.propC).to.equal(\"value_c\", \"Original propC should be preserved\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be updated to v01.00.01\");\n });\n\n it(\"local trivial schema change onto incoming data changes\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaLocal\");\n let localTxn = startTestTxn(t.local, \"local trivial schema change onto incoming data changes local\");\n let farTxn = startTestTxn(t.far, \"local trivial schema change onto incoming data changes far\");\n\n // Local creates an element\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"value_a\",\n propC: \"value_c\",\n });\n localTxn.saveChanges(\"create element\");\n await pushChanges(localTxn, \"create test element\");\n localTxn = startTestTxn(t.local, \"local trivial schema change onto incoming data changes local\");\n\n // Local imports updated schema locally\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Verify that we're holding a shared lock (not exclusive) for semantic rebase\n chai.expect(t.local.locks.holdsSharedLock(IModel.repositoryModelId)).to.be.true;\n chai.expect(t.local.holdsSchemaLock).to.be.false;\n\n const txnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnProps!.id, true)).to.be.true;\n\n\n // Far pulls element, then updates it\n await pullChanges(farTxn);\n farTxn = startTestTxn(t.far, \"local trivial schema change onto incoming data changes far\");\n await t.far.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(farTxn, elementId, { propA: \"far_update_a\" });\n farTxn.saveChanges(\"far update to propA\");\n await pushChanges(farTxn, \"update element propA\");\n\n // Local pulls and rebases local schema change onto incoming data changes\n await pullChanges(localTxn);\n\n chai.expect(t.checkIfFolderExists(t.local, txnProps!.id, true)).to.be.true; // after rebase the folder should be there until push is called\n\n // Verify: incoming data changes applied, local schema preserved\n const element = t.getElementProps(t.local, elementId);\n chai.expect(element.propA).to.equal(\"far_update_a\", \"Incoming property update should be applied\");\n chai.expect(element.propC).to.equal(\"value_c\", \"Original propC should be preserved\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Local schema update should be preserved\");\n });\n\n it(\"local data changes onto incoming data changes\", async () => {\n t = await TestIModel.initialize(\"DataOntoData\");\n let localTxn = startTestTxn(t.local, \"local data changes onto incoming data changes local\");\n let farTxn = startTestTxn(t.far, \"local data changes onto incoming data changes far\");\n\n // Local creates two elements\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId1 = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"value_a1\",\n propC: \"value_c1\",\n });\n const elementId2 = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"value_a2\",\n propC: \"value_c2\",\n });\n localTxn.saveChanges(\"create elements\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\n await pushChanges(localTxn, \"create test elements\");\n localTxn = startTestTxn(t.local, \"local data changes onto incoming data changes local\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\n\n // Far updates first element\n await pullChanges(farTxn);\n farTxn = startTestTxn(t.far, \"local data changes onto incoming data changes far\");\n await t.far.locks.acquireLocks({ exclusive: elementId1 });\n t.updateElement(farTxn, elementId1, { propC: \"far_update_c\" });\n farTxn.saveChanges(\"far update to propC\");\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // its data changes on both sides semantic rebase is not used\n await pushChanges(farTxn, \"update element propC\");\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // its data changes on both sides semantic rebase is not used\n\n\n // Local makes local changes to second element\n await t.local.locks.acquireLocks({ exclusive: elementId2 });\n t.updateElement(localTxn, elementId2, { propA: \"local_update_a\" });\n localTxn.saveChanges(\"local update to propA\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\n\n // Verify: both changes applied to their respective elements\n const element1 = t.getElementProps(t.local, elementId1);\n chai.expect(element1.propA).to.equal(\"value_a1\", \"Element 1 propA should be unchanged\");\n chai.expect(element1.propC).to.equal(\"far_update_c\", \"Element 1 incoming update should be applied\");\n\n const element2 = t.getElementProps(t.local, elementId2);\n chai.expect(element2.propA).to.equal(\"local_update_a\", \"Element 2 local update should be preserved\");\n chai.expect(element2.propC).to.equal(\"value_c2\", \"Element 2 propC should be unchanged\");\n });\n\n it(\"local trivial schema changes onto incoming trivial schema changes (local newer)\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaLocalNewer\");\n const localTxn = startTestTxn(t.local, \"local trivial schema changes onto incoming trivial schema changes local newer local\");\n const farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming trivial schema changes local newer far\");\n\n // Far imports v01.00.01 (adds PropC2)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\n\n await pushChanges(farTxn, \"add PropC2 to class C\");\n\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\n\n // Local imports v01.00.02 (adds PropC2 and PropD2 - newer)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true;\n\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // after rebase the folder should be there because local is newer until push is called\n\n // Verify: local schema preserved (newer version)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Local schema (newer) should be preserved\");\n });\n\n it(\"local trivial schema changes onto incoming trivial schema changes (incoming newer)\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIncomingNewer\");\n const localTxn = startTestTxn(t.local, \"local trivial schema changes onto incoming trivial schema changes incoming newer local\");\n const farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming trivial schema changes incoming newer far\");\n\n // Far imports v01.00.02 (adds PropC2 and PropD2 - newer)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n\n const txnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\n\n await pushChanges(farTxn, \"update schema to v01.00.02\");\n\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\n\n // Local imports v01.00.01 (adds only PropC2 - older)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true;\n\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.false; // after rebase the folder should not be there because incoming is newer so while rebasing it should be a no op\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because the rebase folder is deleted after rebase if it contains nothing\n\n // Verify: incoming schema preserved (newer version, local should not override)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Incoming schema (newer) should win, local should not override\");\n });\n\n it(\"local trivial schema changes onto incoming identical schema changes with data changes on both sides\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIdenticalWithData\");\n const localTxn = startTestTxn(t.local, \"local trivial schema changes onto incoming identical schema changes with data local\");\n let farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming identical schema changes with data far\");\n\n // Far imports v01.00.01 (adds PropC2) and creates an element\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\n\n await pushChanges(farTxn, \"add PropC2 to class C\");\n farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming identical schema changes with data far\");\n\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\n\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElementId = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n propC2: \"far_value_c2\",\n });\n farTxn.saveChanges(\"far creates element with new property\");\n await pushChanges(farTxn, \"far creates element\");\n\n // Local imports the same v01.00.01 (adds PropC2) and creates an element\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true;\n\n\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n propC2: \"local_value_c2\",\n });\n localTxn.saveChanges(\"local creates element with new property\");\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.false; // after rebase the folder should not be there as both are identical\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because the rebase folder is deleted after rebase if it contains nothing\n\n // Verify: schema preserved (both sides identical)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be v01.00.01\");\n\n // Verify: both elements exist with their original properties\n const farElement = t.getElementProps(t.local, farElementId);\n chai.expect(farElement.propA).to.equal(\"far_value_a\", \"Far element propA should be preserved\");\n chai.expect(farElement.propC).to.equal(\"far_value_c\", \"Far element propC should be preserved\");\n chai.expect(farElement.propC2).to.equal(\"far_value_c2\", \"Far element propC2 should be preserved\");\n\n const localElement = t.getElementProps(t.local, localElementId);\n chai.expect(localElement.propA).to.equal(\"local_value_a\", \"Local element propA should be preserved\");\n chai.expect(localElement.propC).to.equal(\"local_value_c\", \"Local element propC should be preserved\");\n chai.expect(localElement.propC2).to.equal(\"local_value_c2\", \"Local element propC2 should be preserved\");\n });\n\n it(\"both add different properties, increment to same version number\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIncompatible\");\n const localTxn = startTestTxn(t.local, \"both add different properties increment to same version local\");\n const farTxn = startTestTxn(t.far, \"both add different properties increment to same version far\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"add PropC2 to class C\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC3Incompatible]);\n\n await pullChanges(localTxn); // TODO: this currently passes, because same version number means no upgrade is attempted\n //TODO: this should probably fail instead as both sides made incompatible changes to the same version, but this is unrelated to semantic rebase itself\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be v01.00.01\");\n });\n\n it(\"both add compatible properties, local version number higher\", async () => {\n t = await TestIModel.initialize(\"CompatibleSchemaLocalHigher\");\n const localTxn = startTestTxn(t.local, \"both add compatible properties local version higher local\");\n const farTxn = startTestTxn(t.far, \"both add compatible properties local version higher far\");\n\n // Far imports v01.00.01 (adds PropC2)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"add PropC2 to class C\");\n\n // Local imports v01.00.02 (adds PropC2 and PropD2 - compatible higher version)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n // Verify: Local schema wins (higher version)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be v01.00.02 (higher version wins)\");\n const classC = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"C\", EntityClass);\n chai.expect(classC).to.not.be.undefined;\n chai.expect(await classC!.getProperty(\"PropC2\")).to.exist;\n const classD = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"D\", EntityClass);\n chai.expect(classD).to.not.be.undefined;\n chai.expect(await classD!.getProperty(\"PropD2\")).to.exist;\n });\n\n it(\"both add compatible properties, incoming version number higher\", async () => {\n t = await TestIModel.initialize(\"CompatibleSchemaIncomingHigher\");\n const localTxn = startTestTxn(t.local, \"both add compatible properties incoming version higher local\");\n const farTxn = startTestTxn(t.far, \"both add compatible properties incoming version higher far\");\n\n // Far imports v01.00.02 (adds PropC2 and PropD2 - higher version)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n await pushChanges(farTxn, \"update schema to v01.00.02\");\n\n // Local imports v01.00.01 (adds only PropC2 - compatible lower version)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n // Verify: Incoming schema wins (higher version)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be v01.00.02 (higher version wins)\");\n const classC = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"C\", EntityClass);\n chai.expect(classC).to.not.be.undefined;\n chai.expect(await classC!.getProperty(\"PropC2\")).to.exist;\n const classD = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"D\", EntityClass);\n chai.expect(classD).to.not.be.undefined;\n chai.expect(await classD!.getProperty(\"PropD2\")).to.exist;\n });\n\n it(\"both add same but incompatible property, local version number higher\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIncompatible\");\n const localTxn = startTestTxn(t.local, \"both add same but incompatible property local version higher local\");\n const farTxn = startTestTxn(t.far, \"both add same but incompatible property local version higher far\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"add PropC2 to class C\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropC2Incompatible]);\n\n // Local pulls and rebases - this should detect the incompatibility and fail\n await chai.expect(pullChanges(localTxn)).to.be.rejectedWith(\"ECSchema Upgrade failed\");\n });\n\n it(\"both add same but incompatible property, incoming version number higher\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIncompatible\");\n const localTxn = startTestTxn(t.local, \"both add same but incompatible property incoming version higher local\");\n const farTxn = startTestTxn(t.far, \"both add same but incompatible property incoming version higher far\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropC2Incompatible]);\n await pushChanges(farTxn, \"import v01.00.02 with PropC2 as int\");\n\n // Local uses v01.00.03 with PropC2:string — higher version ensures the upgrade is attempted\n // during reinstatement, which detects the type mismatch (string vs int)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x03AddPropC2]);\n\n // Local pulls and rebases - this should detect the incompatibility and fail\n await chai.expect(pullChanges(localTxn)).to.be.rejectedWith(\"ECSchema Upgrade failed\");\n });\n\n it(\"local transforming schema change onto incoming trivial schema change\", async () => {\n t = await TestIModel.initialize(\"LocalTransformIncomingTrivial\");\n const farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming trivial schema change far\");\n const localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming trivial schema change local\");\n\n // Far: Insert Element and import trivial schema change\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElementId = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n farTxn.saveChanges(\"far create element\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnPropsFar = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnPropsFar).to.not.be.undefined;\n chai.expect(txnPropsFar!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnPropsFar!.id, true)).to.be.true; // schema folder should exist\n\n await pushChanges(farTxn, \"far add PropC2\");\n\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n // Local: Insert Element and import transforming schema change\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n localTxn.saveChanges(\"local create element\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\n\n // Local pulls and rebases transforming change onto incoming trivial change\n await pushChanges(localTxn, \"local move PropC to A\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\n\n // Verify: both elements have PropC intact, schema transformed locally\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n const farElement = t.getElementProps(t.local, farElementId);\n chai.expect(farElement.propA).to.equal(\"far_value_a\", \"Far element propA should be preserved\");\n chai.expect(farElement.propC).to.equal(\"far_value_c\", \"Far element propC should be preserved after transform\");\n\n const localElement = t.getElementProps(t.local, localElementId);\n chai.expect(localElement.propA).to.equal(\"local_value_a\", \"Local element propA should be preserved\");\n chai.expect(localElement.propC).to.equal(\"local_value_c\", \"Local element propC should be preserved after transform\");\n });\n\n it(\"local trivial schema change onto incoming transforming schema change\", async () => {\n t = await TestIModel.initialize(\"LocalTrivialIncomingTransform\");\n const farTxn = startTestTxn(t.far, \"local trivial schema change onto incoming transforming schema change far\");\n const localTxn = startTestTxn(t.local, \"local trivial schema change onto incoming transforming schema change local\");\n\n // Far: Insert Element and import transforming schema change\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElementId = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n farTxn.saveChanges(\"far create element\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n await pushChanges(farTxn, \"far move PropC to A\");\n\n // Local: Insert Element and import trivial schema change\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n localTxn.saveChanges(\"local create element\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\n\n // Local pulls and rebases trivial change onto incoming transforming change\n await pushChanges(localTxn, \"local add PropC2\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n // Verify: both elements have PropC intact after incoming transform\n const farElement = t.getElementProps(t.local, farElementId);\n chai.expect(farElement.propA).to.equal(\"far_value_a\", \"Far element propA should be preserved\");\n chai.expect(farElement.propC).to.equal(\"far_value_c\", \"Far element propC should be preserved after incoming transform\");\n\n const localElement = t.getElementProps(t.local, localElementId);\n chai.expect(localElement.propA).to.equal(\"local_value_a\", \"Local element propA should be preserved\");\n chai.expect(localElement.propC).to.equal(\"local_value_c\", \"Local element propC should be preserved after incoming transform\");\n });\n\n it(\"local transforming schema change onto incoming transforming schema change\", async () => {\n t = await TestIModel.initialize(\"BothTransforming\");\n const farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming transforming schema change far\");\n const localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming transforming schema change local\");\n\n // Far: Create elements with PropC and PropD, import transforming schema (moves PropC to A)\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElementC = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a_c\",\n propC: \"far_value_c\",\n });\n const farElementD = t.insertElement(farTxn, \"TestDomain:D\", {\n propA: \"far_value_a_d\",\n propD: \"far_value_d\",\n });\n farTxn.saveChanges(\"far create elements\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n\n const txnPropsFar = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnPropsFar).to.not.be.undefined;\n chai.expect(txnPropsFar!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnPropsFar!.id, true)).to.be.true; // schema folder should exist\n\n farTxn.saveChanges(\"far move PropC to A\");\n await pushChanges(farTxn, \"far transform PropC\");\n\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n // Local: Create elements with PropC and PropD, import transforming schema (moves both PropC and PropD to A)\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElementC = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a_c\",\n propC: \"local_value_c\",\n });\n const localElementD = t.insertElement(localTxn, \"TestDomain:D\", {\n propA: \"local_value_a_d\",\n propD: \"local_value_d\",\n });\n localTxn.saveChanges(\"local create elements\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x03MovePropCAndD]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\n\n localTxn.saveChanges(\"local move PropC and PropD to A\");\n // Local pulls and rebases both transforming changes\n await pushChanges(localTxn, \"local transform PropC and PropD\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\n\n t.far.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n // Verify: all elements have both PropC and PropD intact\n const farElemC = t.getElementProps(t.local, farElementC);\n chai.expect(farElemC.propA).to.equal(\"far_value_a_c\", \"Far element C propA should be preserved\");\n chai.expect(farElemC.propC).to.equal(\"far_value_c\", \"Far element C propC should be preserved after both transforms\");\n\n const farElemD = t.getElementProps(t.local, farElementD);\n chai.expect(farElemD.propA).to.equal(\"far_value_a_d\", \"Far element D propA should be preserved\");\n chai.expect(farElemD.propD).to.equal(\"far_value_d\", \"Far element D propD should be preserved after both transforms\");\n\n const localElemC = t.getElementProps(t.local, localElementC);\n chai.expect(localElemC.propA).to.equal(\"local_value_a_c\", \"Local element C propA should be preserved\");\n chai.expect(localElemC.propC).to.equal(\"local_value_c\", \"Local element C propC should be preserved after both transforms\");\n\n const localElemD = t.getElementProps(t.local, localElementD);\n chai.expect(localElemD.propA).to.equal(\"local_value_a_d\", \"Local element D propA should be preserved\");\n chai.expect(localElemD.propD).to.equal(\"local_value_d\", \"Local element D propD should be preserved after both transforms\");\n });\n\n it(\"local data update onto incoming transforming schema change\", async () => {\n t = await TestIModel.initialize(\"LocalDataIncomingTransform\");\n let farTxn = startTestTxn(t.far, \"local data update onto incoming transforming schema change far\");\n let localTxn = startTestTxn(t.local, \"local data update onto incoming transforming schema change local\");\n\n // Insert one instance and populate to both far and local\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"initial_value_a\",\n propC: \"initial_value_c\",\n });\n farTxn.saveChanges(\"far create element\");\n await pushChanges(farTxn, \"create shared element\");\n farTxn = startTestTxn(t.far, \"local data update onto incoming transforming schema change far\");\n\n // Local pulls to get the element\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"local data update onto incoming transforming schema change local\");\n\n // Far imports transforming schema (moves PropC from C to A)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n\n const txnPropsFar = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnPropsFar).to.not.be.undefined;\n chai.expect(txnPropsFar!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnPropsFar!.id, true)).to.be.true; // schema folder should exist\n\n await pushChanges(farTxn, \"far move PropC to A\");\n\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n // Local updates PropC on the element\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(localTxn, elementId, { propC: \"local_modified_c\" });\n localTxn.saveChanges(\"local update propC\");\n let element = t.getElementProps(t.local, elementId);\n chai.expect(element.propA).to.equal(\"initial_value_a\", \"PropA should be unchanged\");\n chai.expect(element.propC).to.equal(\"local_modified_c\", \"PropC should have the local modified value before incoming transform\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // no schema change yet on local so no rebase folder\n\n // Local pulls and rebases data change onto incoming transforming schema change\n await pullChanges(localTxn);\n\n // after rebase the folder should not be there because data change folder is created on the fly and removed once rebased and rebase folder is also removed if it contains nothing\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n // Verify: PropC has the modified local value after the transform\n element = t.getElementProps(t.local, elementId);\n chai.expect(element.propA).to.equal(\"initial_value_a\", \"PropA should be unchanged\");\n chai.expect(element.propC).to.equal(\"local_modified_c\", \"PropC should have the local modified value after incoming transform\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Incoming data update onto local transforming schema change\", async () => {\n t = await TestIModel.initialize(\"IncomingDataLocalTransform\");\n const farTxn = startTestTxn(t.far, \"Incoming data update onto local transforming schema change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data update onto local transforming schema change local\");\n\n // Insert one instance and populate to both far and local\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementIdFar = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n farTxn.saveChanges(\"far create element\");\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // no schema change yet on far so no rebase folder\n await pushChanges(farTxn, \"create shared element\");\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementIdLocal = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n localTxn.saveChanges(\"local create element\");\n // Far imports transforming schema (moves PropC from C to A)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\n\n // local pulls and rebases and then pushes\n await pushChanges(localTxn, \"far move PropC to A\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElementProps(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElementProps(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Check if associated rebase folders get deleted when a briefcase is deleted or not\", async () => {\n t = await TestIModel.initialize(\"IncomingDataLocalTransform\");\n // Must close briefcases before deleting their files - on Windows, open files are locked by the OS.\n // Save paths before closing since pathName getter throws on closed dbs.\n const localPath = t.local.pathName;\n const localRebasePath = BriefcaseManager.getBasePathForSemanticRebaseLocalFiles(t.local);\n const farPath = t.far.pathName;\n const farRebasePath = BriefcaseManager.getBasePathForSemanticRebaseLocalFiles(t.far);\n t.local.close();\n await BriefcaseManager.deleteBriefcaseFiles(localPath);\n chai.expect(IModelJsFs.existsSync(localRebasePath)).to.be.false; // after briefcase deletion the rebase folder should also be deleted\n t.far.close();\n await BriefcaseManager.deleteBriefcaseFiles(farPath);\n chai.expect(IModelJsFs.existsSync(farRebasePath)).to.be.false; // after briefcase deletion the rebase folder should also be deleted\n });\n\n it(\"local multiple data transactions onto incoming transforming schema change\", async () => {\n t = await TestIModel.initialize(\"LocalMultipleDataIncomingTransform\");\n let farTxn = startTestTxn(t.far, \"local multiple data transactions onto incoming transforming schema change far\");\n let localTxn = startTestTxn(t.local, \"local multiple data transactions onto incoming transforming schema change local\");\n\n // Insert initial element and push\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId1 = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"initial_a\",\n propC: \"initial_c\",\n });\n localTxn.saveChanges(\"create first element\");\n await pushChanges(localTxn, \"create initial element\");\n localTxn = startTestTxn(t.local, \"local multiple data transactions onto incoming transforming schema change local\");\n\n // Far imports transforming schema (moves PropC from C to A)\n await pullChanges(farTxn);\n farTxn = startTestTxn(t.far, \"local multiple data transactions onto incoming transforming schema change far\");\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n await pushChanges(farTxn, \"far move PropC to A\");\n\n // Local makes first data change\n await t.local.locks.acquireLocks({ exclusive: elementId1 });\n t.updateElement(localTxn, elementId1, { propA: \"first_update_a\" });\n localTxn.saveChanges(\"first data change\");\n\n // Local makes second data change - create new element\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId2 = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"second_element_a\",\n propC: \"second_element_c\",\n });\n localTxn.saveChanges(\"second data change - new element\");\n\n // Local pulls and rebases both transactions onto incoming transforming schema\n await pullChanges(localTxn);\n\n t.local.clearCaches();\n\n // Verify: both local data changes preserved after incoming transform\n const element1 = t.getElementProps(t.local, elementId1);\n chai.expect(element1.propA).to.equal(\"first_update_a\", \"First element propA update should be preserved\");\n chai.expect(element1.propC).to.equal(\"initial_c\", \"First element propC should be preserved after transform\");\n\n const element2 = t.getElementProps(t.local, elementId2);\n chai.expect(element2.propA).to.equal(\"second_element_a\", \"Second element propA should be preserved\");\n chai.expect(element2.propC).to.equal(\"second_element_c\", \"Second element propC should be preserved after transform\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"local transforming schema change onto incoming multiple data transactions\", async () => {\n t = await TestIModel.initialize(\"LocalTransformIncomingMultipleData\");\n let farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming multiple data transactions far\");\n let localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming multiple data transactions local\");\n\n // Create initial element\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId1 = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"initial_a\",\n propC: \"initial_c\",\n });\n farTxn.saveChanges(\"create first element\");\n await pushChanges(farTxn, \"create initial element\");\n farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming multiple data transactions far\");\n\n // Local pulls and imports transforming schema\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming multiple data transactions local\");\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n\n // Far makes first data change\n await t.far.locks.acquireLocks({ exclusive: elementId1 });\n t.updateElement(farTxn, elementId1, { propA: \"far_first_update_a\" });\n farTxn.saveChanges(\"far first data change\");\n\n // Far makes second data change - create new element\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId2 = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_second_element_a\",\n propC: \"far_second_element_c\",\n });\n farTxn.saveChanges(\"far second data change - new element\");\n await pushChanges(farTxn, \"far multiple data changes\");\n\n // Local pulls and rebases local transforming schema onto incoming data changes\n await pullChanges(localTxn);\n\n t.local.clearCaches();\n\n // Verify: both incoming data changes applied, local schema transformation preserved\n const element1 = t.getElementProps(t.local, elementId1);\n chai.expect(element1.propA).to.equal(\"far_first_update_a\", \"First element incoming update should be applied\");\n chai.expect(element1.propC).to.equal(\"initial_c\", \"First element propC should be preserved after transform\");\n\n const element2 = t.getElementProps(t.local, elementId2);\n chai.expect(element2.propA).to.equal(\"far_second_element_a\", \"Second element should exist with correct propA\");\n chai.expect(element2.propC).to.equal(\"far_second_element_c\", \"Second element propC should be preserved after transform\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Local schema transformation should be preserved\");\n });\n\n it(\"bulk local elements survive semantic rebase with incoming transforming schema change\", async function () {\n const runBulkRebaseTest = async (count: number) => {\n t = await TestIModel.initialize(`BulkElements${count}`);\n const farTxn = startTestTxn(t.far, `${count} elements rebase far`);\n const localTxn = startTestTxn(t.local, `${count} elements rebase local`);\n\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementIds: string[] = [];\n for (let i = 0; i < count; i++) {\n elementIds.push(t.insertElement(localTxn, \"TestDomain:C\", {\n propA: `bulk_a_${i}`,\n propC: `bulk_c_${i}`,\n }));\n }\n localTxn.saveChanges(`local insert ${count} elements`);\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n await pushChanges(farTxn, \"far move PropC to A\");\n\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n for (let i = 0; i < count; i++) {\n const element = t.getElementProps(t.local, elementIds[i]);\n chai.expect(element.propA).to.equal(`bulk_a_${i}`, `Element ${i} propA should be preserved`);\n chai.expect(element.propC).to.equal(`bulk_c_${i}`, `Element ${i} propC should be preserved after transform`);\n }\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n t.shutdown();\n t = undefined;\n };\n\n await runBulkRebaseTest(133);\n await runBulkRebaseTest(100);\n await runBulkRebaseTest(101);\n });\n\n it(\"should fail when importing schema with unsaved data changes\", async () => {\n t = await TestIModel.initialize(\"UnsavedDataChangesSchemaImport\");\n const localTxn = startTestTxn(t.local, \"should fail when importing schema with unsaved data changes local\");\n\n // Create element but DO NOT save changes\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"unsaved_a\",\n propC: \"unsaved_c\",\n });\n // Intentionally not saving the active local transaction before schema import.\n\n // Try to import schema - this should fail\n await chai.expect(\n localTxn.iModel.importSchemaStrings([TestIModel.schemas.v01x00x01AddPropC2])\n ).to.be.rejectedWith(\"Cannot import schemas with unsaved changes when useSemanticRebase flag is on\");\n\n // Verify: element was not saved, schema was not imported\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.00\", \"Schema should remain at v01.00.00\");\n chai.expect(t.local.isOpen).to.be.true;\n });\n\n});\n\n/**\n * Test suite for tests related to rebase logic with schema changes (for indirect changes) that require data transformations.\n */\ndescribe(\"Semantic Rebase with indirect changes\", function (this: Suite) {\n this.timeout(90000); // operations can be slow\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend(); // Automatically TestUtils.startBackend() is called before every test suite starts we need to shut tht down and startup our new TestUtils with semantic rebase on\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend(); // restart normal backend so subsequent test suites aren't left without IModelHost\n });\n\n it(\"Incoming data update onto local data change\", async () => { // This doesnot actually take the semantic rebase route as both incoming and local have data changes only\n t = await TestIModel.initialize(\"IncomingDataLocalDataChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data update onto local data change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data update onto local data change local\");\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await pushChanges(farTxn, \"create indirect element\");\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on either side\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on either side\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElementProps(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElementProps(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n });\n\n it(\"Incoming data and schema update onto local data change\", async () => {\n t = await TestIModel.initialize(\"IncomingDataAndSchemaLocalDataChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data and schema update onto local data change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data and schema update onto local data change local\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(farTxnProps).to.not.be.undefined;\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await pushChanges(farTxn, \"create indirect element\");\n\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on local side\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false;\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElementProps(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElementProps(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Incoming data and schema update onto local data and schema change\", async () => {\n t = await TestIModel.initialize(\"IncomingDataLocalDataAndSchemaChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data and schema update onto local data and schema change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data and schema update onto local data and schema change local\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(farTxnProps).to.not.be.undefined;\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await pushChanges(farTxn, \"create indirect element\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n const localTxnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(localTxnProps).to.not.be.undefined;\n chai.expect(localTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.true; // there should be a rebase folder because schema change on local side\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElementProps(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElementProps(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Incoming data and Transforming schema update onto local data change\", async () => {\n t = await TestIModel.initialize(\"IncomingDataAndTransformingSchemaLocalDataChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data and Transforming schema update onto local data change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data and Transforming schema update onto local data change local\");\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(farTxnProps).to.not.be.undefined;\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n await pushChanges(farTxn, \"create indirect element\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on local side\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false;\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElementProps(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElementProps(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Incoming data and transforming schema update onto local data and transforming schema change\", async () => {\n t = await TestIModel.initialize(\"IncomingDataAndTransformingSchemaLocalDataAndTransformingSchemaChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data and transforming schema update onto local data and transforming schema change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data and transforming schema update onto local data and transforming schema change local\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(farTxnProps).to.not.be.undefined;\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await pushChanges(farTxn, \"create indirect element\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n const localTxnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(localTxnProps).to.not.be.undefined;\n chai.expect(localTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n await pullChanges(localTxn);\n\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.false; // because it is a no op change we are importing similar schema\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // schema change is no op and data changes are generated on the fly and removed once rebased so rebase folder should not be there\n\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElementProps(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElementProps(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Incoming data update onto local data and transforming schema change\", async () => {\n // This test fails but should not fail actually - needs investigation\n\n t = await TestIModel.initialize(\"IncomingDataAndSchemaLocalDataChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data update onto local data and transforming schema change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data update onto local data and transforming schema change local\");\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await pushChanges(farTxn, \"create indirect element\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n const localTxnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(localTxnProps).to.not.be.undefined;\n chai.expect(localTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.true; // there should be a rebase folder because schema change on local side\n\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\n\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\n\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElementProps(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElementProps(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n});\n\n/**\n * Test suite for data conflicts, conflict handlers, lifecycle events, and mixed schema+conflict scenarios during semantic rebase.\n */\ndescribe(\"Semantic Rebase - Data Correctness Under Conflict\", function (this: Suite) {\n this.timeout(90000);\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n // ─── Section F: Conflicts with Schema Changes ────────────────────────────────\n // Every test below verifies ELEMENT DATA CORRECTNESS after semantic rebase.\n\n it(\"F1: local data patch on element survives transforming schema rebase: propC value preserved after column migration\", async () => {\n t = await TestIModel.initialize(\"F1ConflictDuringTransformingSchemaRebase\");\n let localTxn = startTestTxn(t.local, \"F1 local\");\n let farTxn = startTestTxn(t.far, \"F1 far\");\n\n // Create shared element with propC populated\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"initial_a\", propC: \"initial_c\" });\n farTxn.saveChanges(\"create shared element\");\n await pushChanges(farTxn, \"create shared element\");\n farTxn = startTestTxn(t.far, \"F1 far 2\");\n\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"F1 local 2\");\n\n // Local locks elementId and makes its data change BEFORE far pushes.\n // If local tried to lock after far's push (at a newer changeset index),\n // doesBriefcaseRequirePullBeforeLock would throw PullIsRequired.\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(localTxn, elementId, { propC: \"local_updated_c\" });\n localTxn.saveChanges(\"local update propC\");\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n\n // Far pushes a trivial schema only — no data change on elementId, no exclusive lock on it.\n // Far's schema import acquires only a shared lock on repositoryModelId and never touches\n // elementId's lock record, so local's already-held exclusive lock is not contended.\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"far push trivial schema v01\");\n\n // Local pulls:\n // Incoming: trivial schema (v01) applied.\n // Rebase:\n // 1. Local's transforming schema txn reinstated → v02 applied (PropC column migrated from C to A)\n // 2. Local's data patch reinstated → propC set to \"local_updated_c\"\n // Bug scenario: if applyInstancePatch fails to map propC to the migrated A.PropC column,\n // the value \"local_updated_c\" would be silently dropped and \"initial_c\" would remain.\n await pullChanges(localTxn);\n\n t.local.clearCaches();\n const element = t.getElementProps(t.local, elementId);\n chai.expect(element.propC).to.equal(\"local_updated_c\", \"Local propC value should survive after transforming schema rebase\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be at v01.00.02 after rebase\");\n });\n\n it(\"F3: local element deletion + incoming transforming schema change: delete is reinstated, element stays gone and checking GeometricGuid of Model [BUG]\", async () => {\n t = await TestIModel.initialize(\"F2DeleteIncomingTransform\");\n let localTxn = startTestTxn(t.local, \"F2 local\");\n let farTxn = startTestTxn(t.far, \"F2 far\");\n\n // Create shared element (shared model lock — no exclusive lock record on elementId)\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"initial_a\", propC: \"initial_c\" });\n farTxn.saveChanges(\"create shared element\");\n await pushChanges(farTxn, \"create shared element\");\n farTxn = startTestTxn(t.far, \"F2 far 2\");\n\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"F2 local 2\");\n\n // Far imports transforming schema (moves PropC from C to A); no exclusive lock on elementId\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n await pushChanges(farTxn, \"far import transforming schema\");\n\n // Local deletes the element — safe because far never exclusively locked elementId,\n // so lastExclusiveReleaseChangesetIndex for elementId is still undefined.\n await t.local.locks.acquireLocks({ exclusive: elementId });\n localTxn.deleteElement(elementId);\n localTxn.saveChanges(\"local delete element\");\n\n const drawingModel = t.getModelProps(t.local, t.drawingModelId);\n const geometricGuidBefore = drawingModel.geometryGuid;\n\n // Local pulls - incoming transforming schema applied, then local deletion reinstated\n await pullChanges(localTxn);\n\n t.local.clearCaches();\n chai.expect(() => t!.getElementProps(t!.local, elementId)).to.throw(`element not found`);\n\n const drawingModelAfter = t.getModelProps(t.local, t.drawingModelId);\n const geometricGuidAfter = drawingModelAfter.geometryGuid;\n\n chai.expect(geometricGuidAfter).to.not.equal(geometricGuidBefore, \"GeometricGuid of the model should not remain the same after rebase\"); // BUG should exactly be same\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be updated to v01.00.02\");\n });\n\n it(\"F4: incoming element deletion + local transforming schema change: schema upgrade survives, element absent\", async () => {\n t = await TestIModel.initialize(\"F4IncomingDeleteLocalTransform\");\n let localTxn = startTestTxn(t.local, \"F4 local\");\n let farTxn = startTestTxn(t.far, \"F4 far\");\n\n // Create shared element\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"initial_a\", propC: \"initial_c\" });\n farTxn.saveChanges(\"create shared element\");\n await pushChanges(farTxn, \"create shared element\");\n farTxn = startTestTxn(t.far, \"F4 far 2\");\n\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"F4 local 2\");\n\n // Far exclusively locks and deletes the element, then pushes\n await t.far.locks.acquireLocks({ exclusive: elementId });\n farTxn.deleteElement(elementId);\n farTxn.saveChanges(\"far delete element\");\n await pushChanges(farTxn, \"far delete element\");\n\n // Local imports transforming schema only.\n // NOTE: do NOT lock elementId here. After far's exclusive lock + push, the element's\n // lastExclusiveReleaseChangesetIndex is set at a newer changeset index than local's head.\n // acquireLocks on elementId from local would throw PullIsRequired via\n // doesBriefcaseRequirePullBeforeLock. The schema import alone is sufficient to test that\n // semantic rebase handles the case where an incoming changeset deleted an element that\n // the local schema txn has no data patches for.\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n\n // Local pulls - far's delete applied as incoming changeset; local schema txn reinstated.\n // No data patch on elementId → no NotFound conflict. Schema upgrade succeeds cleanly.\n await pullChanges(localTxn);\n\n t.local.clearCaches();\n // Element is gone (deleted by incoming changeset)\n chai.expect(() => t!.getElementProps(t!.local, elementId)).to.throw(`element not found`);\n\n // Schema was upgraded successfully despite the element deletion\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema upgrade should survive when incoming changeset deleted an element\");\n });\n\n it(\"F5: insert → update → delete of same element across three sequential local data txns; incoming schema → element absent and no stale ECInstanceId\", async () => {\n // This test probes the ordering of sequential data patches.\n // If patches are applied out of order the update will hit NotFound (element not yet inserted)\n // or the delete will resurrect a value that the update produced.\n t = await TestIModel.initialize(\"F5InsertUpdateDeleteChain\");\n const localTxn = startTestTxn(t.local, \"F5 local\");\n const farTxn = startTestTxn(t.far, \"F5 far\");\n\n // Far pushes a data change to create an incoming changeset\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n t.insertElement(farTxn, \"TestDomain:C\", { propA: \"far_a\", propC: \"far_c\" });\n farTxn.saveChanges(\"far insert element\");\n await pushChanges(farTxn, \"far create element\");\n\n // Local schema txn — semantic rebase trigger\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Local data txn1: insert element E1 (shared model lock; never locked by far)\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const e1Id = t.insertElement(localTxn, \"TestDomain:C\", { propA: \"e1_initial\", propC: \"e1_c\" });\n localTxn.saveChanges(\"local insert E1 (txn1)\");\n\n // Local data txn2: update E1 (local inserted it → no lock violation)\n t.updateElement(localTxn, e1Id, { propA: \"e1_updated\", propC2: \"e1_c2\" });\n localTxn.saveChanges(\"local update E1 (txn2)\");\n\n // Local data txn3: delete E1\n localTxn.deleteElement(e1Id);\n localTxn.saveChanges(\"local delete E1 (txn3)\");\n\n await pullChanges(localTxn);\n chai.expect(() => t!.getElementProps(t!.local, e1Id)).to.throw(`element not found`);\n });\n\n it(\"F6: local inserts elements of three different classes across separate data txns; incoming trivial schema; ECInstanceIds and classNames preserved\", async () => {\n // This test probes class-resolution in constructPatchInstance (resolves classFullName from\n // ECClassId / $meta.classFullName / $meta.fallbackClassId) for multiple BIS subclasses.\n // If class resolution is wrong, insertInstance will fail or create elements under the wrong class.\n t = await TestIModel.initialize(\"F6ThreeClassInserts\");\n const localTxn = startTestTxn(t.local, \"F6 local\");\n const farTxn = startTestTxn(t.far, \"F6 far\");\n\n // Far pushes an incoming data change\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElemId = t.insertElement(farTxn, \"TestDomain:A\", { propA: \"far_a\" });\n farTxn.saveChanges(\"far insert element\");\n await pushChanges(farTxn, \"far create element\");\n\n // Local schema txn — semantic rebase trigger (trivial: adds PropC2)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Local data txns: insert one element per class (A, C, D) in three separate txns.\n // All use shared model lock — none of these elements were ever locked by far.\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n\n const aId = t.insertElement(localTxn, \"TestDomain:A\", { propA: \"local_a_only\" });\n localTxn.saveChanges(\"local insert A (txn1)\");\n\n const cId = t.insertElement(localTxn, \"TestDomain:C\", { propA: \"local_c_a\", propC: \"local_c_val\" });\n localTxn.saveChanges(\"local insert C (txn2)\");\n\n const dId = t.insertElement(localTxn, \"TestDomain:D\", { propA: \"local_d_a\", propD: \"local_d_val\" });\n localTxn.saveChanges(\"local insert D (txn3)\");\n\n // Capture ECInstanceIds before pull — they must be identical after rebase (forceUseId)\n const prePullIds = { aId, cId, dId };\n\n await pullChanges(localTxn);\n\n t.local.clearCaches();\n\n // Verify each element: ECInstanceId preserved, classFullName correct, props intact\n const aElem = t.getElementProps(t.local, prePullIds.aId);\n chai.expect(aElem.id).to.equal(prePullIds.aId, \"Class A ECInstanceId must be preserved (forceUseId)\");\n chai.expect(aElem.classFullName).to.equal(\"TestDomain:A\", \"Class A classFullName must be correct\");\n chai.expect(aElem.propA).to.equal(\"local_a_only\");\n\n const cElem = t.getElementProps(t.local, prePullIds.cId);\n chai.expect(cElem.id).to.equal(prePullIds.cId, \"Class C ECInstanceId must be preserved (forceUseId)\");\n chai.expect(cElem.classFullName).to.equal(\"TestDomain:C\", \"Class C classFullName must be correct\");\n chai.expect(cElem.propA).to.equal(\"local_c_a\");\n chai.expect(cElem.propC).to.equal(\"local_c_val\");\n\n const dElem = t.getElementProps(t.local, prePullIds.dId);\n chai.expect(dElem.id).to.equal(prePullIds.dId, \"Class D ECInstanceId must be preserved (forceUseId)\");\n chai.expect(dElem.classFullName).to.equal(\"TestDomain:D\", \"Class D classFullName must be correct\");\n chai.expect(dElem.propA).to.equal(\"local_d_a\");\n chai.expect(dElem.propD).to.equal(\"local_d_val\");\n\n // Also confirm all three IDs appear in an ECSqlReader scan (polymorphic query on base class A)\n const allRows = await TestIModel.queryToMap(\n t.local,\n `SELECT ECInstanceId, ec_className(ECClassId) AS className FROM TestDomain.A`,\n );\n chai.expect(allRows.has(prePullIds.aId), \"A element must appear in ECSqlReader scan\").to.be.true;\n chai.expect(allRows.has(prePullIds.cId), \"C element must appear in ECSqlReader scan\").to.be.true;\n chai.expect(allRows.has(prePullIds.dId), \"D element must appear in ECSqlReader scan\").to.be.true;\n\n // Confirm className is resolved correctly in the ECSql results\n chai.expect(allRows.get(prePullIds.cId)?.className).to.include(\"C\",\n \"ECSqlReader className for C element must include 'C'\");\n chai.expect(allRows.get(prePullIds.dId)?.className).to.include(\"D\",\n \"ECSqlReader className for D element must include 'D'\");\n\n // Far's element must also be present and unmodified\n const farElem = t.getElementProps(t.local, farElemId);\n chai.expect(farElem.propA).to.equal(\"far_a\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\");\n });\n\n});\n\n/**\n * Multi-step schema upgrade chains.\n * Tests scenarios where one or both sides import schemas in multiple sequential steps before the rebase.\n */\ndescribe(\"Semantic Rebase - Multi-Step Schema Upgrade Chains\", function (this: Suite) {\n this.timeout(90000);\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n it(\"G1: local imports schema in two chained steps (v01→v02) before pulling; incoming has v01 only\", async () => {\n // Local: v01 then v02. Incoming (far): only v01.\n // Expected: local v02 wins because it is strictly newer.\n t = await TestIModel.initialize(\"G1LocalChainedSchemaUpgrade\");\n const farTxn = startTestTxn(t.far, \"G1 far\");\n const localTxn = startTestTxn(t.local, \"G1 local\");\n\n // Far imports v01 and pushes\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\n await pushChanges(farTxn, \"far import v01\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // cleaned up on push\n\n // Local: import v01, then immediately upgrade to v02 (chain before any pull)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n const localTxnPropsV01 = t.local.txns.getLastSavedTxnProps();\n chai.expect(localTxnPropsV01).to.not.be.undefined;\n chai.expect(t.checkIfFolderExists(t.local, localTxnPropsV01!.id, true)).to.be.true;\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n const localTxnPropsV02 = t.local.txns.getLastSavedTxnProps();\n chai.expect(localTxnPropsV02).to.not.be.undefined;\n chai.expect(t.checkIfFolderExists(t.local, localTxnPropsV02!.id, true)).to.be.true;\n\n // Local pulls: incoming has v01, local already at v02 → local v02 txn wins, v01 local txn is a no-op\n await pullChanges(localTxn);\n\n // v01 local txn became no-op (incoming v01 arrived and covers it)\n chai.expect(t.checkIfFolderExists(t.local, localTxnPropsV01!.id, true)).to.be.false;\n // v02 is still pending push\n chai.expect(t.checkIfFolderExists(t.local, localTxnPropsV02!.id, true)).to.be.true;\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Local v02 should win after chain import rebase\");\n // PropD2 (from v02) should be visible\n const classD = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"D\", EntityClass);\n chai.expect(await classD!.getProperty(\"PropD2\")).to.exist;\n });\n\n it(\"G2: incoming has two sequential schema changesets (v01 then v02), local has only data changes\", async () => {\n // Far: schema v01 (cs1) then schema v02 (cs2).\n // Local: data change only → rebased on top of both schema changesets.\n t = await TestIModel.initialize(\"G2IncomingTwoSchemaChangesets\");\n let farTxn = startTestTxn(t.far, \"G2 far\");\n let localTxn = startTestTxn(t.local, \"G2 local\");\n\n // Create shared element on far, push\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"initial_a\", propC: \"initial_c\" });\n farTxn.saveChanges(\"create element\");\n await pushChanges(farTxn, \"create element\");\n farTxn = startTestTxn(t.far, \"G2 far 2\");\n\n // Local pulls to get element\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"G2 local 2\");\n\n // Far: schema changeset 1 (v01)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"far v01\");\n farTxn = startTestTxn(t.far, \"G2 far 3\");\n\n // Far: schema changeset 2 (v02)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n await pushChanges(farTxn, \"far v02\");\n\n // Local: data change only (update element propA)\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(localTxn, elementId, { propA: \"local_updated_a\" });\n localTxn.saveChanges(\"local update propA\");\n\n // Local pulls: both far schema changesets are incoming data, local data rebase on top\n await pullChanges(localTxn);\n\n const element = t.getElementProps(t.local, elementId);\n chai.expect(element.propA).to.equal(\"local_updated_a\", \"Local data change should be preserved after two incoming schema changesets\");\n chai.expect(element.propC).to.equal(\"initial_c\", \"propC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be at v02 after two incoming schema changesets\");\n // Both PropC2 and PropD2 should exist\n const classC = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"C\", EntityClass);\n chai.expect(await classC!.getProperty(\"PropC2\")).to.exist;\n const classD = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"D\", EntityClass);\n chai.expect(await classD!.getProperty(\"PropD2\")).to.exist;\n });\n\n it(\"G3: local imports schema in two steps with data between them; incoming has data only\", async () => {\n // Local: data txn → schema v01 txn → data txn → schema v02 txn.\n // Incoming (far): data changes to different elements.\n // Expected: all four local txns preserved in order, far data also visible.\n t = await TestIModel.initialize(\"G3LocalSchemaDataInterleaved\");\n let farTxn = startTestTxn(t.far, \"G3 far\");\n let localTxn = startTestTxn(t.local, \"G3 local\");\n\n // Create two shared elements via far and push\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const sharedId1 = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"shared_a1\", propC: \"shared_c1\" });\n const sharedId2 = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"shared_a2\", propC: \"shared_c2\" });\n farTxn.saveChanges(\"far create shared elements\");\n await pushChanges(farTxn, \"far create shared elements\");\n farTxn = startTestTxn(t.far, \"G3 far 2\");\n\n // Both pull\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"G3 local 2\");\n\n // Far: update sharedId1 and push (data only)\n await t.far.locks.acquireLocks({ exclusive: sharedId1 });\n t.updateElement(farTxn, sharedId1, { propA: \"far_updated_a1\" });\n farTxn.saveChanges(\"far update sharedId1\");\n await pushChanges(farTxn, \"far update sharedId1\");\n\n // Local: txn1 - update sharedId2 (data)\n await t.local.locks.acquireLocks({ exclusive: sharedId2 });\n t.updateElement(localTxn, sharedId2, { propA: \"local_updated_a2\" });\n localTxn.saveChanges(\"local txn1 update sharedId2\");\n\n // Local: txn2 - schema v01 (adds PropC2)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Local: txn3 - insert new element using new PropC2\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localNewId = t.insertElement(localTxn, \"TestDomain:C\", { propA: \"new_local_a\", propC: \"new_local_c\", propC2: \"new_local_c2\" });\n localTxn.saveChanges(\"local txn3 insert element with PropC2\");\n\n // Local: txn4 - schema v02 (adds PropD2)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n\n // Local pulls and rebases all four local txns onto incoming data change\n await pullChanges(localTxn);\n\n t.local.clearCaches();\n\n // sharedId1 should have far's update\n const elem1 = t.getElementProps(t.local, sharedId1);\n chai.expect(elem1.propA).to.equal(\"far_updated_a1\", \"Far update to sharedId1 should be applied\");\n\n // sharedId2 should have local's update\n const elem2 = t.getElementProps(t.local, sharedId2);\n chai.expect(elem2.propA).to.equal(\"local_updated_a2\", \"Local update to sharedId2 should be preserved\");\n\n // New locally-inserted element with PropC2 should exist\n const newElem = t.getElementProps(t.local, localNewId);\n chai.expect(newElem.propA).to.equal(\"new_local_a\", \"Locally-inserted element should be preserved\");\n chai.expect(newElem.propC2).to.equal(\"new_local_c2\", \"PropC2 from local element should be preserved\");\n\n // Schema should be at v02 (both local schema imports preserved)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be at v02 after two local schema imports\");\n });\n\n it(\"G4: three successive schema increments from three different pushes, local rebases all\", async () => {\n // far pushes v01, then v02, then v03 as separate changesets.\n // local has a single data change it needs to rebase on top of all three.\n t = await TestIModel.initialize(\"G4ThreeSuccessiveSchemaIncrements\");\n let farTxn = startTestTxn(t.far, \"G4 far\");\n let localTxn = startTestTxn(t.local, \"G4 local\");\n\n // Create shared element on far\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"init_a\", propC: \"init_c\" });\n farTxn.saveChanges(\"far create element\");\n await pushChanges(farTxn, \"far create element\");\n farTxn = startTestTxn(t.far, \"G4 far 2\");\n\n // Both pull to sync\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"G4 local 2\");\n\n // Far pushes v01\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"far v01\");\n farTxn = startTestTxn(t.far, \"G4 far 3\");\n\n // Far pushes v02\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n await pushChanges(farTxn, \"far v02\");\n farTxn = startTestTxn(t.far, \"G4 far 4\");\n\n // Far pushes v03 (moves PropC and PropD to A)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x03MovePropCAndD]);\n await pushChanges(farTxn, \"far v03\");\n\n // Local: data change only\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(localTxn, elementId, { propA: \"local_updated_a\", propC: \"local_updated_c\" });\n localTxn.saveChanges(\"local update element\");\n\n // Local pulls and rebases through all three schema changesets\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n // Local data change should survive all three schema transforms\n const element = t.getElementProps(t.local, elementId);\n chai.expect(element.propA).to.equal(\"local_updated_a\", \"Local propA should be preserved after three schema increments\");\n chai.expect(element.propC).to.equal(\"local_updated_c\", \"Local propC should be preserved after three schema increments\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.03\", \"Schema should be at v03 after three incoming schema increments\");\n });\n});\n\n/**\n * ElementAspect changes during semantic rebase.\n * Tests that aspect insert/update/delete operations are correctly captured and reinstated.\n */\ndescribe(\"Semantic Rebase - ElementAspect Changes\", function (this: Suite) {\n this.timeout(90000);\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n it(\"H1: local inserts UniqueAspect; incoming trivial schema change → aspect preserved after rebase\", async () => {\n t = await TestIModel.initialize(\"H1AspectInsertIncomingTrivial\");\n let farTxn = startTestTxn(t.far, \"H1 far\");\n let localTxn = startTestTxn(t.local, \"H1 local\");\n\n // Set up base schema with aspect class on both sides\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x01WithAspect]);\n await pushChanges(farTxn, \"import aspect schema\");\n farTxn = startTestTxn(t.far, \"H1 far 2\");\n\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"H1 local 2\");\n\n // Create an element on far, push\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"elem_a\", propC: \"elem_c\" });\n farTxn.saveChanges(\"far create element\");\n await pushChanges(farTxn, \"far create element\");\n farTxn = startTestTxn(t.far, \"H1 far 3\");\n\n // Local pulls element\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"H1 local 3\");\n\n // Far imports trivial schema (adds AspectProp2 to CUniqueAspect)\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x02WithAspectProp2]);\n await pushChanges(farTxn, \"far add AspectProp2\");\n\n // Local inserts a UniqueAspect onto the element\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.insertAspect(localTxn, elementId, \"TestDomain:CUniqueAspect\", { aspectProp: \"local_aspect_value\" });\n localTxn.saveChanges(\"local insert aspect\");\n\n // Local pulls: data rebase must preserve the aspect insertion\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n // Aspect should still exist with correct value\n const aspect = t.getAspect(t.local, elementId, \"TestDomain:CUniqueAspect\");\n chai.expect(aspect, \"Aspect should exist after rebase\").to.not.be.undefined;\n chai.expect(aspect.aspectProp).to.equal(\"local_aspect_value\", \"AspectProp should be preserved after rebase\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be at v02 with AspectProp2 added\");\n });\n\n it(\"H2: local inserts UniqueAspect; incoming transforming schema change → aspect preserved after transform\", async () => {\n t = await TestIModel.initialize(\"H2AspectInsertIncomingTransform\");\n let farTxn = startTestTxn(t.far, \"H2 far\");\n let localTxn = startTestTxn(t.local, \"H2 local\");\n\n // Set up base schema with aspect class on both sides\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x01WithAspect]);\n await pushChanges(farTxn, \"import aspect schema\");\n farTxn = startTestTxn(t.far, \"H2 far 2\");\n\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"H2 local 2\");\n\n // Create element on far, push\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"elem_a\", propC: \"elem_c\" });\n farTxn.saveChanges(\"far create element\");\n await pushChanges(farTxn, \"far create element\");\n farTxn = startTestTxn(t.far, \"H2 far 3\");\n\n // Local pulls element\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"H2 local 3\");\n\n // Far imports transforming schema: moves PropC from C to A (v02 also brings AspectProp2)\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x02WithAspectProp2]);\n await pushChanges(farTxn, \"far import transforming schema with aspect change\");\n\n // Local inserts a UniqueAspect\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.insertAspect(localTxn, elementId, \"TestDomain:CUniqueAspect\", { aspectProp: \"aspect_before_transform\" });\n localTxn.saveChanges(\"local insert aspect\");\n\n // Local pulls: aspect is captured then reinstated after schema transform\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n // Aspect should still exist\n const aspect = t.getAspect(t.local, elementId, \"TestDomain:CUniqueAspect\");\n chai.expect(aspect, \"Aspect should exist after transforming schema rebase\").to.not.be.undefined;\n chai.expect(aspect.aspectProp, \"AspectProp value should be preserved\").to.equal(\"aspect_before_transform\");\n\n // Element itself should also be intact\n const element = t.getElementProps(t.local, elementId);\n chai.expect(element.propA, \"Element propA should be preserved\").to.equal(\"elem_a\");\n });\n\n it(\"H3: local updates UniqueAspect property; incoming trivial schema change → aspect update preserved\", async () => {\n t = await TestIModel.initialize(\"H3AspectUpdateIncomingTrivial\");\n let farTxn = startTestTxn(t.far, \"H3 far\");\n let localTxn = startTestTxn(t.local, \"H3 local\");\n\n // Both get the aspect schema first\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x01WithAspect]);\n await pushChanges(farTxn, \"import aspect schema\");\n farTxn = startTestTxn(t.far, \"H3 far 2\");\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"H3 local 2\");\n\n // Far creates element + inserts aspect, pushes\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"elem_a\", propC: \"elem_c\" });\n t.insertAspect(farTxn, elementId, \"TestDomain:CUniqueAspect\", { aspectProp: \"initial_aspect\" });\n farTxn.saveChanges(\"far create element + aspect\");\n await pushChanges(farTxn, \"far create element + aspect\");\n farTxn = startTestTxn(t.far, \"H3 far 3\");\n\n // Local pulls to get the element and aspect\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"H3 local 3\");\n\n // Far imports trivial schema (adds AspectProp2 to CUniqueAspect), pushes\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x02WithAspectProp2]);\n await pushChanges(farTxn, \"far add AspectProp2\");\n\n // Local updates the aspect's AspectProp\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.updateAspect(localTxn, elementId, \"TestDomain:CUniqueAspect\", { aspectProp: \"updated_aspect_value\" });\n localTxn.saveChanges(\"local update aspect\");\n\n // Local pulls: aspect update should survive the schema rebase\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n const aspect = t.getAspect(t.local, elementId, \"TestDomain:CUniqueAspect\");\n chai.expect(aspect).to.not.be.undefined;\n chai.expect(aspect.aspectProp).to.equal(\"updated_aspect_value\", \"Aspect update should be preserved after trivial schema rebase\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be at v02\");\n });\n\n it(\"H4: local deletes UniqueAspect; incoming trivial schema change → aspect stays deleted after rebase\", async () => {\n t = await TestIModel.initialize(\"H4AspectDeleteIncomingTrivial\");\n let farTxn = startTestTxn(t.far, \"H4 far\");\n let localTxn = startTestTxn(t.local, \"H4 local\");\n\n // Both get the aspect schema\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x01WithAspect]);\n await pushChanges(farTxn, \"import aspect schema\");\n farTxn = startTestTxn(t.far, \"H4 far 2\");\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"H4 local 2\");\n\n // Far creates element + aspect, pushes\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"elem_a\", propC: \"elem_c\" });\n t.insertAspect(farTxn, elementId, \"TestDomain:CUniqueAspect\", { aspectProp: \"initial_aspect\" });\n farTxn.saveChanges(\"far create element + aspect\");\n await pushChanges(farTxn, \"far create element + aspect\");\n farTxn = startTestTxn(t.far, \"H4 far 3\");\n\n // Local pulls to get the element and aspect\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"H4 local 3\");\n\n // Far imports trivial schema, pushes\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x02WithAspectProp2]);\n await pushChanges(farTxn, \"far add AspectProp2\");\n\n // Local deletes the aspect\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.deleteAspect(localTxn, elementId, \"TestDomain:CUniqueAspect\");\n localTxn.saveChanges(\"local delete aspect\");\n\n // Local pulls: aspect deletion should be preserved after schema rebase\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n // The element should still exist but have no aspect\n const element = t.getElementProps(t.local, elementId);\n chai.expect(element, \"Element should still exist after rebase\").to.not.be.undefined;\n\n const aspects = t.local.elements.getAspects(elementId, \"TestDomain:CUniqueAspect\");\n chai.expect(aspects.length).to.equal(0, \"Aspect should be gone after deletion is reinstated\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be at v02\");\n });\n\n it(\"H5: local inserts aspect; incoming adds same aspect class schema change AND data → both preserved\", async () => {\n t = await TestIModel.initialize(\"H5AspectInsertIncomingSchemaAndData\");\n let farTxn = startTestTxn(t.far, \"H5 far\");\n let localTxn = startTestTxn(t.local, \"H5 local\");\n\n // Both get the base aspect schema\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x01WithAspect]);\n await pushChanges(farTxn, \"import aspect schema\");\n farTxn = startTestTxn(t.far, \"H5 far 2\");\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"H5 local 2\");\n\n // Far creates two elements and inserts aspects on them\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"far_a\", propC: \"far_c\" });\n t.insertAspect(farTxn, farElementId, \"TestDomain:CUniqueAspect\", { aspectProp: \"far_aspect\" });\n farTxn.saveChanges(\"far create element + aspect\");\n\n // Far also upgrades the schema to v02 (adds AspectProp2)\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x02WithAspectProp2]);\n await pushChanges(farTxn, \"far schema upgrade + element with aspect\");\n\n // Local creates its own element and inserts an aspect with both AspectProp values\n // (local is still at v01 with only AspectProp; we insert only that)\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElementId = t.insertElement(localTxn, \"TestDomain:C\", { propA: \"local_a\", propC: \"local_c\" });\n t.insertAspect(localTxn, localElementId, \"TestDomain:CUniqueAspect\", { aspectProp: \"local_aspect\" });\n localTxn.saveChanges(\"local create element + aspect\");\n\n // Local pulls: incoming has schema v02 + far's element+aspect; local data rebase on top\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n // Far's element and aspect should be present\n const farAspect = t.getAspect(t.local, farElementId, \"TestDomain:CUniqueAspect\");\n chai.expect(farAspect).to.not.be.undefined;\n chai.expect(farAspect.aspectProp).to.equal(\"far_aspect\");\n\n // Local's element and aspect should also be preserved\n const localAspect = t.getAspect(t.local, localElementId, \"TestDomain:CUniqueAspect\");\n chai.expect(localAspect).to.not.be.undefined;\n chai.expect(localAspect.aspectProp).to.equal(\"local_aspect\", \"Local aspect should survive rebase onto incoming schema+data\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be at v02\");\n });\n});\n\n/**\n * Property type variations during semantic rebase.\n * Ensures int, double, and boolean property values are preserved correctly through rebase.\n */\ndescribe(\"Semantic Rebase - Property Type Variations\", function (this: Suite) {\n this.timeout(90000);\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n it(\"I1: int, double, and boolean properties preserved through trivial schema rebase\", async () => {\n // Schema v01 adds int/double/bool props to class C.\n // Local sets those values on an element, far imports v02 (adds PropD2 on D).\n // After rebase: multi-type values should survive unchanged.\n t = await TestIModel.initialize(\"I1MultiTypePropsRebase\");\n let farTxn = startTestTxn(t.far, \"I1 far\");\n let localTxn = startTestTxn(t.local, \"I1 local\");\n\n // Both get the multi-type schema (v01)\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x01MultiTypeProps]);\n await pushChanges(farTxn, \"import multi-type schema v01\");\n farTxn = startTestTxn(t.far, \"I1 far 2\");\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"I1 local 2\");\n\n // Create element with all multi-type properties on local, push\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"string_val\",\n propC: \"another_string\",\n propCInt: 42,\n propCDouble: 3.14159,\n propCBool: true,\n });\n localTxn.saveChanges(\"local create multi-type element\");\n await pushChanges(localTxn, \"create multi-type element\");\n localTxn = startTestTxn(t.local, \"I1 local 3\");\n\n // Far imports v02 (adds PropD2 — trivial, unrelated change), pushes\n await pullChanges(farTxn);\n farTxn = startTestTxn(t.far, \"I1 far 3\");\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x02MultiTypePropsExtended]);\n await pushChanges(farTxn, \"far import v02 with PropD2\");\n\n // Local updates the int and bool properties\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(localTxn, elementId, { propCInt: 100, propCBool: false });\n localTxn.saveChanges(\"local update int and bool\");\n\n // Local pulls: data rebase should preserve all type values\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n const element = t.getElementProps(t.local, elementId);\n chai.expect(element.propCInt).to.equal(100, \"Int property update should be preserved\");\n chai.expect(element.propCDouble).to.equal(3.14159, \"Double property should remain from original insert\");\n chai.expect(element.propCBool).to.equal(false, \"Boolean property update should be preserved\");\n chai.expect(element.propC).to.equal(\"another_string\", \"String property should be preserved\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be at v02\");\n });\n\n it(\"I2: int, double, and boolean properties preserved through transforming schema rebase\", async () => {\n // Local creates element with multi-type props, far imports transforming schema (moves PropD to A).\n // After rebase: all multi-type values should survive even though the schema layout changed for D.\n t = await TestIModel.initialize(\"I2MultiTypePropsTransformRebase\");\n let farTxn = startTestTxn(t.far, \"I2 far\");\n let localTxn = startTestTxn(t.local, \"I2 local\");\n\n // Both get multi-type schema (v01)\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x01MultiTypeProps]);\n await pushChanges(farTxn, \"import multi-type schema v01\");\n farTxn = startTestTxn(t.far, \"I2 far 2\");\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"I2 local 2\");\n\n // Far creates a shared element, push\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"shared_a\",\n propC: \"shared_c\",\n propCInt: 7,\n propCDouble: 2.718,\n propCBool: true,\n });\n farTxn.saveChanges(\"far create multi-type element\");\n await pushChanges(farTxn, \"far create element\");\n farTxn = startTestTxn(t.far, \"I2 far 3\");\n\n // Both pull to sync\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"I2 local 3\");\n\n // Far imports transforming schema (v02 moves PropD to A)\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x02MultiTypePropsMovePropDToA]);\n await pushChanges(farTxn, \"far move PropD to A\");\n\n // Local updates the multi-type properties on the element\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(localTxn, elementId, { propCInt: 99, propCDouble: 1.414, propCBool: false });\n localTxn.saveChanges(\"local update multi-type props\");\n\n // Local pulls: data rebase with schema transform\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n const element = t.getElementProps(t.local, elementId);\n chai.expect(element.propCInt).to.equal(99, \"Int property should be preserved after transforming schema rebase\");\n chai.expect(element.propCDouble).to.closeTo(1.414, 0.0001, \"Double property should be preserved\");\n chai.expect(element.propCBool).to.equal(false, \"Boolean property should be preserved\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be at v02\");\n });\n\n it(\"I3: element with null/undefined property values rebased correctly through schema transform\", async () => {\n // Element created with some properties left unset (null/undefined).\n // Rebase should not fail and unset properties should remain absent.\n t = await TestIModel.initialize(\"I3NullPropertyRebase\");\n let farTxn = startTestTxn(t.far, \"I3 far\");\n let localTxn = startTestTxn(t.local, \"I3 local\");\n\n // Create element on local with only propA set (propC left unset)\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(localTxn, \"TestDomain:C\", { propA: \"only_a\" });\n // propC is intentionally not set (will be undefined/null)\n localTxn.saveChanges(\"create element with partial props\");\n await pushChanges(localTxn, \"create partially populated element\");\n localTxn = startTestTxn(t.local, \"I3 local 2\");\n\n // Far imports transforming schema (moves PropC from C to A), pushes\n await pullChanges(farTxn);\n farTxn = startTestTxn(t.far, \"I3 far 2\");\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n await pushChanges(farTxn, \"far move PropC to A\");\n\n // Local makes a data change to update propA\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(localTxn, elementId, { propA: \"updated_a\" });\n localTxn.saveChanges(\"local update propA only\");\n\n // Local pulls: data rebase should handle null/absent propC gracefully\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n const element = t.getElementProps(t.local, elementId);\n chai.expect(element.propA).to.equal(\"updated_a\", \"PropA update should be preserved\");\n // propC was never set so it should still be absent or null after the transform\n chai.expect(element.propC === undefined || element.propC === null || element.propC === \"\").to.be.true,\n \"PropC should remain absent/null after rebase when it was never set\";\n });\n\n it(\"I4: binary (UInt8Array) property values preserved through insert and update during trivial schema rebase\", async () => {\n // Schema v01 adds a binary property (PropCBin) to class C.\n // Local inserts an element with a Uint8Array value, then updates it to a different Uint8Array.\n // Far imports v02 (adds PropD2 — trivial, unrelated change) to trigger semantic rebase.\n // After rebase: the updated binary value should survive as a Uint8Array with the correct bytes.\n t = await TestIModel.initialize(\"I4BinaryPropRebase\");\n let farTxn = startTestTxn(t.far, \"I4 far\");\n let localTxn = startTestTxn(t.local, \"I4 local\");\n\n // Both sides get the binary-prop schema (v01)\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x01WithBinaryProp]);\n await pushChanges(farTxn, \"import binary-prop schema v01\");\n farTxn = startTestTxn(t.far, \"I4 far 2\");\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"I4 local 2\");\n\n // Local inserts an element with an initial binary value, pushes so both sides are in sync\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const initialBin = new Uint8Array([0xDE, 0xAD, 0xBE, 0xEF]);\n const elementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"binary_test\",\n propC: \"some_string\",\n propCBin: initialBin,\n });\n localTxn.saveChanges(\"local insert element with binary prop\");\n await pushChanges(localTxn, \"create element with binary prop\");\n localTxn = startTestTxn(t.local, \"I4 local 3\");\n\n // Far imports v02 (adds PropD2 — trivial change), pushes to trigger rebase on local's next pull\n await pullChanges(farTxn);\n farTxn = startTestTxn(t.far, \"I4 far 3\");\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x02WithBinaryPropAndPropD2]);\n await pushChanges(farTxn, \"far import v02 with PropD2\");\n\n // Local updates the binary property to a new Uint8Array value (NOT pushed yet)\n const updatedBin = new Uint8Array([0x01, 0x02, 0x03, 0x04, 0x05]);\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(localTxn, elementId, { propCBin: updatedBin });\n localTxn.saveChanges(\"local update binary prop\");\n\n // Local pulls: semantic rebase should reinstate the binary property update\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n const element = t.getElementProps(t.local, elementId);\n chai.expect(element.propCBin).to.be.instanceOf(Uint8Array, \"Binary property should be returned as a Uint8Array\");\n chai.expect(Array.from(element.propCBin as Uint8Array)).to.deep.equal(\n Array.from(updatedBin),\n \"Updated binary value should be preserved byte-for-byte after semantic rebase\",\n );\n chai.expect(element.propC).to.equal(\"some_string\", \"String property should be unchanged\");\n chai.expect(element.propA).to.equal(\"binary_test\", \"PropA should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be at v02 after rebase\");\n });\n});\n\n/**\n * Both sides delete the same element.\n * Edge case where both local and far delete the same element independently.\n */\ndescribe(\"Semantic Rebase - Both Sides Delete Same Element\", function (this: Suite) {\n this.timeout(90000);\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n it(\"J2: far deletes element, local makes data change to a DIFFERENT element + schema import → element gone, other changes preserved\", async () => {\n t = await TestIModel.initialize(\"J2FarDeleteLocalSchemaAndData\");\n let farTxn = startTestTxn(t.far, \"J2 far\");\n let localTxn = startTestTxn(t.local, \"J2 local\");\n\n // Create two shared elements\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const deletedElementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"del_a\", propC: \"del_c\" });\n const keepElementId = t.insertElement(farTxn, \"TestDomain:D\", { propA: \"keep_a\", propD: \"keep_d\" });\n farTxn.saveChanges(\"create two elements\");\n await pushChanges(farTxn, \"create two elements\");\n farTxn = startTestTxn(t.far, \"J2 far 2\");\n\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"J2 local 2\");\n\n // Far imports schema + deletes one element\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await t.far.locks.acquireLocks({ exclusive: deletedElementId });\n farTxn.deleteElement(deletedElementId);\n farTxn.saveChanges(\"far delete element\");\n await pushChanges(farTxn, \"far schema + delete element\");\n\n // Local: imports a different schema upgrade + updates the other element\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await t.local.locks.acquireLocks({ exclusive: keepElementId });\n t.updateElement(localTxn, keepElementId, { propA: \"local_updated_keep_a\" });\n localTxn.saveChanges(\"local update keep element\");\n\n // Local pulls\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n // Deleted element should be gone\n chai.expect(() => t!.getElementProps(t!.local, deletedElementId)).to.throw(`element not found`, \"Deleted element should not be found after rebase\");\n\n // Kept element should have local's update\n const keepElement = t.getElementProps(t.local, keepElementId);\n chai.expect(keepElement.propA).to.equal(\"local_updated_keep_a\", \"Keep element's local update should be preserved\");\n\n // Schema should be at v01\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be at v01\");\n });\n});\n\n/**\n * Three-briefcase scenarios.\n * Tests interactions when three separate briefcases are involved in schema+data operations.\n */\ndescribe(\"Semantic Rebase - Three Briefcase Scenarios\", function (this: Suite) {\n this.timeout(90000);\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n it(\"K1: schema from extra briefcase, data from far, local rebases both → all changes preserved\", async () => {\n // extra imports schema, pushes.\n // far creates data element, pushes.\n // local has local data change.\n // local pulls: must rebase on top of schema+data from two different sources.\n t = await TestIModel.initialize(\"K1ThreeBriefcaseSchemaAndData\");\n const farTxn = startTestTxn(t.far, \"K1 far\");\n const localTxn = startTestTxn(t.local, \"K1 local\");\n\n // Extra briefcase imports schema and pushes\n const extra = await t.openExtraBriefcase(\"extra-user-k1\");\n try {\n extra.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const extraTxn = startTestTxn(extra, \"K1 extra\");\n await importSchemaStrings(extraTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(extraTxn, \"extra import schema v01\");\n } finally {\n // Keep extra open for the test duration; it's closed here after push\n extra.close();\n }\n\n // Far pulls schema, creates element with PropC2, pushes\n await pullChanges(farTxn);\n const farTxn2 = startTestTxn(t.far, \"K1 far 2\");\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElementId = t.insertElement(farTxn2, \"TestDomain:C\", { propA: \"far_a\", propC: \"far_c\", propC2: \"far_c2\" });\n farTxn2.saveChanges(\"far create element\");\n await pushChanges(farTxn2, \"far create element\");\n\n // Local makes a data change (creates its own element, still at old schema)\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElementId = t.insertElement(localTxn, \"TestDomain:C\", { propA: \"local_a\", propC: \"local_c\" });\n localTxn.saveChanges(\"local create element\");\n\n // Local pulls: must get schema from extra + element from far, then rebase local element\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n // Far's element should be visible\n const farElement = t.getElementProps(t.local, farElementId);\n chai.expect(farElement.propA).to.equal(\"far_a\", \"Far element should be visible after rebase\");\n chai.expect(farElement.propC2).to.equal(\"far_c2\", \"Far element PropC2 should be preserved\");\n\n // Local's element should also be preserved\n const localElement = t.getElementProps(t.local, localElementId);\n chai.expect(localElement.propA).to.equal(\"local_a\", \"Local element should be preserved after rebase\");\n chai.expect(localElement.propC).to.equal(\"local_c\", \"Local element propC should be preserved\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be at v01 from extra briefcase\");\n });\n\n it(\"K2: two sequential schema changes from different briefcases, local rebases correctly through both\", async () => {\n // extra-a pushes schema v01.\n // extra-b pulls v01, pushes schema v02.\n // local makes data change and must pull both schema changesets.\n t = await TestIModel.initialize(\"K2TwoSchemaSourcesSequential\");\n const localTxn = startTestTxn(t.local, \"K2 local\");\n\n // Create shared element via far and push\n const farTxn = startTestTxn(t.far, \"K2 far\");\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"shared_a\", propC: \"shared_c\" });\n farTxn.saveChanges(\"far create shared element\");\n await pushChanges(farTxn, \"create shared element\");\n\n // Local pulls element\n await pullChanges(localTxn);\n const localTxn2 = startTestTxn(t.local, \"K2 local 2\");\n\n // extra-a pushes schema v01\n const extraA = await t.openExtraBriefcase(\"extra-a-k2\");\n try {\n const extraATxn = startTestTxn(extraA, \"K2 extra-a\");\n await importSchemaStrings(extraATxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(extraATxn, \"extra-a import schema v01\");\n } finally {\n extraA.close();\n }\n\n // extra-b pulls v01, pushes schema v02 (adds PropD2)\n const extraB = await t.openExtraBriefcase(\"extra-b-k2\");\n try {\n await extraB.pullChanges(); // picks up v01\n const extraBTxn = startTestTxn(extraB, \"K2 extra-b\");\n await importSchemaStrings(extraBTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n await pushChanges(extraBTxn, \"extra-b import schema v02\");\n } finally {\n extraB.close();\n }\n\n // Local makes data change: update shared element's propA\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(localTxn2, elementId, { propA: \"local_updated_a\" });\n localTxn2.saveChanges(\"local update propA\");\n\n // Local pulls: must process v01 + v02 schema changesets and then rebase local data\n await pullChanges(localTxn2);\n t.local.clearCaches();\n\n const element = t.getElementProps(t.local, elementId);\n chai.expect(element.propA).to.equal(\"local_updated_a\", \"Local data change should be preserved after two schema changesets from different sources\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be at v02 after two schema changesets\");\n });\n});\n\n/**\n * Multiple pulls without push between them.\n * Tests that semantic rebase state is handled correctly when the local briefcase\n * pulls multiple times before pushing, accumulating rebase operations.\n */\ndescribe(\"Semantic Rebase - Multiple Pulls Without Push\", function (this: Suite) {\n this.timeout(90000);\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n it(\"L2: local makes two separate schema imports across two pull cycles without pushing\", async () => {\n // Pull 1: local has schema v01, far has data → rebase, local wins with v01\n // Pull 2 (no push): local imports v02, far pushes more data → rebase, local wins with v02\n t = await TestIModel.initialize(\"L2TwoSchemaImportsTwoPulls\");\n let farTxn = startTestTxn(t.far, \"L2 far\");\n let localTxn = startTestTxn(t.local, \"L2 local\");\n\n // Create shared element\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"initial_a\", propC: \"initial_c\" });\n farTxn.saveChanges(\"create element\");\n await pushChanges(farTxn, \"create element\");\n farTxn = startTestTxn(t.far, \"L2 far 2\");\n\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"L2 local 2\");\n\n // Far pushes data change for pull cycle 1\n await t.far.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(farTxn, elementId, { propC: \"far_c_update_1\" });\n farTxn.saveChanges(\"far data round 1\");\n await pushChanges(farTxn, \"far data round 1\");\n farTxn = startTestTxn(t.far, \"L2 far 3\");\n\n // Local: schema v01 import\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Pull cycle 1\n await pullChanges(localTxn);\n chai.expect(t.local.getSchemaProps(\"TestDomain\").version).to.equal(\"01.00.01\", \"Schema should be v01 after first pull\");\n\n // Far pushes data change for pull cycle 2\n localTxn = startTestTxn(t.local, \"L2 local 3\");\n await t.far.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(farTxn, elementId, { propC: \"far_c_update_2\" });\n farTxn.saveChanges(\"far data round 2\");\n await pushChanges(farTxn, \"far data round 2\");\n\n // Local: schema v02 import (still not pushed v01 yet)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n\n // Pull cycle 2 without push\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n // Schema should be at v02 (local upgrade wins)\n chai.expect(t.local.getSchemaProps(\"TestDomain\").version).to.equal(\"01.00.02\", \"Schema should be v02 after second pull without push\");\n\n // Both far data changes should be present\n const element = t.getElementProps(t.local, elementId);\n chai.expect(element.propC).to.equal(\"far_c_update_2\", \"Far data round 2 should be applied\");\n });\n\n it(\"L3: pull when there are no incoming changes (already up to date) → no rebase folders created\", async () => {\n t = await TestIModel.initialize(\"L3PullNoIncomingChanges\");\n const localTxn = startTestTxn(t.local, \"L3 local\");\n\n // Local imports schema (creates rebase folder)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n const localTxnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(localTxnProps).to.not.be.undefined;\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.true;\n\n // Pull when far has nothing new — no rebase should happen\n // (local is ahead of far's schema; there are no incoming changesets)\n const rebaseBasePathBeforePull = BriefcaseManager.getBasePathForSemanticRebaseLocalFiles(t.local);\n\n await pullChanges(localTxn);\n\n // Schema folder should still exist (local schema is pending push)\n const rebaseBasePathAfterPull = BriefcaseManager.getBasePathForSemanticRebaseLocalFiles(t.local);\n chai.expect(IModelJsFs.existsSync(rebaseBasePathAfterPull)).to.be.true;\n chai.expect(rebaseBasePathBeforePull).to.equal(rebaseBasePathAfterPull, \"Rebase path should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Local schema should still be v01 after no-op pull\");\n });\n});\n\n/**\n * New class addition to schema.\n * Tests that newly added entity classes and their instances survive semantic rebase.\n */\ndescribe(\"Semantic Rebase - New Class Addition to Schema\", function (this: Suite) {\n this.timeout(90000);\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n it(\"N1: far adds new class E to schema; local creates instances of existing class A + pulls → both visible\", async () => {\n t = await TestIModel.initialize(\"N1FarAddsNewClassLocalCreatesData\");\n const farTxn = startTestTxn(t.far, \"N1 far\");\n const localTxn = startTestTxn(t.local, \"N1 local\");\n\n // Far imports schema with new class E, creates an element of class E, pushes\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x01AddClassE]);\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElementE = t.insertElement(farTxn, \"TestDomain:E\", { propA: \"far_e_a\", propE: \"far_e\" });\n farTxn.saveChanges(\"far create element E\");\n await pushChanges(farTxn, \"far schema+element E\");\n\n // Local creates an instance of class C (old class) and pulls\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElementC = t.insertElement(localTxn, \"TestDomain:C\", { propA: \"local_c_a\", propC: \"local_c\" });\n localTxn.saveChanges(\"local create element C\");\n\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n // Far's element E should be visible on local\n const elemE = t.getElementProps(t.local, farElementE);\n chai.expect(elemE.propA).to.equal(\"far_e_a\", \"Far element E should be visible after rebase\");\n chai.expect(elemE.propE).to.equal(\"far_e\", \"PropE of element E should be correct\");\n\n // Local's element C should be preserved\n const elemC = t.getElementProps(t.local, localElementC);\n chai.expect(elemC.propA).to.equal(\"local_c_a\", \"Local element C should be preserved after rebase\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be at v01 with class E added\");\n });\n\n it(\"N2: both sides add same new class E → local version wins when higher, all instances preserved\", async () => {\n t = await TestIModel.initialize(\"N2BothSidesAddNewClass\");\n const farTxn = startTestTxn(t.far, \"N2 far\");\n const localTxn = startTestTxn(t.local, \"N2 local\");\n\n // Far imports v01 (adds class E with PropE), pushes\n await importSchemaStrings(farTxn, [TestIModel.extendedSchemas.v01x00x01AddClassE]);\n await pushChanges(farTxn, \"far import v01 with class E\");\n\n // Local imports v02 (adds class E with PropE + PropE2 — higher version), does NOT push yet\n await importSchemaStrings(localTxn, [TestIModel.extendedSchemas.v01x00x02AddClassEPropE2]);\n\n // Local pulls: local v02 > far v01 → local wins\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Local v02 should win over far's v01\");\n\n // Both PropE and PropE2 should be present on class E\n const classE = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"E\", EntityClass);\n chai.expect(classE).to.not.be.undefined;\n chai.expect(await classE!.getProperty(\"PropE\")).to.exist;\n chai.expect(await classE!.getProperty(\"PropE2\")).to.exist;\n });\n\n it(\"N3: local adds new class E with instances; incoming has transforming schema change on existing class → both preserved\", async () => {\n t = await TestIModel.initialize(\"N3LocalNewClassIncomingTransform\");\n let farTxn = startTestTxn(t.far, \"N3 far\");\n let localTxn = startTestTxn(t.local, \"N3 local\");\n\n // Create a C element on far, push, then both pull\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const cElementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"c_initial_a\", propC: \"c_initial_c\" });\n farTxn.saveChanges(\"create C element\");\n await pushChanges(farTxn, \"create C element\");\n farTxn = startTestTxn(t.far, \"N3 far 2\");\n\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"N3 local 2\");\n\n // Far imports transforming schema: moves PropC from C to A, AND adds class E (v01.00.02 + E)\n // We use a combined schema for this\n const v01x00x02WithBothChanges = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"E\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropE\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(farTxn, [v01x00x02WithBothChanges]);\n await pushChanges(farTxn, \"far import transform+new class\");\n\n // Local imports v01 (just adds class E) and creates two elements: one C, one E\n await importSchemaStrings(localTxn, [TestIModel.extendedSchemas.v01x00x01AddClassE]);\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElemE = t.insertElement(localTxn, \"TestDomain:E\", { propA: \"local_e_a\", propE: \"local_e\" });\n localTxn.saveChanges(\"local create E element\");\n\n // Local also updates the C element that far's transform will affect\n await t.local.locks.acquireLocks({ exclusive: cElementId });\n t.updateElement(localTxn, cElementId, { propC: \"local_updated_c\" });\n localTxn.saveChanges(\"local update C element PropC\");\n\n // Local pulls: far's transform schema (v02) > local's v01 schema → incoming wins for schema\n // But local's data changes (E element + C element update) should survive\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n // Far's schema (v02) should win since it has higher version\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Far's schema v02 should win over local's v01\");\n\n // Local E element should exist\n const elemE = t.getElementProps(t.local, localElemE);\n chai.expect(elemE.propA).to.equal(\"local_e_a\", \"Local element E should be preserved\");\n chai.expect(elemE.propE).to.equal(\"local_e\", \"PropE should be preserved\");\n\n // C element should have local's PropC update (PropC is now on class A in v02)\n const elemC = t.getElementProps(t.local, cElementId);\n chai.expect(elemC.propC).to.equal(\"local_updated_c\", \"Local PropC update should be preserved after schema transform\");\n });\n});\n\n/**\n * Guard conditions and error paths for semantic rebase.\n * Tests boundary conditions like importing schema while rebasing, concurrent pull attempts, etc.\n */\ndescribe(\"Semantic Rebase - Guard Conditions and Error Paths\", function (this: Suite) {\n this.timeout(90000);\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n it(\"P1: importing schema during active rebase (via onRebaseTxnBegin hook) throws 'Cannot import schemas while rebasing'\", async () => {\n t = await TestIModel.initialize(\"P1ImportSchemaWhileRebasing\");\n const farTxn = startTestTxn(t.far, \"P1 far\");\n const localTxn = startTestTxn(t.local, \"P1 local\");\n\n // Far imports schema and pushes (triggers semantic rebase path on local)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"far import schema v01\");\n\n // Local imports schema to ensure it takes the semantic rebase code path\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Hook into onRebaseTxnBegin to attempt a schema import during rebase\n let importErrorDuringRebase: Error | undefined;\n t.local.txns.rebaser.onRebaseTxnBegin.addOnce(async () => {\n try {\n // This import should fail: importing schemas while rebasing is not allowed\n await t!.local.importSchemaStrings([TestIModel.schemas.v01x00x02AddPropD2]);\n } catch (e: any) {\n importErrorDuringRebase = e;\n }\n });\n\n // Pull triggers the rebase which fires the hook\n try {\n await pullChanges(localTxn);\n } catch {\n // rebase might throw due to the bad import inside; that's acceptable\n }\n\n chai.expect(importErrorDuringRebase).to.not.be.undefined, \"Schema import during rebase should throw\";\n chai.expect(importErrorDuringRebase?.message ?? \"\").to.include(\"rebasing\", \"Error message should mention rebasing\");\n });\n\n it(\"P3: after a failed rebase, briefcase is not stuck and remains usable\", async () => {\n // If a rebase fails (e.g., incompatible schema), the briefcase should remain recoverable.\n // This test verifies the briefcase stays open and queryable after the failed pull.\n t = await TestIModel.initialize(\"P3RecoveryAfterFailedRebase\");\n let farTxn = startTestTxn(t.far, \"P3 far\");\n let localTxn = startTestTxn(t.local, \"P3 local\");\n\n // Create shared element, push\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n t.insertElement(farTxn, \"TestDomain:C\", { propA: \"initial_a\", propC: \"initial_c\" });\n farTxn.saveChanges(\"create element\");\n await pushChanges(farTxn, \"create element\");\n farTxn = startTestTxn(t.far, \"P3 far 2\");\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"P3 local 2\");\n\n // Far imports schema with PropC2 as int (will cause conflict with local's string PropC2)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"far import v01 PropC2 string\");\n\n // Local imports incompatible schema (PropC2 as int, higher version → will conflict with far's string)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropC2Incompatible]);\n\n // First pull attempt: should fail with \"ECSchema Upgrade failed\"\n await chai.expect(pullChanges(localTxn)).to.be.rejectedWith(\"ECSchema Upgrade failed\");\n\n // Briefcase should still be openable and queryable after failure\n // (BriefcaseManager should have rolled back the failed rebase)\n const schemaAfterFailure = t.local.getSchemaProps(\"TestDomain\");\n // Schema version is unclear after abort, but the DB should still be functional\n chai.expect(schemaAfterFailure, \"Schema query should succeed after failed rebase\").to.not.be.undefined;\n\n // The briefcase is still open and the DB is usable\n chai.expect(t.local.isOpen, \"Briefcase should still be open after failed rebase\").to.be.true;\n });\n\n it(\"P4: a second local schema import succeeds even when semantic rebase state folders already exist\", async () => {\n // Tests that semantic rebase state folders do not block further local schema imports.\n // After a schema import + pull that creates rebase folders, a second schema import on local\n // must still go through cleanly (the semantic rebase folders should NOT block a new import).\n t = await TestIModel.initialize(\"P4SecondImportAfterRebaseState\");\n let farTxn = startTestTxn(t.far, \"P4 far\");\n let localTxn = startTestTxn(t.local, \"P4 local\");\n\n // Far pushes data change\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"initial_a\", propC: \"initial_c\" });\n farTxn.saveChanges(\"create element\");\n await pushChanges(farTxn, \"create element\");\n farTxn = startTestTxn(t.far, \"P4 far 2\");\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"P4 local 2\");\n\n // Far pushes another data update\n await t.far.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(farTxn, elementId, { propA: \"far_updated_a\" });\n farTxn.saveChanges(\"far update\");\n await pushChanges(farTxn, \"far update element\");\n\n // Local imports schema v01\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n const firstSchemaTxnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(firstSchemaTxnProps).to.not.be.undefined;\n chai.expect(t.checkIfFolderExists(t.local, firstSchemaTxnProps!.id, true)).to.be.true;\n\n // Local pulls (rebase: local schema onto far data)\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"P4 local after pull\");\n\n // Schema folder should persist (local schema v01 is still pending push)\n chai.expect(t.checkIfFolderExists(t.local, firstSchemaTxnProps!.id, true)).to.be.true;\n\n // Now local wants to import schema v02 (further upgrade) — this should succeed\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n const secondSchemaTxnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(secondSchemaTxnProps).to.not.be.undefined;\n chai.expect(t.checkIfFolderExists(t.local, secondSchemaTxnProps!.id, true)).to.be.true;\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Local should be at v02 after second schema import\");\n });\n});\n\n/**\n * Complex insert-update-delete sequences.\n * Tests scenarios where local txns contain a mix of insert, update, and delete operations\n * that need to be correctly captured and reinstated during semantic rebase.\n */\ndescribe(\"Semantic Rebase - Complex Insert-Update-Delete Sequences\", function (this: Suite) {\n this.timeout(90000);\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n it(\"O1: local insert → update → delete of same element in three txns; incoming transforming schema → element stays deleted\", async () => {\n // Sequence: local inserts elem, updates it, then deletes it — all before pulling.\n // Incoming: transforming schema change.\n // Expected: element remains deleted (all three local txns reinstated correctly).\n t = await TestIModel.initialize(\"O1InsertUpdateDeleteSequence\");\n const farTxn = startTestTxn(t.far, \"O1 far\");\n const localTxn = startTestTxn(t.local, \"O1 local\");\n\n // Far imports transforming schema and pushes\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n await pushChanges(farTxn, \"far import transforming schema\");\n\n // Local: txn1 - insert element\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const tempElementId = t.insertElement(localTxn, \"TestDomain:C\", { propA: \"temp_a\", propC: \"temp_c\" });\n localTxn.saveChanges(\"local txn1 insert temp element\");\n\n // Local: txn2 - update the element\n t.updateElement(localTxn, tempElementId, { propA: \"temp_updated_a\" });\n localTxn.saveChanges(\"local txn2 update temp element\");\n\n // Local: txn3 - delete the element\n localTxn.deleteElement(tempElementId);\n localTxn.saveChanges(\"local txn3 delete temp element\");\n\n // Local pulls: three local txns (insert+update+delete) rebased on top of schema transform\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n // Element should be gone (last operation was delete)\n chai.expect(() => t!.getElementProps(t!.local, tempElementId)).to.throw(`element not found`, \"Element should be deleted after rebase\");\n\n // Schema should be at v02\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be at v02 after rebase\");\n });\n\n it(\"O2: local insert + delete of one element, plus insert + update of another → incoming schema → both correct\", async () => {\n t = await TestIModel.initialize(\"O2InsertDeleteInsertUpdate\");\n const farTxn = startTestTxn(t.far, \"O2 far\");\n const localTxn = startTestTxn(t.local, \"O2 local\");\n\n // Far imports trivial schema, pushes\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"far trivial schema import\");\n\n // Local: txn1 - insert temporary element (will be deleted) + persistent element\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const tempId = t.insertElement(localTxn, \"TestDomain:C\", { propA: \"temp_a\", propC: \"temp_c\" });\n const persistId = t.insertElement(localTxn, \"TestDomain:D\", { propA: \"persist_a\", propD: \"persist_d\" });\n localTxn.saveChanges(\"local txn1 insert two elements\");\n\n // Local: txn2 - update persistent element\n t.updateElement(localTxn, persistId, { propA: \"persist_updated_a\" });\n localTxn.saveChanges(\"local txn2 update persist element\");\n\n // Local: txn3 - delete temporary element\n localTxn.deleteElement(tempId);\n localTxn.saveChanges(\"local txn3 delete temp element\");\n\n // Local pulls: all three txns rebased on top of far's trivial schema\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n // Temp element should be gone\n chai.expect(() => t!.getElementProps(t!.local, tempId)).to.throw(`element not found`, \"Element should be deleted after rebase\");\n\n // Persist element should have the update\n const persistElem = t.getElementProps(t.local, persistId);\n chai.expect(persistElem.propA).to.equal(\"persist_updated_a\", \"Persist element propA should be updated\");\n chai.expect(persistElem.propD).to.equal(\"persist_d\", \"Persist element propD should be preserved\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be at v01\");\n });\n\n it(\"O3: schema txn sandwiched between data txns; incoming data change → all local operations preserved in correct order\", async () => {\n // Pattern: local txn1 (data) → txn2 (schema) → txn3 (data using new schema property)\n // Incoming: far has a data change on a different element.\n // Expected: txn1 data, schema, and txn3 data all reinstated correctly.\n t = await TestIModel.initialize(\"O3SchemaSandwichedBetweenData\");\n let farTxn = startTestTxn(t.far, \"O3 far\");\n let localTxn = startTestTxn(t.local, \"O3 local\");\n\n // Create shared elements on far and push; both pull\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const sharedId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"shared_a\", propC: \"shared_c\" });\n farTxn.saveChanges(\"create shared element\");\n await pushChanges(farTxn, \"create shared element\");\n farTxn = startTestTxn(t.far, \"O3 far 2\");\n\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"O3 local 2\");\n\n // Far updates shared element and pushes (data-only incoming)\n await t.far.locks.acquireLocks({ exclusive: sharedId });\n t.updateElement(farTxn, sharedId, { propC: \"far_updated_c\" });\n farTxn.saveChanges(\"far update shared element\");\n await pushChanges(farTxn, \"far data update\");\n\n // Local txn1: insert new element\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const newId1 = t.insertElement(localTxn, \"TestDomain:C\", { propA: \"new_a\", propC: \"new_c\" });\n localTxn.saveChanges(\"local txn3 insert element with PropC2\");\n\n // Local txn2: import schema (adds PropC2)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Local txn3: insert new element using the new PropC2 property\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const newId2 = t.insertElement(localTxn, \"TestDomain:C\", { propA: \"new_a\", propC: \"new_c\", propC2: \"new_c2_value\" });\n localTxn.saveChanges(\"local txn3 insert element with PropC2\");\n\n // Local pulls: txn1+schema+txn3 rebased on top of far's data update\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n // Shared element should have far's propC update\n const sharedElem = t.getElementProps(t.local, sharedId);\n chai.expect(sharedElem.propA).to.equal(\"shared_a\", \"Initial propA update should be preserved\");\n chai.expect(sharedElem.propC).to.equal(\"far_updated_c\", \"Far propC update should be applied\");\n\n // Two New element with PropC2 should exist\n const newElem1 = t.getElementProps(t.local, newId1);\n chai.expect(newElem1.propA).to.equal(\"new_a\", \"New element propA should be preserved\");\n chai.expect(newElem1.propC).to.equal(\"new_c\", \"New element propC should be preserved through schema rebase\");\n\n const newElem2 = t.getElementProps(t.local, newId2);\n chai.expect(newElem2.propA).to.equal(\"new_a\", \"New element propA should be preserved\");\n chai.expect(newElem2.propC2).to.equal(\"new_c2_value\", \"New element PropC2 should be preserved through schema rebase\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be at v01\");\n });\n\n it(\"O4: five local data transactions each touching a different element; incoming transforming schema → all five preserved\", async () => {\n // Stress-tests the capturePatchInstances + reinstatement path with 5 separate data txns.\n t = await TestIModel.initialize(\"O4FiveDataTxnsTransformingSchema\");\n let farTxn = startTestTxn(t.far, \"O4 far\");\n let localTxn = startTestTxn(t.local, \"O4 local\");\n\n // Create five elements on far and push; both pull\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const ids: Id64String[] = [];\n for (let i = 0; i < 5; i++) {\n ids.push(t.insertElement(farTxn, \"TestDomain:C\", { propA: `initial_a_${i}`, propC: `initial_c_${i}` }));\n }\n farTxn.saveChanges(\"create five elements\");\n await pushChanges(farTxn, \"create five elements\");\n farTxn = startTestTxn(t.far, \"O4 far 2\");\n\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"O4 local 2\");\n\n // Far imports transforming schema (moves PropC to A) and pushes\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n await pushChanges(farTxn, \"far transforming schema\");\n\n // Local makes five separate data txns, one per element\n for (let i = 0; i < 5; i++) {\n await t.local.locks.acquireLocks({ exclusive: ids[i] });\n t.updateElement(localTxn, ids[i], { propA: `local_updated_a_${i}`, propC: `local_updated_c_${i}` });\n localTxn.saveChanges(`local txn${i + 1} update element ${i}`);\n }\n\n // Local pulls: all five data txns rebased on top of transforming schema\n await pullChanges(localTxn);\n t.local.clearCaches();\n\n // All five elements should have their local updates preserved\n for (let i = 0; i < 5; i++) {\n const elem = t.getElementProps(t.local, ids[i]);\n chai.expect(elem.propA).to.equal(`local_updated_a_${i}`, `Element ${i} propA should be preserved`);\n chai.expect(elem.propC).to.equal(`local_updated_c_${i}`, `Element ${i} propC should be preserved after transform`);\n }\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be at v02 after transforming rebase\");\n });\n});\n\n/**\n * Cleanup and folder lifecycle edge cases.\n * Tests that rebase folder state is correctly managed in unusual lifecycle scenarios.\n */\ndescribe(\"Semantic Rebase - Cleanup and Folder Lifecycle\", function (this: Suite) {\n this.timeout(90000);\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n it(\"M1: schema folder cleaned up on push; subsequent pull creates no leftover folders\", async () => {\n t = await TestIModel.initialize(\"M1SchemaFolderCleanupOnPush\");\n let farTxn = startTestTxn(t.far, \"M1 far\");\n let localTxn = startTestTxn(t.local, \"M1 local\");\n\n // Far pushes data\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"initial_a\", propC: \"initial_c\" });\n farTxn.saveChanges(\"far create element\");\n await pushChanges(farTxn, \"far create element\");\n farTxn = startTestTxn(t.far, \"M1 far 2\");\n\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"M1 local 2\");\n\n // Far pushes another update\n await t.far.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(farTxn, elementId, { propA: \"far_updated_a\" });\n farTxn.saveChanges(\"far update element\");\n await pushChanges(farTxn, \"far update element\");\n\n // Local imports schema (creates schema folder)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n const schemaTxnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(schemaTxnProps).to.not.be.undefined;\n chai.expect(t.checkIfFolderExists(t.local, schemaTxnProps!.id, true)).to.be.true;\n\n // Local pulls (rebase: local schema onto far's data update)\n await pullChanges(localTxn);\n\n // Schema folder should still exist (local schema wins and is pending push)\n chai.expect(t.checkIfFolderExists(t.local, schemaTxnProps!.id, true)).to.be.true;\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.true;\n\n // Local pushes: all rebase folders should be cleaned up\n localTxn = startTestTxn(t.local, \"M1 local after pull\");\n await pushChanges(localTxn, \"local push schema\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false;\n // Schema folder for the pushed txn is now gone\n chai.expect(t.checkIfFolderExists(t.local, schemaTxnProps!.id, true)).to.be.false;\n\n // Pull again (nothing new): no new folders should appear\n localTxn = startTestTxn(t.local, \"M1 local after push\");\n await pullChanges(localTxn);\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false;\n });\n\n it(\"M3: multiple successive push/pull cycles preserve rebase folder invariants throughout\", async () => {\n // Cycle 1: local schema → pull (no-op schema) → push → verify clean\n // Cycle 2: far schema → local data → pull (local data rebased onto far schema) → push → verify clean\n t = await TestIModel.initialize(\"M3SuccessivePushPullCycles\");\n let farTxn = startTestTxn(t.far, \"M3 far\");\n let localTxn = startTestTxn(t.local, \"M3 local\");\n\n // --- Cycle 1: Local schema, nothing on far ---\n // Local imports v01, pulls (nothing incoming), pushes\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n const cycle1TxnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(t.checkIfFolderExists(t.local, cycle1TxnProps!.id, true)).to.be.true;\n\n await pullChanges(localTxn); // nothing incoming → no rebase\n\n chai.expect(t.checkIfFolderExists(t.local, cycle1TxnProps!.id, true)).to.be.true; // still pending push\n\n localTxn = startTestTxn(t.local, \"M3 local after cycle1 pull\");\n await pushChanges(localTxn, \"local push schema v01\");\n\n chai.expect(t.checkIfFolderExists(t.local, cycle1TxnProps!.id, true)).to.be.false; // cleaned on push\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false;\n\n // --- Cycle 2: Far pushes schema v02, local creates data element ---\n await pullChanges(farTxn); // far pulls v01\n farTxn = startTestTxn(t.far, \"M3 far 2\");\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n await pushChanges(farTxn, \"far push schema v02\");\n\n localTxn = startTestTxn(t.local, \"M3 local cycle2\");\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const cycle2ElemId = t.insertElement(localTxn, \"TestDomain:C\", { propA: \"cycle2_a\", propC: \"cycle2_c\" });\n localTxn.saveChanges(\"local create cycle2 element\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // data-only local, schema incoming\n // Actually because far has a schema change incoming, semantic rebase WILL be used here\n // The data folder will be created on the fly and removed after rebase\n await pullChanges(localTxn);\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // data folder removed after rebase\n\n t.local.clearCaches();\n const cycle2Elem = t.getElementProps(t.local, cycle2ElemId);\n chai.expect(cycle2Elem.propA).to.equal(\"cycle2_a\", \"Cycle 2 element should be preserved\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be at v02 after cycle 2\");\n });\n\n});\n\ndescribe(\"Semantic Rebase - Multi-Pull Verification\", function (this: Suite) {\n this.timeout(120000);\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n // ──────────────────────────────────────────────────────────────────────────\n // R2: Three consecutive pulls, each triggering rebase through escalating schema\n // changes (trivial → trivial → transforming).\n // Full ECSql snapshot taken before and after every pull.\n // ──────────────────────────────────────────────────────────────────────────\n\n it(\"R2: three consecutive pulls through escalating schema changes; full ECSql snapshot after each\", async () => {\n t = await TestIModel.initialize(\"R2ThreePullsEscalatingSchema\");\n let farTxn = startTestTxn(t.far, \"R2 far\");\n let localTxn = startTestTxn(t.local, \"R2 local\");\n\n // ── Phase 0: shared setup ─────────────────────────────────────────────────\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const c1Id = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"c1_a_init\", propC: \"c1_c_init\" });\n const c2Id = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"c2_a_init\", propC: \"c2_c_init\" });\n const d1Id = t.insertElement(farTxn, \"TestDomain:D\", { propA: \"d1_a_init\", propD: \"d1_d_init\" });\n farTxn.saveChanges(\"create three shared elements\");\n await pushChanges(farTxn, \"create shared elements\");\n farTxn = startTestTxn(t.far, \"R2 far 2\");\n\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"R2 local 2\");\n\n // ── Round 1: far: schema v01 (PropC2) + update c1; local: insert r1Elem ──\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await t.far.locks.acquireLocks({ exclusive: c1Id });\n t.updateElement(farTxn, c1Id, { propA: \"c1_a_r1\" });\n farTxn.saveChanges(\"far r1 update c1\");\n await pushChanges(farTxn, \"R2 far round1\");\n farTxn = startTestTxn(t.far, \"R2 far 3\");\n\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const r1ElemId = t.insertElement(localTxn, \"TestDomain:C\", { propA: \"r1_a\", propC: \"r1_c\" });\n localTxn.saveChanges(\"local r1 insert r1Elem\");\n\n // Pull #1\n await pullChanges(localTxn);\n t.local.clearCaches({ instanceCachesOnly: true });\n\n // c1: far's propA update applied; propC unchanged\n const c1After1 = t.getElementProps(t.local, c1Id);\n chai.expect(c1After1.propA).to.equal(\"c1_a_r1\", \"c1 propA should be updated by far after pull #1\");\n chai.expect(c1After1.propC).to.equal(\"c1_c_init\", \"c1 propC should be unchanged after pull #1\");\n // c2: unchanged\n const c2After1 = t.getElementProps(t.local, c2Id);\n chai.expect(c2After1.propA).to.equal(\"c2_a_init\", \"c2 propA should be unchanged after pull #1\");\n chai.expect(c2After1.propC).to.equal(\"c2_c_init\", \"c2 propC should be unchanged after pull #1\");\n // r1Elem: insert preserved with same ECInstanceId\n const r1After1 = t.getElementProps(t.local, r1ElemId);\n chai.expect(r1After1.propA).to.equal(\"r1_a\", \"r1Elem propA should be preserved after pull #1 rebase\");\n chai.expect(r1After1.propC).to.equal(\"r1_c\", \"r1Elem propC should be preserved after pull #1 rebase\");\n chai.expect(r1After1.id).to.equal(r1ElemId, \"r1ElemId ECInstanceId must be stable after pull #1\");\n // d1: unchanged\n const d1After1 = t.getElementProps(t.local, d1Id);\n chai.expect(d1After1.propA).to.equal(\"d1_a_init\", \"d1 propA should be unchanged after pull #1\");\n chai.expect(d1After1.propD).to.equal(\"d1_d_init\", \"d1 propD should be unchanged after pull #1\");\n chai.expect(t.local.getSchemaProps(\"TestDomain\").version).to.equal(\"01.00.01\", \"Schema v01 after pull #1\");\n\n // ── Round 2: far: schema v02 (PropD2) + update d1; local: update r1Elem ─\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n await t.far.locks.acquireLocks({ exclusive: d1Id });\n t.updateElement(farTxn, d1Id, { propA: \"d1_a_r2\" });\n farTxn.saveChanges(\"far r2 update d1\");\n await pushChanges(farTxn, \"R2 far round2\");\n farTxn = startTestTxn(t.far, \"R2 far 4\");\n\n localTxn = startTestTxn(t.local, \"R2 local r2 update\");\n await t.local.locks.acquireLocks({ exclusive: r1ElemId });\n t.updateElement(localTxn, r1ElemId, { propA: \"r1_a_updated\" });\n localTxn.saveChanges(\"local r2 update r1Elem\");\n\n // Pull #2\n await pullChanges(localTxn);\n t.local.clearCaches({ instanceCachesOnly: true });\n\n // c1: propA from pull #1; unchanged this round\n const c1After2 = t.getElementProps(t.local, c1Id);\n chai.expect(c1After2.propA).to.equal(\"c1_a_r1\", \"c1 propA should remain from pull #1 after pull #2\");\n chai.expect(c1After2.propC).to.equal(\"c1_c_init\", \"c1 propC should be unchanged after pull #2\");\n // c2: unchanged\n const c2After2 = t.getElementProps(t.local, c2Id);\n chai.expect(c2After2.propA).to.equal(\"c2_a_init\", \"c2 propA should be unchanged after pull #2\");\n // r1Elem: propA update must survive rebase\n const r1After2 = t.getElementProps(t.local, r1ElemId);\n chai.expect(r1After2.propA).to.equal(\"r1_a_updated\", \"r1Elem propA update should survive pull #2 rebase\");\n chai.expect(r1After2.propC).to.equal(\"r1_c\", \"r1Elem propC should be unchanged after pull #2 rebase\");\n chai.expect(r1After2.id).to.equal(r1ElemId, \"r1ElemId ECInstanceId must be stable after pull #2\");\n // d1: far's propA update applied\n const d1After2 = t.getElementProps(t.local, d1Id);\n chai.expect(d1After2.propA).to.equal(\"d1_a_r2\", \"d1 propA should be updated by far after pull #2\");\n chai.expect(d1After2.propD).to.equal(\"d1_d_init\", \"d1 propD should be unchanged after pull #2\");\n chai.expect(d1After2.id).to.equal(d1Id, \"d1Id ECInstanceId must be stable after pull #2\");\n chai.expect(t.local.getSchemaProps(\"TestDomain\").version).to.equal(\"01.00.02\", \"Schema v02 after pull #2\");\n\n // ── Round 3: far: schema v03 (transforming: moves PropC to A) + update c2;\n // local: insert r3Elem ──────────────────────────────────────────\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x03MovePropCAndD]);\n await t.far.locks.acquireLocks({ exclusive: c2Id });\n t.updateElement(farTxn, c2Id, { propA: \"c2_a_r3\" });\n farTxn.saveChanges(\"far r3 update c2\");\n await pushChanges(farTxn, \"R2 far round3\");\n\n localTxn = startTestTxn(t.local, \"R2 local r3 insert\");\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const r3ElemId = t.insertElement(localTxn, \"TestDomain:D\", { propA: \"r3_a\" });\n localTxn.saveChanges(\"local r3 insert r3Elem\");\n\n // Pull #3 — transforming schema rebase\n await pullChanges(localTxn);\n t.local.clearCaches({ instanceCachesOnly: true });\n\n // c1: propA from pull #1; PropC moved to A so query it as propC still accessible via A\n const c1After3 = t.getElementProps(t.local, c1Id);\n chai.expect(c1After3.propA).to.equal(\"c1_a_r1\", \"c1 propA should remain from pull #1 after pull #3\");\n // c2: far's propA update from round 3\n const c2After3 = t.getElementProps(t.local, c2Id);\n chai.expect(c2After3.propA).to.equal(\"c2_a_r3\", \"c2 propA should be updated by far after pull #3\");\n // r1Elem: propA update from round 2 must survive transforming rebase\n const r1After3 = t.getElementProps(t.local, r1ElemId);\n chai.expect(r1After3.propA).to.equal(\"r1_a_updated\", \"r1Elem propA update should survive transforming pull #3 rebase\");\n chai.expect(r1After3.id).to.equal(r1ElemId, \"r1ElemId ECInstanceId must be stable after pull #3\");\n // d1: propA from round 2\n const d1After3 = t.getElementProps(t.local, d1Id);\n chai.expect(d1After3.propA).to.equal(\"d1_a_r2\", \"d1 propA should remain from pull #2 after pull #3\");\n chai.expect(d1After3.id).to.equal(d1Id, \"d1Id ECInstanceId must be stable after pull #3\");\n // r3Elem: local insert preserved\n const r3After3 = t.getElementProps(t.local, r3ElemId);\n chai.expect(r3After3.propA).to.equal(\"r3_a\", \"r3Elem propA should be preserved after pull #3 rebase\");\n chai.expect(r3After3.id).to.equal(r3ElemId, \"r3ElemId ECInstanceId must be stable after pull #3\");\n\n chai.expect(t.local.getSchemaProps(\"TestDomain\").version).to.equal(\"01.00.03\", \"Schema v03 (MovePropCAndD) after pull #3\");\n });\n\n // ──────────────────────────────────────────────────────────────────────────\n // R3: Multi-pull with insert, update, and delete in different rounds.\n // Two pulls each rebase. Element lifecycle verified at every stage with\n // ECSqlReader (ECInstanceId, className, domain props).\n // ──────────────────────────────────────────────────────────────────────────\n\n it(\"R3: two pulls with insert/update/delete across rounds; element lifecycle verified\", async () => {\n t = await TestIModel.initialize(\"R3MultiPullInsertUpdateDelete\");\n let farTxn = startTestTxn(t.far, \"R3 far\");\n let localTxn = startTestTxn(t.local, \"R3 local\");\n\n // ── Phase 0: shared elements ──────────────────────────────────────────────\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const sharedC = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"sc_a_init\", propC: \"sc_c_init\" });\n const sharedD = t.insertElement(farTxn, \"TestDomain:D\", { propA: \"sd_a_init\", propD: \"sd_d_init\" });\n farTxn.saveChanges(\"create shared elements\");\n await pushChanges(farTxn, \"shared elements\");\n farTxn = startTestTxn(t.far, \"R3 far 2\");\n\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"R3 local 2\");\n\n // ── Round 1: far: schema v01 + update sharedC.propA ──────────────────────\n // local: insert ephemeral C + insert persistent D + delete ephemeral\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await t.far.locks.acquireLocks({ exclusive: sharedC });\n t.updateElement(farTxn, sharedC, { propA: \"sc_a_r1\" });\n farTxn.saveChanges(\"far r1 update sharedC\");\n await pushChanges(farTxn, \"R3 far round1\");\n farTxn = startTestTxn(t.far, \"R3 far 3\");\n\n // Local txn #1: insert ephemeral element (will be deleted before pull #1)\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const ephemeralId = t.insertElement(localTxn, \"TestDomain:C\", { propA: \"eph_a\", propC: \"eph_c\" });\n localTxn.saveChanges(\"local r1 insert ephemeral\");\n\n // Local txn #2: insert persistent D element\n const persistDId = t.insertElement(localTxn, \"TestDomain:D\", { propA: \"pd_a_init\", propD: \"pd_d_init\" });\n localTxn.saveChanges(\"local r1 insert persistD\");\n\n // Local txn #3: delete the ephemeral element\n localTxn.deleteElement(ephemeralId);\n localTxn.saveChanges(\"local r1 delete ephemeral\");\n\n // Pull #1: rebase insert-persistD + delete-ephemeral txns onto incoming schema v01 + sharedC update\n await pullChanges(localTxn);\n chai.expect(() => t!.getElementProps(t!.local, ephemeralId)).to.throw(`element not found`, \"Ephemeral element should be deleted after pull #1\");\n const elementProps = t.getElementProps(t.local, persistDId);\n chai.expect(elementProps.propA).to.equal(\"pd_a_init\", \"Persistent D propA should be preserved after pull #1\");\n chai.expect(elementProps.propD).to.equal(\"pd_d_init\", \"Persistent D propD should be preserved after pull #1\");\n const sharedCAfter1 = t.getElementProps(t.local, sharedC);\n chai.expect(sharedCAfter1.propA).to.equal(\"sc_a_r1\", \"sharedC propA should be updated by far after pull #1\");\n chai.expect(sharedCAfter1.propC).to.equal(\"sc_c_init\", \"sharedC propC should be unchanged after pull #1\");\n chai.expect(sharedCAfter1.propC2).to.be.undefined;\n const sharedDAfter1 = t.getElementProps(t.local, sharedD);\n chai.expect(sharedDAfter1.propA).to.equal(\"sd_a_init\", \"sharedD propA should be unchanged after pull #1\");\n chai.expect(sharedDAfter1.propD).to.equal(\"sd_d_init\", \"sharedD propD should be unchanged after pull #1\");\n });\n\n // ──────────────────────────────────────────────────────────────────────────\n // R4: Three consecutive pulls where local never pushes.\n // Each round: local makes multiple data txns, far pushes a schema change.\n // Complete ECSql verification of all elements after all three pulls.\n // ──────────────────────────────────────────────────────────────────────────\n\n it(\"R4: three pulls without push; local accumulates txns; all elements verified after each\", async () => {\n t = await TestIModel.initialize(\"R4ThreePullsNoPush\");\n let farTxn = startTestTxn(t.far, \"R4 far\");\n let localTxn = startTestTxn(t.local, \"R4 local\");\n\n // ── Phase 0: create 2 C elements and 1 D element on far, both pull ────────\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const baseC1 = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"bc1_a\", propC: \"bc1_c\" });\n const baseC2 = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"bc2_a\", propC: \"bc2_c\" });\n const baseD1 = t.insertElement(farTxn, \"TestDomain:D\", { propA: \"bd1_a\", propD: \"bd1_d\" });\n farTxn.saveChanges(\"create base elements\");\n await pushChanges(farTxn, \"base elements\");\n farTxn = startTestTxn(t.far, \"R4 far 2\");\n\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"R4 local 2\");\n\n // ── Round 1: far: trivial schema v01 (PropC2 additive)\n // local: TWO data txns – update baseC1 + insert localC1 ─────────\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"R4 far schema v01\");\n farTxn = startTestTxn(t.far, \"R4 far 3\");\n\n // Local data txn A: update baseC1\n await t.local.locks.acquireLocks({ exclusive: baseC1 });\n t.updateElement(localTxn, baseC1, { propA: \"bc1_a_loc_r1\" });\n localTxn.saveChanges(\"local r1 update baseC1\");\n\n // Local data txn B: insert localC1\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localC1 = t.insertElement(localTxn, \"TestDomain:C\", { propA: \"lc1_a_r1\", propC: \"lc1_c_r1\" });\n localTxn.saveChanges(\"local r1 insert localC1\");\n\n // Pull #1\n await pullChanges(localTxn);\n t.local.clearCaches({ instanceCachesOnly: true });\n\n // baseC1: local propA update preserved\n const bc1After1 = t.getElementProps(t.local, baseC1);\n chai.expect(bc1After1.propA).to.equal(\"bc1_a_loc_r1\", \"baseC1 propA update should survive pull #1 rebase\");\n chai.expect(bc1After1.propC).to.equal(\"bc1_c\", \"baseC1 propC should be unchanged after pull #1\");\n // baseC2: unchanged\n const bc2After1 = t.getElementProps(t.local, baseC2);\n chai.expect(bc2After1.propA).to.equal(\"bc2_a\", \"baseC2 propA should be unchanged after pull #1\");\n chai.expect(bc2After1.propC).to.equal(\"bc2_c\", \"baseC2 propC should be unchanged after pull #1\");\n // localC1: insert preserved with same ECInstanceId\n const lc1After1 = t.getElementProps(t.local, localC1);\n chai.expect(lc1After1.propA).to.equal(\"lc1_a_r1\", \"localC1 propA should be preserved after pull #1 rebase\");\n chai.expect(lc1After1.propC).to.equal(\"lc1_c_r1\", \"localC1 propC should be preserved after pull #1 rebase\");\n chai.expect(lc1After1.id).to.equal(localC1, \"localC1 ECInstanceId must be stable after pull #1\");\n // baseD1: unchanged\n const bd1After1 = t.getElementProps(t.local, baseD1);\n chai.expect(bd1After1.propA).to.equal(\"bd1_a\", \"baseD1 propA should be unchanged after pull #1\");\n chai.expect(bd1After1.propD).to.equal(\"bd1_d\", \"baseD1 propD should be unchanged after pull #1\");\n chai.expect(t.local.getSchemaProps(\"TestDomain\").version).to.equal(\"01.00.01\", \"Schema v01 after pull #1\");\n\n // ── Round 2: far: trivial schema v02 (PropD2 additive) + update baseD1\n // local: update localC1.propA + insert localD1 ──────────────────\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n await t.far.locks.acquireLocks({ exclusive: baseD1 });\n t.updateElement(farTxn, baseD1, { propA: \"bd1_a_r2\" });\n farTxn.saveChanges(\"far r2 update baseD1\");\n await pushChanges(farTxn, \"R4 far schema v02 + update baseD1\");\n farTxn = startTestTxn(t.far, \"R4 far 4\");\n\n localTxn = startTestTxn(t.local, \"R4 local r2\");\n await t.local.locks.acquireLocks({ exclusive: localC1 });\n t.updateElement(localTxn, localC1, { propA: \"lc1_a_r2_upd\" });\n localTxn.saveChanges(\"local r2 update localC1\");\n\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localD1 = t.insertElement(localTxn, \"TestDomain:D\", { propA: \"ld1_a_r2\", propD: \"ld1_d_r2\" });\n localTxn.saveChanges(\"local r2 insert localD1\");\n\n // Pull #2\n await pullChanges(localTxn);\n t.local.clearCaches({ instanceCachesOnly: true });\n\n // baseC1: propA from round 1 unchanged\n const bc1After2 = t.getElementProps(t.local, baseC1);\n chai.expect(bc1After2.propA).to.equal(\"bc1_a_loc_r1\", \"baseC1 propA should remain from round 1 after pull #2\");\n chai.expect(bc1After2.propC).to.equal(\"bc1_c\", \"baseC1 propC should be unchanged after pull #2\");\n // localC1: propA update must survive\n const lc1After2 = t.getElementProps(t.local, localC1);\n chai.expect(lc1After2.propA).to.equal(\"lc1_a_r2_upd\", \"localC1 propA update should survive pull #2 rebase\");\n chai.expect(lc1After2.propC).to.equal(\"lc1_c_r1\", \"localC1 propC should be unchanged after pull #2 rebase\");\n chai.expect(lc1After2.id).to.equal(localC1, \"localC1 ECInstanceId must be stable after pull #2\");\n // baseD1: far's propA update applied\n const bd1After2 = t.getElementProps(t.local, baseD1);\n chai.expect(bd1After2.propA).to.equal(\"bd1_a_r2\", \"baseD1 propA should be updated by far after pull #2\");\n // localD1: insert preserved\n const ld1After2 = t.getElementProps(t.local, localD1);\n chai.expect(ld1After2.propA).to.equal(\"ld1_a_r2\", \"localD1 propA should be preserved after pull #2 rebase\");\n chai.expect(ld1After2.propD).to.equal(\"ld1_d_r2\", \"localD1 propD should be preserved after pull #2 rebase\");\n chai.expect(ld1After2.id).to.equal(localD1, \"localD1 ECInstanceId must be stable after pull #2\");\n chai.expect(t.local.getSchemaProps(\"TestDomain\").version).to.equal(\"01.00.02\", \"Schema v02 after pull #2\");\n\n // ── Round 3: far: transforming schema (moves PropC to A) + update baseC2.propA\n // local: delete localC1 only.\n //\n // NOTE: local does NOT attempt to lock baseC2 here. After far exclusively locked\n // baseC2 and pushed (releasing the lock at a newer changeset index),\n // `LocalHub.doesBriefcaseRequirePullBeforeLock` would throw PullIsRequired for any\n // lock request on baseC2 from local (still behind on changesets). The test therefore\n // only exercises local deleting one of its own elements (localC1), which local itself\n // inserted and locked — those locks have lastExclusiveReleaseChangesetIndex = undefined,\n // so no pull is required before re-acquiring them.\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x03MovePropCAndD]);\n await t.far.locks.acquireLocks({ exclusive: baseC2 });\n t.updateElement(farTxn, baseC2, { propA: \"bc2_a_r3\" });\n farTxn.saveChanges(\"far r3 update baseC2\");\n await pushChanges(farTxn, \"R4 far round3\");\n\n localTxn = startTestTxn(t.local, \"R4 local r3 delete\");\n await t.local.locks.acquireLocks({ exclusive: localC1 });\n localTxn.deleteElement(localC1);\n localTxn.saveChanges(\"local r3 delete localC1\");\n\n // Pull #3 — transforming schema rebase\n await pullChanges(localTxn);\n\n // baseC1: propA from round 1 unchanged\n const bc1After3 = t.getElementProps(t.local, baseC1);\n chai.expect(bc1After3.propA).to.equal(\"bc1_a_loc_r1\", \"baseC1 propA should remain from round 1 after pull #3\");\n chai.expect(bc1After3.propC).to.equal(\"bc1_c\", \"baseC1 propC should be unchanged after pull #3\");\n\n // baseC2: propA updated by far in round 3; PropC moved to A but still accessible via propC query\n const bc2After3 = t.getElementProps(t.local, baseC2);\n chai.expect(bc2After3.propA).to.equal(\"bc2_a_r3\", \"baseC2 propA should be changed after pull #3\");\n chai.expect(bc2After3.propC).to.equal(\"bc2_c\", \"baseC2 propC should be unchanged after pull #3\");\n\n // localC1: must be deleted\n chai.expect(() => t!.getElementProps(t!.local, localC1)).to.throw(`element not found`, \"localC1 should be deleted after pull #3\");\n // baseD1: far's propA update applied\n const bd1After3 = t.getElementProps(t.local, baseD1);\n chai.expect(bd1After3.propA).to.equal(\"bd1_a_r2\", \"baseD1 propA should be updated by far after pull #3\");\n // localD1: insert preserved\n const ld1After3 = t.getElementProps(t.local, localD1);\n chai.expect(ld1After3.propA).to.equal(\"ld1_a_r2\", \"localD1 propA should be preserved after pull #3 rebase\");\n chai.expect(ld1After3.propD).to.equal(\"ld1_d_r2\", \"localD1 propD should be preserved after pull #3 rebase\");\n chai.expect(ld1After2.id).to.equal(localD1, \"localD1 ECInstanceId must be stable after pull #3\");\n chai.expect(t.local.getSchemaProps(\"TestDomain\").version).to.equal(\"01.00.03\", \"Schema v02 after pull #3\");\n });\n\n // ──────────────────────────────────────────────────────────────────────────\n // R5: Two consecutive pulls where local never pushes.\n // Each round: local makes multiple data txns, far pushes a schema change.\n // Complete ECSql verification of all elements after all three pulls.\n // ──────────────────────────────────────────────────────────────────────────\n\n it(\"R5: two consecutive pulls each trigger rebase with local changes; ECInstanceId/className/props verified after each\", async () => {\n t = await TestIModel.initialize(\"R5TwoPullsEachRebase\");\n let farTxn = startTestTxn(t.far, \"R5 far\");\n let localTxn = startTestTxn(t.local, \"R5 local\");\n\n // ── Phase 0: create shared elements on far, both pull to sync ────────────\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const cElemId = t.insertElement(farTxn, \"TestDomain:C\", { propA: \"c_a_init\", propC: \"c_c_init\" });\n farTxn.saveChanges(\"create shared elements\");\n await pushChanges(farTxn, \"create shared elements\");\n farTxn = startTestTxn(t.far, \"R5 far 2\");\n\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"R5 local 2\");\n await t.local.locks.acquireLocks({ exclusive: cElemId });\n t.updateElement(localTxn, cElemId, { propC: \"c_c_local\" });\n localTxn.saveChanges(\"local update to cElemId.propC\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"far schema v01\");\n farTxn = startTestTxn(t.far, \"R1 far 3\");\n\n await pullChanges(localTxn);\n t.local.clearCaches({ instanceCachesOnly: true });\n\n const elementAfterSecondPull = t.getElementProps(t.local, cElemId);\n\n chai.expect(elementAfterSecondPull).to.not.be.undefined;\n chai.expect(elementAfterSecondPull!.propC).to.equal(\"c_c_local\", \"Local update to cElemId.propC should survive first pull's rebase\");\n chai.expect(elementAfterSecondPull!.propA).to.equal(\"c_a_init\", \"Far's update to cElemId.propA should be applied after first pull\");\n chai.expect(elementAfterSecondPull!.propC2).to.be.undefined;\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n await pushChanges(farTxn, \"far schema v02\");\n farTxn = startTestTxn(t.far, \"R1 far 4\");\n\n await pullChanges(localTxn);\n t.local.clearCaches({ instanceCachesOnly: true });\n\n const elementAfterThirdPull = t.getElementProps(t.local, cElemId);\n chai.expect(elementAfterThirdPull).to.not.be.undefined;\n chai.expect(elementAfterThirdPull!.propC).to.equal(\"c_c_local\", \"Local update to cElemId.propC should survive second pull's rebase\");\n chai.expect(elementAfterThirdPull!.propA).to.equal(\"c_a_init\", \"Far's update to cElemId.propA should be applied after second pull\");\n chai.expect(elementAfterThirdPull!.propC2).to.be.undefined;\n\n chai.expect(t.local.getSchemaProps(\"TestDomain\").version).to.equal(\"01.00.02\", \"Schema must be v02 after pull #3\");\n });\n});\n\n"]}