{"version":3,"sources":["Static/scripts/Web/ClientMapEditor/clientMap.ajax.ts","Static/scripts/Web/ClientMapEditor/clientMap.utils.ts","Static/scripts/Web/ClientMapEditor/clientMap.vector.ts","Static/scripts/Web/ClientMapEditor/clientMap.viewModel.ts","Static/scripts/Web/ClientMapEditor/clientMap.editor.ts","Static/scripts/Web/ClientMapEditor/clientMap.tools.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAO,UAAU,CAmDhB;AAnDD,WAAO,UAAU;IAAC,IAAA,IAAI,CAmDrB;IAnDiB,WAAA,IAAI;QAErB,IAAM,qBAAqB,GAAG,eAAe,CAAC;QAE9C,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,SAAgB,IAAI;YACnB,IAAI,WAAW;gBACd,OAAO;YACR,WAAW,GAAG,IAAI,CAAC;YAEnB,IAAI,QAAQ,GAA2C;gBACtD,gDAAgD,EAAE,IAAI;gBACtD,oDAAoD,EAAE,IAAI;gBAC1D,iDAAiD,EAAE,IAAI;gBACvD,mDAAmD,EAAE,mBAAmB;gBACxE,6DAA6D,EAAE,IAAI;gBACnE,iDAAiD,EAAE,iBAAiB;gBACpE,2CAA2C,EAAE,IAAI;aACjD,CAAC;YAEF,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QAhBe,SAAI,OAgBnB,CAAA;QAED,SAAsB,mBAAmB;;;;;;4BACpC,WAAW,GAA+B;gCAC7C,SAAS,EAAE,IAAI;gCACf,MAAM,EAAE,EAAE;gCACV,cAAc,EAAE,EAAE;gCAClB,OAAO,EAAE,IAAI;gCACb,UAAU,EAAE,CAAC;gCACb,WAAW,EAAE,CAAC;gCACd,aAAa,EAAE,CAAC;gCAChB,cAAc,EAAE,CAAC;gCACjB,gBAAgB,EAAE,CAAC;gCACnB,YAAY,EAAE,EAAE;gCAChB,aAAa,EAAE,IAAI;gCACnB,oBAAoB,EAAE,CAAC;gCACvB,qBAAqB,EAAE,CAAC;gCACxB,oBAAoB,EAAE,CAAC;gCACvB,qBAAqB,EAAE,CAAC;6BACxB,CAAC;4BAEkB,qBAAM,WAAW,CAAC,OAAO,CAA6B,qBAAqB,CAAC,EAAA;;4BAA5F,aAAa,GAAG,SAA4E;4BAEhG,sBAAO,aAAa,IAAI,WAAW,EAAC;;;;SACpC;QAtBqB,wBAAmB,sBAsBxC,CAAA;QAAA,CAAC;QAEF,SAAsB,iBAAiB,CAAC,CAAuC;;;;gCAC9E,qBAAM,WAAW,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,IAAI,CAAC,EAAA;;4BAAxD,SAAwD,CAAC;;;;;SACzD;QAFqB,sBAAiB,oBAEtC,CAAA;IACF,CAAC,EAnDiB,IAAI,GAAJ,eAAI,KAAJ,eAAI,QAmDrB;AAAD,CAAC,EAnDM,UAAU,KAAV,UAAU,QAmDhB;;;;;;;;;;;;;;;ACnDD,IAAO,UAAU,CAgoKhB;AAhoKD,WAAO,UAAU;IAEb,IAAY,mBAMX;IAND,WAAY,mBAAmB;QAC3B,6DAAQ,CAAA;QACR,2DAAY,CAAA;QACZ,+DAAc,CAAA;QACd,iEAAe,CAAA;QACf,6DAAa,CAAA;IACjB,CAAC,EANW,mBAAmB,GAAnB,8BAAmB,KAAnB,8BAAmB,QAM9B;IAkED,IAAY,cAIX;IAJD,WAAY,cAAc;QACtB,2DAAY,CAAA;QACZ,mDAAQ,CAAA;QACR,2DAAY,CAAA,CAAC,UAAU;IAC3B,CAAC,EAJW,cAAc,GAAd,yBAAc,KAAd,yBAAc,QAIzB;IAED,sBAAsB;IACtB,IAAY,sBAQX;IARD,WAAY,sBAAsB;QAC9B,yEAAW,CAAA;QACX,6EAAS,CAAA;QACT,iFAAW,CAAA;QACX,yFAAe,CAAA;QACf,mGAAoB,CAAA;QACpB,mFAAY,CAAA;QACZ,iFAAW,CAAA;IACf,CAAC,EARW,sBAAsB,GAAtB,iCAAsB,KAAtB,iCAAsB,QAQjC;IAED,yCAAyC;IACzC,IAAY,2BAGX;IAHD,WAAY,2BAA2B;QACnC,+EAAS,CAAA;QACT,6EAAI,CAAA;IACR,CAAC,EAHW,2BAA2B,GAA3B,sCAA2B,KAA3B,sCAA2B,QAGtC;IAuBD;QACI,yBAAY,IAAY,EAAE,KAAc,EAAE,KAAc;YAAxD,iBAUC;YAKD,YAAO,GAAG,IAAI,CAAC;YAdX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;YAExB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEf,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE;gBACrC,OAAO,MAAI,KAAI,CAAC,KAAK,GAAG,EAAE,YAAO,KAAI,CAAC,KAAK,GAAG,EAAE,OAAI,CAAC;YACzD,CAAC,CAAC,CAAC;QACP,CAAC;QAML,sBAAC;IAAD,CAjBA,AAiBC,IAAA;IAjBY,0BAAe,kBAiB3B,CAAA;IAED;QACI,4BAAY,IAAY,EAAE,SAAiB,EAAE,SAAiB;YAU9D,YAAO,GAAG,IAAI,CAAC;YATX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAE3B,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QAKL,yBAAC;IAAD,CAZA,AAYC,IAAA;IAZY,6BAAkB,qBAY9B,CAAA;IAED;QACI,sBAAY,SAAoB,EAAE,IAAY;YAA9C,iBAgBC;YAED,YAAO,GAAmB,EAAE,CAAC;YAC7B,eAAU,GAAW,IAAI,CAAC;YAM1B,YAAO,GAAG,IAAI,CAAC;YACf,aAAQ,GAAG,KAAK,CAAC;YACjB,eAAU,GAAG,KAAK,CAAC;YA1Bf,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAEjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;YAE7B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,EACvC;gBACI,UAAU,EAAE,IAAI;gBAChB,YAAY,EAAE,IAAI;gBAClB,GAAG,EAAE;oBACD,OAAO,MAAI,KAAI,CAAC,KAAK,GAAG,EAAE,YAAO,KAAI,CAAC,KAAK,GAAG,EAAE,OAAI,CAAC;gBACzD,CAAC;aACJ,CAAC,CAAC;QACX,CAAC;QAaD,iCAAU,GAAV,UAAW,IAAY;YACnB,IAAI,CAAC,IAAI;gBACL,OAAO,IAAI,CAAC;YAChB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;oBACf,OAAO,CAAC,CAAC;aAChB;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,6BAAM,GAAN,UAAO,SAAoB,EAAE,QAAsB,EAAE,OAAe;YAChE,IAAI,CAAC,UAAU,GAAG,OAAO,IAAI,IAAI,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QAED,+BAAQ,GAAR,UAAS,SAAoB;YACzB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;QAED,+BAAQ,GAAR,UAAS,SAAoB,EAAE,QAAsB,EAAE,OAAe;QAEtE,CAAC;QAED,iCAAU,GAAV,UAAW,SAAoB;QAE/B,CAAC;QAED,8BAAO,GAAP,UAAQ,EAA0B,EAAE,SAAoB,IAAI,CAAC,EAAC,YAAY;QAC1E,gCAAS,GAAT,UAAU,EAA0B,EAAE,SAAoB,IAAI,CAAC;QAE/D,kCAAW,GAAX,UAAY,EAA0B,EAAE,SAAoB,IAAI,CAAC;QACjE,gCAAS,GAAT,UAAU,OAAe,EAAE,SAAoB,IAAI,CAAC;QACpD,8BAAO,GAAP,UAAQ,OAAe,EAAE,SAAoB,IAAI,CAAC;QAClD,oCAAa,GAAb,UAAc,SAAoB,EAAE,GAAW,IAAI,CAAC;QACxD,mBAAC;IAAD,CAlEA,AAkEC,IAAA;IAlEY,uBAAY,eAkExB,CAAA;IAED;QACI,kBAAY,EAAU,EAAE,OAAmB,EAAE,QAAgB,EAAE,KAAa,EAAE,MAAc;YACxF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC7C,CAAC;QAEM,sBAAa,GAApB,UAAqB,SAAoB,EAAE,EAAW;YAClD,OAAO,IAAI,QAAQ,CAAC,EAAE,IAAI,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,KAAK,EAAE,EAAX,CAAW,CAAC,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9I,CAAC;QAQL,eAAC;IAAD,CAnBA,AAmBC,IAAA;IAnBY,mBAAQ,WAmBpB,CAAA;IAED;QACI,mBAAY,SAAoB,EAAE,IAAwB,EAAE,EAAW,EAAE,KAAc,EAAE,QAAiB;YAA1G,iBAqTC;YAQD,eAAU,GAAY,IAAI,CAAC;YAKnB,WAAM,GAAW,CAAC,CAAC;YAC3B,kBAAa,GAAY,KAAK,CAAC;YAC/B,gBAAW,GAAW,CAAC,CAAC;YACxB,kBAAa,GAAY,IAAI,CAAC;YAC9B,aAAQ,GAAY,IAAI,CAAC;YACzB,oCAAoC;YAC5B,YAAO,GAAY,IAAI,CAAC;YAMhC,YAAO,GAAY,KAAK,CAAC;YAEzB,YAAO,GAAY,KAAK,CAAC;YAEzB,uBAAkB,GAAY,KAAK,CAAC;YACpC,WAAM,GAAY,KAAK,CAAC;YAEhB,SAAI,GAAW,CAAC,CAAC;YAEjB,WAAM,GAAW,CAAC,CAAC;YAG3B,aAAQ,GAAY,KAAK,CAAC;YAC1B,YAAO,GAAY,KAAK,CAAC;YACzB,gBAAW,GAAgB,IAAI,CAAC;YAOhC,wBAAmB,GAAyB,EAAE,CAAC;YAG/C,WAAM,GAAc,IAAI,CAAC;YACzB,aAAQ,GAAgB,EAAE,CAAC;YAE3B,iBAAY,GAAkB,EAAE,CAAC;YACjC,eAAU,GAAkB,EAAE,CAAC;YAC/B,gBAAW,GAAkB,EAAE,CAAC;YAChC,sBAAiB,GAAkB,EAAE,CAAC;YAqBtC,uBAAkB,GAAY,KAAK,CAAC;YAhYhC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YACpC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,MAAM,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC;YACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAE3B,IAAI,QAAQ,KAAK,MAAM,CAAC,gBAAgB,EAAE;gBACtC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE;oBACzB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,aAAa,EACnD;wBACI,GAAG,EAAE,CAAC;wBACN,GAAG,EAAE,EAAE;wBACP,SAAS,EAAE,CAAC;wBACZ,WAAW,EAAE,IAAI;wBACjB,MAAM,EAAE,KAAK;qBAChB,CAAC,IAAI,CAAC,CAAC;iBACf;gBAED,IAAI,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE;oBAC9B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,kBAAkB,EACxD;wBACI,GAAG,EAAE,CAAC;wBACN,GAAG,EAAE,OAAO;wBACZ,eAAe,EAAE,KAAK;wBACtB,MAAM,EAAE,MAAM,CAAC,iBAAiB;wBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;wBACtC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;wBAC5C,EAAE,EAAE,IAAI;qBACX,CAAC,IAAI,KAAK,CAAC;iBACnB;aACJ;YAED,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YAErB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YAEvB,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAC5B;gBACI,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI;gBAChB,GAAG,EAAE;oBACD,OAAO,EAAE,CAAC;gBACd,CAAC;gBACD,GAAG,EAAE,UAAC,CAAC;oBACH,IAAI,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;wBACzC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;oBAC3C,EAAE,GAAG,CAAC,CAAC;oBACP,IAAI,EAAE,IAAI,CAAC,KAAI,CAAC,WAAW;wBACvB,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,KAAI,CAAC,CAAC;gBAClD,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAC5B;gBACI,GAAG,EAAE;oBACD,OAAO,KAAI,CAAC,OAAO,IAAI,KAAI,CAAC,kBAAkB,CAAC;gBACnD,CAAC;gBACD,GAAG,EAAE,UAAC,CAAU;oBACZ,KAAI,CAAC,OAAO,GAAG,CAAC,CAAC;gBACrB,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAC5B;gBACI,GAAG,EAAE;oBACD,OAAO,KAAI,CAAC,OAAO,IAAI,CAAC,KAAI,CAAC,kBAAkB,IAAI,KAAI,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1F,CAAC;gBACD,GAAG,EAAE,UAAC,CAAU;oBACZ,KAAI,CAAC,OAAO,GAAG,CAAC,CAAC;gBACrB,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAC7B;gBACI,GAAG,EAAE;oBACD,IAAI,IAAI,GAAG,KAAI,CAAC,IAAI,CAAC;oBACrB,IAAI,CAAC,IAAI;wBACL,OAAO,EAAE,CAAC;oBACd,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC5B,IAAI,KAAK;wBACL,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAC,EAAsB,IAAK,OAAA,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAvB,CAAuB,CAAC,EAAxE,CAAwE,CAAC,CAAC;oBAClH,OAAO,EAAE,CAAC;gBACd,CAAC;gBACD,GAAG,EAAE,UAAC,OAAmB;oBACrB,IAAI,KAAI,CAAC,WAAW;wBAChB,OAAO;oBAEX,IAAI,IAAI,GAAG,KAAI,CAAC,IAAI,CAAC;oBAErB,IAAI,IAAI,IAAI,OAAO;wBACf,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,UAAU,EAAE,EAAf,CAAe,CAAC,EAA9B,CAA8B,CAAC,CAAC,CAAC;gBAC1E,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;gBAC9B,IAAI,CAAC,KAAI,CAAC,IAAI,IAAI,CAAC,KAAI,CAAC,SAAS;oBAC7B,OAAO,EAAE,CAAC;gBACd,IAAI,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,EACpC,IAAI,GAAG,SAAS,CAAC,aAAa,EAC9B,OAAO,GAAG,KAAI,CAAC,OAAO,EACtB,SAAS,GAAG,SAAS,CAAC,eAAe,EACrC,MAAM,GAAG,KAAI,CAAC,MAAM,CAAC;gBACzB,OAAO,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAA9D,CAA8D,CAAC,EAA7E,CAA6E,CAAC,CAAC;YAC7G,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE;gBACrC,IAAI,CAAC,KAAI,CAAC,IAAI,IAAI,CAAC,KAAI,CAAC,SAAS;oBAC7B,OAAO,IAAI,WAAA,QAAQ,EAAE,CAAC;gBAE1B,IAAI,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,EACpC,OAAO,GAAG,KAAI,CAAC,OAAO,CAAC;gBAE3B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;oBAC3B,OAAO,IAAI,WAAA,QAAQ,EAAE,CAAC;gBAE1B,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,EAChB,SAAS,GAAG,SAAS,CAAC,eAAe,CAAC;gBAE1C,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM;oBACnB,OAAO,IAAI,WAAA,QAAQ,EAAE,CAAC;gBAE1B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;oBACd,OAAO,IAAI,WAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;gBAE/C,OAAO,UAAU,CAAC,4BAA4B,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;gBAC9B,OAAO,WAAA,YAAY,CAAC,WAAW,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EACzB;gBACI,GAAG,EAAE;oBACD,IAAI,CAAC,KAAI,CAAC,IAAI,IAAI,CAAC,KAAI,CAAC,SAAS;wBAC7B,OAAO,WAAA,OAAO,CAAC,IAAI,CAAC;oBACxB,IAAI,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,EACpC,SAAS,GAAG,SAAS,CAAC,eAAe,EACrC,IAAI,GAAG,SAAS,CAAC,aAAa,EAC9B,MAAM,GAAG,KAAI,CAAC,YAAY,CAAC;oBAC/B,OAAO,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACjE,CAAC;gBACD,GAAG,EAAE,UAAC,CAAU;oBACZ,IAAI,CAAC,KAAI,CAAC,IAAI;wBACV,OAAO;oBACX,IAAI,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,EACpC,IAAI,GAAG,SAAS,CAAC,aAAa,CAAC;oBAEnC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAC9C,MAAM,GAAG,WAAA,YAAY,CAAC,WAAW,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EACtD,SAAS,GAAG,WAAA,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;oBAE1G,KAAI,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;oBAE1C,yFAAyF;oBAEzF,uBAAuB;oBACvB,kCAAkC;oBAClC,oBAAoB;oBAEpB,gFAAgF;oBAChF,2BAA2B;oBAC3B,kDAAkD;oBAClD,6CAA6C;oBAC7C,4CAA4C;oBAC5C,uGAAuG;oBACvG,0CAA0C;oBAC1C,oDAAoD;oBACpD,mCAAmC;oBACnC,mBAAmB;oBACnB,eAAe;oBACf,sBAAsB;oBACtB,OAAO;oBACP,GAAG;gBACP,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAC9B;gBACI,GAAG,EAAE;oBACD,OAAO,KAAI,CAAC,IAAI,CAAC;gBACrB,CAAC;gBACD,GAAG,EAAE,UAAC,CAAS;oBACX,IAAI,CAAC,KAAI,CAAC,IAAI;wBACV,OAAO;oBACX,IAAI,EAAE,GAAG,CAAC,GAAG,KAAI,CAAC,IAAI,CAAC;oBACvB,KAAI,CAAC,IAAI,GAAG,CAAC,CAAC;oBACd,IAAI,EAAE,IAAI,CAAC,EAAE;wBACT,IAAI,GAAG,GAAG,KAAI,CAAC,eAAe,EAAE,EAC5B,QAAQ,GAAG,WAAA,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;wBAC1C,IAAI,QAAQ,EAAE;4BACV,IAAI,SAAS,GAAG,WAAA,gBAAgB,CAAC,QAAQ,CAAC,WAAA,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;4BACzE,KAAI,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;4BAE/C,uGAAuG;4BACvG,iDAAiD;4BACjD,qCAAqC;4BACrC,oBAAoB;4BAEpB,gFAAgF;4BAChF,2BAA2B;4BAC3B,kDAAkD;4BAClD,6CAA6C;4BAC7C,kDAAkD;4BAClD,uHAAuH;4BACvH,0CAA0C;4BAC1C,oDAAoD;4BACpD,mCAAmC;4BACnC,mBAAmB;4BACnB,eAAe;4BACf,sBAAsB;4BACtB,OAAO;4BACP,GAAG;yBACN;qBACJ;gBAEL,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAC3B;gBACI,GAAG,EAAE;oBACD,OAAO,KAAI,CAAC,MAAM,CAAC;gBACvB,CAAC;gBACD,GAAG,EAAE,UAAC,CAAS;oBACX,IAAI,CAAC,KAAI,CAAC,IAAI;wBACV,OAAO;oBACX,IAAI,CAAC,GAAG,CAAC,GAAG,KAAI,CAAC,MAAM,CAAC;oBACxB,KAAI,CAAC,MAAM,GAAG,CAAC,CAAC;oBAChB,IAAI,CAAC,IAAI,CAAC,EAAE;wBACR,IAAI,GAAG,GAAG,KAAI,CAAC,eAAe,EAAE,EAC5B,QAAQ,GAAG,WAAA,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;wBAC1C,IAAI,QAAQ,EAAE;4BACV,IAAI,SAAS,GAAG,WAAA,gBAAgB,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAA,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAA,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC7K,KAAI,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;4BAE/C,uGAAuG;4BACvG,iDAAiD;4BACjD,qCAAqC;4BACrC,oBAAoB;4BAEpB,gFAAgF;4BAChF,2BAA2B;4BAC3B,kDAAkD;4BAClD,6CAA6C;4BAC7C,kDAAkD;4BAClD,uHAAuH;4BACvH,0CAA0C;4BAC1C,oDAAoD;4BACpD,mCAAmC;4BACnC,mBAAmB;4BACnB,eAAe;4BACf,sBAAsB;4BACtB,OAAO;4BACP,GAAG;yBACN;qBACJ;gBAEL,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE;gBACpC,IAAI,KAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB;oBACzC,OAAO,WAAA,MAAM,CAAC,WAAW,CAAC,KAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;gBAExD,IAAI,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC;gBACzC,OAAO,WAAA,MAAM,CAAC,WAAW,CAAC,KAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACtF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAC3B;gBACI,GAAG,EAAE;oBACD,OAAO,KAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAI,CAAC,MAAM,CAAC;gBAC/D,CAAC;gBACD,GAAG,EAAE,UAAC,CAAS;oBACX,KAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;oBACrB,IAAI,CAAC,KAAI,CAAC,aAAa;wBACnB,KAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE;gBAClC,IAAI,KAAI,CAAC,mBAAmB,IAAI,KAAI,CAAC,mBAAmB,CAAC,MAAM;oBAC3D,OAAO,KAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,CAAC,EAAE,CAAC,SAAS,EAAb,CAAa,CAAC,CAAC;gBAChE,OAAO,EAA0B,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE;gBAClC,IAAI,KAAI,CAAC,mBAAmB,IAAI,KAAI,CAAC,mBAAmB,CAAC,MAAM;oBAC3D,OAAO,KAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,SAAS,EAAZ,CAAY,CAAC,CAAC;gBAC/D,OAAO,EAA0B,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,2GAA2G;YAC3G,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEhG,gCAAgC;QACpC,CAAC;QAyDD,8BAAU,GAAV;YACI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;gBAC1B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnD,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;aAC1B;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;gBACxB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;aACxB;YACD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;gBACzB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;aACzB;YACD,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;gBAC/B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;aAC/B;QACL,CAAC;QAID,4BAAQ,GAAR,UAAS,OAA+B;YACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QAED,kCAAc,GAAd,UAAe,SAA2B,EAAE,SAAoB,EAAE,GAAiB,EAAE,YAAsB;YACvG,IAAI,CAAC,GAAG;gBACJ,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAEjC,IAAI,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,WAAA,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAvD,CAAuD,CAAC,EAApE,CAAoE,CAAC,CAAC;YAErG,IAAI,UAAU,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,MAAM,GAAG,CAAC,EAAf,CAAe,CAAC,EAAE;gBAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAE/B,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAA,EAAE;oBAC/B,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;gBACjC,CAAC,CAAC,CAAC;gBAEH,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,YAAY,EAAE;oBAC1F,iBAAiB;oBACjB,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,UAAA,GAAG;wBAC/B,IAAI,GAAG,YAAY,SAAS,EAAE;4BAC1B,IAAI,KAAG,GAAG,GAAG,CAAC,eAAe,EAAE,EAC3B,YAAU,GAAG,KAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,WAAA,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAvD,CAAuD,CAAC,EAApE,CAAoE,CAAC,CAAC;4BACrG,IAAI,YAAU,CAAC,MAAM,EAAE;gCACnB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAU,CAAC,CAAC;gCAC9B,GAAG,CAAC,MAAM,EAAE,CAAC;6BAChB;yBACJ;oBACL,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;oBAEZ,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,GAAG,IAAM,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEjG,IAAI,IAAI,CAAC,WAAW;wBAChB,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;iBAC7D;gBAED,IAAI,CAAC,MAAM,EAAE,CAAC;aACjB;QACL,CAAC;QAED,4CAAwB,GAAxB,UAAyB,CAAC;YACtB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB;gBAC/C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACzD,CAAC;QAED,gCAAY,GAAZ,UAAa,CAAC;YACV,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;QAED,gCAAY,GAAZ,UAAa,MAAc;YACvB,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO;YAEX,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAChB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAE1C,IAAI,KAAK;gBACL,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,EAA/E,CAA+E,CAAC,EAA1G,CAA0G,CAAC,CAAC,CAAC;YAE5J,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAA,EAAE;gBAC/B,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,WAAW;gBAChB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;QAED,gCAAY,GAAZ,UAAa,MAAe;YACxB,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO;YAEX,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAChB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAE1C,IAAI,KAAK;gBACL,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAA/D,CAA+D,CAAC,EAA1F,CAA0F,CAAC,CAAC,CAAC;YAE5I,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAA,EAAE;gBAC/B,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,WAAW;gBAChB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;QAED,qBAAqB;QACrB,8BAAU,GAAV,UAAW,OAAe,EAAE,KAAa,EAAE,SAAiB;YAAjB,0BAAA,EAAA,iBAAiB;YACxD,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI;gBAC9B,OAAO,KAAK,CAAC;YACjB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;gBAClD,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,EAChB,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;gBAErB,IAAI,GAAG,IAAI,CAAC;oBACR,SAAS;gBAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC1B,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EACb,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;oBAC7B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;wBAC7E,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;wBAC7E,OAAO,IAAI,CAAC;iBACnB;aACJ;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,+BAAW,GAAX,UAAY,gBAA0B;YAClC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI;gBAC9B,OAAO,EAAE,CAAC;YACd,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAE3B,IAAI,MAAM,GAAgB,EAAE,CAAC;YAE7B,OAAO,CAAC,OAAO,CAAC,UAAA,GAAG;gBACf,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,SAAS,EAAE,EAAd,CAAc,CAAC,CAAC;gBAE3C,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;gBAExB,IAAI,GAAG,IAAI,CAAC;oBACR,OAAO;gBAEX,IAAI,gBAAgB,IAAI,WAAA,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;oBAC/C,MAAM,CAAC,OAAO,EAAE,CAAC;gBAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC1B,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EACd,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;oBAE/B,MAAM,CAAC,IAAI,CAAC,IAAI,WAAA,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;iBACtC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM;gBAC3D,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAA,GAAG;oBAChC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;gBACjD,CAAC,CAAC,CAAC;YAEP,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,mCAAe,GAAf;YACI,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI;gBAC9B,OAAO,EAAE,CAAC;YAEd,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,SAAS,EAAE,EAAd,CAAc,CAAC,EAA7B,CAA6B,CAAC,CAAC;QAClE,CAAC;QAED,6BAAS,GAAT;YACI,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI;gBAC9B,OAAO,EAAE,CAAC;YAEd,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAEpC,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM;gBAC3D,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAA,GAAG;oBAChC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC/C,CAAC,CAAC,CAAC;YAEP,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,+BAAW,GAAX;YACI,OAAO,WAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAqB,CAAC,CAAC;QAC3D,CAAC;QAED,qCAAiB,GAAjB,UAAkB,WAAoB;YAElC,IAAI,WAAW,IAAI,SAAS;gBACxB,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAEtE,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,EAC/B,KAAK,GAAG,WAAA,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,EAC5C,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,EACrB,MAAM,GAAG,WAAA,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EACpC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAE3B,IAAI,MAAM,CAAC,OAAO,IAAI,WAAW,IAAI,CAAC;gBAClC,OAAO,MAAM,CAAC,GAAG,CAAC;YAEtB,MAAM,GAAG,WAAA,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAY,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,IAAI,WAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAA/D,CAA+D,CAAC,EAA5E,CAA4E,CAAC,CAAC,CAAC;YAExI,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,iCAAa,GAAb,UAAc,CAAU;YACpB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,EACtB,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;YAE/C,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO,KAAK,CAAC;YAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACxC,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EACf,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAElC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,IAAI,KAAK,EAAE,EAAE,SAAS;wBAChF,OAAO,IAAI,CAAC;qBACf;oBAED,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,IAAI,KAAK,EAAE,EAAE,SAAS;wBACzG,OAAO,IAAI,CAAC;qBACf;iBACJ;aACJ;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC7D,IAAI,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAvB,CAAuB,CAAC,CAAC;gBAEvG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACxC,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBAEpB,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,IAAI,KAAK,EAAE,EAAE,SAAS;wBAChF,OAAO,IAAI,CAAC;qBACf;iBACJ;aAEJ;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,kCAAc,GAAd;YAAA,iBAaC;YAXG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;gBACtB,UAAU,CAAC;oBACP,IAAI,CAAC,KAAI,CAAC,WAAW,IAAI,CAAC,KAAI,CAAC,QAAQ,IAAI,KAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;wBAC7D,IAAI,WAAW,GAAG,KAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,QAAQ,EAA9B,CAA8B,CAAC,CAAC;wBAC7E,IAAI,WAAW,CAAC,MAAM;4BAClB,WAAW,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAzC,CAAyC,CAAC,CAAC;qBAC3E;gBACL,CAAC,EAAE,CAAC,CAAC,CAAC;aACT;YAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAED,kCAAc,GAAd,UAAe,MAAc;YACzB,IAAI,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,CAAC,EAAE,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,IAAW,CAAC,EAAjF,CAAiF,CAAC,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,EAAE,EAAL,CAAK,CAAC,CAAC,CAAC;QAC7J,CAAC;QAED,uCAAmB,GAAnB,UAAoB,QAAkB;YAElC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,cAAc,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,SAAS,EAC5D,YAAY,GAAG,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,SAAS,EACzD,eAAe,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC;YAEhE,oBAAoB;YACpB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAC5D,IAAI,cAAc,EAAE;oBAChB,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,QAAQ,EAA9B,CAA8B,CAAC,CAAC;oBAC7E,IAAI,WAAW,CAAC,MAAM;wBAClB,WAAW,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,SAAS,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAApC,CAAoC,CAAC,CAAC;iBACtE;gBACD,IAAI,cAAc,IAAI,YAAY,EAAE;oBAChC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,EAAE;wBACpB,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;4BAC9B,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;oBACzC,CAAC,CAAC,CAAC;iBACN;qBAAM,IAAI,eAAe,EAAE;oBACxB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,EAAE;wBACpB,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;4BAC9B,SAAS,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;oBAC9C,CAAC,CAAC,CAAC;iBACN;aACJ;YACD,QAAQ;QACZ,CAAC;QAED,+BAAW,GAAX;YACI,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI;gBAC7B,OAAO;YACX,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAChB,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC9D,OAAO,GAAG,IAAI,CAAC,OAAO,EACtB,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EACnC,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAEjD,IAAI,CAAC,KAAK;gBACN,OAAO;YAEX,oCAAoC;YACpC,2DAA2D;YAC3D,aAAa;YACb,GAAG;YAEH,iDAAiD;YACjD,oCAAoC;YACpC,KAAK;YAEL,IAAI,QAAQ,GAAuB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YAEhL,IAAI,IAAI,GAA2D,IAAI,CAAC;YAExE,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;gBAC7D,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;gBACxB,IAAI,GAA+B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnF,IAAI,CAAC,QAAQ;oBACT,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;gBACzB,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;aAChC;YAED,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE;gBAC1B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;gBACvB,IAAI,CAAC,IAAI;oBACL,IAAI,GAA+B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAEvF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;aAC9B;YAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE;gBAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC5B,IAAI,CAAC,IAAI;oBACL,IAAI,GAAG,EAAE,CAAC;gBACd,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;aAC9B;YAED,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,QAAQ,EAAE;gBACvD,IAAI,CAAC,IAAI;oBACL,IAAI,GAAG,EAAE,CAAC;gBACd,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;gBAC3B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBAEvB,iDAAiD;gBACjD,wCAAwC;gBACxC,KAAK;aACR;YAED,IAAI,IAAI,EAAE;gBACN,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;oBAC1B,IAAI,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC;gBAC3B,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;gBAExB,IAAI,MAAM,EAAE;oBACR,IAAI,IAAI,CAAC,SAAS;wBACd,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,WAAA,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;oBACtF,IAAI,IAAI,CAAC,WAAW;wBAChB,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,WAAA,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAC1F,IAAI,IAAI,CAAC,kBAAkB;wBACvB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;iBACvC;gBAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACzB;QAEL,CAAC;QAED,6BAAS,GAAT,UAAU,CAAkB;YACxB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EACjD;gBACI,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,OAAO;gBACZ,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;gBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;gBACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;gBACjD,EAAE,EAAE,IAAI;aACX,CAAC,CAAC;YAEP,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC;QAED,uCAAmB,GAAnB;YACI,IAAI,SAAS,GAAG,CAAC,CAAC,oBAAoB,CAAC,CAAC,GAAG,EAAE,CAAC;YAC9C,IAAI,QAAQ,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAC;YAC5C,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACvD,CAAC;QAED,4BAAQ,GAAR,UAAS,CAAkB;YACvB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAChD;gBACI,GAAG,EAAE,CAAC,EAAE;gBACR,GAAG,EAAE,EAAE;gBACP,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,KAAK;gBACb,WAAW,EAAE,IAAI;aACpB,CAAC,CAAC;YAEP,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC;QAED,oCAAgB,GAAhB,UAAiB,CAAW;YACxB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;YAEzB,IAAI,IAAI,CAAC,MAAM;gBACX,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACjC,CAAC;QAED,kCAAc,GAAd,UAAe,CAAkB;YAC7B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EACtD;gBACI,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,EAAE;gBACP,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,KAAK;gBACb,WAAW,EAAE,IAAI;aACpB,CAAC,CAAC;YAEP,IAAI,IAAI,CAAC,MAAM;gBACX,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACjC,CAAC;QAED,2BAAO,GAAP,UAAQ,CAAkB;YACtB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC,OAAO;gBACb,GAAG,EAAE,OAAO;gBACZ,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;gBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;gBACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;gBACjD,EAAE,EAAE,IAAI;aACX,CAAC,CAAC;YACP,IAAI,CAAC,GAAG,GAAG,IAAI,WAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,2BAAO,GAAP,UAAQ,CAAkB;YACtB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC,OAAO;gBACb,GAAG,EAAE,OAAO;gBACZ,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;gBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;gBACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;gBACjD,EAAE,EAAE,IAAI;aACX,CAAC,CAAC;YACP,IAAI,CAAC,GAAG,GAAG,IAAI,WAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,6BAAS,GAAT,UAAU,SAAiB,EAAE,KAAa,EAAE,SAAoB,EAAE,CAAkB;YAChF,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAChB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAE1C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,SAAS;gBACxC,OAAO;YAEX,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAC7B,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAC5B,IAAI,GAAG,SAAS,CAAC,aAAa,CAAC;YAEnC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,KAAK,EAAE;gBAC7E,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,EACd,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;gBAE5C,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC5C;oBACI,GAAG,EAAE,CAAC,OAAO;oBACb,GAAG,EAAE,OAAO;oBACZ,eAAe,EAAE,IAAI;oBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;oBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;oBACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;oBACjD,EAAE,EAAE,IAAI;iBACX,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAEb,IAAI,EAAE,EAAE;oBACJ,IAAI,CAAC,GAAG,IAAI,WAAA,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBAEnD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;oBACxD,IAAI,CAAC,MAAM,EAAE,CAAC;iBACjB;aACJ;QAEL,CAAC;QAED,6BAAS,GAAT,UAAU,SAAiB,EAAE,KAAa,EAAE,SAAoB,EAAE,CAAkB;YAChF,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAChB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAE1C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,SAAS;gBACxC,OAAO;YAEX,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAC7B,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAC5B,IAAI,GAAG,SAAS,CAAC,aAAa,CAAC;YAEnC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,KAAK,EAAE;gBAC7E,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,EACd,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;gBAE5C,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC5C;oBACI,GAAG,EAAE,CAAC,OAAO;oBACb,GAAG,EAAE,OAAO;oBACZ,eAAe,EAAE,IAAI;oBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;oBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;oBACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;oBACjD,EAAE,EAAE,IAAI;iBACX,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAEb,IAAI,EAAE,EAAE;oBACJ,IAAI,CAAC,GAAG,IAAI,WAAA,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBAEnD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;oBACxD,IAAI,CAAC,MAAM,EAAE,CAAC;iBACjB;aACJ;QACL,CAAC;QAED,6BAAS,GAAT,UAAU,SAAiB,EAAE,KAAa,EAAE,SAAoB,EAAE,CAAkB;YAChF,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC,OAAO;gBACb,GAAG,EAAE,OAAO;gBACZ,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;gBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;gBACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;gBACjD,EAAE,EAAE,IAAI;aACX,CAAC,CAAC;YAEP,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACpB,CAAC;QAED,8BAAU,GAAV,UAAW,SAAiB,EAAE,KAAa;YACvC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAChB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAE1C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,SAAS;gBACxC,OAAO;YAEX,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAElC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,EAAE;gBAChD,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE;oBACtB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACrB,IAAI,CAAC,MAAM,EAAE,CAAC;iBACjB;qBAAM;oBACH,QAAQ,CAAC,gBAAgB,CAAC,2EAA2E,CAAC,CAAC;iBAC1G;aACJ;QACL,CAAC;QAED,+BAAW,GAAX,UAAY,CAAkB;YAC1B,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC,GAAG;gBACT,GAAG,EAAE,GAAG;gBACR,eAAe,EAAE,IAAI;gBACrB,WAAW,EAAE,IAAI;aACpB,CAAC,CAAC;YACP,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACtB,CAAC;QAED,4BAAQ,GAAR,UAAS,CAAkB;YACvB,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,IAAI;gBACT,GAAG,EAAE,OAAO;gBACZ,eAAe,EAAE,IAAI;gBACrB,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,CAAC,GAAG,GAAG;aACjB,CAAC,CAAC;YACP,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACnB,CAAC;QAED,oCAAgB,GAAhB,UAAiB,MAAc;YAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;gBACrB,OAAO,IAAI,CAAC;YAEhB,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAEnC,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAW,CAAC,EAApE,CAAoE,CAAC,CAAC;YAE9G,IAAI,CAAC,MAAM,CAAC,MAAM;gBACd,OAAO,IAAI,CAAC;iBACX,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBACxB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;YAErB,IAAI,KAAK,GAAc,IAAI,EACvB,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;YAE5B,MAAM,CAAC,OAAO,CAAC,UAAA,EAAE;gBACb,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,CAAC,GAAG,IAAI,EAAE;oBACV,IAAI,GAAG,CAAC,CAAC;oBACT,KAAK,GAAG,EAAE,CAAC;iBACd;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,6BAAS,GAAT,UAAU,IAAY,EAAE,EAAU,EAAE,QAAgB;YAChD,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU;gBACjD,OAAO;YACX,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE;gBACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,UAAA,IAAI;oBAC7B,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC3B,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC/B,IAAI,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI;4BAC3D,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;qBACtC;gBACL,CAAC,CAAC,CAAC;aACN;YAED,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAA,kBAAkB;gBAC/C,IAAI,kBAAkB,CAAC,EAAE,KAAK,QAAQ;oBAClC,kBAAkB,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAC5B,CAAC;QAEc,2BAAiB,GAAhC,UAAiC,GAAa,EAAE,GAAa,EAAE,YAAiC;YAC5F,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,GAAG,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,IAAI,KAAK,GAAG,EAAZ,CAAY,CAAC,EAA7B,CAA6B,CAAC,CAAC;YAC5D,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAxE,CAAwE,CAAC,CAAC,CAAC;QACnJ,CAAC;QAEc,qCAA2B,GAA1C,UAA2C,IAAgB,EAAE,IAAgB,EAAE,YAAiC;YAC5G,OAAO,IAAI,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,IAAI,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,EAAnD,CAAmD,CAAC,EAArE,CAAqE,CAAC,CAAC;QACnG,CAAC;QAED,sCAAkB,GAAlB,UAAmB,SAAoB;YACnC,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,EAC/B,IAAI,GAAG,IAAI,CAAC,IAAI,EAChB,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,EACvB,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC9D,YAAY,GAAG,IAAI,CAAC,YAAY,EAChC,UAAU,GAAG,IAAI,CAAC,UAAU,EAC5B,WAAW,GAAG,IAAI,CAAC,WAAW,EAC9B,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAC1C,iBAAiB,GAAG,CAAC,EACrB,eAAe,GAAG,CAAC,EACnB,gBAAgB,GAAG,CAAC,EACpB,sBAAsB,GAAG,CAAC,CAAC;YAE/B,IAAI,CAAC,KAAK;gBACN,OAAO;YAEX,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;gBACd,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAE9B,IAAI,MAAM,GAAG,CAAC,EAAE;oBACZ,IAAI,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,EAC7C,UAAU,GAAG,CAAC,gBAAgB,IAAI,SAAS,CAAC,UAAU,EACtD,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,MAAM,GAAG,CAAC,EAC7C,WAAW,GAAG,SAAS,CAAC,WAAW,IAAI,MAAM,GAAG,CAAC,EACjD,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAvB,CAAuB,CAAC,CAAC;oBAEjE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE;wBACnD,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;wBACrC,IAAI,IAAI,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;wBAErC,IAAI,UAAU,EAAE;4BACZ,IAAI,WAAW,CAAC,MAAM,IAAI,gBAAgB;gCACtC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;4BACzD,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;4BACrE,gBAAgB,EAAE,CAAC;yBACtB;wBACD,IAAI,SAAS,EAAE;4BACX,IAAI,UAAU,CAAC,MAAM,IAAI,eAAe;gCACpC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;4BACxD,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;4BAChG,eAAe,EAAE,CAAC;yBACrB;wBACD,IAAI,WAAW,EAAE;4BACb,IAAI,YAAY,CAAC,MAAM,IAAI,iBAAiB;gCACxC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;4BAC1D,SAAS,CAAC,cAAc,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;4BACvF,iBAAiB,EAAE,CAAC;yBACvB;wBACD,IAAI,gBAAgB,EAAE;4BAClB,IAAI,iBAAiB,CAAC,MAAM,IAAI,sBAAsB;gCAClD,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;4BAC/D,SAAS,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;4BAC/F,sBAAsB,EAAE,CAAC;yBAC5B;qBACJ;iBACJ;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,iBAAiB,CAAC,MAAM,GAAG,sBAAsB,EAAE;gBACnD,IAAI,QAAQ,GAAG,iBAAiB,CAAC,MAAM,GAAG,sBAAsB,CAAC;gBACjE,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAClF;YACD,IAAI,WAAW,CAAC,MAAM,GAAG,gBAAgB,EAAE;gBACvC,IAAI,QAAQ,GAAG,WAAW,CAAC,MAAM,GAAG,gBAAgB,CAAC;gBACrD,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5E;YACD,IAAI,UAAU,CAAC,MAAM,GAAG,eAAe,EAAE;gBACrC,IAAI,QAAQ,GAAG,UAAU,CAAC,MAAM,GAAG,eAAe,CAAC;gBACnD,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3E;YACD,IAAI,YAAY,CAAC,MAAM,GAAG,iBAAiB,EAAE;gBACzC,IAAI,QAAQ,GAAG,YAAY,CAAC,MAAM,GAAG,iBAAiB,CAAC;gBACvD,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7E;QACL,CAAC;QAED,+BAAW,GAAX;YACI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAChB,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,QAAQ,EAAE,EAAf,CAAe,CAAC,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,MAAM,GAAG,CAAC,EAAf,CAAe,CAAC,CAAC;YACpG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,GAAG,IAAK,OAAA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAA5D,CAA4D,EAAE,CAAC,CAAC,CAAC,CAAC;QACtI,CAAC;QAED,yCAAqB,GAArB;YAAA,iBAqDC;YApDG,IAAI,IAAI,CAAC,WAAW,IAAI,aAAa,CAAC,SAAS,EAAE;gBAC7C,OAAO;YAEX,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC3G,OAAO;YAEX,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAE9B,IAAI,IAAI,GAAG,CAAC;gBACR,OAAO;YAEX,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,KAAK,GAAG,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,KAAK,IAAM,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;iBAC1K,MAAM,CAAC,UAAC,IAAI,EAAE,GAAG,IAAK,OAAA,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAjC,CAAiC,CAAC,CAAC,KAAK,CAAC;YAExE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;gBAEpC,IAAI,CAAC,wBAAwB,CAAC,UAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ;oBACpD,IAAI,CAAC,KAAK;wBACN,OAAO;oBAEX,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAE3F,IAAI,KAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,YAAY,EAAE;wBACvC,KAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;wBAC3B,OAAO;qBACV;oBAED,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;oBAEpD,KAAI,CAAC,KAAK,GAAG,KAAK,CAAC;oBACnB,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;oBAErB,KAAI,CAAC,UAAU,EAAE,CAAC;gBACtB,CAAC,EAAE,SAAS,CAAC,CAAC;gBAEd,OAAO;aACV;YAED,KAAK,CAAC,wBAAwB,CAAC,UAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ;gBACrD,IAAI,CAAC,KAAK;oBACN,OAAO;gBAEX,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC3F,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;gBAEpD,KAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBAErB,KAAI,CAAC,UAAU,EAAE,CAAC;YACtB,CAAC,EAAE,SAAS,CAAC,CAAC;QAClB,CAAC;QAED,8BAAU,GAAV,UAAW,WAAqB;YAAhC,iBA8GC;YA7GG,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO;YAEX,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,mBAAmB,EAAE;gBAC9C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACxC,OAAO;aACV;YAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAExC,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB;gBACzC,OAAO;YAEX,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,SAAS,GAAG,SAAS,CAAC,SAAS,EAC/B,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC9D,UAAU,GAAG,KAAK,CAAC,KAAqB,EACxC,SAAS,GAAG,SAAS,CAAC,eAAe,EACrC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,CAAC,EAAE,CAAC,SAAS,EAAb,CAAa,CAAC,CAAC;YAE/E,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACZ,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,OAAO;aACV;YAED,IAAI,gBAAgB,GAAkH,EAAE,CAAC;YAEzI,IAAI,CAAC,2BAA2B,EAAE,CAAC,OAAO,CAAC,UAAA,MAAM;gBAC7C,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAI,CAAC,6BAA6B,CAAC,CAAC,MAAM,CAAC,EAAE,mBAAmB,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;YAC7I,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;gBAE/C,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAvB,CAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;gBAE3F,gBAAgB,GAAG;oBACf;wBACI,KAAK,EAAE,KAAK;wBACZ,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI;wBAC3E,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;wBAChE,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,GAAG,EAAE,WAAA,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM;qBAChD;iBAAC,CAAC;aACV;iBAAM,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,EAAE;gBACrC,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;aAC1C;YAED,IAAI,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC;YAEzC,IAAI,QAAQ,CAAC,MAAM,GAAG,UAAU;gBAC5B,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,OAAO,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,MAAM,EAAE,EAAX,CAAW,CAAC,CAAC;YAEzF,IAAI,SAAS,GAA8B,EAAE,CAAC;YAE9C,IAAI,uBAAuB,GAAG,KAAK,CAAC;;gBAGhC,IAAI,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,EACjC,KAAK,GAAc,IAAI,EACvB,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;gBAE5B,QAAQ,CAAC,OAAO,CAAC,UAAA,EAAE;oBACf,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;wBACnB,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBACrD,IAAI,CAAC,GAAG,IAAI,EAAE;4BACV,IAAI,GAAG,CAAC,CAAC;4BACT,KAAK,GAAG,EAAE,CAAC;yBACd;qBACJ;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAI,KAAK;oBACL,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAE3C,IAAI,CAAC,KAAK,EAAE;oBACR,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;oBAChE,IAAY,CAAC,QAAQ,GAAG,KAAK,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE,IAAW,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,UAAU,CAAC,UAAU,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;oBAC/I,SAAS,CAAC,UAAU,CAAC,IAAW,CAAC,CAAC;oBAClC,KAAK,CAAC,MAAM,SAAO,CAAC;oBACpB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACxB;gBAED,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;gBAE3B,IAAI,WAAW,CAAC,cAAc,EAAE;oBAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;wBACpB,KAAK,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;qBACrH;yBAAM;wBACH,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;wBACjC,KAAK,CAAC,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;wBACxD,KAAK,CAAC,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;qBACnE;iBACJ;qBAAM,IAAI,KAAK,CAAC,WAAW,EAAE;oBAC1B,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;oBAC5B,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;iBAC5B;gBACD,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;gBAEhC,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,OAAO;oBAC9C,uBAAuB,GAAG,IAAI,CAAC;gBAEnC,KAAK,CAAC,MAAM,EAAE,CAAC;;;YA7CnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE;;aA8ClC;YAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAE5B,IAAI,IAAI,CAAC,WAAW;gBAChB,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,uBAAuB,CAAC;QAC5D,CAAC;QAEO,8BAAU,GAAlB,UAAmB,IAAsB,EAAE,IAAwB;YAC/D,OAAO,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAhF,CAAgF,CAAC,CAAC;QACpH,CAAC;QAEO,yCAAqB,GAA7B,UAA8B,CAA2B,EAAE,CAA2B;YAClF,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,GAAG,KAAK,EAAE,EAAV,CAAU,CAAC,EAAxB,CAAwB,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAqB,CAAC;QAC/D,CAAC;QAEO,kDAA8B,GAAtC,UAAuC,GAAc,EAAE,KAAyB,EAAE,SAAqC;YAAvH,iBAsEC;YApEG,IAAI,MAAM,GAAgB,EAAE,EACxB,eAAe,GAAe,EAAE,EAChC,kBAAkB,GAAa,EAAE,EACjC,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,UAAC,EAAE,EAAE,GAAG;gBACvC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,cAAc,GAAa,EAAE,CAAC;gBAClC,SAAS,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,IAAI;oBACxB,IAAI,GAAG,IAAI,IAAI,EAAE;wBACb,IAAI,UAAU,GAAG,KAAI,CAAC,qBAAqB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;wBACrD,IAAI,UAAU,IAAI,CAAC,KAAI,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC;4BACjD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACjC;gBACL,CAAC,CAAC,CAAC;gBACH,OAAO,cAAc,CAAC;YAC1B,CAAC,CAAC,CAAC;;gBAGH,IAAI,IAAI,GAAa,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAChD,MAAM,GAAa,EAAE,CAAC;gBAE1B,OAAO,IAAI,CAAC,MAAM,EAAE;oBACZ,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACjB,kBAAkB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;wBAC/B,IAAI,MAAM,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,GAAG,KAAK,CAAC,EAAT,CAAS,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,GAAG,KAAK,CAAC,EAAT,CAAS,CAAC;4BAC1D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACvB,CAAC,CAAC,CAAC;iBACN;gBAED,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,MAAM,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,IAAI,KAAK,CAAC,EAAV,CAAU,CAAC,EAA7B,CAA6B,CAAC,CAAC;gBACtF,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;gBATrB,GAAG;YALf,OAAO,kBAAkB,CAAC,MAAM;;aAe/B;YAED,eAAe,CAAC,OAAO,CAAC,UAAA,IAAI;gBACxB,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,EAC9B,WAA6B,CAAC;gBAElC,IAAI,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,SAAS,CAAC,KAAK,CAAC,EAAhB,CAAgB,CAAC,CAAC,OAAO,CAAC,UAAA,EAAE;oBAC1C,IAAI,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;oBAEjC,EAAE,CAAC,OAAO,CAAC,UAAA,GAAG;wBACV,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;wBAEjB,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtD,CAAC,CAAC,CAAC;oBAEH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrB,CAAC,CAAC,CAAC;gBAEH,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClB,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBACjC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oBACvD,WAAW,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;oBACrC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;iBAC/H;qBAAM;oBACH,WAAW,GAAG,KAAK,CAAC;iBACvB;gBAED,IAAI,WAAW,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAA3B,CAA2B,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,EAAE,CAAC,CAAC,GAAG,CAAC;oBACjF,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;gBAEjD,WAAW,CAAC,OAAO,CAAC,UAAA,KAAK;oBACrB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,IAAI,WAAA,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAA7B,CAA6B,CAAC,CAAC,CAAC;gBAChE,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAElB,CAAC;QAEO,qCAAiB,GAAzB,UAA0B,OAAmB,EAAE,SAAiB,EAAE,MAAiB,EAAE,UAAoB,EAAE,QAA4B,EAAE,WAAmB;YAExJ,OAAO,CAAC,OAAO,CAAC,UAAA,MAAM;gBAClB,0BAA0B;gBAE1B,IAAI,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,UAAC,EAAU;oBAClC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/E,CAAC,CAAC,CAAC;gBAEH,IAAI,gBAAgB,GAAmC,EAAE,CAAC;gBAE1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC9C,IAAI,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,EAClB,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAEjC,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,GAAG,GAAG;wBAC3C,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAClC;gBAED,SAAS,GAAG,gBAAgB,CAAC;gBAE7B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;oBACtB,IAAI,WAAA,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,EAAE,EAAL,CAAK,CAAC,CAAC;wBAC/C,SAAS,CAAC,OAAO,EAAE,CAAC;oBAExB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE;wBACpD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;wBACnC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC/B,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,GAAG,GAAG,EAAE,WAAW,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;qBAC7D;oBAED,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;oBAE/C,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC;iBAChC;YAEL,CAAC,CAAC,CAAC;QAEP,CAAC;QAEO,iDAA6B,GAArC,UAAsC,OAAmB,EAAE,mBAAyC,EAAE,SAAiB,EAAE,WAAqB;YAA9I,iBA07BC;YAx7BG,IAAI,gBAAgB,GAAkH,EAAE,CAAC;YAEzI,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;gBAC7B,gBAAgB,CAAC,IAAI,CACjB;oBACI,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,UAAU,EAAE,EAAf,CAAe,CAAC,EAA5B,CAA4B,CAAC;oBACrD,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI;oBAC3E,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBAChE,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,GAAG,EAAE,WAAA,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM;iBAChD,CAAC,CAAC;gBACP,OAAO,gBAAgB,CAAC;aAC3B;YAED,IAAI,GAAG,GAAc,EAAE,CAAC;YACxB,IAAI,OAAO,GAAa,EAAE,CAAC;YAE3B,IAAI,WAAW,GAAuB,EAAE,CAAC;YACzC,IAAI,eAAe,GAAuB,EAAE,CAAC;YAC7C,IAAI,eAAe,GAAuB,EAAE,CAAC;YAE7C,IAAI,cAAc,GAAa,EAAE,CAAC;YAElC,IAAI,UAAU,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,UAAU,EAAE,EAAf,CAAe,CAAC,EAAE,CAAC,CAAC;YAE3F,IAAI,qBAAqB,GAAG,CAAC,CAAC;YAE9B,qGAAqG;YACrG,IAAI,yBAAyB,GAAc,EAAE,EACzC,oBAAoB,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAC,IAAwB,IAAK,OAAA,SAAS,CAAC,WAAW,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAlE,CAAkE,CAAC,EAAtI,CAAsI,CAAC,CAAC,MAAM,CAAC,UAAA,KAAK;gBACzN,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oBAChB,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAA,EAAE;wBACxC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,IAAI,GAAG,EAAnC,CAAmC,CAAC;4BACzE,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC3C,CAAC,CAAC,CAAC;gBACP,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAc,CAAC;YAErB,oBAAoB,CAAC,OAAO,CAAC,UAAC,EAAE,EAAE,KAAK;gBACnC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,IAAI,GAAG,EAAnC,CAAmC,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,IAAI,GAAG,EAAnD,CAAmD,CAAC;oBACvK,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,OAAO,CAAC,UAAA,MAAM;gBAClB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBACnB,IAAI,MAAM,GAAa,EAAE,CAAC;oBAC1B,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAC,GAAG,EAAE,GAAG;wBAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAEjB,IAAI,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAChD,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAChD,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAChB,KAAK,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;wBAErC,IAAI,KAAK,GAAG,GAAG;4BACX,OAAO;wBAEX,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EACtB,MAAM,GAAG,GAAG,GAAG,EAAE,EACjB,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EACvB,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,EAClB,MAAM,GAAc,EAAE,CAAC;wBAE3B,yBAAyB,CAAC,OAAO,CAAC,UAAA,CAAC;4BAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EACZ,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4BAEnB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE;gCACpD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;6BAClC;wBACL,CAAC,CAAC,CAAC;wBAEH,IAAI,MAAM,CAAC,MAAM,EAAE;4BACf,MAAM,CAAC,IAAI,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAzB,CAAyB,CAAC,CAAC;4BACnD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAvC,CAAuC,CAAC,CAAC,CAAC;yBACxF;oBAEL,CAAC,CAAC,CAAC;oBAEH,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;wBAC7B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;iBACjF;YACL,CAAC,CAAC,CAAC;YAEH,aAAa;YACb,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;YAEzE,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAE5B,IAAI,GAAG,GAAG,WAAA,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,GAAG,EAAE;gBAEpC,qBAAqB,GAAG,MAAM,CAAC;gBAE/B,IAAI,KAAK,GAAuB,EAAE,CAAC;gBAEnC,mBAAmB,CAAC,OAAO,CAAC,UAAA,EAAE;oBAC1B,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAC,IAAwB,IAAK,OAAA,SAAS,CAAC,WAAW,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAlE,CAAkE,CAAC,EAC/I,SAAS,GAAa,EAAE,CAAC;;wBAIzB,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EACnB,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EACf,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EACpB,KAAK,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;wBAErC,IAAI,KAAK,IAAI,GAAG;8CACH;wBAEb,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBAC7B,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAqB,CAAC,CAAC;wBAE/C,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EACtB,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EACvB,CAAC,GAAG,GAAG,CAAC,cAAc,EAAE,EACxB,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,UAAA,MAAM;4BACjB,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,EACrB,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;gCAC9B,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;4BAC5B,OAAO,CAAC,CAAC;wBACb,CAAC,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,EAAtB,CAAsB,CAAC,CAAC;wBAE3C,IAAI,IAAI,CAAC,MAAM,EAAE;4BACb,IAAI,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,CAAC,CAAC;4BAE3B,IAAI,CAAC,OAAO,CAAC,UAAA,CAAC;gCACV,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC9B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gCAC7B,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAqB,CAAC,CAAC;4BACnD,CAAC,CAAC,CAAC;yBACN;;oBAhCL,wCAAwC;oBACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;;qBAgCjD;oBAED,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAE1C,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC7B,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAqB,CAAC,CAAC;oBAE3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;wBACnD,IAAI,GAAG,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EACtB,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;wBACvB,IAAI,GAAG,KAAK,GAAG;4BACX,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;qBACxC;gBACL,CAAC,CAAC,CAAC;gBAEH,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBAElC,IAAI,sBAAsB,GAAa,EAAE,CAAC;gBAE1C,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;oBACd,IAAI,EAAE,GAAG,IAAI,WAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EACrC,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,IAAI,GAAG,EAAnC,CAAmC,CAAC,CAAC;oBACrF,IAAI,OAAO,GAAG,CAAC,EAAE;wBACb,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC;wBACrB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;wBAC3D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;qBAChB;oBACD,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzC,CAAC,CAAC,CAAC;gBAEH,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,UAAA,EAAE;oBACvC,EAAE,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtC,EAAE,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC,CAAC,CAAC;gBAEH,oDAAoD;gBACpD,+IAA+I;gBAE/I,4CAA4C;gBAC5C,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,UAAA,cAAc;oBAEnD,IAAI,OAAO,GAAG,IAAI,EAAE,GAAY,EAAE,GAAY,CAAC;oBAE/C,qBAAqB;oBACrB,OAAO,OAAO,EAAE;wBACZ,OAAO,GAAG,KAAK,CAAC;wBAEhB,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC7B,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;wBAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BAChD,IAAI,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;4BAEhC,IAAI,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EACxB,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EACxB,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EACpB,GAAG,GAAG,KAAK,CAAC,aAAa,EAAE,EAC3B,CAAC,GAAG,GAAG,CAAC,cAAc,EAAE,EACxB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAClB,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAClB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAClB,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BAEvB,IAAI,KAAK,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE;gCAEzE,IAAI,KAAK,GAAG,WAAA,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gCAE1D,IAAI,KAAK,EAAE;oCACP,IAAI,IAAI,GAAG,CAAC,CAAC;oCACb,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;wCACd,IAAI,GAAG,CAAC,CAAC;oCAEb,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oCAC1C,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;oCAEnF,OAAO,GAAG,IAAI,CAAC;oCACf,MAAM;iCACT;6BACJ;yBACJ;qBACJ;oBAED,cAAc;oBACd,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7B,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7B,2BAA2B;oBAE3B,sCAAsC;oBACtC,mBAAmB;oBAEnB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE;wBAC3B,IAAI,EAAE,GAAG,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;wBAEjC,IAAI,IAAI,GAAG,CAAC,CAAC,EACT,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC;wBAE7B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,qBAAqB,EAAE,EAAE,EAAE,EAAE;4BAC/C,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;4BAClB,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;4BACxC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE;gCACzB,KAAK,GAAG,EAAE,CAAC;gCACX,IAAI,GAAG,EAAE,CAAC;6BACb;yBACJ;wBAED,IAAI,IAAI,IAAI,CAAC,EAAE;4BACX,IAAI,KAAK,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;4BAC/B,cAAc,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;4BAC1B,IAAI,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gCACpC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;yBAClC;qBACJ;oBAED,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,qBAAqB,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,qBAAqB,EAAE;wBAExF,mBAAmB;wBACnB,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,qBAAqB,KAAK,cAAc,CAAC,CAAC,CAAC,GAAG,qBAAqB,EAAE;4BACzF,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;4BACrC,OAAO,KAAK,CAAC;yBAChB;wBACD,eAAe;qBAClB;oBAED,OAAO,IAAI,CAAC;gBAChB,CAAC,CAAC,CAAC;gBAEH,2EAA2E;gBAC3E,2DAA2D;gBAC3D,8IAA8I;gBAC9I,uCAAuC;gBACvC,uCAAuC;gBACvC,KAAK;gBACL,sEAAsE;gBACtE,gQAAgQ;gBAEhQ,oBAAoB;gBACpB,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC;oBAE9B,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACf,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACf,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EACpB,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,EACvB,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EACxB,CAAC,GAAG,GAAG,CAAC,cAAc,EAAE,EACxB,IAAI,GAAa,EAAE,CAAC;oBAExB,KAAK,IAAI,EAAE,GAAG,qBAAqB,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE;wBAC/D,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,EACZ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAChB,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAClB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;wBAE/B,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE;4BACtC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;yBACjB;qBACJ;oBAED,IAAI,IAAI,CAAC,MAAM,EAAE;wBAEb,IAAI,CAAC,IAAI,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAnC,CAAmC,CAAC,CAAC;wBAC3D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACnB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BAC7C,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;yBAChD;wBAED,OAAO,KAAK,CAAC;qBAChB;oBACD,sFAAsF;oBACtF,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAxE,CAAwE,CAAC,CAAC;gBACjH,CAAC,CAAC,CAAC;gBAEH,IAAI,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;gBAE3E,oBAAoB;gBACpB,IAAI,cAAc,CAAC,MAAM,EAAE;oBACvB,cAAc,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAO,OAAO,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC;oBAChD,cAAc,CAAC,OAAO,CAAC,UAAA,KAAK;wBACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,EAAhC,CAAgC,CAAC,EAAE;4BACvD,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;4BACrB,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;4BACzB,QAAQ,CAAC,OAAO,CAAC,UAAA,CAAC;gCACd,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;oCACZ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gCACX,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;oCACZ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4BACf,CAAC,CAAC,CAAC;4BACH,IAAI,qBAAqB,GAAG,KAAK;gCAC7B,qBAAqB,EAAE,CAAC;yBAC/B;oBACL,CAAC,CAAC,CAAC;iBACN;gBAED,IAAI;oBACA,oCAAoC;oBACpC,IAAI,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAqB,EAAhC,CAAgC,CAAC,EAAE,QAAQ,EAC3E;wBACI,QAAQ,EAAE,IAAI;wBACd,QAAQ,EAAE,IAAI;wBACd,QAAQ,EAAE,KAAK;wBACf,QAAQ,EAAE,KAAK;qBAClB,CAAC,CAAC;oBAEP,iCAAiC;oBACjC,IAAI,QAAQ,GAAuE,EAAE,CAAC;oBAEtF,2DAA2D;oBAC3D,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,UAAA,EAAE;wBAC3B,IAAI,IAAI,GAAG,WAAA,OAAO,CAAC,WAAW,CAAY,EAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,GAAG,CAAC,EAAE,CAAC,EAAP,CAAO,CAAC,CAAC,CAAC;wBAClE,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,UAAU,CAAC,EAAE;4BACtL,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE;gCACZ,aAAa;gCACb,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gCACjB,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gCACd,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;6BAChB;4BAED,OAAO,IAAI,CAAC;yBACf;wBACD,OAAO,KAAK,CAAC;oBACjB,CAAC,CAAC,CAAC;oBAEH,yDAAyD;oBACzD,SAAS,CAAC,OAAO,CAAC,UAAC,EAAE,EAAE,GAAG;wBACtB;4BACI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;4BACd,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;4BACd,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;yBACjB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,IAAI,qBAAqB,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,qBAAqB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAxE,CAAwE,CAAC,EAAhK,CAAgK,CAAC;6BAC1K,OAAO,CAAC,UAAC,CAAmB;4BACzB,IAAI,CAAC,GAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAG,CAAC;4BAC1D,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gCACZ,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;;gCAE5C,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACxC,CAAC,CAAC,CAAC;oBACX,CAAC,CAAC,CAAC;oBAEH,2GAA2G;oBAC3G,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,QAAQ,CAAC,CAAC,CAAC,EAAX,CAAW,CAAC,CAAC,MAAM,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAA5B,CAA4B,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;wBACnG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;wBACnB,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAa,CAAC;wBACpD,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAa,CAAC;wBACpD,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAA5B,CAA4B,CAAC,CAAC;wBACzE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,EAAE;4BAEtG,IAAI,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;4BACxE,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;4BAEvE,IAAI,OAAO,GAAG,IAAI,WAAA,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAC7D,QAAQ,GAAG,IAAI,WAAA,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,EACnE,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;4BAE7D,IAAI,cAAc,CAAC,CAAC,IAAI,cAAc,CAAC,EAAE,GAAG,CAAC,IAAI,cAAc,CAAC,EAAE,GAAG,CAAC,IAAI,cAAc,CAAC,EAAE,GAAG,CAAC,IAAI,cAAc,CAAC,EAAE,GAAG,CAAC,EAAE;gCACtH,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gCACxD,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;6BAC3D;yBACJ;oBAEL,CAAC,CAAC,CAAC;oBAEH,yCAAyC;oBACzC,GAAG,CAAC,OAAO,CAAC,UAAC,EAAE,EAAE,GAAG;wBAChB,IAAI,GAAG,GAAG,qBAAqB;4BAC3B,OAAO;wBAEX,IAAI,CAAC,GAAG,CAAC,CAAC;wBAEV,SAAS,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,KAAK,GAAG,EAAX,CAAW,CAAC,EAA3B,CAA2B,CAAC,CAAC,OAAO,CAAC,UAAA,EAAE;4BAC1D,IAAI,WAAW,GAAG,CAAC,EACf,eAAe,GAAG,CAAC,CAAC;4BAExB,IAAI,OAAO,GAAG;gCACV,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gCACd,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gCACd,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;6BACjB,CAAC,GAAG,CAAC,UAAA,CAAC;gCACH,IAAI,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAxE,CAAwE,CAAC,EAC/G,gBAAgB,GAAG,CAAC,YAAY,IAAI,eAAe,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAxE,CAAwE,CAAC,CAAC;gCAC7I,IAAI,YAAY;oCACZ,WAAW,EAAE,CAAC;gCAClB,IAAI,gBAAgB;oCAChB,eAAe,EAAE,CAAC;gCACtB,OAAO;oCACH,YAAY,EAAE,YAAY;oCAC1B,gBAAgB,EAAE,gBAAgB;oCAClC,IAAI,EAAE,CAAqB;oCAC3B,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;iCACxB,CAAC;4BACN,CAAC,CAAC,CAAC;4BAEH,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE;gCACvC,IAAI,WAAW,EAAE;oCACb,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,YAAY,EAAhB,CAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;oCACpD,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE;wCACjB,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,GAAG,CAAC,EAAE,CAAC,EAAP,CAAO,CAAC,EACjC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,aAAa;wCAC1G,IAAI,CAAC,GAAG,CAAC;4CACL,CAAC,GAAG,CAAC,CAAC;qCACb;iCACJ;qCAAM;oCACH,IAAI,IAAE,GAAG,OAAO,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,gBAAgB,EAApB,CAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;oCACxD,IAAI,IAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE;wCACjB,IAAI,IAAI,GAAG,IAAE,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,GAAG,CAAC,EAAE,CAAC,EAAP,CAAO,CAAC,EACjC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,IAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,KAAK,GAAG,EAAX,CAAW,CAAC,EAAjC,CAAiC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,cAAc;wCACpK,IAAI,CAAC,GAAG,CAAC;4CACL,CAAC,GAAG,CAAC,CAAC;qCACb;iCACJ;6BACJ;wBAEL,CAAC,CAAC,CAAC;wBAEH,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACf,CAAC,CAAC,CAAC;oBAEH,6BAA6B;oBAC7B,SAAS,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,KAAK,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,IAAI,qBAAqB,EAA5B,CAA4B,CAAC,EAA7C,CAA6C,CAAC,CAAC,OAAO,CAAC,UAAA,EAAE;wBAC5E,IAAI,IAAI,GAAc,EAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,GAAG,CAAC,EAAE,CAAC,EAAP,CAAO,CAAC,CAAC;wBAC7C,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAO,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACxF,IAAI,CAAC,GAAG,CAAC,EAAE;4BACP,IAAI,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,CAAC,IAAI,CAAC,EAAT,CAAS,CAAC,CAAC,OAAO,CAAC,UAAA,EAAE;gCACnC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BACf,CAAC,CAAC,CAAC;yBACN;oBACL,CAAC,CAAC,CAAC;oBAEH,0BAA0B;oBAC1B,IAAI,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,UAAC,EAAE,EAAE,GAAG;wBAC3C,IAAI,GAAG,GAAc,EAAG,CAAC,KAAK,EAAE,CAAC;wBACjC,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,GAAG,CAAC,EAAE,CAAC,EAAP,CAAO,CAAC,CAAC;wBAElC,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1D,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,UAAA,MAAM;4BAClC,OAAO,WAAW,CAAC,IAAI,CAAC,UAAA,QAAQ,IAAI,OAAA,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,EAApH,CAAoH,CAAC,CAAC;wBAC9J,CAAC,CAAC,EACF,KAAK,GAAa,IAAI,CAAC;wBAE3B,IAAI,cAAc,CAAC,MAAM,EAAE;4BACvB,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;gCAC7B,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;6BAC7B;iCAAM;gCACH,IAAI,aAAW,GAAG,CAAC,CAAC;gCAEpB,cAAc,CAAC,OAAO,CAAC,UAAA,OAAO;oCAC1B,IAAI,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;oCAC5E,IAAI,aAAa,GAAG,aAAW,EAAE;wCAC7B,aAAW,GAAG,aAAa,CAAC;wCAC5B,KAAK,GAAG,OAAO,CAAC;qCACnB;gCACL,CAAC,CAAC,CAAC;6BACN;yBACJ;wBAED,IAAI,CAAC,GAAG,WAAA,OAAO,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC/E,OAAO;4BACH,GAAG,EAAE,GAAG;4BACR,EAAE,EAAE,CAAC,GAAG,CAAC;4BACT,YAAY;4BACZ,CAAC,EAAE,CAAC;4BACJ,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,WAAA,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;4BAChF,mBAAmB,EAAE,CAAC,CAAC;4BACvB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAlB,CAAkB,CAAC;4BACjD,KAAK,EAAE,CAAC,WAAA,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;4BACjD,YAAY,EAAE,EAAE;yBACI,CAAC;oBAC7B,CAAC,CAAC,CAAC;oBAEH,uHAAuH;oBACvH,kBAAkB,CAAC,OAAO,CAAC,UAAA,iBAAiB;wBACxC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;4BACzB,6IAA6I;4BAC7I,IAAI,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,GAAG,KAAK,iBAAiB,CAAC,GAAG,IAAI,KAAK,CAAC,WAAW,KAAK,iBAAiB,CAAC,WAAW,IAAI,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAzK,CAAyK,CAAC,CAAC;4BAE/N,IAAI,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,UAAA,SAAS,IAAI,OAAA,CAAC,CAAC,SAAS,CAAC,IAAI,EAAhB,CAAgB,CAAC,CAAC;4BAEtE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;gCAC7B,iBAAiB,CAAC,mBAAmB,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;6BACjE;iCAAM;gCACH,IAAI,qBAAmB,GAAG,CAAC,CAAC,EACxB,sBAAoB,GAAG,MAAM,CAAC,SAAS,CAAC;gCAE5C,UAAU,CAAC,OAAO,CAAC,UAAC,SAAS;oCACzB,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oCAC9D,IAAI,IAAI,GAAG,sBAAoB,EAAE;wCAC7B,qBAAmB,GAAG,SAAS,CAAC,GAAG,CAAC;wCACpC,sBAAoB,GAAG,IAAI,CAAC;qCAC/B;gCACL,CAAC,CAAC,CAAC;gCAEH,iBAAiB,CAAC,mBAAmB,GAAG,qBAAmB,CAAC;6BAC/D;yBACJ;oBAEL,CAAC,CAAC,CAAC;oBAEH,oBAAoB;oBACpB,yCAAyC;oBACzC,2CAA2C;oBAC3C,SAAS;oBACT,GAAG;oBAEH,IAAI,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAA9B,CAA8B,CAAC,EAChF,wBAAwB,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,EAA/B,CAA+B,CAAC,CAAC;oBACjG,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,GAAG,CAAC,IAAI,EAAT,CAAS,CAAC,CAAC;oBAEjE,2EAA2E;oBAC3E,aAAa,CAAC,OAAO,CAAC,UAAA,iBAAiB;wBACnC,IAAI,YAAY,GAAG,iBAAiB,CAAC,YAAY,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;wBAE5E,IAAI,kBAAkB,CAAC,MAAM,EAAE;4BAC3B,IAAI,OAAO,GAAG,IAAI,CAAC;4BAEnB,OAAO,OAAO,EAAE;gCACZ,OAAO,GAAG,KAAK,CAAC;gCAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oCACvD,IAAI,KAAK,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;oCAElC,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE;wCAClG,MAAM;wCAEN,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wCAE7B,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;wCAEhE,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wCAEhC,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;4CAC5F,iBAAiB,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;wCAExC,OAAO,GAAG,IAAI,CAAC;wCAEf,MAAM;wCAEN,iBAAiB;wCACjB,gDAAgD;wCAChD,gDAAgD;wCAChD,+CAA+C;wCAC/C,IAAI;wCAEJ,0DAA0D;wCAE1D,wBAAwB;wCACxB,qBAAqB;wCAErB,mCAAmC;wCAEnC,2EAA2E;wCAC3E,2EAA2E;wCAE3E,qEAAqE;wCACrE,mEAAmE;wCACnE,UAAU;wCACV,oFAAoF;wCAEpF,kCAAkC;wCAClC,8CAA8C;wCAE9C,sCAAsC;wCAEtC,YAAY;wCACZ,+BAA+B;wCAE/B,GAAG;qCACN;iCACJ;6BACJ;yBACJ;oBAEL,CAAC,CAAC,CAAC;oBAEH,oCAAoC;oBACpC,IAAI,wBAAwB,CAAC,MAAM,EAAE;wBACjC,aAAa,CAAC,OAAO,CAAC,UAAA,iBAAiB;4BACnC,IAAI,YAAY,GAAG,iBAAiB,CAAC,YAAY,CAAC;4BAElD,IAAI,wBAAwB,CAAC,MAAM,EAAE;gCACjC,IAAI,OAAO,GAAG,IAAI,CAAC;gCAEnB,OAAO,OAAO,EAAE;oCACZ,OAAO,GAAG,KAAK,CAAC;oCAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,wBAAwB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wCAC7D,IAAI,KAAK,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC;wCAExC,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;4CAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gDACzD,IAAI,mBAAmB,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gDAElD,IAAI,SAAS,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE;oDAEzE,MAAM;oDAEN,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oDAE7B,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;oDAEhE,wBAAwB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oDAEtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;wDAC5F,iBAAiB,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;oDAExC,OAAO,GAAG,IAAI,CAAC;oDAEf,MAAM;iDACT;6CACJ;4CAED,IAAI,OAAO;gDACP,MAAM;yCACb;qCACJ;iCACJ;6BACJ;wBACL,CAAC,CAAC,CAAC;qBACN;oBAED,oBAAoB;oBACpB,IAAI,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;oBAEtE,yBAAyB;oBACzB,IAAI,kBAAkB,CAAC,MAAM,EAAE;wBAE3B,IAAI,SAAO,GAAG,IAAI,CAAC;wBAEnB,OAAO,SAAO,EAAE;4BACZ,SAAO,GAAG,KAAK,CAAC;4BAEhB,IAAI,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC;4BAEpC,KAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,GAAG,EAAE,GAAC,EAAE,EAAE;gCAC1B,IAAI,iBAAiB,GAAG,kBAAkB,CAAC,GAAC,CAAC,CAAC;gCAE9C,KAAK,IAAI,CAAC,GAAG,GAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oCAC9B,IAAI,KAAK,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;oCAElC,IAAI,iBAAiB,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,WAAW,KAAK,iBAAiB,CAAC,WAAW,EAAE;wCAE5F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;4CACjE,IAAI,mBAAmB,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;4CAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;gDACvD,IAAI,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gDAE1B,IAAI,SAAS,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE;oDACrE,MAAM;oDAEN,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;oDAEhE,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oDAEhC,IAAI,CAAC,iBAAiB,CAAC,IAAI;wDACvB,iBAAiB,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;oDAExC,SAAO,GAAG,IAAI,CAAC;oDAEf,MAAM;iDACT;6CACJ;4CAED,IAAI,SAAO;gDACP,MAAM;yCACb;qCACJ;oCAED,IAAI,SAAO;wCACP,MAAM;iCACb;gCAED,IAAI,SAAO;oCACP,MAAM;6BACb;yBACJ;wBAED,qBAAqB;wBACrB,IAAI,QAAQ,GAAqD,EAAE,CAAC;gDAE3D,GAAC,EAAM,GAAG;4BACf,IAAI,iBAAiB,GAAG,kBAAkB,CAAC,GAAC,CAAC,CAAC;4BAE9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;gCAErB,qBAAqB,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAA,OAAO,IAAI,OAAA,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,2BAA2B,CAAC,OAAO,CAAC,EAAE,EAAE,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAjG,CAAiG,CAAC,CAAC;gCAElK,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC;oCAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAC,EAAE,CAAC,CAAC;qCAC7D,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE;oCACvC,IAAI,kBAAgB,GAAwB,IAAI,EAC5C,sBAAoB,GAAG,MAAM,CAAC,SAAS,CAAC;oCAE5C,qBAAqB,CAAC,OAAO,CAAC,UAAC,SAAS;wCACpC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wCAC9D,IAAI,IAAI,GAAG,sBAAoB,EAAE;4CAC7B,kBAAgB,GAAG,SAAS,CAAC;4CAC7B,sBAAoB,GAAG,IAAI,CAAC;yCAC/B;oCACL,CAAC,CAAC,CAAC;oCAEH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,kBAAgB,EAAE,KAAK,EAAE,GAAC,EAAE,CAAC,CAAC;iCACzD;6BACJ;;4BAlBO,qBAAqB;wBALjC,KAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAG,GAAG,kBAAkB,CAAC,MAAM,EAAE,GAAC,GAAG,GAAG,EAAE,GAAC,EAAE;oCAApD,GAAC,EAAM,GAAG;yBAwBlB;wBAED,QAAQ,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAO,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAA,CAAC,CAAC,CAAC,CAAC;wBAEtD,QAAQ,CAAC,OAAO,CAAC,UAAA,OAAO;4BACpB,IAAI,oBAAoB,GAAG,OAAO,CAAC,MAAM,EACrC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;4BAEtB,oBAAoB,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BAEtF,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACpC,CAAC,CAAC,CAAC;qBAEN;oBAED,wBAAwB;oBACxB,IAAI,kBAAkB,CAAC,MAAM,EAAE;wBAE3B,IAAI,cAAc,GAAgB,EAAE,CAAC;wBAErC,OAAO,CAAC,OAAO,CAAC,UAAA,GAAG;4BACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gCACxC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,EACZ,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gCAE3B,cAAc,CAAC,IAAI,CAAC,IAAI,WAAA,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;6BAClI;wBACL,CAAC,CAAC,CAAC;wBAEH,kBAAkB,CAAC,OAAO,CAAC,UAAA,iBAAiB;4BACxC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;gCAEzB,IAAI,WAAS,GAAqB,IAAI,CAAC;gCAEvC,iBAAiB,CAAC,EAAE,CAAC,OAAO,CAAC,UAAA,IAAI;oCAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wCACzC,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EACf,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EACzB,GAAG,GAAG,IAAI,WAAA,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;wCAEhE,IAAI,cAAc,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,EAAlC,CAAkC,CAAC,EAAE;4CAC/D,IAAI,CAAC,WAAS,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,WAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,WAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE;gDAC/F,WAAS,GAAG,CAAC,KAAK,EAAE,KAAK,CAAqB,CAAC;yCACtD;qCACJ;gCACL,CAAC,CAAC,CAAC;gCAEH,IAAI,WAAS;oCACT,iBAAiB,CAAC,IAAI,GAAG,IAAI,WAAA,SAAS,CAAC,GAAG,CAAC,WAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,WAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;6BACpG;wBACL,CAAC,CAAC,CAAC;qBACN;oBAED,4BAA4B;oBAC5B,IAAI,gBAAgB,CAAC,MAAM,EAAE;wBACzB,IAAI,SAAO,GAAG,IAAI,CAAC;wBAEnB,OAAO,SAAO,EAAE;4BACZ,SAAO,GAAG,KAAK,CAAC;oDAEP,GAAC,EAAM,GAAG;gCACf,IAAI,YAAY,GAAG,gBAAgB,CAAC,GAAC,CAAC,CAAC;gCAEvC,IAAI,YAAY,CAAC,IAAI,EAAE;oCAEf,qBAAqB,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAA,OAAO,IAAI,OAAA,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,SAAS,CAAC,2BAA2B,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,EAA9L,CAA8L,CAAC,CAAC;oCAE/P,IAAI,qBAAqB,CAAC,MAAM,EAAE;wCAC1B,iBAAiB,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;wCAEjD,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;wCAEvE,gBAAgB,CAAC,MAAM,CAAC,GAAC,EAAE,CAAC,CAAC,CAAC;wCAE9B,SAAO,GAAG,IAAI,CAAC;;qCAGlB;iCACJ;;gCAbO,qBAAqB,EAGjB,iBAAiB;4BARjC,KAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAG,GAAG,gBAAgB,CAAC,MAAM,EAAE,GAAC,GAAG,GAAG,EAAE,GAAC,EAAE;sDAAlD,GAAC,EAAM,GAAG;;;6BAmBlB;yBACJ;qBACJ;oBAED,+BAA+B;oBAC/B,oBAAoB;oBACpB,oEAAoE;oBACpE,yIAAyI;oBAEzI,gCAAgC;oBAEhC,oCAAoC;oBACpC,wEAAwE;oBACxE,iCAAiC;oBACjC,6BAA6B;oBAC7B,gBAAgB;oBAChB,4EAA4E;oBAC5E,2CAA2C;oBAE3C,sFAAsF;oBACtF,mBAAmB;oBACnB,sCAAsC;oBACtC,qCAAqC;oBACrC,sCAAsC;oBACtC,qCAAqC;oBACrC,qBAAqB;oBAErB,oCAAoC;oBACpC,iEAAiE;oBACjE,iBAAiB;oBACjB,WAAW;oBACX,SAAS;oBAET,0EAA0E;oBAC1E,8DAA8D;oBAC9D,GAAG;oBAEH,IAAI,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;oBAE/D,oFAAoF;oBACpF,IAAI,YAAY,CAAC,MAAM,EAAE;wBACrB,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;wBAE9C,IAAI,OAAO,GAAG,IAAI,CAAC;wBACnB,OAAO,OAAO,EAAE;4BACZ,OAAO,GAAG,KAAK,CAAC;4BAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gCACrD,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gCAC7B,IAAI,CAAC,MAAM,CAAC,IAAI;oCACZ,SAAS;gCAEb,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;gCAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;oCAC7B,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oCAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI;wCACd,SAAS;oCACb,IAAI,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;oCAE3C,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,WAAW,IAAI,SAAS,CAAC,2BAA2B,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE;wCACvK,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;wCAC1C,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wCAC1B,OAAO,GAAG,IAAI,CAAC;wCACf,MAAM;qCACT;iCACJ;gCACD,IAAI,OAAO;oCACP,MAAM;6BACb;yBACJ;qBACJ;oBAED,gBAAgB,GAAG,YAAY,CAAC,GAAG,CAAC,UAAA,GAAG;wBAEnC,IAAI,KAA6B,CAAC;wBAElC,IAAI,WAAW,EAAE;4BACb,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAzB,CAAyB,CAAC,EAAzC,CAAyC,CAAC,CAAC;yBACxE;6BAAM;4BACH,IAAI,OAAK,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,EAC9B,WAAW,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,EACpC,CAAC,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;4BAEjC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,UAAA,EAAE;gCACb,IAAI,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gCAEjC,EAAE,CAAC,OAAO,CAAC,UAAA,GAAG;oCACV,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;oCAEjB,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCACtD,CAAC,CAAC,CAAC;gCAEH,OAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACrB,CAAC,CAAC,CAAC;4BAEH,IAAI,OAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gCAClB,CAAC,CAAC,QAAQ,CAAC,OAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gCACvD,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;6BAC/H;iCAAM;gCACH,WAAW,GAAG,OAAK,CAAC;6BACvB;4BAED,IAAI,WAAW,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAA3B,CAA2B,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,EAAE,CAAC,CAAC,GAAG,CAAC;gCACjF,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;4BACjD,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,UAAU,EAAE,EAAzD,CAAyD,CAAC,EAA1E,CAA0E,CAAC,CAAC;yBAChH;wBAED,6DAA6D;wBAC7D,IAAI,GAAG,CAAC,IAAI,EAAE;4BACV,OAAO;gCACH,KAAK,EAAE,KAAK;gCACZ,cAAc,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;gCACnK,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,EAAE;gCAChD,KAAK,EAAE,GAAG,CAAC,KAAK;gCAChB,GAAG,EAAE,WAAA,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM;6BAChD,CAAC;yBACL;wBACD,OAAO;4BACH,KAAK,EAAE,KAAK;4BACZ,cAAc,EAAE,KAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI;4BAC3E,WAAW,EAAE,KAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;4BAChE,KAAK,EAAE,GAAG,CAAC,KAAK;4BAChB,GAAG,EAAE,WAAA,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM;yBAChD,CAAC;oBACN,CAAC,CAAC,CAAC;iBACN;gBAAC,OAAO,CAAC,EAAE;oBACR,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAClB;aACJ;YAED,OAAO,gBAAgB,CAAC,MAAM,CAAC,UAAA,IAAI;gBAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAA7D,CAA6D,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/G,CAAC,CAAC,CAAC;QACP,CAAC;QAEO,+CAA2B,GAAnC;YACI,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,SAAS,GAAG,SAAS,CAAC,SAAS,EAC/B,SAAS,GAAG,SAAS,CAAC,eAAe,EACrC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,EAArD,CAAqD,CAAC,CAAC;YAEpH,IAAI,CAAC,IAAI,CAAC,IAAI;gBACV,OAAO,IAAI,CAAC;YAEhB,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAC,EAAsB,IAAK,OAAA,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAvB,CAAuB,CAAC,EAAxE,CAAwE,CAAC,EAC/H,UAAU,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,UAAU,EAAE,EAAf,CAAe,CAAC,EAAE,CAAC,CAAC;YAE3F,IAAI,CAAC,gBAAgB,CAAC,MAAM;gBACxB,OAAO,OAAO,CAAC;YAEnB,IAAI,WAAW,GAAuB,EAAE,EACpC,KAAK,GAAuB,EAAE,EAC9B,GAAG,GAAc,EAAE,EACnB,OAAO,GAAa,EAAE,CAAC;YAE3B,aAAa;YACb,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;YAEzE,IAAI,qBAAqB,GAAG,GAAG,CAAC,MAAM,CAAC;YAEvC,mBAAmB;YACnB,gBAAgB,CAAC,OAAO,CAAC,UAAA,EAAE;gBACvB,IAAI,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAC,IAAwB;oBACtE,IAAI,IAAI,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAChC,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAC5D,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,KAAK,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,GAAG,EAAhD,CAAgD,CAAC,CAAC;oBAErG,IAAI,OAAO,GAAG,CAAC,EAAE;wBACb,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC;wBAErB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBAClB;oBAED,OAAO,OAAO,CAAC;gBACnB,CAAC,CAAC,CAAC;gBAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC/C,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAClB,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACnB,IAAI,GAAG,KAAK,GAAG;wBACX,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;iBAC9B;YACL,CAAC,CAAC,CAAC;YAEH,oBAAoB;YACpB,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,UAAA,UAAU;gBAEvC,IAAI,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EACxB,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EACxB,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EACpB,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,EACvB,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EACxB,CAAC,GAAG,GAAG,CAAC,cAAc,EAAE,EACxB,IAAI,GAAa,EAAE,CAAC;gBAExB,KAAK,IAAI,EAAE,GAAG,qBAAqB,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE;oBAC/D,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,EACZ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAChB,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAClB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;oBAE/B,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE;wBACtC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;qBACjB;iBACJ;gBAED,IAAI,IAAI,CAAC,MAAM,EAAE;oBAEb,IAAI,CAAC,IAAI,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAnC,CAAmC,CAAC,CAAC;oBAC3D,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC7C,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;qBACtC;oBAED,OAAO,KAAK,CAAC;iBAChB;gBAED,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAElC,IAAI,QAAQ,GAAuB,GAAG,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAqB,EAA9B,CAA8B,CAAC,CAAC;YAEhF,0BAA0B;YAC1B,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAE3B,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,IAAI,WAAA,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAA5B,CAA4B,CAAC,CAAC;YAEvD,oCAAoC;YACpC,IAAI,SAAS,GAAG,KAAK,CAAC,QAAQ,EAC1B,KAAK,EACL;gBACI,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,KAAK;gBACf,QAAQ,EAAE,KAAK;aAClB,CAAC,CAAC,MAAM,CAAC,UAAA,EAAE;gBACR,OAAO,CAAC,WAAA,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC;YAC7P,CAAC,CAAC,CAAC;YACP,sGAAsG;YACtG,OAAO,IAAI,CAAC,8BAA8B,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,EAA5C,CAA4C,CAAC,EAA5D,CAA4D,CAAC,CAAC;QAEhJ,CAAC;QAED,wCAAoB,GAApB;YAAA,iBAgMC;YA/LG,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChE,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;oBAC5D,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;oBACpB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,KAAK;wBACvB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;oBACrB,CAAC,CAAC,CAAC;iBACN;gBAED,OAAO;aACV;YAED,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,SAAS,GAAG,SAAS,CAAC,SAAS,EAC/B,WAAW,GAAG,IAAI,CAAC,KAAK,EACxB,YAAY,GAAG,IAAI,CAAC,MAAM,EAC1B,SAAS,GAAG,SAAS,CAAC,eAAe,EACrC,IAAI,GAAG,CAAC,EACR,eAAe,GAAG,WAAW,GAAG,CAAC,CAAC;YAEtC,IAAI,eAAe;gBACf,WAAW,GAAG,CAAC,WAAW,CAAC;YAE/B,IAAI,CAAC,2BAA2B,EAAE,CAAC,OAAO,CAAC,UAAA,MAAM;gBAE7C,IAAI,UAAU,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,UAAU,EAAE,EAAf,CAAe,CAAC,EAAE,CAAC,EAClF,GAAG,GAAc,EAAE,EACnB,KAAK,GAA+B,EAAE,EACtC,QAAQ,GAAG,KAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAA,KAAK,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAA,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,EAA5G,CAA4G,CAAC,CAAC,GAAG,CAAC,UAAA,KAAK;oBAC5J,IAAI,OAAO,GAAa,EAAE,EACtB,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EACnE,EAAE,GAAG,WAAA,OAAO,CAAC,eAAe,CAAC,WAAW,GAAG,WAAA,MAAM,CAAC,MAAM,CAAC,CAAC;oBAE9D,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,UAAA,IAAI;wBACzC,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,UAAC,EAAsB;4BAC3C,IAAI,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAC7E,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,EAA5B,CAA4B,CAAC,CAAC;4BAC1E,IAAI,GAAG,GAAG,CAAC,EAAE;gCACT,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;gCACjB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;6BAChB;4BACD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACtB,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;oBAEH,IAAI,WAAW,GAAG,MAAM,CAAC,SAAS,EAC9B,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG;wBACvB,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;wBACjC,IAAI,CAAC,GAAG,WAAW;4BACf,WAAW,GAAG,CAAC,CAAC;wBACpB,OAAO,CAAC,CAAC;oBACb,CAAC,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,GAAG,WAAW,EAAf,CAAe,CAAC,EAC5B,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAC,GAAG,EAAE,CAAC;wBACzB,OAAO;4BACH,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC;4BACZ,GAAG,EAAE,GAAG;4BACR,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;yBAC0B,CAAC;oBACrD,CAAC,CAAC,CAAC;oBAEP,OAAO;wBACH,SAAS,EAAE,KAAK;wBAChB,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;wBACnD,WAAW,EAAE,WAAW;wBACxB,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,WAAA,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,GAAG,CAAC,EAAR,CAAQ,CAAC,CAAC,CAAC;wBACjE,GAAG,EAAE,OAAO;qBACf,CAAC;gBACN,CAAC,CAAC,CAAC;gBAEP,QAAQ,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAf,CAAe,CAAC,CAAC;gBAEzC,IAAI,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAf,CAAe,CAAC,EAAlC,CAAkC,CAAC,EAClE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,IAAI,CAAC,EAAZ,CAAY,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;;oBAItG,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,EACxB,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAd,CAAc,CAAC,EACjD,KAAK,GAAY,IAAI,CAAC;oBAE1B,oCAAoC;oBAEpC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;wBAClB,KAAK,GAAG,WAAA,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,EAAE,EAAN,CAAM,CAAC,CAAC,CAAC;oBAE1D,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;wBAC9B,IAAI,GAAC,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,IAAI,EAAR,CAAQ,CAAC,EAClD,IAAE,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,IAAI,GAAG,GAAC,CAAC,IAAI,EAAjB,CAAiB,CAAC,CAAC;wBACnE,IAAI,IAAE,EAAE;4BACJ,IAAI,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,IAAI,GAAG,GAAC,CAAC,IAAI,IAAI,GAAG,KAAK,IAAE,IAAI,CAAC,WAAA,OAAO,CAAC,YAAY,CAAC,GAAC,CAAC,EAAE,EAAE,IAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAA7E,CAA6E,CAAC,CAAC;4BAC/H,IAAI,EAAE;gCACF,KAAK,GAAG,WAAA,OAAO,CAAC,eAAe,CAAC,GAAC,CAAC,EAAE,EAAE,IAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;yBAC3D;qBACJ;oBAED,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;wBAC9B,IAAI,GAAC,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,IAAI,EAAR,CAAQ,CAAC,EAClD,IAAE,GAAG,GAAC,CAAC,EAAE,CAAC,GAAG,CAAC,WAAA,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EACnE,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,IAAI,GAAG,GAAC,CAAC,IAAI,IAAI,CAAC,WAAA,OAAO,CAAC,YAAY,CAAC,GAAC,CAAC,EAAE,EAAE,IAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAA5D,CAA4D,CAAC,CAAC;wBAC9G,IAAI,EAAE;4BACF,KAAK,GAAG,WAAA,OAAO,CAAC,eAAe,CAAC,GAAC,CAAC,EAAE,EAAE,IAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;qBACxD;oBAED,IAAI,CAAC,KAAK,EAAE;wBACR,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;wBAC1B,IAAI,KAAK,GAAG,CAAC;4BACT,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC;wBAExC,IAAI,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;wBAErC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,IAAI,EAAR,CAAQ,CAAC,EAClD,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,WAAA,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EACnE,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,WAAA,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,GAAG,WAAA,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBACzG,KAAK,GAAG,WAAA,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;qBACjD;oBAED,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;wBACf,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;oBAEhC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBAChB,KAAK,CAAC,GAAG,GAAG,IAAI,WAAA,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAErC,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,EACf,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;oBAEpB,2CAA2C;oBAE3C,UAAU,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAf,CAAe,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;wBACjD,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;wBACf,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;wBAChF,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;oBAC1B,CAAC,CAAC,CAAC;oBAEH,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAf,CAAe,CAAC,EAAlC,CAAkC,CAAC,CAAC;oBACnE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,IAAI,CAAC,EAAZ,CAAY,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAd,CAAc,CAAC,CAAC,MAAM,EAA1C,CAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;;gBA5D3K,OAAO,OAAO;;iBA6Db;gBAED,IAAI,MAAM,GAAG,WAAA,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EACjC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EACpB,OAAO,GAAG,YAAY,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACnD,IAAI,IAAI,IAAI,CAAC,IAAI,OAAO,GAAG,IAAI;oBAC3B,IAAI,GAAG,OAAO,CAAC;gBACnB,+BAA+B;gBAC/B,QAAQ,CAAC,OAAO,CAAC,UAAA,KAAK;oBAClB,IAAI,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,EAAE,EAAN,CAAM,CAAC,EACvC,KAAK,GAAG,WAAA,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EACpC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,CAAC,EAAJ,CAAI,CAAC,CAAC,CAAC;oBAE7D,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;wBACxB,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;oBAEhC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBAC1B,KAAK,GAAG,IAAI,WAAA,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,WAAA,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAE3D,IAAI,MAAM,GAAG,CAAC,WAAA,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,EAC3D,IAAI,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,aAAa,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,WAAA,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBAE1H,IAAI,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAvB,CAAuB,CAAC,CAAC;oBAE5F,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE;wBAC7B,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;wBAChE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;qBAC/E;yBAAM;wBACH,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,WAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;qBAC/H;oBAED,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;oBACxC,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC;gBAEnC,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,IAAI,eAAe,EAAE;gBACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,KAAK;oBACvB,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;oBAErB,IAAI,KAAK,CAAC,WAAW,EAAE;wBACnB,IAAI,IAAI,GAAG,WAAA,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,EAC9E,MAAM,GAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,eAAe,EAAE,CAAe,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAZ,CAAY,CAAC,EACzG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAW,EAC/C,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAW,EAC/C,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;wBAE5B,KAAK,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;wBAC1F,KAAK,CAAC,WAAW,CAAC,QAAQ,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;qBAChH;gBACL,CAAC,CAAC,CAAC;aACN;iBAAM;gBACH,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,KAAK;oBACvB,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;gBACzB,CAAC,CAAC,CAAC;aACN;QACL,CAAC;QAED,0BAAM,GAAN;YACI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvF,CAAC;QAED,0BAAM,GAAN;YACI,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,CAAC;QAED,4CAAwB,GAAxB,UAAyB,QAA0E,EAAE,SAAqB;YAA1H,iBA8GC;YA7GG,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO;YAEX,IAAI,CAAC,SAAS;gBACV,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAE/B,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAC1B,CAAC,GAAG,EAAE,CAAC,KAAK,EACZ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;YAElB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;gBAC1C,OAAO;YAEX,IAAI,MAAM,GAAG,GAAG,EACZ,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAC7C,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,EAClC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,EACnC,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,EAC9B,IAAY,EACZ,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE7B,IAAI,OAAO,GAAG,GAAG;gBACb,IAAI,GAAG,EAAE,CAAC;iBACT,IAAI,OAAO,GAAG,GAAG;gBAClB,IAAI,GAAG,EAAE,CAAC;;gBAEV,IAAI,GAAG,EAAE,CAAC;YAEd,aAAa,CAAC,aAAa,EAAE,CAAC;YAE9B,GAAG,CAAC,OAAO,CAAC;gBACR,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,IAAI;gBACX,WAAW,EAAE,KAAK;gBAClB,YAAY,EAAE,MAAM;gBACpB,aAAa,EAAE,IAAI;gBACnB,MAAM,EAAE,UAAC,MAAM,EAAE,EAAE,EAAE,KAAK;oBACtB,IAAI,KAAI,CAAC,WAAW,EAAE;wBAClB,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBACrB,OAAO;qBACV;oBAED,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE;wBACtB,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;wBAC5D,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBACrB,OAAO;qBACV;oBAED,IAAI,UAAU,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;oBACpD,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;oBAE1E,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,EACvB,IAAI,GAAG,CAAC,EACR,GAAW,EACX,CAAS,EACT,CAAS,EACT,CAAS,EACT,IAAI,GAAG,KAAK,GAAG,CAAC,EAChB,SAAS,GAAa,EAAE,EACxB,IAAI,GAAG,KAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAA,EAAE;wBACzB,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;wBAC/B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;oBAEjB,UAAU,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE,UAAC,CAAC,EAAE,CAAC;wBACvD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE;4BAC3C,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;4BACvB,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;4BACpB,CAAC,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;4BACxB,CAAC,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;4BACxB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;4BAC1B,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;4BACjD,IAAI,CAAC,GAAG,IAAI;gCACR,IAAI,GAAG,CAAC,CAAC;4BACb,IAAI,CAAC,GAAG,IAAI;gCACR,IAAI,GAAG,CAAC,CAAC;yBAChB;oBACL,CAAC,CAAC,CAAC;oBAEH,IAAI,CAAS,EACT,CAAS,EACT,CAAS,EACT,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,8BAA8B;oBAC3D,QAAQ,GAAG,IAAI,CAAC,CAAC,4BAA4B;oBAEjD,wBAAwB;oBACxB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;wBACzB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;4BACxB,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;4BACvB,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;4BACpB,CAAC,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;4BACxB,CAAC,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;4BAExB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;4BAE1B,IAAI,CAAC,GAAG,QAAQ;gCACZ,QAAQ,GAAG,CAAC,CAAC;4BACjB,mBAAmB;4BACnB,mBAAmB;yBACtB;qBACJ;oBAED,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAEvG,CAAC;gBACD,QAAQ,EAAE,UAAC,OAAO;oBACd,aAAa,CAAC,gBAAgB,EAAE,CAAC;gBACrC,CAAC;aACJ,CAAC,CAAC;QACP,CAAC;QAED,0BAAM,GAAN,UAAO,SAAqB;YACxB,IAAI,CAAC,SAAS;gBACV,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/B,IAAI,KAAK,GAAG,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3E,IAAI,KAAK;gBACL,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,WAAW;gBACjB,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QAED,2BAAO,GAAP;YAAA,iBAqBC;YApBG,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO;YACX,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAC,EAAE,IAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAChF,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,EAAE,KAAK,KAAI,CAAC,EAAE,EAAjB,CAAiB,CAAC,CAAC,CAAC;gBACvD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;aACtB;YACD,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAC,EAAE,IAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACtG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aAC3B;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QACL,gBAAC;IAAD,CArvFA,AAqvFC,IAAA;IArvFY,oBAAS,YAqvFrB,CAAA;IAED;QAAA;QAsFA,CAAC;QArFG,2BAA2B;QAC3B,wDAAwD;QACxD,GAAG;QAEH,kCAAW,GAAX;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,EAAE,EAAf,CAAe,CAAC,CAAC;QACrD,CAAC;QAED,6BAAM,GAAN;YACI,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC7C,IAAI,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,EACrB,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC3B,IAAI,GAAG;oBACH,OAAO,GAAG,CAAC;aAClB;QACL,CAAC;QAED,+BAAQ,GAAR;YACI,IAAI,GAAG,GAAmE,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAA4C,CAAC;YAC/I,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,IAAI;gBACtB,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC1C,IAAI,KAAK;oBACL,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACtE,CAAC,CAAC,CAAC;YACH,OAAO,GAAG,CAAC;QACf,CAAC;QAED,iCAAU,GAAV;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,UAAU,EAAE,EAAd,CAAc,CAAC,CAAC;QACpD,CAAC;QAED,0CAA0C;QAC1C,iEAAiE;QACjE,GAAG;QAEH,kCAAW,GAAX,UAAY,QAAiB;YACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,6BAAM,GAAN,UAAO,GAAoB;YACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,iCAAU,GAAV,UAAW,OAAmC;YAC1C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,+BAAQ,GAAR,UAAS,KAA6B;YAClC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAE7B,IAAI,KAAK,EAAE;gBACP,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;gBACvB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;oBACvB,OAAO;gBAEX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC1B,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACpB,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM;wBACnB,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;iBACpC;aAEJ;QACL,CAAC;QAED,iCAAU,GAAV,UAAW,OAAgB;YACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,sBAAI,kCAAQ;iBAAZ;gBACI,IAAI,IAAI,GAAG,IAAI,CAAC,QAA0B,CAAC;gBAC3C,IAAI,IAAI;oBACJ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,EAAN,CAAM,CAAC,CAAC;gBAC5C,OAAO,EAAE,CAAC;YACd,CAAC;;;WAAA;QAID,sBAAI,qCAAW;iBAAf;gBACI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,WAAW,EAAf,CAAe,CAAC,CAAC;YACrD,CAAC;iBAED,UAAgB,QAAiB;gBAC7B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC;;;WAJA;QAKL,mBAAC;IAAD,CAtFA,AAsFC,IAAA;IAtFY,uBAAY,eAsFxB,CAAA;IAED;QAAoC,kCAAS;QACzC,wBAAY,SAAoB;YAAhC,YACI,kBAAM,SAAS,EAAE,IAAI,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAiEzD;YAED,gBAAU,GAAgB,EAAE,CAAC;YAjEzB,EAAE,CAAC,KAAK,CAAC,KAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;YAE/B,KAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC;YAE9B,KAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,KAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YAEvB,mIAAmI;YAEnI,0KAA0K;YAC1K,IAAI,cAAc,GAAwB,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC;YACnG,IAAI,aAAa,GAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YAErE,EAAE,CAAC,OAAO,CAAC,KAAI,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAC;YAEhH,OAAO,KAAI,CAAC,MAAM,CAAC;YAEnB,EAAE,CAAC,cAAc,CAAC,KAAI,EAAE,QAAQ,EAC5B;gBACI,GAAG,EAAE;oBACD,IAAI,EAAE,GAAG,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChE,OAAO,KAAI,CAAC,UAAU,CAAC,MAAM,IAAI,KAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,KAAK,EAAE,EAAf,CAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1F,CAAC;gBACD,GAAG,EAAE,UAAC,CAAS;oBACX,KAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzD,CAAC;aACJ,CAAC,CAAC;YAEP,cAAc,CAAC,OAAO,CAAC,UAAA,CAAC;gBAEpB,OAAO,KAAI,CAAC,CAAC,CAAC,CAAC;gBAEf,EAAE,CAAC,cAAc,CAAC,KAAW,EAAE,CAAC,EAC5B;oBACI,GAAG,EAAE;wBACD,OAAO,KAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAN,CAAM,CAAC,CAAC;oBAC9C,CAAC;oBACD,GAAG,EAAE,UAAC,CAAU;wBACZ,KAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,CAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzD,CAAC;iBACJ,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;YAEH,aAAa,CAAC,OAAO,CAAC,UAAA,CAAC;gBAEnB,OAAO,KAAI,CAAC,CAAC,CAAC,CAAC;gBAEf,EAAE,CAAC,cAAc,CAAC,KAAW,EAAE,CAAC,EAC5B;oBACI,GAAG,EAAE;wBACD,IAAI,KAAI,CAAC,UAAU,CAAC,MAAM,EAAE;4BACxB,IAAI,EAAE,GAAG,KAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC/B,IAAI,KAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAX,CAAW,CAAC;gCACvC,OAAO,EAAE,CAAC;yBACjB;wBAED,OAAO,IAAW,CAAC;oBACvB,CAAC;oBACD,GAAG,EAAE,UAAC,CAAS;wBACX,KAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,CAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvD,CAAC;iBACJ,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;;QACP,CAAC;QAMD,qCAAY,GAAZ;YACI,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,OAAO,CAAC,mBAAmB,CAAC;gBACtD,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5F,CAAC;QAED,+BAAM,GAAN;YACI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAA,SAAS;gBAC7B,IAAI,CAAC,SAAS,CAAC,WAAW;oBACtB,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC1G,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QAED,oCAAW,GAAX;YACI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAA,SAAS;gBAC7B,IAAI,CAAC,SAAS,CAAC,WAAW;oBACtB,SAAS,CAAC,WAAW,EAAE,CAAC;YAChC,CAAC,CAAC,CAAC;QACP,CAAC;QACL,qBAAC;IAAD,CA5FA,AA4FC,CA5FmC,SAAS,GA4F5C;IA5FY,yBAAc,iBA4F1B,CAAA;IAED;QACI,sBAAY,OAAsB,EAAE,SAAoB;YAAxD,iBA6FC;YAGD,aAAQ,GAAyB,EAAE,CAAC;YAOpC,aAAQ,GAAW,CAAC,CAAC;YAtGjB,IAAI,OAAO,EAAE;gBAET,CAAC,2BAA2B,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,YAAY,CAAC;qBACjF,OAAO,CAAC,UAAC,KAAa;oBACnB,IAAI,CAAC,GAAG,EAAE,CAAC;oBACX,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5E,IAAI,OAAO,CAAC,KAAK,CAAC;wBACd,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAA7D,CAA6D,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvJ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;gBAEP,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE;oBACrB,QAAQ,GAAG,EAAE;wBACT,KAAK,UAAU,CAAC;wBAChB,KAAK,OAAO;4BACR,MAAM;wBACV,KAAK,UAAU;4BACX,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;gCAChC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;4BAC7B,MAAM;wBACV;4BACI,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;4BACzB,MAAM;qBACb;iBACJ;aACJ;YAED,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAE3B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;gBACzB,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAQ,OAAO,KAAI,CAAC,kBAAkB,IAAI,KAAI,CAAC,KAAK,IAAI,CAAC,KAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE1H,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YAErG,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE;gBAC7B,OAAO,KAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAChC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,EACpC;gBACI,GAAG,EAAE;oBACD,OAAO,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAjB,CAAiB,CAAC,CAAC;gBACvD,CAAC;gBACD,GAAG,EAAE,UAAC,CAAU;oBACZ,KAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3D,CAAC;aACJ,CAAC,CAAC;YAEP,wDAAwD;YACxD,wDAAwD;YACxD,2BAA2B;YAC3B,sBAAsB;YAEtB,mCAAmC;YACnC,gJAAgJ;YAEhJ,uCAAuC;YACvC,gDAAgD;YAChD,kBAAkB;YAClB,KAAK;YAEL,2CAA2C;YAC3C,OAAO;YACP,sBAAsB;YACtB,oHAAoH;YACpH,YAAY;YACZ,2CAA2C;YAC3C,kCAAkC;YAClC,wDAAwD;YACxD,kBAAkB;YAClB,+CAA+C;YAC/C,WAAW;YACX,SAAS;YAET,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;gBAC9B,IAAI,OAAO,GAAa,EAAE,CAAC;gBAC3B,IAAI,KAAK,GAAG,KAAI,CAAC,QAAQ,CAAC;gBAC1B,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;oBACd,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAqB,CAAC;oBAC1C,IAAI,QAAQ,EAAE;wBACV,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;wBACzB,IAAI,EAAE,EAAE;4BACJ,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;4BACrB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;yBACxB;qBACJ;gBACL,CAAC,CAAC,CAAC;gBACH,OAAO,WAAA,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;QACP,CAAC;QA+BD,2CAAoB,GAApB,UAAqB,CAAU;YAC3B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;QAED,iCAAU,GAAV,UAAW,KAAc;YACrB,IAAI,KAAK,KAAK,SAAS;gBACnB,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjC,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,gCAAgC,CAAC,CAAC,MAAM,EAAE;gBACrF,IAAI,CAAC,GAAG,CAAC,CAAC,gCAAgC,CAAC,CAAC,GAAG,EAAE,CAAC;gBAClD,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;oBAC1C,OAAO,GAAG,CAAC,CAAC;aACnB;YACD,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB;gBACzC,OAAO,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,OAAO,OAAO,CAAC;QACnB,CAAC;QAED,sCAAe,GAAf,UAAgB,IAAe,EAAE,KAAa;YAC1C,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EACxC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;YAE1B,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAEnC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,YAAY,SAAS,EAAE;gBACjD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,QAAQ,GAAa,EAAE,CAAC;gBAC5B,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAErC,IAAI,SAAS,CAAC,SAAS,IAAI,KAAK,KAAK,gBAAgB,IAAI,gBAAgB,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE;oBAC9J,IAAI,IAAI,GAAG,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7C,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,KAAK,gBAAgB,EAAE,CAAC,IAAI,IAAI,EAAE;wBACnD,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ;4BAC1C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;qBACvC;iBACJ;;oBACG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAE3B,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;aACxC;iBAAM;gBACH,IAAI,SAAS,CAAC,SAAS,IAAI,KAAK,KAAK,gBAAgB,IAAI,gBAAgB,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE;oBAC9J,IAAI,IAAI,GAAG,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7C,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,KAAK,gBAAgB,EAAE,CAAC,IAAI,IAAI,EAAE;wBACnD,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ;4BAC1C,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;qBACnD;iBACJ;;oBACG,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;aAC1C;YAED,IAAI,CAAC,gBAAgB,GAAG,CAAC,KAAK,CAAC;YAE/B,OAAO,IAAI,CAAC,CAAC,2BAA2B;QAC5C,CAAC;QAED,qCAAc,GAAd,UAAe,EAAU;YACrB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC7B,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;gBACvB,OAAO,IAAI,CAAC;YAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC7C,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE;oBACvB,OAAO,IAAI,CAAC;aACnB;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,iCAAU,GAAV,UAAW,EAAU;YACjB,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,EAArC,CAAqC,CAAC,CAAC;YAC3E,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,iCAAU,GAAV,UAAW,IAAwB,EAAE,SAAoB;YACrD,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ;oBACtD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACxB;oBACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;wBACtC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;;wBAExB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;iBACzB;aACJ;QACL,CAAC;QAED,gHAAgH;QAChH,kFAAkF;QAClF,iBAAiB;QACjB,oDAAoD;QACpD,kCAAkC;QAClC,GAAG;QAEH,yIAAyI;QACzI,kFAAkF;QAClF,iBAAiB;QACjB,mDAAmD;QACnD,kCAAkC;QAClC,GAAG;QAEH,6CAAsB,GAAtB;YAAA,iBAMC;YALG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;gBACtB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,IAAI;oBACtB,KAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;aACN;QACL,CAAC;QAED,yCAAkB,GAAlB,UAAmB,SAAoB,EAAE,IAA8C,EAAE,KAAa,EAAE,IAAwB;YAC5H,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,UAAU;gBAC3D,OAAO;YACX,wFAAwF;YACxF,6DAA6D;YAC7D,SAAS,CAAC,SAAS,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;YACrG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,uCAAgB,GAAhB,UAAiB,IAAwB;YACrC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU;gBACvE,OAAO;YACX,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI;oBAClB,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU;oBACxB,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;aAClC;YAED,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACzC,CAAC;QAED,mCAAY,GAAZ,UAAa,SAAoB;YAC7B,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YAE1B,IAAU,IAAK,CAAC,mBAAmB,EAAE;gBAC3B,IAAK,CAAC,mBAAmB,GAAG,KAAK,CAAC;gBAExC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAE5B,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;oBACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oBACpD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oBACpD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACrD,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAChD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBACpD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAEnD,sDAAsD;gBACtD,iDAAiD;gBACjD,oDAAoD;aACvD;QACL,CAAC;QAED,gCAAS,GAAT,UAAU,SAAoB;YAA9B,iBAwBC;YAvBG,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI,EACrB,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,EACvB,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;YAEpC,IAAI,CAAO,IAAK,CAAC,mBAAmB,EAAE;gBAC5B,IAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC;gBAEvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;gBACrG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;gBAC7G,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;gBAE3G,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;oBACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAI,EAAE,IAAI,CAAC,CAAC,CAAC;oBACzF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAI,EAAE,IAAI,CAAC,CAAC,CAAC;oBACzF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC3G,CAAC,CAAC,CAAC;gBAEH,uGAAuG;gBACvG,gGAAgG;gBAChG,mGAAmG;aAEtG;QACL,CAAC;QAED,wCAAiB,GAAjB,UAAkB,OAAwD;YAA1E,iBAWC;YAVG,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;gBACnB,QAAQ,MAAM,CAAC,MAAM,EAAE;oBACnB,KAAK,SAAS;wBACV,KAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACrC,MAAM;oBACV,KAAK,OAAO;wBACR,KAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACnC,MAAM;iBACb;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAED,wCAAiB,GAAjB,UAAkB,IAAwB;YACtC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;gBACzB,OAAO;YAEX,IAAI,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAqB,CAAC,CAAC;YAElD,IAAI,IAAI,CAAC,QAAQ,IAAU,IAAI,CAAC,QAAS,CAAC,OAAO;gBACvC,IAAI,CAAC,QAAS,CAAC,OAAO,EAAE,CAAC;;gBAE/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YAErB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAExB,YAAY,CAAC,wBAAwB,EAAE,CAAC;QAE5C,CAAC;QAED,sCAAe,GAAf,UAAgB,IAAwB;YAAxC,iBA4DC;YA3DG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;gBACzB,OAAO;YAEX,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAE/B,IAAI,CAAC,IAAI,CAAC,QAAQ;gBACd,IAAI,CAAC,QAAQ,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE/G,IAAI,IAAI,YAAY,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,CAAO,IAAK,CAAC,eAAe,EAAE;gBAC/D,IAAK,CAAC,eAAe,GAAG,IAAI,CAAC;gBACnC,IAAI,CAAC,QAAQ,GAAG,UAAC,IAAS;oBACtB,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW;wBAC/D,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBAEnE,KAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAqB,CAAC,CAAC;oBAC9C,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBAClE,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAqB,CAAC,CAAC;oBAC3C,OAAO,GAAG,CAAC;gBACf,CAAC,CAAC;aACL;YAED,IAAI,IAAI,CAAC,kBAAkB;gBACvB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAE5C,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAE/D,IAAI,CAAC,UAAU,CAAC;gBACZ,SAAS,EAAE,SAAS;gBACpB,iDAAiD;gBACjD,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB;gBAClF,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAqB,CAAC,CAAC;YAE3C,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YACvC,2DAA2D;YAC3D,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU;gBACxB,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YAE/B,IAAI,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC;YAEpD,IAAI,QAAQ,KAAK,qBAAqB;gBAClC,OAAO;YAEX,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,gBAAgB,IAAI,QAAQ,KAAK,WAAW,EAAE;gBACxF,oDAAoD;gBACpD,IAAI,IAAI,CAAC,MAAM;oBACX,SAAS,CAAC,eAAe,EAAE,CAAC;aACnC;iBAAM;gBACH,IAAI,IAAI,CAAC,MAAM,EAAE;oBACb,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;oBACnC,SAAS,CAAC,eAAe,EAAE,CAAC;iBAC/B;;oBACG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;aACnC;QACL,CAAC;QACL,mBAAC;IAAD,CAnZA,AAmZC,IAAA;IAnZY,uBAAY,eAmZxB,CAAA;IAQD;QACI,oBAAY,SAAoB,EAAE,KAAc,EAAE,GAAY,EAAE,MAAe;YAA/E,iBAuGC;YA+VD,aAAQ,GAAY,KAAK,CAAC;YAC1B,eAAU,GAAY,KAAK,CAAC;YAC5B,YAAO,GAAY,KAAK,CAAC;YAUzB,SAAI,GAAc,CAAC,IAAI,WAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,WAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzD,WAAM,GAAY,KAAK,CAAC;YACxB,WAAM,GAAY,KAAK,CAAC;YACxB,cAAS,GAAY,KAAK,CAAC;YAndvB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,WAAA,MAAM,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;YAE7B,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YAClC,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;YAE7B,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAC5B;gBACI,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI;gBAChB,GAAG,EAAE;oBACD,OAAO,EAAE,CAAC;gBACd,CAAC;gBACD,GAAG,EAAE,UAAC,CAAC;oBACH,IAAI,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;wBACzC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;oBAC3C,EAAE,GAAG,CAAC,CAAC;oBACP,IAAI,EAAE,IAAI,CAAC,KAAI,CAAC,WAAW;wBACvB,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,KAAI,CAAC,CAAC;gBAClD,CAAC;aACJ,CAAC,CAAC;YAEP,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAE3B,IAAI,YAAY,GAAgC;gBAC5C,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,MAAM,IAAI,CAAC;gBACnB,OAAO,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC;YAEF,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,UAAU,CAAgC,CAAC,CAAC;YACtI,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,UAAU,CAAgC,CAAC,CAAC;YAEhJ,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAE1C,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAE7C,aAAa,CAAC,UAAU,CAAC;gBACrB,YAAY,EAAE,UAAU,CAAC,cAAc;gBACvC,SAAS,EAAE,SAAS;gBACpB,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC,QAAQ;gBACrC,aAAa,EAAE,CAAC;gBAChB,OAAO,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1G,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YAClG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YAChG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YAC9F,6FAA6F;YAE7F,IAAI,CAAC,MAAM,EAAE,CAAC;YAEd,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YAEpF,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAChF,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5E,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAE5E,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EACzB;gBACI,GAAG,EAAE;oBACD,IAAI,CAAC,KAAI,CAAC,QAAQ,IAAI,CAAC,KAAI,CAAC,SAAS;wBACjC,OAAO,WAAA,OAAO,CAAC,IAAI,CAAC;oBACxB,IAAI,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC;oBACzD,OAAO,SAAS,CAAC,WAAW,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC;gBAC7C,CAAC;gBACD,GAAG,EAAE,UAAC,CAAU;oBACZ,IAAI,CAAC,KAAI,CAAC,QAAQ,IAAI,CAAC,KAAI,CAAC,SAAS;wBACjC,OAAO;oBACX,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAC9B,CAAC,GAAG,KAAI,CAAC,GAAG,EACZ,CAAC,GAAG,KAAI,CAAC,KAAK,CAAC;oBACnB,KAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAC9B;gBACI,GAAG,EAAE;oBACD,IAAI,CAAC,KAAI,CAAC,QAAQ,IAAI,CAAC,KAAI,CAAC,SAAS;wBACjC,OAAO,CAAC,CAAC;oBACb,IAAI,CAAC,GAAG,KAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,KAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;oBACzD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;gBAChD,CAAC;gBACD,GAAG,EAAE,UAAC,CAAS;oBACX,IAAI,CAAC,KAAI,CAAC,QAAQ,IAAI,CAAC,KAAI,CAAC,SAAS;wBACjC,OAAO;oBACX,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;oBAC5B,IAAI,CAAC,GAAG,IAAI,WAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBAClD,KAAI,CAAC,GAAG,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,KAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,CAAC;aACJ,CAAC,CAAC;QAEX,CAAC;QAEO,qCAAgB,GAAxB,UAAyB,QAAiB;YACtC,OAAO,CAAC,GAAG,CAAC,uBAAqB,QAAU,CAAC,CAAC;YAC7C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ;gBACd,OAAO;YACX,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACrB,OAAO,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;gBAC1B,OAAO,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;QACP,CAAC;QAEO,oCAAe,GAAvB;YACI,IAAI,CAAC,IAAI,CAAC,QAAQ;gBACd,OAAO;YAEX,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAE7C,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;gBAC1B,SAAS,EAAE,SAAS;aACvB,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ;gBAC3B,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACpE,CAAC;QAEM,wBAAa,GAApB,UAAqB,CAAU,EAAE,SAAoB;YACjD,IAAI,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC;YAElD,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM;gBACnC,OAAO,CAAC,CAAC;YAEb,IAAI,KAAK,GAAG,CAAC,EACT,OAAO,GAAc,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAA,OAAO,CAAC,KAAK,EAAE,WAAA,OAAO,CAAC,KAAK,CAAC,EAC7E,WAAW,GAAY,IAAI,CAAC;YAEhC,IAAI,WAAW,CAAC,MAAM,EAAE;gBACpB,WAAW,CAAC,OAAO,CAAC,UAAA,UAAU;oBAC1B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;gBACjD,CAAC,CAAC,CAAC;aACN;YAED,OAAO,CAAC,OAAO,CAAC,UAAA,MAAM;gBAClB,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,GAAG,KAAK,EAAE;oBACX,KAAK,GAAG,CAAC,CAAC;oBACV,WAAW,GAAG,MAAM,CAAC;iBACxB;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC;gBACrC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAEpC,OAAO,WAAW,IAAI,CAAC,CAAC;QAC5B,CAAC;QAEM,+BAAoB,GAA3B,UAA4B,cAAsB,EAAE,UAAkB,EAAE,SAAiB,EAAE,SAAoB,EAAE,KAAc,EAAE,WAAoB;YACjJ,IAAI,MAAM,GAAW,IAAI,CAAC;YAE1B,IAAI,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE,EAC5B,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAC7C,cAAc,GAAG,UAAU,CAAC,cAAc,EAC1C,QAAQ,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;YAE1C,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,IAAI,KAAK,IAAI,UAAU,EAAE;gBAErB,IAAI,MAAI,GAAG,UAAU,CAAC,SAAS,EAAE,EAC7B,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAI,CAAC,EAClB,KAAK,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC;gBAEjC,IAAI,KAAK,GAAG,CAAC,EAAE;oBACX,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EACtB,GAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EACjB,OAAK,GAAG,CAAC,EACT,SAAO,GAAc,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAA,OAAO,CAAC,KAAK,EAAE,WAAA,OAAO,CAAC,KAAK,CAAC,EAC7E,aAAW,GAAY,IAAI,CAAC;oBAEhC,SAAS;oBACT,IAAI,qBAAqB,GAAG,IAAI,CAAC;oBACjC,IAAI,qBAAqB,EAAE;wBACvB,IAAI,QAAQ,GAAG,MAAI,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;wBACpE,SAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAA;qBAC7E;oBAED,IAAI,WAAW,CAAC,MAAM,EAAE;wBACpB,WAAW,CAAC,OAAO,CAAC,UAAA,UAAU;4BAC1B,SAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;wBACjD,CAAC,CAAC,CAAC;qBACN;oBAED,SAAO,CAAC,OAAO,CAAC,UAAA,MAAM;wBAClB,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;wBACpC,IAAI,CAAC,GAAG,OAAK,EAAE;4BACX,OAAK,GAAG,CAAC,CAAC;4BACV,aAAW,GAAG,MAAM,CAAC;yBACxB;oBACL,CAAC,CAAC,CAAC;oBAEH,IAAI,aAAW,EAAE;wBACb,IAAI,GAAC,CAAC,GAAG,CAAC,aAAW,CAAC,GAAG,CAAC;4BACtB,aAAW,GAAG,aAAW,CAAC,GAAG,EAAE,CAAC;wBAEpC,IAAI,WAAW,CAAC,MAAM,EAAE;4BACpB,IAAI,SAAO,GAAG,MAAM,CAAC,SAAS,EAC1B,IAAI,GAAG,aAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EACzB,KAAG,GAAG,IAAI,WAAA,SAAS,CAAC,MAAI,EAAE,MAAI,CAAC,GAAG,CAAC,aAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAChE,YAAU,GAAY,IAAI,CAAC;4BAE/B,IAAI,IAAI,KAAK,CAAC,EAAE;gCAEZ,WAAW,CAAC,OAAO,CAAC,UAAA,UAAU;oCAC1B,IAAI,WAAW,EAAE;wCACb,IAAI,YAAY,GAAG,UAAU,CAAC,eAAe,CAAC,KAAG,CAAC,CAAC;wCACnD,IAAI,YAAY;4CACZ,YAAY,CAAC,GAAG,CAAC,MAAI,CAAC,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,aAAW,CAAC,GAAG,CAAC,EAAE;4CAC7D,IAAI,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;4CACpD,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,GAAG,SAAO,EAAE;gDAC1C,SAAO,GAAG,IAAI,CAAC;gDACf,YAAU,GAAG,YAAY,CAAC;6CAC7B;yCACJ;qCACJ;yCAAM,IAAI,UAAU,CAAC,eAAe,CAAC,KAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,IAAI,cAAc;wCACvE,OAAO,GAAG,IAAI,CAAC;gCACvB,CAAC,CAAC,CAAC;6BACN;4BAED,IAAI,YAAU,EAAE;gCACZ,MAAM,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,YAAU,CAAC,CAAC;gCACxC,OAAO,GAAG,IAAI,CAAC;6BAClB;iCAAM;gCACH,MAAM,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,KAAG,CAAC,GAAG,CAAC,CAAC;gCACrC,OAAO,GAAG,IAAI,CAAC;6BAClB;yBACJ;6BAAM;4BACH,MAAM,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,MAAI,CAAC,GAAG,CAAC,aAAW,CAAC,GAAG,CAAC,aAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC3E,OAAO,GAAG,IAAI,CAAC;yBAClB;qBACJ;iBACJ;aACJ;YAED,IAAI,CAAC,MAAM,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,EAAE;gBAC9C,IAAI,SAAO,GAAG,MAAM,CAAC,SAAS,EAC1B,YAAU,GAAY,IAAI,CAAC;gBAE/B,IAAI,CAAC,GAAG,SAAS,CAAC,eAAe,CAAC,WAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBACzF,IAAI,CAAC,EAAE;oBACH,SAAO,GAAG,CAAC,CAAC;oBACZ,YAAU,GAAG,CAAC,CAAC;iBAClB;qBAAM;oBACH,WAAW,CAAC,OAAO,CAAC,UAAA,UAAU;wBAC1B,IAAI,IAAI,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;wBACvD,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,GAAG,SAAO,EAAE;4BAC1C,SAAO,GAAG,IAAI,CAAC;4BACf,YAAU,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;yBACjD;oBACL,CAAC,CAAC,CAAC;iBACN;gBAED,IAAI,YAAU,EAAE;oBACZ,MAAM,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,YAAU,CAAC,CAAC;oBACxC,OAAO,GAAG,IAAI,CAAC;iBAClB;aACJ;YAED,OAAO;gBACH,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,MAAM,IAAI,SAAS;aAC9B,CAAC;QACN,CAAC;QAEM,8BAAmB,GAA1B,UAA2B,UAAkB,EAAE,SAAiB,EAAE,SAAoB;YAClF,IAAI,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,EAAE,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEnB,IAAI,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;YACtD,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC;YACxI,IAAI,SAAS,IAAI,CAAC;gBACd,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC;YAChE,IAAI,OAAO,IAAI,CAAC;gBACZ,OAAO,GAAG,SAAS,CAAC;YAExB,OAAO,WAAA,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC;QAEM,4BAAiB,GAAxB,UAAyB,UAAkB,EAAE,SAAiB,EAAE,SAAiB;YAC7E,IAAI,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,EAAE,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEnB,IAAI,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;YAEtD,OAAO,WAAA,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,oCAAe,GAAf,UAAgB,CAAU;YACtB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW;gBACtB,OAAO,IAAI,CAAC;YAEhB,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,oCAAe,GAAf,UAAgB,CAAU;YACtB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW;gBACtB,OAAO,MAAM,CAAC,iBAAiB,CAAC;YAEpC,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,gCAAW,GAAX;YACI,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;QAED,8BAAS,GAAT;YACI,OAAO,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;QAED,oCAAe,GAAf,UAAgB,GAAc;YAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC;QAED,gCAAW,GAAX;YACI,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ;gBACjC,OAAO;YACX,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,EACpB,OAAO,GAAG,IAAI,CAAC,OAAO,EACtB,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC7B,IAAI,QAAQ;gBACR,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;;gBAEhG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACxF,CAAC;QAED,4BAAO,GAAP,UAAQ,CAAkB;YACtB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC,OAAO;gBACb,GAAG,EAAE,OAAO;gBACZ,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;gBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;gBACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;gBACjD,EAAE,EAAE,IAAI;aACX,CAAC,CAAC;YACP,IAAI,CAAC,GAAG,GAAG,IAAI,WAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,4BAAO,GAAP,UAAQ,CAAkB;YACtB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC,OAAO;gBACb,GAAG,EAAE,OAAO;gBACZ,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;gBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;gBACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;gBACjD,EAAE,EAAE,IAAI;aACX,CAAC,CAAC;YACP,IAAI,CAAC,GAAG,GAAG,IAAI,WAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,gCAAW,GAAX,UAAY,CAAkB;YAC1B,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC,GAAG;gBACT,GAAG,EAAE,GAAG;gBACR,eAAe,EAAE,IAAI;gBACrB,WAAW,EAAE,IAAI;aACpB,CAAC,CAAC;YACP,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACtB,CAAC;QAED,+BAAU,GAAV,UAAW,SAAoB,EAAE,CAAU;YACvC,IAAI,CAAC,IAAI,CAAC,QAAQ;gBACd,OAAO;YACX,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;gBAC1B,SAAS,EAAE,CAAC,CAAC,CAAC;aACjB,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAED,gCAAW,GAAX,UAAY,SAAoB;YAC5B,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB;QACL,CAAC;QAED,+BAAU,GAAV,UAAW,SAAoB;YAC3B,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB;QACL,CAAC;QAED,8BAAS,GAAT,UAAU,SAAoB;YAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,IAAI,EAAE;gBACN,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAuB,CAAC,EAC7E,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAuB,CAAC,CAAC;gBAE9E,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,EACrB,CAAC,GAAG,GAAG,CAAC,SAAS,EAAE,EACnB,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;gBAEnC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBAE/B,IAAI,CAAC,SAAS,GAAG,IAAI,WAAA,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;aAE9C;QACL,CAAC;QAgDD,sBAAI,6BAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,KAAK,CAAC;YACtB,CAAC;iBAED,UAAU,KAAa;gBACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,MAAM,EAAE,CAAC;YAClB,CAAC;;;WALA;QAOD,sBAAI,2BAAG;iBAAP;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC;YACpB,CAAC;iBAED,UAAQ,KAAa;gBACjB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;gBACjB,IAAI,CAAC,MAAM,EAAE,CAAC;YAClB,CAAC;;;WALA;QAOD,sBAAI,6BAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,KAAK,CAAC;YACtB,CAAC;;;WAAA;QAED,sBAAI,+BAAO;iBAAX;gBACI,OAAO,IAAI,CAAC,SAAS,CAAC;YAC1B,CAAC;;;WAAA;QAED,gCAAW,GAAX,UAAY,CAAS,EAAE,CAAS;YAC5B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QAED,2BAAM,GAAN;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,EAClB,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,WAAA,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EACtF,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EACtB,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,EACrB,CAAC,GAAG,GAAG,CAAC,SAAS,EAAE,EACnB,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAC9B,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpB,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YAE/B,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAEnC,IAAI,CAAC,SAAS,GAAG,IAAI,WAAA,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAE3C,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,iCAAY,GAAZ,UAAa,MAAc;YACvB,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO;YAEX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QAED,iCAAY,GAAZ,UAAa,MAAe;YACxB,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO;YAEX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QAED,2BAAM,GAAN,UAAO,GAAoB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QAED,2BAAM,GAAN;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClC,CAAC;QAED,2BAAM,GAAN,UAAO,SAAoB;YACvB,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,4BAAO,GAAP;YAAA,iBAuBC;YAtBG,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO;YAEX,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS;gBACzB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,EAAE,KAAK,KAAI,CAAC,EAAE,EAAjB,CAAiB,CAAC,CAAC;YAEzE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YAEvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YAC5D,0DAA0D;YAC1D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YAE3D,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtB,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAE3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC5B,CAAC;QArJM,yBAAc,GAAG,EAAE,CAAC;QAEpB,qBAAU,GAAgB;YAC7B,YAAY,EAAE,GAAG;YACjB,WAAW,EAAE,SAAS;YACtB,aAAa,EAAE,GAAG;SACrB,CAAC;QAEK,4BAAiB,GAAgB;YACpC,YAAY,EAAE,GAAG;YACjB,WAAW,EAAE,SAAS;YACtB,aAAa,EAAE,GAAG;SACrB,CAAC;QAEK,6BAAkB,GAAgB;YACrC,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,SAAS;YACtB,aAAa,EAAE,CAAC;SACnB,CAAC;QAEK,oCAAyB,GAAgB;YAC5C,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,SAAS;YACtB,aAAa,EAAE,CAAC;SACnB,CAAC;QA8HN,iBAAC;KAjkBD,AAikBC,IAAA;IAjkBY,qBAAU,aAikBtB,CAAA;IAED;QAEI,qBAAY,QAAgB,EAAE,WAAmB,EAAE,OAAgB,EAAE,SAAoB,EAAE,MAAe;YA2F1G,YAAO,GAAY,KAAK,CAAC;YACzB,YAAO,GAAY,IAAI,CAAC;YACxB,cAAS,GAAY,KAAK,CAAC;YA5FvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,WAAA,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YAC/B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;YAEzB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YAEnC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC9C,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;gBACpC,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,MAAM,EAAE,MAAM,IAAI,EAAE;gBACpB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,KAAK;aACnB,CAAC,CAAC;YAEH,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/E,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3E,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACzE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACxE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAE7E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YACnF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YAC3F,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YAEzF,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QAED,2BAAK,GAAL,UAAM,SAAoB,EAAE,MAAe;YACvC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACrG,CAAC;QAED,6BAAO,GAAP,UAAQ,SAAoB;YACxB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,SAAS,CAAC,gBAAgB,KAAK,iBAAiB;gBAC9E,SAAS,CAAC,SAAS,CAAC,WAA+B,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACjG,CAAC;QAED,iCAAW,GAAX,UAAY,SAAoB;YAC5B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,SAAS,CAAC,gBAAgB,KAAK,iBAAiB;gBAC9E,SAAS,CAAC,SAAS,CAAC,WAA+B,CAAC,sBAAsB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACrG,CAAC;QAED,gCAAU,GAAV,UAAW,SAAoB;YAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,SAAS,CAAC,gBAAgB,KAAK,iBAAiB;gBAC9E,SAAS,CAAC,SAAS,CAAC,WAA+B,CAAC,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpG,CAAC;QAED,mCAAa,GAAb;YACI,IAAI,CAAC,IAAI,CAAC,MAAM;gBACZ,OAAO;YACX,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QAED,qCAAe,GAAf;YACI,IAAI,CAAC,IAAI,CAAC,MAAM;gBACZ,OAAO;YACX,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC;QAED,iCAAW,GAAX;YACI,IAAI,CAAC,IAAI,CAAC,MAAM;gBACZ,OAAO;YACX,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;gBACpC,OAAO,EAAE,IAAI,CAAC,OAAO;aACxB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/E,CAAC;QAED,4BAAM,GAAN;YACI,IAAI,CAAC,IAAI,CAAC,MAAM;gBACZ,OAAO;YACX,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;gBACpC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE;aACzB,CAAC,CAAC;QACP,CAAC;QAED,oCAAc,GAAd;YACI,IAAI,CAAC,IAAI,CAAC,MAAM;gBACZ,OAAO;YACX,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACxD,CAAC;QA8BD,+BAAS,GAAT;YAEI,IAAI,IAAI,GAAG,WAAW,CAAC,IAAI,EACvB,IAAI,GAAG,WAAW,CAAC,IAAI,EACvB,IAAI,GAAG,WAAA,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,EAChD,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,EACjB,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,EAChB,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EACZ,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAErB,IAAI,IAAI,GAAG,OAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAM,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,WAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAM,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,WAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAM,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,WAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAO,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,WAAM,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAG,CAAC;YAE7O,IAAI,IAAI,GAAuB;gBAC3B,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAC;aACX,CAAC;YAEF,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAuB,CAAC;QACvH,CAAC;QAED,6BAAO,GAAP;YACI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAEzB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBACtD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBAErD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;aACtB;YACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,0CAAoB,GAApB;YACI,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO,IAAI,CAAC;YAEhB,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YACtB,OAAO;gBACH,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,WAAW,EAAE,IAAI,CAAC,WAAW;aAChC,CAAA;QACL,CAAC;QAED,oCAAc,GAAd,UAAe,cAAgC,EAAE,SAAoB;YACjE,IAAI,IAAI,GAAG,WAAA,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,EAChD,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAC7B,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,EAA5B,CAA4B,CAAC,EACxE,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC1B,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEpD,IAAI,CAAC,QAAQ,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QACnC,CAAC;QAED,kCAAY,GAAZ,UAAa,MAAc;YACvB,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,kCAAY,GAAZ,UAAa,MAAe;YACxB,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACnE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9C,CAAC;QA3FM,gBAAI,GAAG,EAAE,CAAC;QACV,gBAAI,GAAG,CAAC,CAAC;QAQT,sBAAU,GAAgB;YAC7B,WAAW,EAAE,SAAS;YACtB,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,CAAC;YACf,aAAa,EAAE,GAAG;SACrB,CAAC;QAEK,6BAAiB,GAAgB;YACpC,WAAW,EAAE,SAAS;YACtB,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,CAAC;YACf,aAAa,EAAE,CAAC;SACnB,CAAC;QAqEN,kBAAC;KAvLD,AAuLC,IAAA;IAvLY,sBAAW,cAuLvB,CAAA;IAOD;QAAA;YACY,cAAS,GAAc,IAAI,CAAC;YACpC,gBAAW,GAAG,KAAK,CAAC;YACpB,iBAAY,GAAG,GAAG,CAAC;YACnB,UAAK,GAAG,GAAG,CAAC;YACZ,WAAM,GAAG,GAAG,CAAC;YACb,UAAK,GAAG,GAAG,CAAC;YACZ,WAAM,GAAG,GAAG,CAAC;YACb,cAAS,GAAG,CAAC,CAAC;YACd,kBAAa,GAA0C,EAAE,CAAC;YAC1D,qBAAgB,GAAG,KAAK,CAAC;YACzB,0BAAqB,GAAkC,IAAI,CAAC;YAC5D,0BAAqB,GAA6C,IAAI,CAAC;YACvE,SAAI,GAAG,CAAC,CAAC;YACT,aAAQ,GAAG,CAAC,CAAC;YAEb,kBAAa,GAAgB;gBACzB,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,SAAS;gBACtB,aAAa,EAAE,GAAG;gBAClB,SAAS,EAAE,IAAI;gBACf,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,IAAI;aAChB,CAAC;YAEF,uBAAkB,GAAgB;gBAC9B,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,SAAS;gBACtB,aAAa,EAAE,GAAG;gBAClB,SAAS,EAAE,IAAI;gBACf,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,IAAI;aAChB,CAAC;QA4HN,CAAC;QA1HG,4BAAK,GAAL,UAAM,SAAoB,EAAE,aAAuD;YAC/E,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,qBAAqB,GAAG,aAAa,CAAC;YAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7H,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,CAAQ,CAAC;YAC9E,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;QAED,2BAAI,GAAJ;YACI,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC,QAAQ;gBACb,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBAC7D,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;aACrC;YACD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAClC,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACzB;QACL,CAAC;QAED,6BAAM,GAAN;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACrB,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;YAChB,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;gBACrB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE;oBACrB,IAAI,IAAI,CAAC,gBAAgB,EAAE;wBACvB,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;qBAC5N;oBAED,sNAAsN;oBACtN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBACtB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;iBAC5B;aACJ;QACL,CAAC;QAED,sCAAe,GAAf;YACI,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;gBAC/E,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;gBAC5C,IAAI,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC/B,IAAI,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC/B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;gBACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aAC3B;;gBACG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC9B,CAAC;QAED,qCAAc,GAAd;YACI,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;gBAC/B,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;oBACjE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;oBAClE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;oBACtE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;oBACrE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACpC,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;iBACjC;aACJ;YACD,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAC5B,CAAC;QAED,wCAAiB,GAAjB,UAAkB,IAAyB;YACvC,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,qBAAqB;gBACrE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QAED,0CAAmB,GAAnB,UAAoB,IAAyB;YACzC,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,SAAS,EAAE;gBACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;aACjE;QACL,CAAC;QAED,yCAAkB,GAAlB,UAAmB,IAAyB;YACxC,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,SAAS,EAAE;gBACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;aAC5D;QACL,CAAC;QAED,qCAAc,GAAd,UAAe,SAAyB;YACpC,IAAI,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACtD,IAAI,GAAG,GAAG,EAAE,CAAC;gBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC9C,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC5B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACtB,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC/B,SAAS;oBACb,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAsB,CAAC;oBAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;wBACzD,IAAI,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;qBACpE;oBACD,IAAI,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,aAAa,CAA+B,CAAC;oBACpH,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;oBACtF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC5F,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC1F,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;iBAC1C;gBACD,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;oBAC/B,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;wBAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;wBAClE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;wBACtE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;wBACrE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;wBACpC,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;qBACjC;iBACJ;aACJ;QACL,CAAC;QACL,mBAAC;IAAD,CAlKA,AAkKC,IAAA;IAlKY,uBAAY,eAkKxB,CAAA;IAED;QAEI,4BAAY,SAAoB,EAAE,MAAiB,EAAE,EAAW,EAAE,IAA2B,EAAE,SAAmB;YAAlH,iBA6JC;YASD,aAAQ,GAAyB,IAAI,CAAC;YACtC,oBAAe,GAAyB,IAAI,CAAC;YAC7C,kBAAa,GAAuB,IAAI,CAAC;YAIjC,SAAI,GAAG,CAAC,CAAC;YACjB,YAAO,GAAG,KAAK,CAAC;YAEhB,aAAQ,GAAG,KAAK,CAAC;YACjB,YAAO,GAAG,IAAI,CAAC;YAEf,WAAM,GAAG,KAAK,CAAC;YAEf,WAAM,GAAG,KAAK,CAAC;YAGf,cAAS,GAAY,KAAK,CAAC;YArLvB,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;YAE3C,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;YAEpC,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAChC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAC5B;gBACI,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI;gBAChB,GAAG,EAAE;oBACD,OAAO,EAAE,CAAC;gBACd,CAAC;gBACD,GAAG,EAAE,UAAC,CAAC;oBACH,IAAI,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;wBACzC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;oBAC3C,EAAE,GAAG,CAAC,CAAC;oBACP,IAAI,EAAE,IAAI,CAAC,KAAI,CAAC,WAAW;wBACvB,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,KAAI,CAAC,CAAC;gBAClD,CAAC;aACJ,CAAC,CAAC;YAEP,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,oBAAoB,CAAC;YACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;YAE7B,IAAI,IAAI,GAAgC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,kBAAkB,CAAC,UAAU,EAC9E;gBACI,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,CAAC;aACZ,CAAgC,CAAC;YAEtC,IAAI,IAAI;gBACJ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAErB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE9D,QAAQ,CAAC,OAAO,GAAG,UAAC,IAAS;gBACzB,IAAK,QAAgB,CAAC,WAAW,IAAI,KAAI,CAAC,WAAW;oBACjD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAEvE,kBAAkB,CAAC,YAAY,CAAC,KAAI,CAAC,CAAC;gBACtC,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACtE,IAAI,KAAI,CAAC,eAAe,EAAE;oBACtB,KAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAClC,KAAI,CAAC,eAAe,GAAG,IAAI,CAAC;iBAC/B;gBACD,IAAI,KAAI,CAAC,aAAa,EAAE;oBACpB,KAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAChC,KAAI,CAAC,aAAa,GAAG,IAAI,CAAC;iBAC7B;gBACD,kBAAkB,CAAC,SAAS,CAAC,KAAI,CAAC,CAAC;gBACnC,EAAE,CAAC,eAAe,CAAC,KAAI,EAAE,UAAU,CAAC,CAAC;gBACrC,KAAI,CAAC,UAAU,EAAE,CAAC;gBAElB,OAAO,GAAG,CAAC;YACf,CAAC,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,EAAE,KAAK,KAAI,CAAC,EAAE,EAAjB,CAAiB,CAAC;gBACzD,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE1C,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAC7B;gBACI,GAAG,EAAE;oBACD,IAAI,QAAQ,GAAG,KAAI,CAAC,QAAQ,CAAC;oBAC7B,IAAI,CAAC,QAAQ;wBACT,OAAO,EAAE,CAAC;oBACd,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;oBAC9B,IAAI,IAAI;wBACJ,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAC,EAAsB,IAAK,OAAA,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAvB,CAAuB,CAAC,CAAC;oBACpF,OAAO,EAAE,CAAC;gBACd,CAAC;gBACD,GAAG,EAAE,UAAC,OAAiB;oBACnB,IAAI,KAAI,CAAC,WAAW;wBAChB,OAAO;oBAEX,IAAI,QAAQ,GAAG,KAAI,CAAC,QAAQ,CAAC;oBAE7B,IAAI,QAAQ,IAAI,OAAO;wBACnB,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAqB,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,UAAU,EAAE,EAAf,CAAe,CAAC,CAAC,CAAC;gBACjF,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EACzB;gBACI,GAAG,EAAE;oBACD,IAAI,CAAC,KAAI,CAAC,QAAQ,IAAI,KAAI,CAAC,WAAW;wBAClC,OAAO,WAAA,OAAO,CAAC,IAAI,CAAC;oBACxB,IAAI,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC;oBAEzD,IAAI,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,WAAA,OAAO,CAAC,IAAI,CAAC;oBACrB,KAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,UAAA,IAAI;wBAChC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC5D,CAAC,EAAE,CAAC;oBACR,CAAC,CAAC,CAAC;oBAEH,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAA,OAAO,CAAC,IAAI,CAAC;gBAClD,CAAC;gBACD,GAAG,EAAE,UAAC,CAAU;oBACZ,IAAI,CAAC,KAAI,CAAC,QAAQ,IAAI,KAAI,CAAC,WAAW;wBAClC,OAAO;oBACX,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACnC,KAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACzB,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;gBAC9B,IAAI,CAAC,KAAI,CAAC,QAAQ,IAAI,KAAI,CAAC,WAAW;oBAClC,OAAO,EAAE,CAAC;gBACd,IAAI,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,EACpC,IAAI,GAAG,SAAS,CAAC,aAAa,EAC9B,OAAO,GAAG,KAAI,CAAC,OAAO,EACtB,SAAS,GAAG,SAAS,CAAC,eAAe,CAAC;gBAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAjD,CAAiD,CAAC,CAAC;YAChF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAC9B;gBACI,GAAG,EAAE;oBACD,OAAO,KAAI,CAAC,IAAI,CAAC;gBACrB,CAAC;gBACD,GAAG,EAAE,UAAC,CAAS;oBACX,IAAI,CAAC,KAAI,CAAC,QAAQ,IAAI,KAAI,CAAC,WAAW;wBAClC,OAAO;oBACX,IAAI,EAAE,GAAG,CAAC,GAAG,KAAI,CAAC,IAAI,CAAC;oBACvB,KAAI,CAAC,IAAI,GAAG,CAAC,CAAC;oBACd,IAAI,EAAE,IAAI,CAAC,EAAE;wBACT,IAAI,GAAG,GAAG,KAAI,CAAC,SAAS,EAAE,EACtB,QAAQ,GAAG,WAAA,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;wBAC1C,IAAI,QAAQ;4BACR,KAAI,CAAC,cAAc,CAAC,WAAA,gBAAgB,CAAC,QAAQ,CAAC,WAAA,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;qBACrF;gBAEL,CAAC;aACJ,CAAC,CAAC;YAEP,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAEnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEhG,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM;gBACnB,IAAI,CAAC,UAAU,EAAE,CAAC;;gBAElB,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;QA6BD,sCAAS,GAAT,UAAU,KAAa,EAAE,SAAoB,EAAE,CAAkB;YAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW;gBAClC,OAAO;YACX,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI;gBACL,OAAO;YAEX,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EACjB,IAAI,GAAG,SAAS,CAAC,aAAa,CAAC;YAEnC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,KAAK,EAAE;gBAC7E,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,EACd,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAEjC,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC5C;oBACI,GAAG,EAAE,CAAC,OAAO;oBACb,GAAG,EAAE,OAAO;oBACZ,eAAe,EAAE,IAAI;oBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;oBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;oBACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;oBACjD,EAAE,EAAE,IAAI;iBACX,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAEb,IAAI,EAAE,EAAE;oBACJ,IAAI,CAAC,GAAG,IAAI,WAAA,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBAEnD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;oBACxD,IAAI,CAAC,MAAM,EAAE,CAAC;iBACjB;aACJ;QACL,CAAC;QAED,sCAAS,GAAT,UAAU,KAAa,EAAE,SAAoB,EAAE,CAAkB;YAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW;gBAClC,OAAO;YACX,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI;gBACL,OAAO;YAEX,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EACjB,IAAI,GAAG,SAAS,CAAC,aAAa,CAAC;YAEnC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,KAAK,EAAE;gBAC7E,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,EACd,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAEjC,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC5C;oBACI,GAAG,EAAE,CAAC,OAAO;oBACb,GAAG,EAAE,OAAO;oBACZ,eAAe,EAAE,IAAI;oBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;oBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;oBACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;oBACjD,EAAE,EAAE,IAAI;iBACX,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAEb,IAAI,EAAE,EAAE;oBACJ,IAAI,CAAC,GAAG,IAAI,WAAA,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBAEnD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;oBACxD,IAAI,CAAC,MAAM,EAAE,CAAC;iBACjB;aACJ;QACL,CAAC;QAED,uCAAU,GAAV,UAAW,KAAa;YACpB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW;gBAClC,OAAO;YACX,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAEnC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,EAAE;gBAChD,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE;oBACtB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACrB,IAAI,CAAC,MAAM,EAAE,CAAC;iBACjB;qBAAM;oBACH,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;iBACzC;aACJ;QACL,CAAC;QAED,+CAAkB,GAAlB;YACI,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAClC,OAAO;YAEX,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,gDAAmB,GAAnB;YACI,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAClC,OAAO;YAEX,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,+CAAkB,GAAlB;YACI,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAClC,OAAO;YAEX,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACzB,CAAC;QAED,yCAAY,GAAZ,UAAa,MAAc;YACvB,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO;YAEX,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAqB,UAAA,EAAE,IAAI,OAAA,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,EAA/E,CAA+E,CAAC,CAAC,CAAC;YACzK,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7B,CAAC;QAED,yCAAY,GAAZ,UAAa,MAAe;YACxB,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO;YAEX,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAqB,UAAA,EAAE,IAAI,OAAA,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAA/D,CAA+D,CAAC,CAAC,CAAC;YACzJ,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7B,CAAC;QAED,2CAAc,GAAd,UAAe,SAA2B;YACtC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAqB,UAAA,EAAE,IAAI,OAAA,WAAA,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,WAAA,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAlF,CAAkF,CAAC,CAAC,CAAC;QAChL,CAAC;QAED,wCAAW,GAAX;YACI,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAClC,OAAO,EAAE,CAAC;YACd,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,EACtB,MAAM,GAAgB,EAAE,EACxB,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,SAAS,EAAE,EAAd,CAAc,CAAC,EAC1C,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;YAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAClB,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAEnB,MAAM,CAAC,IAAI,CAAC,IAAI,WAAA,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;aACtC;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,sCAAS,GAAT;YACI,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAClC,OAAO,EAAE,CAAC;YAEd,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,SAAS,EAAE,EAAd,CAAc,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,mCAAM,GAAN;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClC,CAAC;QAED,mCAAM,GAAN;YACI,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAED,wCAAW,GAAX;YACI,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO;YACX,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,eAAe,GAAG,IAAI,CAAC,eAAe,EACtC,aAAa,GAAG,IAAI,CAAC,aAAa,EAClC,OAAO,GAAG,IAAI,CAAC,OAAO,EACtB,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,OAAO,GAAG,IAAI,CAAC,OAAO,EACtB,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,EAC9B,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAE/B,IAAI,CAAC,QAAQ,IAAK,QAAgB,CAAC,WAAW;gBAC1C,OAAO;YAEX,IAAI,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YAE5I,IAAI,IAAI,GAA2D,IAAI,CAAC;YACxE,IAAI,WAAW,GAA2D,IAAI,CAAC;YAE/E,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE;gBAChC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAA+B,CAAC;gBAChF,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;gBAC7B,IAAI,SAAS;oBACT,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;aACpC;YAED,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE;gBAC1B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;gBACvB,IAAI,CAAC,IAAI;oBACL,IAAI,GAAG,EAAE,WAAW,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;gBACrE,IAAI,CAAC,WAAW;oBACZ,WAAW,GAAG,EAAE,CAAC;gBACrB,IAAI,MAAM,EAAE;oBACR,IAAI,IAAI,CAAC,WAAW;wBAChB,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,WAAA,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;iBAC7F;gBACD,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC;aACrC;YAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE;gBAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC5B,IAAI,CAAC,WAAW;oBACZ,WAAW,GAAG,EAAE,CAAC;gBACrB,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC;gBAClC,qCAAqC;aACxC;YAED,IAAI,QAAQ,CAAC,WAAW,EAAE,IAAI,QAAQ,EAAE;gBACpC,IAAI,CAAC,IAAI;oBACL,IAAI,GAAG,EAAE,CAAC;gBACd,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;gBAC3B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;aAC1B;YAED,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;gBAC5B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;gBACzB,IAAI,CAAC,IAAI;oBACL,IAAI,GAAG,EAAE,CAAC;gBACd,IAAI,CAAC,WAAW;oBACZ,WAAW,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;gBACvB,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC;aACjC;YAED,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;gBAC5B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;gBAEzB,IAAI,CAAC,WAAW;oBACZ,WAAW,GAAG,EAAE,CAAC;gBACrB,WAAW,CAAC,aAAa,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAClG;YAED,IAAI,IAAI;gBACJ,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAE9B,IAAI,WAAW,EAAE;gBACb,IAAI,aAAa,EAAE;oBACf,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;oBAC9B,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;wBAClB,aAAa,CAAC,UAAU,CAAC;4BACrB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;4BACvB,SAAS,EAAE,SAAS;4BACpB,OAAO,EAAE,OAAO;4BAChB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;yBAC9E,CAAC,CAAC;qBACN;iBACJ;qBAAM,IAAI,eAAe;oBACtB,eAAe,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;aAC/C;QACL,CAAC;QAED,+CAAkB,GAAlB,UAAmB,IAA8C,EAAE,KAAa,EAAE,IAAwB;YACtG,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU;gBACnC,OAAO;YAEX,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW;gBACvC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACtG,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa;gBAC5C,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QAEM,+BAAY,GAAnB,UAAoB,kBAAsC;YACtD,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,WAAW;gBACrD,OAAO;YACX,IAAI,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,EACtC,eAAe,GAAG,kBAAkB,CAAC,eAAe,EACpD,aAAa,GAAG,kBAAkB,CAAC,aAAa,CAAC;YAErD,IAAU,QAAS,CAAC,mBAAmB,EAAE;gBAC/B,QAAS,CAAC,mBAAmB,GAAG,KAAK,CAAC;gBAE5C,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAE9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBACpD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBACpD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAEjD,IAAI,eAAe,EAAE;oBACjB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;oBAC3D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;oBAC/D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;iBACjE;gBAED,IAAI,aAAa,EAAE;oBACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;oBACzD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;oBAC7D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;iBAC/D;aACJ;QACL,CAAC;QAEM,4BAAS,GAAhB,UAAiB,kBAAsC;YACnD,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,WAAW;gBACrD,OAAO;YACX,IAAI,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,EACtC,eAAe,GAAG,kBAAkB,CAAC,eAAe,EACpD,aAAa,GAAG,kBAAkB,CAAC,aAAa,CAAC;YAErD,IAAI,CAAO,QAAS,CAAC,mBAAmB,EAAE;gBAChC,QAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC;gBAE3C,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAC9B,IAAI,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC,SAAS,CAAC;gBAEvD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC;gBACtH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC;gBACtH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC;gBAEpH,IAAI,eAAe,EAAE;oBACjB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,OAAO,EAAE,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;oBACzH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,WAAW,EAAE,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;oBACjI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,UAAU,EAAE,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;iBAClI;gBAED,IAAI,aAAa,EAAE;oBACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;oBACvH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;oBAC/H,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;iBAChI;aAEJ;QACL,CAAC;QAED,8CAAiB,GAAjB,UAAkB,IAA+C,EAAE,KAAc;YAC7E,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU;gBAChF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC7B,CAAC;QAED,uCAAU,GAAV;YACI,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS;gBACjG,OAAO;YACX,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,EACtB,OAAO,GAAG,KAAK,EACf,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;YACpC,IAAI,GAAG,KAAK,CAAC,EAAE;gBACX,IAAI,IAAI,CAAC,eAAe,EAAE;oBACtB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAClC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC5B,OAAO,GAAG,IAAI,CAAC;iBAClB;gBACD,IAAI,IAAI,CAAC,aAAa,EAAE;oBACpB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC1B,OAAO,GAAG,IAAI,CAAC;iBAClB;aACJ;iBAAM,IAAI,GAAG,KAAK,CAAC,EAAE;gBAClB,IAAI,IAAI,CAAC,eAAe,EAAE;oBACtB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAClC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC5B,OAAO,GAAG,IAAI,CAAC;iBAClB;gBACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;oBACrB,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;wBAC5D,GAAG,EAAE,SAAS,CAAC,GAAG;wBAClB,SAAS,EAAE,IAAI;wBACf,SAAS,EAAE,KAAK;wBAChB,OAAO,EAAE,IAAI;wBACb,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;wBACvB,IAAI,EAAE;4BACF,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;4BACnC,KAAK,EAAE,kBAAkB,CAAC,UAAU,CAAC,YAAY,GAAG,CAAC;4BACrD,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,WAAW;4BACjF,WAAW,EAAE,CAAC;4BACd,aAAa,EAAE,CAAC;yBACnB;wBACD,MAAM,EAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;wBACjD,OAAO,EAAE,kBAAkB,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI;qBAC9D,CAAC,CAAC;oBAEH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;oBACzG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;oBACjH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;oBAE/G,OAAO,GAAG,IAAI,CAAC;iBAClB;aACJ;iBAAM;gBACH,IAAI,IAAI,CAAC,aAAa,EAAE;oBACpB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC1B,OAAO,GAAG,IAAI,CAAC;iBAClB;gBACD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;oBACvB,IAAI,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;wBAClE,GAAG,EAAE,SAAS,CAAC,GAAG;wBAClB,SAAS,EAAE,IAAI;wBACf,SAAS,EAAE,KAAK;wBAChB,QAAQ,EAAE,KAAK;wBACf,OAAO,EAAE,IAAI;wBACb,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,WAAW;wBACnF,YAAY,EAAE,kBAAkB,CAAC,UAAU,CAAC,YAAY,GAAG,CAAC;wBAC5D,aAAa,EAAE,CAAC;wBAChB,MAAM,EAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;qBACpD,CAAC,CAAC;oBAEH,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;oBAE5C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,OAAO,EAAE,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC3G,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,WAAW,EAAE,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;oBACnH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,UAAU,EAAE,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;oBAEjH,OAAO,GAAG,IAAI,CAAC;iBAClB;aACJ;YACD,IAAI,OAAO;gBACP,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;QAED,mCAAM,GAAN;YAAA,iBAMC;YALG,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,EAAE,KAAK,KAAI,CAAC,EAAE,EAAjB,CAAiB,CAAC,CAAC;gBAClE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;aACxB;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,oCAAO,GAAP;YACI,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO;YACX,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAC9B;YACD,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;aAC/B;YACD,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;gBAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;aAC7B;YACD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,sCAAS,GAAT,UAAU,IAAY,EAAE,EAAU;YAC9B,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU;gBACrD,OAAO;YACX,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC/B,IAAI,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI;oBAC3D,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;aACtC;YACD,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa;gBAC/B,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YAExB,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACzC,CAAC;QAEM,6BAAU,GAAgB;YAC7B,WAAW,EAAE,SAAS;YACtB,YAAY,EAAE,CAAC;YACf,aAAa,EAAE,GAAG;SACrB,CAAC;QAEK,oCAAiB,GAAgB;YACpC,WAAW,EAAE,SAAS;YACtB,YAAY,EAAE,CAAC;YACf,aAAa,EAAE,GAAG;SACrB,CAAC;QAEK,qCAAkB,GAAgB;YACrC,WAAW,EAAE,SAAS;YACtB,YAAY,EAAE,CAAC;YACf,aAAa,EAAE,GAAG;SACrB,CAAC;QAEK,4CAAyB,GAAgB;YAC5C,WAAW,EAAE,SAAS;YACtB,YAAY,EAAE,CAAC;YACf,aAAa,EAAE,CAAC;SACnB,CAAC;QACN,yBAAC;KAlqBD,AAkqBC,IAAA;IAlqBY,6BAAkB,qBAkqB9B,CAAA;AACL,CAAC,EAhoKM,UAAU,KAAV,UAAU,QAgoKhB;AAyBD,CAAC,UAAC,CAAC;IACC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,UAAU,QAAqC,EAAE,MAAY;QAC1E,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,UAAC,GAAW,EAAE,EAAW;YAC3C,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;gBAC1C,QAAQ,QAAQ,EAAE;oBACd,KAAK,WAAW;wBACZ,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAyB,CAAC;wBACpE,MAAM;oBACV,KAAK,QAAQ;wBACT,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAyB,CAAC;wBAC3E,IAAI,SAAS,EAAE;4BACX,IAAI,MAAM;gCACN,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;;gCAE/B,MAAM,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;yBACzC;wBACD,MAAM;oBACV,KAAK,OAAO;wBACR,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAyB,CAAC;wBAC3E,IAAI,SAAS;4BACT,SAAS,CAAC,KAAK,EAAE,CAAC;wBACtB,MAAM;oBACV,KAAK,MAAM;wBACP,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAyB,CAAC;wBAC3E,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM;4BAC7B,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;wBACpC,MAAM;iBACb;gBACD,OAAO,KAAK,CAAC;aAChB;iBAAM;gBACH,IAAI,OAAO,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAsB,CAAC;gBACpD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,GAAG,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE;oBAChF,IAAI,EAAE,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;oBACpC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;oBACjD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;iBACrD;gBACD,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAyB,CAAC;gBACpE,IAAI,EAAE,EAAE;oBACJ,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACpB;qBAAM;oBACH,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;iBAC7E;aACJ;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5C,CAAC,CAAC;AAEN,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEX,oDAAoD;AACpD,oBAAoB;AACpB,oCAAoC;AACpC,oCAAoC;AAIpC,gCAAgC;AAChC,wEAAwE;AACxE,eAAe;AACf,gBAAgB;AAChB,wDAAwD;AACxD,+EAA+E;AAC/E,uDAAuD;AACvD,KAAK;;;;;;;;;;;;;;;AC1tKL,IAAO,UAAU,CAs7BhB;AAt7BD,WAAO,UAAU;IAEb;QAgBI,yBAAY,EAAU,EAAE,GAAW,EAAE,MAAoB,EAAE,GAAoB,EAAE,WAAoB,EAAE,IAAa;YAcpH,eAAU,GAAW,CAAC,CAAC;YAEvB,WAAM,GAAW,CAAC,CAAC;YAQnB,kBAAa,GAAe,IAAI,CAAC;YAvB7B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;YAC9C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;YAChB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,YAAY,GAAG,WAAW,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAElB,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;YAEpE,IAAI,GAAG;gBACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QA3BM,mCAAmB,GAA1B;YACI,IAAI,MAAM,CAAC,cAAc,EAAE;gBACvB,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;aACvF;iBAAM;gBACH,IAAI,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC;gBAEzC,eAAe,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAgB,CAAC,CAAC;gBACpF,eAAe,CAAC,SAAS,CAAC,WAAW,GAAG,eAAe,CAAC;gBAExD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,EAAE,KAAK,aAAa,EAAjC,CAAiC,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;oBAC1E,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC/C,CAAC,CAAC,CAAC;aACN;QACL,CAAC;QA4BD,yCAAe,GAAf;YACI,IAAI,IAAI,CAAC,aAAa;gBAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QACjD,CAAC;QAOD,mCAAS,GAAT,UAAU,MAAoB,EAAE,qBAA+B;YAC3D,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,qBAAqB;gBACtB,IAAI,CAAC,eAAe,EAAE,CAAC;QAC/B,CAAC;QAED,mCAAS,GAAT;YACI,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;QAChC,CAAC;QAED,wCAAc,GAAd,UAAe,WAAmB;YAC9B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;YAChC,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,kCAAQ,GAAR,UAAS,KAAa;YAClB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,+BAAK,GAAL;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACpD,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;YAC/B,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC;YAC5B,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;YAChC,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;YAE/B,mDAAmD;YACnD,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAqB,CAAC;YACxE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;YACpB,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;YACzB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAC1B,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;YAChC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;YAC7D,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;YACrC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAErB,8CAA8C;YAC9C,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAExC,CAAC;QAED,8BAAI,GAAJ;YACI,IAAI,iBAAiB,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAE7C,IAAI,EAAE,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YAC/E,IAAI,EAAE,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YAE/E,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;YACpB,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;YAC7B,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;YAC5B,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACvC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAExC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;YACpB,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;YAC7D,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACzC,CAAC;QAED,kCAAQ,GAAR;YACI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,wCAAc,GAAd,UAAe,cAAgC,EAAE,SAAoB;YACjE,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,SAAS,EAAE,EAAd,CAAc,CAAC,CAAC;YACzD,IAAI,CAAC,GAAG,WAAA,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACnC,gIAAgI;YAChI,IAAI,EAAE,GAAG,WAAA,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1E,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAf,CAAe,CAAC,CAAC;YACpC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAA3B,CAA2B,CAAC,CAAC;YAChD,CAAC,GAAG,WAAA,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAE/B,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,GAAG,GAAG,WAAA,gBAAgB,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAErD,IAAI,MAAM,GAAG,IAAI,WAAA,YAAY,EAAE,CAAC;YAEhC,GAAG,CAAC,OAAO,CAAC,UAAA,CAAC;gBACT,MAAM,CAAC,MAAM,CAAC,WAAA,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;YAEjD,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxC,CAAC;QACL,sBAAC;IAAD,CAhJA,AAgJC,IAAA;IAhJY,0BAAe,kBAgJ3B,CAAA;IAED;QAAA;YACc,aAAQ,GAAY,IAAI,CAAC;QAsCvC,CAAC;QAnCG,0CAAU,GAAV,UAAW,GAA6B,EAAE,QAAgB;YACtD,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED,0CAAU,GAAV,UAAW,KAAc;YACrB,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;gBACzB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACtB,IAAI,CAAC,MAAM,EAAE,CAAC;aACjB;QACL,CAAC;QAED,yCAAS,GAAT,UAAU,GAA6B,EAAE,QAAgB,IAAkB,OAAO,IAAI,CAAC,CAAC,CAAC;QAEzF,gDAAgB,GAAhB,UAAiB,aAA4B;YACzC,IAAI,aAAa,EAAE;gBACf,IAAI,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClD,IAAI,KAAK,GAAG,CAAC;oBACT,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvC,aAAa,CAAC,MAAM,EAAE,CAAC;aAC1B;iBAAM,IAAI,IAAI,CAAC,aAAa,EAAE;gBAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvD,IAAI,KAAK,IAAI,CAAC;oBACV,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAClD,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;aAC/B;YACD,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,IAAI,CAAC;YAC3C,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,oCAAI,GAAJ,UAAK,GAA6B,EAAE,QAAgB,EAAE,YAA0B,EAAE,WAAqB,IAAI,CAAC;QAE5G,sCAAM,GAAN;YACI,IAAI,IAAI,CAAC,aAAa;gBAClB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QACpC,CAAC;QACL,4BAAC;IAAD,CAvCA,AAuCC,IAAA;IAvCY,gCAAqB,wBAuCjC,CAAA;IAkBD;QAAiC,+BAAqB;QAAtD;YAAA,qEAmHC;YAjHG,UAAI,GAAW,EAAE,CAAC;YAElB,WAAK,GAAW,CAAC,CAAC;YAClB,YAAM,GAAW,CAAC,CAAC;YACnB,iBAAW,GAAW,CAAC,CAAC;YACxB,cAAQ,GAAW,CAAC,CAAC;YACrB,gBAAU,GAAY,KAAK,CAAC;YAC5B,UAAI,GAAW,EAAE,CAAC;YAClB,UAAI,GAAW,OAAO,CAAC;YACvB,eAAS,GAAW,QAAQ,CAAC;YAC7B,YAAM,GAAW,IAAI,WAAA,MAAM,EAAE,CAAC;YAC9B,eAAS,GAA4C,IAAI,CAAC;YAC1D,eAAS,GAA4C,SAAS,CAAC;;QAqGnE,CAAC;QAlGG,yBAAG,GAAH,UAAI,IAAwB;YAA5B,iBAQC;YAPG,IAAI,IAAI,EAAE;gBACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;oBACvB,KAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,SAAS,EAAE,CAAC;aACpB;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,gCAAU,GAAV,UAAW,GAA6B,EAAE,QAAgB;YACtD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAChC,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;gBACvE,OAAO,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC;aAC3C;YACD,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;QAEO,+BAAS,GAAjB;YACI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QAChB,CAAC;QAEO,mCAAa,GAArB,UAAsB,GAA6B;YAC/C,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;YAC3B,GAAG,CAAC,IAAI,EAAE,CAAC;YACX,GAAG,CAAC,IAAI,GAAM,IAAI,CAAC,SAAS,SAAI,UAAU,WAAM,IAAI,CAAC,IAAM,CAAC;YAC5D,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;YAClE,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACrB,CAAC;QAEO,mCAAa,GAArB,UAAsB,GAA6B;YAC/C,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YAC1D,OAAO,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,CAAC;QAED,+BAAS,GAAT,UAAU,GAA6B,EAAE,QAAgB;YACrD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;gBAC/B,OAAO,IAAI,CAAC;YAEhB,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAE9D,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,IAAI,WAAA,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAE1C,OAAO,IAAI,WAAA,YAAY,CAAC,WAAA,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAA,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1H,CAAC;QAED,0BAAI,GAAJ,UAAK,GAA6B,EAAE,QAAgB,EAAE,YAA0B,EAAE,WAAqB;YACnG,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;YAC3B,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YAE5D,GAAG,CAAC,IAAI,EAAE,CAAC;YACX,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,WAAA,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,WAAA,MAAM,CAAC,MAAM,CAAC,CAAC;YAEnG,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE;gBACzD,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;gBAC/D,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aACrB;YAED,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YACzB,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAEtD,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;YAElB,GAAG,CAAC,SAAS,EAAE,CAAC;YAChB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACjB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC7C,GAAG,CAAC,MAAM,EAAE,CAAC;YAEb,GAAG,CAAC,SAAS,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;YAEtC,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;gBAChC,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC1B,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;gBACjB,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC/B,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,WAAW,GAAG,UAAU,GAAG,EAAE,EAAE,SAAS,GAAG,GAAG,EAAE,UAAU,GAAG,GAAG,CAAC,CAAC;aACvF;YAED,GAAG,CAAC,IAAI,GAAM,IAAI,CAAC,SAAS,SAAI,UAAU,WAAM,IAAI,CAAC,IAAM,CAAC;YAC5D,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAE/B,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEzB,GAAG,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC;QAED,6BAAO,GAAP;YACI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACL,kBAAC;IAAD,CAnHA,AAmHC,CAnHgC,qBAAqB,GAmHrD;IAnHY,sBAAW,cAmHvB,CAAA;IAED;QAAoC,kCAAqB;QAAzD;YAAA,qEAoEC;YAnEG,aAAO,GAAe,EAAE,CAAC;YACzB,YAAM,GAAY,IAAI,CAAC;YACvB,WAAK,GAAyB,IAAI,CAAC;;QAiEvC,CAAC;QA/DG,mCAAU,GAAV,UAAW,GAA6B,EAAE,QAAgB;YACtD,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QACtH,CAAC;QAED,4BAAG,GAAH,UAAI,IAA8E;YAAlF,iBAQC;YAPG,IAAI,IAAI,EAAE;gBACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;oBACvB,KAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,SAAS,EAAE,CAAC;aACpB;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAEO,kCAAS,GAAjB;YACI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,kCAAS,GAAT,UAAU,GAA6B,EAAE,QAAgB;YACrD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;gBAC/B,OAAO,IAAI,CAAC;YAEhB,OAAO,WAAA,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;QAED,6BAAI,GAAJ,UAAK,GAA6B,EAAE,QAAgB,EAAE,YAA0B,EAAE,WAAqB;YAEnG,GAAG,CAAC,IAAI,EAAE,CAAC;YAEX,IAAI,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,EAC9C,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,EAC5E,KAAK,GAAG,IAAI,WAAA,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAC9F,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAhD,CAAgD,CAAC,EAA/D,CAA+D,CAAC,EAChG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAEvB,oBAAoB;YAEpB,KAAK,CAAC,OAAO,CAAC,UAAA,GAAG;gBACb,GAAG,CAAC,SAAS,EAAE,CAAC;gBAChB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACxC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBACf,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxB;gBACD,IAAI,MAAM;oBACN,GAAG,CAAC,SAAS,EAAE,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAEpC,IAAI,KAAK,CAAC,SAAS;gBACf,GAAG,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,KAAK,CAAC,WAAW;gBACjB,GAAG,CAAC,MAAM,EAAE,CAAC;YAEjB,GAAG,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC;QAED,gCAAO,GAAP;YACI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACL,qBAAC;IAAD,CApEA,AAoEC,CApEmC,qBAAqB,GAoExD;IApEY,yBAAc,iBAoE1B,CAAA;IAED;QAgBI,uBAAY,SAAoB;YAmMhC,cAAS,GAA4B,EAAE,CAAC;YAlMpC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;YAC9C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;QAlBM,iCAAmB,GAA1B;YACI,IAAI,MAAM,CAAC,cAAc,EAAE;gBACvB,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;aACrF;iBAAM;gBACH,IAAI,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC;gBAEvC,aAAa,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAgB,CAAC,CAAC;gBAClF,aAAa,CAAC,SAAS,CAAC,WAAW,GAAG,aAAa,CAAC;gBAEpD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,EAAE,KAAK,aAAa,EAAjC,CAAiC,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;oBAC1E,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC7C,CAAC,CAAC,CAAC;aACN;QACL,CAAC;QAOD,4BAAI,GAAJ,UAAK,SAAoB;YAAzB,iBASC;YARG,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,SAAS,IAAI,SAAS,CAAC,GAAG,EAAE;gBAC5B,UAAU,CAAC;oBACP,KAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBAC3B,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAI,CAAC,CAAC,CAAC;oBAC1D,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,gBAAgB,EAAE,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAI,CAAC,CAAC,CAAC;gBAC7E,CAAC,EAAE,CAAC,CAAC,CAAC;aACT;QACL,CAAC;QAED,4BAAI,GAAJ,cAAS,CAAC;QAEV,6BAAK,GAAL;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACpD,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;YAC/B,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC;YAC5B,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;YAChC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;YACpB,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;YACrB,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;YAEjC,IAAI,QAAQ,GAAG,KAAK,CAAC;YAErB,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAqB,CAAC;YAE3C,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,EAAiB,CAAC;YAEzC,IAAI,EAAE,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;YAExC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;YACjB,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;YAElB,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE5B,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC;YACzC,IAAI,CAAC,EAAE;gBACH,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC;gBACpB,IAAI,CAAC,EAAE;oBACH,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC;oBACpB,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBACnB,QAAQ,GAAG,IAAI,CAAC;iBACnB;aACJ;YAED,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;gBAChB,QAAQ,GAAG,KAAK,CAAC;YAErB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAsB,CAAC;YACjF,sCAAsC;YACtC,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;YAEnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAEzB,IAAI,CAAC,QAAQ;gBACT,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAE/B,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEnC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEnB,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QAED,gCAAQ,GAAR;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAqB,CAAC;YAC3C,IAAI,CAAC,GAAG;gBACJ,OAAO;YACX,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,EAAiB,CAAC;YACzC,IAAI,EAAE,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;YAExC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;YACjB,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;YAElB,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;QAED,+BAAO,GAAP,UAAQ,CAAS,EAAE,CAAS;YACxB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE;gBAClB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;gBAEtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;aAC1B;;gBACG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC9B,CAAC;QAED,gCAAQ,GAAR;YACI,mBAAmB;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU;gBACjC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QAEO,mCAAW,GAAnB;YACI,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YACzB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACnB,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG;gBACf,OAAO;YAEX,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAEjD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC7B,CAAC;QAEO,kCAAU,GAAlB;YACI,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,GAAG,GAAG,SAAS,CAAC,GAAG,EACnB,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACnB,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG;gBACf,OAAO;YACX,IAAI,QAAQ,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;YAE1C,IAAI,SAAS,GAAG,WAAA,YAAY,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;YACjE,IAAI,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtD,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAEjD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAA,QAAQ;gBAC3B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;oBACnC,OAAO;gBACX,IAAI,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAC5C,IAAI,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBAChC,IAAI,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAChC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBAC5C,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBAE7D,aAAa;oBACb,8BAA8B;oBAC9B,2FAA2F;oBAC3F,gBAAgB;oBAEhB,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;iBAC5C;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAED,8BAAM,GAAN;YACI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAED,6BAAK,GAAL;YACI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC;QAEO,mCAAW,GAAnB;YAAA,iBAcC;YAbG,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBAExC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBAExB,UAAU,CAAC;oBACP,KAAI,CAAC,UAAU,EAAE,CAAC;oBAElB,KAAI,CAAC,WAAW,GAAG,KAAK,CAAC;oBAEzB,KAAI,CAAC,WAAW,EAAE,CAAC;gBACvB,CAAC,EAAE,CAAC,CAAC,CAAC;aACT;QACL,CAAC;QAEM,2BAAa,GAApB,UAAqB,OAAiC,EAAE,IAAa,EAAE,EAAW,EAAE,KAAc;YAE9F,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAChB,MAAM,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAElC,IAAI,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC;gBACpB,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAExB,IAAI,MAAM,IAAI,CAAC;gBACX,OAAO;YAEX,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAEpF,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,SAAS,EAAE,CAAC;QAExB,CAAC;QAeL,oBAAC;IAAD,CAhOA,AAgOC,IAAA;IAhOY,wBAAa,gBAgOzB,CAAA;IAED;QAKI,sBAAY,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,GAAW,EAAE,GAAoB;YAgC9E,YAAO,GAAY,KAAK,CAAC;YACzB,aAAQ,GAAY,KAAK,CAAC;YAM1B,eAAU,GAAa,EAAE,CAAC;YAqBlB,cAAS,GAAqC,EAAE,CAAC;YA3DrD,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YAEf,IAAI,UAAU,GAAG,GAAG,CAAC,aAAa,EAAE,EAChC,QAAQ,GAAG,WAAA,MAAM,CAAC,SAAS,EAC3B,YAAY,GAAG,WAAA,MAAM,CAAC,cAAc,EACpC,IAAI,GAAG,CAAC,CAAC;YAGb,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC;YAC9B,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC;YAE9B,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB;YACtD,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,wBAAwB;YACnD,IAAI,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;YACvB,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;YACnB,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YAExB,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;YAClC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;YAElC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;YAClB,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;YAElB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAEhB,IAAI,CAAC,MAAM,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACtH,IAAI,CAAC,QAAQ,GAAM,CAAC,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,WAAM,CAAC,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,OAAI,CAAC;QAClF,CAAC;QAWD,sBAAI,6BAAG;iBAAP;gBAEI,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,QAAQ,GAAG,WAAA,MAAM,CAAC,SAAS,CAAC;gBAEhC,OAAU,IAAI,CAAC,GAAG,gBAAW,MAAM,CAAC,QAAQ,SAAI,MAAM,CAAC,SAAS,cAAS,IAAI,CAAC,CAAC,cAAS,QAAQ,SAAI,QAAQ,aAAU,CAAC;YAC3H,CAAC;;;WAAA;QAED,+BAAQ,GAAR;YACI,2DAA2D;YAC3D,OAAO,iBAAe,IAAI,CAAC,CAAC,GAAG,CAAC,mCAA8B,IAAI,CAAC,CAAC,WAAM,IAAI,CAAC,CAAC,WAAM,IAAI,CAAC,CAAG,CAAC;QACnG,CAAC;QAED,+BAAQ,GAAR;YACI,IAAI,CAAC,GAAG,WAAA,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9D,qJAAqJ;YACrJ,OAAO,wBAAsB,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,wCAAmC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,mFAAgF,CAAC;QAC9K,CAAC;QAIO,gCAAS,GAAjB;YACI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,kEAAkE;YAClE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,CAAC;QAEO,8BAAO,GAAf,UAAgB,GAAqB;YAArC,iBASC;YARG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBACvB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5C,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;aACvB;YACD,IAAI,IAAI,CAAC,GAAG;gBACR,OAAO,IAAI,CAAC,GAAG,CAAC;QACxB,CAAC;QAED,2BAAI,GAAJ,UAAK,EAAgC;YACjC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,EAAE,CAAC,IAAI,CAAC,CAAC;aACZ;iBAAM;gBACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,OAAO;oBACb,IAAI,CAAC,SAAS,EAAE,CAAC;aACxB;QACL,CAAC;QAED,4BAAK,GAAL;YACI,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,IAAI,CAAC,GAAG,EAAE;gBACV,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC,GAAG,CAAC;aACnB;YACD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBACvB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;aACvB;QACL,CAAC;QACL,mBAAC;IAAD,CAzGA,AAyGC,IAAA;IAzGY,uBAAY,eAyGxB,CAAA;IAED;QACI,qBAAY,SAAoB,EAAE,GAAW,EAAE,IAAY;YAS3D,UAAK,GAAoC,EAAE,CAAC;YAC5C,SAAI,GAA6B,EAAE,CAAC;YAThC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QAQD,4BAAM,GAAN,UAAO,CAAS,EAAE,CAAS,EAAE,IAAY;YACrC,OAAU,CAAC,SAAI,CAAC,SAAI,IAAM,CAAC;QAC/B,CAAC;QAED,6BAAO,GAAP,UAAQ,CAAS,EAAE,CAAS,EAAE,IAAY,EAAE,CAAU;YAClD,IAAI,CAAC,CAAC;gBACF,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACzG,CAAC;QAEO,iCAAW,GAAnB,UAAoB,GAAmB,EAAE,IAAkB,EAAE,CAAS,EAAE,CAAS,EAAE,IAAY,EAAE,KAAe,EAAE,KAAe;YAC7H,IAAI,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC;gBAC/B,OAAO;YACX,+BAA+B;YAC/B,mCAAmC;YACnC,IAAI,QAAQ,GAAG,WAAA,MAAM,CAAC,SAAS,EAC3B,YAAY,GAAG,WAAA,MAAM,CAAC,cAAc,CAAC;YAEzC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC;YAC9B,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC;YAE9B,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YAChB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,wBAAwB;YACnD,IAAI,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;YACvB,qBAAqB;YACrB,0BAA0B;YAE1B,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;YAClC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;YAElC,oBAAoB;YACpB,oBAAoB;YAEpB,IAAI,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC;YAEvB,kGAAkG;YAElG,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,WAAQ,IAAI,CAAC,QAAQ,EAAE,QAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAQ,IAAI,CAAC,QAAQ,EAAE,QAAI,CAAC,CAAC,CAAC,WAAQ,IAAI,CAAC,GAAG,QAAI,CAAC,CAAC;YAC/H,0IAA0I;YAC1I,GAAG,CAAC,KAAK,CAAC,cAAc,GAAM,OAAO,UAAK,OAAO,MAAG,CAAC;YACrD,GAAG,CAAC,KAAK,CAAC,kBAAkB,GAAM,CAAC,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,WAAM,CAAC,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,OAAI,CAAC;YAC7F,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;QACvB,CAAC;QAED,gCAAU,GAAV,UAAW,KAAe,EAAE,IAAY,EAAE,aAA2B;YAArE,iBAmDC;YAlDG,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,EACX,CAAC,GAAG,KAAK,CAAC,CAAC,EACX,EAAE,GAAG,KAAK,CAAC,CAAC,EACZ,EAAE,GAAG,KAAK,CAAC,CAAC,EACZ,EAAE,GAAG,IAAI,EACT,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAC3B,EAAE,GAAG,aAAW,IAAI,CAAC,IAAI,SAAI,CAAG,CAAC;YAErC,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/B,yCAAyC;YAEzC,OAAO,EAAE,GAAG,OAAO,EAAE;gBACjB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACxB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACxB,EAAE,EAAE,CAAC;aACR;YAED,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAE1C,IAAI,GAAG,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC7C,GAAG,CAAC,SAAS,GAAG,aAAa,CAAC;YAC9B,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YAEZ,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAElB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE5B,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBAEnB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACvC,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;gBACjC,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC;gBACnB,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;oBACjC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACxB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACxB,EAAE,EAAE,CAAC;oBACL,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;iBACtC;gBAED,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;aAEtG;YAED,OAAO,CAAC,IAAI,CAAC,UAAA,CAAC;gBACV,IAAI,CAAC,KAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACd,OAAO;gBACX,KAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YAEH,OAAO,GAAG,CAAC;QACf,CAAC;QAED,iCAAW,GAAX,UAAY,GAAgB;YACxB,IAAI,GAAG,EAAE;gBACL,IAAI,GAAG,CAAC,aAAa;oBACjB,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,eAAe;oBACtC,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;gBACnC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;gBAChB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;oBACf,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACtB,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACzB,IAAI,IAAI,EAAE;wBACN,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;wBACxC,IAAI,KAAK,GAAG,CAAC,CAAC;4BACV,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;wBACrC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC;4BAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;qBACpB;oBACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBACxB;aACJ;QACL,CAAC;QAED,8BAAQ,GAAR;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,KAAK,CAAC,CAAC,CAAC,EAAR,CAAQ,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;gBAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QACpB,CAAC;QACL,kBAAC;IAAD,CA3IA,AA2IC,IAAA;IA3IY,sBAAW,cA2IvB,CAAA;IAED;QAAoC,kCAAW;QAC3C,wBAAY,SAAoB,EAAE,SAAiB,EAAE,IAAY,EAAE,IAAU;YAAV,qBAAA,EAAA,UAAU;YAA7E,YACI,kBAAM,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,SAIpC;YAFG,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,KAAI,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;QAC7D,CAAC;QAKD,mCAAU,GAAV,UAAW,KAAe,EAAE,IAAY,EAAE,aAA2B;YAArE,iBA0BC;YAzBG,IAAI,IAAI,GAAG,EAAE;gBACT,OAAO,iBAAM,UAAU,YAAC,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YAExD,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,EACX,CAAC,GAAG,KAAK,CAAC,CAAC,EACX,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAC3B,EAAE,GAAG,aAAW,IAAI,CAAC,IAAI,SAAI,CAAG,EAChC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAErB,IAAI,MAAM,GAAG,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YACpC,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;YACnC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;YAEf,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAElB,8CAA8C;YAE9C,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE;gBACvE,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,KAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9C,OAAO,IAAI,CAAC;gBAChB,OAAO,MAA2B,CAAC;YACvC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAErB,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,kCAAS,GAAT,UAAU,CAAS,EAAE,CAAS,EAAE,IAAY,EAAE,GAAoB;YAC9D,IAAI,UAAU,GAAG,GAAG,CAAC,aAAa,EAAE,EAChC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YAEzB,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC;YAC9B,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC;YAE9B,+CAA+C;YAC/C,uDAAuD;YACvD,IAAI,EAAE,GAAG,QAAQ,CAAC;YAClB,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;YACnB,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YAExB,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;YAClC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;YAElC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;YAClB,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;YAElB,IAAI,MAAM,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAErH,OAAO,WAAA,YAAY,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9E,CAAC;QAWL,qBAAC;IAAD,CAxEA,AAwEC,CAxEmC,WAAW,GAwE9C;IAxEY,yBAAc,iBAwE1B,CAAA;AAYL,CAAC,EAt7BM,UAAU,KAAV,UAAU,QAs7BhB;;ACt7BD,IAAO,UAAU,CAixDhB;AAjxDD,WAAO,UAAU;IACb,IAAO,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC;IAEnD;QAEI,mBAAY,SAAoB,EAAE,IAAa,EAAE,UAAkB;YAAnE,iBA8NC;YAmGD,eAAU,GAAW,CAAC,CAAC;YACvB,UAAK,GAAgB,IAAI,CAAC;YAC1B,cAAS,GAAsC,EAAE,CAAC;YAClD,cAAS,GAAsB,EAAE,CAAC;YAGlC,0BAAqB,GAAW,IAAI,CAAC;YAErC,aAAQ,GAAmB,EAAE,CAAC;YAC9B,eAAU,GAAY,KAAK,CAAC;YAC5B,qBAAgB,GAAW,YAAY,CAAC;YACxC,eAAU,GAAY,KAAK,CAAC;YAC5B,2BAAsB,GAAY,KAAK,CAAC;YAGxC,oBAAe,GAAG,KAAK,CAAC;YACxB,cAAS,GAAG,CAAC,CAAC;YACd,eAAU,GAAG,CAAC,CAAC;YACf,mBAAc,GAAsB,EAAE,CAAC;YACvC,2BAAsB,GAAW,IAAI,CAAC;YAQtC,gBAAW,GAAiB,EAAE,CAAC;YAG/B,cAAS,GAAW,IAAI,CAAC;YAEzB,aAAQ,GAMJ,IAAI,CAAC;YACT,gBAAW,GAAG,EAAE,CAAC;YACjB,kBAAa,GAAG,CAAC,CAAC;YAClB,eAAU,GAAG,KAAK,CAAC;YACnB,cAAS,GAAG,KAAK,CAAC;YAClB,0BAAqB,GAAG,IAAI,CAAC;YAC7B,gBAAW,GAAG,IAAI,CAAC;YACnB,qBAAgB,GAAG,KAAK,CAAC;YACzB,mBAAc,GAAG,KAAK,CAAC;YACvB,2BAAsB,GAAG,KAAK,CAAC;YAC/B,iCAA4B,GAAG,IAAI,CAAC;YAkGpC,oBAAe,GAAW,IAAI,CAAC;YAY/B,uBAAkB,GAAY,KAAK,CAAC;YAEpC,gBAAW,GAAG,KAAK,CAAC;YACpB,oBAAe,GAAW,IAAI,CAAC;YAI/B,kBAAa,GAAW,IAAI,CAAC;YAC7B,qBAAgB,GAAY,KAAK,CAAC;YAre9B,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YAEvC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;YAClD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;YAE5C,IAAI,CAAC,eAAe,GAAG;gBACnB,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,IAAI,EAAE,IAAI;gBACV,EAAE,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;aAC7E,CAAC;YAEF,IAAI,CAAC,eAAe,GAAG;gBACnB,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,CAAC;aACf,CAAC;YAEF,IAAI,CAAC,eAAe,GAAG;gBACnB,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,GAAG;aACb,CAAC;YAEF,IAAI,CAAC,gBAAgB,GAAG;gBACpB,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,CAAC;aACf,CAAC;YAEF,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,mBAAmB,EAAE;gBACzC,OAAO,CAAC,KAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAI,CAAC,GAAG,EAAE,YAAO,CAAC,GAAG,EAAE,OAAI,CAAC,CAAC,CAAC,MAAI,CAAC,GAAG,EAAE,YAAO,CAAC,GAAG,EAAE,OAAI,CAAC;YAChG,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,EAClC;gBACI,GAAG,EAAE;oBACD,OAAO,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAI,CAAC,qBAAqB,CAAC,IAAI,KAAI,CAAC,KAAK,CAAC,cAAc,CAAC;gBACxF,CAAC;gBACD,GAAG,EAAE,UAAC,CAAe;oBACjB,KAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvD,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,qBAAqB,EACzC;gBACI,GAAG,EAAE;oBACD,OAAO,KAAI,CAAC,eAAe,IAAI,KAAI,CAAC,aAAa,CAAC,KAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAI,CAAC,aAAa,CAAC,KAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC9H,CAAC;gBACD,GAAG,EAAE,UAAC,CAAgB;oBAClB,KAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC7C,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;gBAC9B,IAAI,MAAM,GAAG,KAAI,CAAC,KAAK,CAAC,GAAG,CAAC;gBAC5B,IAAI,MAAM,GAAiB,IAAI,CAAC;gBAChC,MAAM,CAAC,OAAO,CAAC,UAAA,KAAK;oBAChB,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;oBACtB,IAAI,EAAE,EAAE;wBACJ,IAAI,MAAM;4BACN,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;4BAElB,MAAM,GAAG,IAAI,WAAA,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;qBACjD;gBACL,CAAC,CAAC,CAAC;gBACH,OAAO,MAAM,IAAI,IAAI,WAAA,YAAY,EAAE,CAAC;YACxC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,sBAAsB,EAAE;gBAC5C,IAAI,CAAC,KAAI,CAAC,sBAAsB;oBAC5B,OAAO,KAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACxD,IAAI,GAAG,GAAG,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,GAAG,CAAC,GAAG,KAAK,KAAI,CAAC,sBAAsB;wBACvC,OAAO,GAAG,CAAC;iBAClB;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,iBAAiB,EAAE;gBACvC,IAAI,KAAK,GAAG,KAAI,CAAC,KAAK,CAAC,cAAc,CAAC;gBACtC,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;gBACtB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE;oBACvB,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAqB,CAAC;oBACnD,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW;wBACxD,OAAO,WAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;iBAC3D;gBACD,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW;oBACpB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC5B,OAAO,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YACjC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,sBAAsB,EAAE;gBAC5C,IAAI,KAAK,GAAG,KAAI,CAAC,KAAK,CAAC,cAAc,CAAC;gBACtC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE;oBACvB,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAqB,CAAC;oBACnD,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW;wBACxD,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;iBAC3C;gBACD,OAAO,CAAC,CAAC;YACb,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,iBAAiB,EAAE;gBACvC,IAAI,MAAM,GAAG,KAAI,CAAC,eAAe,EAC7B,WAAW,GAAG,KAAI,CAAC,oBAAoB,EACvC,SAAS,GAAG,KAAI,CAAC,gBAAgB,EACjC,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC;gBAE/B,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM;oBACzB,OAAO,IAAI,CAAC;gBAEhB,IAAI,EAAE,GAAG,WAAA,OAAO,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAClD,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,EACf,CAAC,GAAG,EAAE,EACN,EAAE,GAAG,CAAC,GAAG,CAAC,EACV,EAAE,GAAG,MAAI,CAAC,CAAC,YAAO,CAAC,SAAI,CAAC,eAAU,EAAE,YAAO,CAAC,SAAI,CAAC,eAAU,CAAC,EAAE,YAAO,CAAC,EAAE,CAAC,CAAC,SAAI,CAAC,EAAE,CAAC,CAAC,UAAK,EAAE,CAAC,CAAC,SAAI,EAAE,CAAC,CAAC,UAAK,CAAC,EAAE,CAAC,CAAC,SAAI,CAAC,EAAE,CAAC,CAAC,UAAK,EAAE,CAAC,CAAC,SAAI,EAAE,CAAC,CAAG,EAC1I,IAAI,GAA8B;oBAC9B,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE;oBAC7B,IAAI,EAAE;wBACF,IAAI,EAAE,EAAE;wBACR,YAAY,EAAE,CAAC;wBACf,WAAW,EAAE,kBAAkB;wBAC/B,aAAa,EAAE,GAAG;qBACrB;iBACJ,CAAC;gBAEN,IAAI,CAAC,SAAS,EAAE;oBACZ,SAAS,GAAG,KAAI,CAAC,gBAAgB,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;wBAChE,SAAS,EAAE,KAAK;wBAChB,SAAS,EAAE,KAAK;wBAChB,GAAG,EAAE,SAAS,CAAC,GAAG;wBAClB,MAAM,EAAE,CAAC;wBACT,OAAO,EAAE,IAAI;qBAChB,EAAE,IAAI,CAAC,CAAC,CAAC;iBACb;qBAAM;oBACH,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;iBAC9B;gBAED,OAAO,SAAS,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC;gBAClD,mIAAmI;YACvI,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE;gBACrC,OAAO,WAAA,OAAO,CAAC,eAAe,CAAC,KAAI,CAAC,oBAAoB,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE;gBACpC,OAAO,KAAI,CAAC,eAAe,IAAI,IAAI,IAAI,CAAC,KAAI,CAAC,eAAe,IAAI,IAAI,IAAI,KAAI,CAAC,eAAe,KAAK,iBAAiB,CAAC,IAAI,KAAI,CAAC,gBAAgB,KAAK,uBAAuB,CAAC;YAC7K,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE;gBACtC,OAAO,KAAI,CAAC,eAAe,IAAI,IAAI,IAAI,CAAC,KAAI,CAAC,eAAe,IAAI,IAAI,IAAI,KAAI,CAAC,eAAe,KAAK,iBAAiB,CAAC,IAAI,KAAI,CAAC,gBAAgB,KAAK,uBAAuB,CAAC;YAC7K,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YAEvG,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC;gBAC7C,IAAI,KAAI,CAAC,KAAK,CAAC,QAAQ;oBACnB,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;gBACjD,IAAI,KAAI,CAAC,KAAK,CAAC,YAAY;oBACvB,KAAI,CAAC,KAAK,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;gBACrD,IAAI,KAAI,CAAC,KAAK,CAAC,QAAQ;oBACnB,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC;gBAC9C,IAAI,KAAI,CAAC,KAAK,CAAC,QAAQ;oBACnB,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;gBACjD,IAAI,KAAI,CAAC,KAAK,CAAC,YAAY;oBACvB,KAAI,CAAC,KAAK,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;gBACrD,IAAI,KAAI,CAAC,KAAK,CAAC,QAAQ;oBACnB,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC;gBACnD,IAAI,KAAI,CAAC,KAAK,CAAC,QAAQ;oBACnB,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;gBACjD,IAAI,KAAI,CAAC,KAAK,CAAC,YAAY;oBACvB,KAAI,CAAC,KAAK,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;gBACrD,IAAI,KAAI,CAAC,KAAK,CAAC,QAAQ;oBACnB,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC;gBAC5C,IAAI,KAAI,CAAC,KAAK,CAAC,QAAQ;oBACnB,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;gBACjD,IAAI,KAAI,CAAC,KAAK,CAAC,YAAY;oBACvB,KAAI,CAAC,KAAK,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;gBACrD,IAAI,KAAI,CAAC,KAAK,CAAC,QAAQ;oBACnB,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,EACnC;gBACI,GAAG,EAAE;oBACD,OAAO,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,EAAV,CAAU,CAAC,CAAC;gBAChD,CAAC;gBACD,GAAG,EAAE,UAAC,CAAU;oBACZ,KAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtD,CAAC;aACJ,CAAC,CAAC;YAEP,IAAI,CAAC,aAAa,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;YAC/H,IAAI,CAAC,yBAAyB,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;YAE3I,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE;gBAC/B,IAAI,gBAAgB,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAmB,CAAC;gBAEvE,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAC,EAAE;oBACtC,KAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;gBACxC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAET,gBAAgB,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAC,EAAE;oBAC9C,KAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;gBACvC,CAAC,EAAE,IAAI,CAAC,CAAC;aACZ;QACL,CAAC;QAED,yBAAK,GAAL;YAAA,iBAcC;YAbG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,UAAA,KAAK;gBACxB,KAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,QAAqB,EAA1B,CAA0B,CAAC,CAAC,CAAC;YAC7F,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,UAAA,UAAU;gBAC3C,UAAU,CAAC,OAAO,EAAE,CAAC;YACzB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,UAAA,EAAE;gBACtC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;aAChC;QACL,CAAC;QAED,wBAAI,GAAJ,UAAK,SAAoB,EAAE,IAAa,EAAE,UAAkB;YAA5D,iBAuEC;YAtEG,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,CAAC,CAAC;YAElC,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;aAChC;YAED,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;gBACnC,IAAI,cAAc,GAAmB,IAAI,CAAC;gBAC1C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,EACxC;oBACI,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE,IAAI;oBAChB,GAAG,EAAE;wBACD,IAAI,CAAC,cAAc;4BACf,cAAc,GAAG,IAAI,WAAA,cAAc,CAAC,KAAI,CAAC,SAAS,CAAC,CAAC;wBACxD,OAAO,cAAc,CAAC;oBAC1B,CAAC;iBACJ,CAAC,CAAC;aACV;YAED,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAEzD,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;oBACxC,EAAE,CAAC,OAAO,CAAC,KAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzC,CAAC,CAAC,CAAC;aACN;YAED,IAAI,CAAC,aAAa,GAAG;gBACjB,WAAW,EAAE,IAAI,gBAAgB,CAAC,SAAS,CAAC;gBAC5C,iBAAiB,EAAE,IAAI,gBAAgB,CAAC,SAAS,CAAC;gBAClD,eAAe,EAAE,IAAI,oBAAoB,CAAC,SAAS,CAAC;gBACpD,cAAc,EAAE,IAAI,mBAAmB,CAAC,SAAS,CAAC;aACrD,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;gBACxB,KAAI,CAAC,aAAa,CAAC,IAAI,CAAE,CAAC,IAAI,GAAG,IAAI,CAAC;YAC1D,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAE1B,OAAO;YACP,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,IAAU,UAAU,CAAC,CAAC,CAAE,CAAC,SAAS,YAAY,WAAA,YAAY,EAA7F,CAA6F,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;gBAC1I,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAiB,CAAC,CAAC;YAC5F,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM;gBACrB,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM;gBAC1B,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;YAEpC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAClC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC;YAC/C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC;YACpE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;YACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAE9B,mDAAmD;YACnD,8CAA8C;QAClD,CAAC;QAED,sBAAI,kCAAW;iBAAf;gBACI,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,IAAI,YAAY,CAAC,CAAC;YACjE,CAAC;iBAED,UAAgB,CAAe;gBAC3B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC;YACxE,CAAC;;;WAJA;QA0DD,wCAAoB,GAApB;YACI,IAAI,IAAI,CAAC,uBAAuB;gBAC5B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACvC,CAAC;QAED,iCAAa,GAAb,UAAc,CAAC;YACX,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC;QAED,iCAAa,GAAb,UAAc,CAAkB;YAC5B,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,OAAO;gBACZ,SAAS,EAAE,CAAC;gBACZ,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;gBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;gBACtC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE;gBAC7B,EAAE,EAAE,IAAI;aACX,CAAC,CAAC;YAEP,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QAC3B,CAAC;QAED,kCAAc,GAAd,UAAe,KAAuB;YAAtC,iBAcC;YAbG,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAEtB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;YAE5B,IAAI,IAAI,CAAC,gBAAgB,KAAK,UAAU;gBACpC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAExD,UAAU,CAAC;gBACP,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACf,KAAI,CAAC,WAAW,GAAG,EAAE,CAAC;YAC1B,CAAC,EAAE,CAAC,CAAC,CAAC;YAEN,MAAM,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QAED,wCAAwC;QACxC,mEAAmE;QACnE,WAAW;QACX,qBAAqB;QACrB,2BAA2B;QAC3B,oCAAoC;QACpC,+CAA+C;QAC/C,qDAAqD;QACrD,4CAA4C;QAC5C,sBAAsB;QACtB,aAAa;QACb,GAAG;QAEH,+BAAW,GAAX,UAAY,EAAU,EAAE,IAAqB;YACzC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;YAC1B,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC1C,CAAC;QAED,+BAAW,GAAX,UAAY,EAAU;YAClB,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC;QAED,kCAAc,GAAd,UAAe,EAAU;YACrB,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;gBACpB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAC1B,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;aACzC;QACL,CAAC;QAED,mCAAe,GAAf,UAAgB,EAAgC,EAAE,SAAkB,EAAE,aAAuB;YACzF,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAA,GAAG;gBACtB,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,aAAa,CAAC;oBAC1E,EAAE,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACP,CAAC;QAED,+BAAW,GAAX,UAAY,EAAgC,EAAE,SAAkB,EAAE,aAAuB;YACrF,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC3C,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACtB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,GAAG;oBACtB,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,aAAa,CAAC;wBAC5G,EAAE,CAAC,GAAG,CAAC,QAAqB,CAAC,CAAC;gBACtC,CAAC,CAAC,CAAC;aACN;YAED,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,GAAG;gBACxB,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS;oBACxC,EAAE,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACP,CAAC;QAgCD,wCAAoB,GAApB;YACI,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;YACtC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/B,CAAC;QAED,kCAAc,GAAd,UAAe,GAAoB;YAC/B,IAAI,CAAC,sBAAsB,GAAG,GAAG,CAAC,GAAG,CAAC;YACtC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;QACvD,CAAC;QAEO,uCAAmB,GAA3B;YAAA,iBA0DC;YAzDG,IAAI,IAAI,CAAC,yBAAyB,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;gBAClE,aAAa,CAAC,aAAa,EAAE,CAAC;gBAE9B,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;gBACvC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;gBAErC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;oBACxB,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;oBACtC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC1B,aAAa,CAAC,gBAAgB,EAAE,CAAC;iBACpC;gBAED,UAAU,CAAC;oBACP,IAAI,KAAK,GAAa,EAAE,CAAC;oBACzB,IAAI,MAAM,GAAc,EAAE,CAAC;oBAC3B,KAAI,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC;wBAC3C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;wBACnB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBAC7B,CAAC,CAAC,CAAC;oBACH,IAAI,CAAC,CAAC,CAAC,uBAAuB,EAAE,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;wBACzD,KAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;wBACtC,KAAI,CAAC,aAAa,GAAG,IAAI,CAAC;wBAC1B,aAAa,CAAC,gBAAgB,EAAE,CAAC;wBACjC,KAAI,CAAC,mBAAmB,EAAE,CAAC;wBAC3B,OAAO;qBACV;oBACD,QAAQ,CAAC,eAAe,CAAC,kBAAkB,EAAE,yCAAyC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;wBACvH,IAAI,CAAC,CAAC,CAAC,uBAAuB,EAAE,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;4BACzD,KAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;4BACtC,KAAI,CAAC,aAAa,GAAG,IAAI,CAAC;4BAC1B,aAAa,CAAC,gBAAgB,EAAE,CAAC;4BACjC,KAAI,CAAC,mBAAmB,EAAE,CAAC;4BAC3B,OAAO;yBACV;wBAED,IAAI,EAAE,GAAG,CAAC,CAAC,uBAAuB,EAAE,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC;wBACxF,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;wBACnC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;wBAEpC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,yDAAuD,CAAC,gBAAW,CAAC,cAAS,GAAG,CAAC,KAAK,CAAC,YAAY,EAAI,EACvH,UAAC,GAAG;4BACA,KAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;4BACtC,KAAI,CAAC,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC;4BAC7B,aAAa,CAAC,gBAAgB,EAAE,CAAC;4BACjC,KAAI,CAAC,mBAAmB,EAAE,CAAC;4BAE3B,kGAAkG;wBACtG,CAAC,CAAC,CAAC;oBAEX,CAAC,EAAE;wBACC,KAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;wBACtC,KAAI,CAAC,aAAa,GAAG,IAAI,CAAC;wBAC1B,aAAa,CAAC,gBAAgB,EAAE,CAAC;wBACjC,KAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC/B,CAAC,CAAC,CAAC;gBACP,CAAC,EAAE,GAAG,CAAC,CAAC;aACX;QACL,CAAC;QAED,kCAAc,GAAd;YACI,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;QACjD,CAAC;QAED,sCAAkB,GAAlB,UAAmB,CAAC;YAChB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QAED,+BAAW,GAAX,UAAY,KAAmB;YAC3B,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrE,IAAI,CAAC,SAAS,CAAC,+BAA+B,EAAE,CAAC;QACrD,CAAC;QAED,yCAAqB,GAArB,UAAsB,aAAqB;YACvC,IAAI,CAAC,qBAAqB,GAAG,aAAa,IAAI,IAAI,CAAC;YACnD,IAAI,CAAC,SAAS,CAAC,+BAA+B,EAAE,CAAC;QACrD,CAAC;QAED,6BAAS,GAAT,UAAU,KAAmB;YACzB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QAED,qCAAiB,GAAjB;YACI,IAAI,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACvD,CAAC;QAED,mCAAe,GAAf,UAAgB,IAAS,EAAE,EAAS;YAApC,iBA0DC;YAzDG,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,UAAU,CAAqB,CAAC;YAE7D,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK;gBACtB,OAAO;YAEX,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAExC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,gCAAgC,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,UAAC,MAAwB;gBAErH,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,WAAA,sBAAsB,CAAC,OAAO,EAAE;oBAChE,QAAQ,CAAC,gBAAgB,CAAC,aAAa,GAAG,MAAM,CAAC,SAAS,GAAG,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,WAAA,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC3I,OAAO;iBACV;gBAED,KAAI,CAAC,SAAS,CAAC,YAAY,CAAC,WAAA,SAAS,CAAC,WAAW,CAAC,CAAC;gBAEnD,IAAI,MAAM,CAAC,WAAW,EAAE;oBAEpB,IAAI,gBAAgB,GAAG,KAAI,CAAC,aAAa,CAAC,WAAW,CAAC;oBAEtD,gBAAgB,CAAC,aAAa,GAAG,KAAK,CAAC;oBACvC,gBAAgB,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACjC,gBAAgB,CAAC,KAAK,GAAG,CAAC,CAAC;oBAC3B,gBAAgB,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;oBAC/C,gBAAgB,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;oBACjD,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;oBAEpC,IAAI,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAC,EAAE,EAAE,GAAG,IAAK,OAAA,IAAI,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,EAAtB,CAAsB,CAAC,CAAC;oBAExF,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,UAAA,EAAE,IAAI,OAAA,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC,EAAjE,CAAiE,CAAC,CAAC;oBAElG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,UAAA,EAAE;wBAC9B,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC,cAAQ,KAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvF,CAAC,CAAC,CAAC;oBAEH,KAAI,CAAC,mBAAmB,GAAG,KAAI,CAAC,aAAa,CAAC,WAAW,CAAC;oBAC1D,KAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;oBAE/B,KAAI,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC1B,KAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;oBAC7B,KAAI,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC1B,KAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC5B,KAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBACxB,KAAI,CAAC,eAAe,GAAG,wBAAwB,CAAC;oBAEhD,UAAU,CAAC,aAAa,CAAC,iBAAiB,EAAE,4BAA4B,EAAE,oBAAoB,CAAC,CAAC;iBACnG;;oBACG,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC;wBAChB,IAAI,IAAI,GAAG,KAAI,CAAC;wBAChB,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;wBACpB,+EAA+E;wBAC/E,UAAU,CAAC,cAAQ,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,cAAc,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACvM,CAAC,CAAC,CAAC;gBAEP,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACvB,CAAC,CAAC,CAAC;QAEP,CAAC;QAED,mCAAe,GAAf;YACI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,8BAA8B;YAC9B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAEhC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QAED,iCAAa,GAAb;YACI,IAAI,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;YACtD,IAAI,WAAW,GAAa,EAAE,CAAC;YAC/B,IAAI,MAAM,GAAG,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YACzC,IAAI,GAAG,GAAG,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACnC,IAAI,UAAU,GAAG,CAAC,CAAC,gCAAgC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;YACtF,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,gBAAgB,CAAC,KAAK,EACpE;gBACI,GAAG,EAAE,CAAC;gBACN,MAAM,EAAE,KAAK;gBACb,WAAW,EAAE,IAAI;aACpB,CAAC,CAAC;YACP,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE;gBAC9B,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,kBAAkB,EACvD;oBACI,GAAG,EAAE,CAAC;oBACN,GAAG,EAAE,OAAO;oBACZ,eAAe,EAAE,KAAK;oBACtB,MAAM,EAAE,MAAM,CAAC,iBAAiB;oBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;oBACtC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE;oBAC7B,EAAE,EAAE,IAAI;iBACX,CAAC,IAAI,CAAC,CAAC;aACf;YAED,IAAI,KAAK,IAAI,CAAC,EAAE;gBACZ,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;gBACjD,OAAO;aACV;YAED,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC;gBAC7B,IAAI,CAAC,CAAC,QAAQ;oBACV,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,eAAe,CAAC,kBAAkB,EAAE,eAAe,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7Q,CAAC;QAEO,2CAAuB,GAA/B,UAAgC,MAAqD;YACjF,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK;gBAC1C,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBAC9C,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO;gBACjD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAErC,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;QAED,sCAAkB,GAAlB,UAAmB,OAAqD;YACpE,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;YAEzC,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;gBACnB,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;gBACxB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,YAAY,WAAA,SAAS,EAAE;oBAExD,QAAQ,MAAM,CAAC,MAAM,EAAE;wBACnB,KAAK,SAAS;4BACV,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAjB,CAAiB,CAAC,CAAC;4BAC1D,MAAM;wBACV,KAAK,OAAO;4BACR,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACrC,MAAM;qBACb;iBACJ;YACL,CAAC,CAAC,CAAC;YAEH,cAAc,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAE1C,cAAc,CAAC,WAAW,EAAE,CAAC;QACjC,CAAC;QAED,qCAAiB,GAAjB,UAAkB,UAAsC,EAAE,EAA0B;YAChF,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAE/B,IAAI,IAAI,CAAC,UAAU;gBACf,OAAO;YAEX,IAAI,SAAS,CAAC,SAAS,CAAC,gBAAgB,KAAK,YAAY,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;gBAC3F,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC;gBAC/B,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC1B,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;gBACzC,IAAI,UAAU,YAAY,WAAA,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM;oBAC1E,UAAU,CAAC,cAAc,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;aACjE;iBACI,IAAI,SAAS,CAAC,SAAS,CAAC,gBAAgB,KAAK,YAAY,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM;gBAC9F,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAE/C,CAAC;QAED,mCAAe,GAAf;YACI,IAAI,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,yCAAqB,GAArB,UAAsB,UAAsC;YACxD,IAAI,UAAU,EAAE;gBACZ,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC;gBAC/B,IAAI,IAAI,CAAC,gBAAgB,KAAK,YAAY,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU;oBAC9F,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;aACjC;QAEL,CAAC;QAED,wCAAoB,GAApB,UAAqB,UAAsC;YACvD,IAAI,UAAU,EAAE;gBACZ,IAAI,IAAI,CAAC,SAAS,KAAK,UAAU,CAAC,EAAE;oBAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBAC1B,IAAI,IAAI,CAAC,gBAAgB,KAAK,YAAY,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU;oBAC9F,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;aAClC;QACL,CAAC;QAED,sCAAkB,GAAlB,UAAmB,IAAwB,EAAE,EAAc;YACvD,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC7B,oCAAoC;YAEpC,IAAI,QAAQ,EAAE;gBACV,IAAI,SAAS,GAAe,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAE,CAAC;gBAEzD,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW;oBACzC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAE1C,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B;YAED,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,gBAAgB,KAAK,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAEtF,IAAI,IAAI,GAAG,IAAI,CAAC,QAAqB,EACjC,MAAM,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,EACxE,KAAK,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;gBAE/B,IAAI,IAAI,YAAY,WAAA,SAAS,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;oBAE1E,IAAI,CAAC,QAAQ,GAAG;wBACZ,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;wBACpB,KAAK,EAAE,KAAK;wBACZ,UAAU,EAAE,MAAM;wBAClB,WAAW,EAAE,MAAM;wBACnB,MAAM,EAAE,KAAK;qBAChB,CAAC;oBAEF,EAAE,CAAC,cAAc,EAAE,CAAC;oBACpB,EAAE,CAAC,eAAe,EAAE,CAAC;iBACxB;aACJ;YAED,wBAAwB;QAC5B,CAAC;QAGD,+BAAW,GAAX,UAAY,EAAc;YACtB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC7B,IAAI,QAAQ,EAAE;gBACV,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,SAAS,GAAe,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAE,CAAC;gBAEzD,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC,gBAAgB,EAAE,GAAG,GAAG,EAAE;oBACzI,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;oBACvB,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;iBAC3C;gBACD,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;oBAC3C,IAAI,SAAS,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC;oBAEhF,IAAI,SAAS,CAAC,SAAS,EAAE;wBACrB,IAAI,IAAI,GAAG,WAAA,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;wBAC1G,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;qBAC3B;oBAED,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;oBAE3D,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBAEtC,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC;iBACnC;aACJ;QACL,CAAC;QAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA6BG;QAEH,6BAAS,GAAT,UAAU,EAAc;YACpB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAE7B,IAAI,QAAQ,EAAE;gBACV,IAAI,SAAS,GAAe,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAE,CAAC;gBAEzD,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;oBAC3C,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBAEtC,EAAE,CAAC,cAAc,EAAE,CAAC;oBACpB,EAAE,CAAC,eAAe,EAAE,CAAC;iBACxB;gBAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;aACxB;QACL,CAAC;QAED,sCAAkB,GAAlB,UAAmB,IAAwB;YACvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAEvB,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO;YAEX,IAAI,CAAC,UAAU,CAAC;gBACZ,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,KAAK;aACnB,CAAC,CAAC;YAEH,IAAI,IAAI,GAAG,IAAI,CAAC,QAAqB,EACjC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE5B,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;gBACrC,OAAO;YAEX,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE1B,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBAC1B,IAAI,CAAC,YAAY,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEvD,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB;oBACzC,IAAI,CAAC,WAAW,CAAC,UAAA,GAAG;wBAChB,IAAI,GAAG,YAAY,WAAA,SAAS;4BACxB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;gCAChB,QAAQ,EAAE,KAAK;gCACf,SAAS,EAAE,KAAK;6BACnB,CAAC,CAAC;oBACX,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;;oBAEZ,IAAI,CAAC,eAAe,CAAC,UAAA,GAAG;wBACpB,IAAI,GAAG,YAAY,WAAA,SAAS;4BACxB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;gCAChB,QAAQ,EAAE,KAAK;gCACf,SAAS,EAAE,KAAK;6BACnB,CAAC,CAAC;oBACX,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;aACnB;YAED,mBAAmB;YAEnB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,YAAY,WAAA,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAEvE,IAAI,SAAS,GAAG,IAAI,CAAC;gBACrB,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAExD,IAAI,CAAC,SAAS,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;oBACpD,IAAI,QAAQ,GAAe,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,WAAA,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;oBAElH,IAAI,CAAC,eAAe,CAAC,UAAA,GAAG;wBACpB,IAAI,GAAG,YAAY,WAAA,SAAS,EAAE;4BAC1B,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;4BACnD,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gCAC5C,QAAQ,CAAC,IAAI,CAAC,WAAA,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;6BACxE;yBACJ;oBACL,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;iBACf;aAEJ;YAED,YAAY;QAChB,CAAC;QAED,oCAAgB,GAAhB,UAAiB,IAAwB;YAAzC,iBAyDC;YAxDG,IAAI,IAAI,CAAC,WAAW;gBAChB,OAAO;YAEX,IAAI,IAAI,GAAG,IAAI,CAAC,QAAqB,EACjC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE5B,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;gBACrC,OAAO;YAEX,mBAAmB;YACnB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,YAAY,WAAA,SAAS,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE;gBAC7G,IAAI,SAAS,GAAG,IAAI,CAAC;gBACrB,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAExD,IAAI,CAAC,SAAS,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;oBACpD,IAAI,YAAY,GAAmC,EAAE,CAAC;oBAEtD,SAAS,CAAC,eAAe,CAAC,UAAA,GAAG;wBACzB,IAAI,GAAG,YAAY,WAAA,SAAS,EAAE;4BAC1B,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;4BACnD,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gCAC5C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;oCAC3B,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;gCAC3D,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;6BAC9D;yBACJ;oBACL,CAAC,CAAC,CAAC;oBAEH,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,UAAA,IAAI;wBACpC,KAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBAC1C,CAAC,CAAC,CAAC;iBACN;gBAED,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,EAAE,CAAC;aACpC;YAED,YAAY;YAEZ,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE1B,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC/C,IAAI,MAAM,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAC3C,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAE1C,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB;oBACzC,IAAI,CAAC,WAAW,CAAC,UAAA,GAAG;wBAChB,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC5B,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;;oBAEZ,IAAI,CAAC,eAAe,CAAC,UAAA,GAAG;wBACpB,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC5B,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEhB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;aAC9B;QACL,CAAC;QAED,oCAAgB,GAAhB,UAAiB,IAAwB;YAAzC,iBAqDC;YApDG,UAAU,CAAC,cAAQ,KAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,EAAE,CAAC;YAEjC,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,IAAI,CAAC,QAAqB,EAAE;oBAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;iBACjC;gBACD,OAAO;aACV;YAED,IAAI,IAAI,GAAG,IAAI,CAAC,QAAqB,EACjC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE5B,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE;gBACvC,IAAI,IAAI,CAAC,QAAqB,EAAE;oBAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;iBACjC;gBACD,OAAO;aACV;YAED,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE1B,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;gBACvD,IAAI,MAAM,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAC3C,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAE1C,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB;oBACzC,IAAI,CAAC,WAAW,CAAC,UAAA,GAAG;wBAChB,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;wBACxB,IAAI,GAAG,YAAY,WAAA,SAAS;4BACxB,GAAG,CAAC,WAAW,EAAE,CAAC;wBACtB,GAAG,CAAC,MAAM,EAAE,CAAC;oBACjB,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;;oBAEZ,IAAI,CAAC,eAAe,CAAC,UAAA,GAAG;wBACpB,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;wBACxB,IAAI,GAAG,YAAY,WAAA,SAAS;4BACxB,GAAG,CAAC,WAAW,EAAE,CAAC;wBACtB,GAAG,CAAC,MAAM,EAAE,CAAC;oBACjB,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEhB,OAAO,IAAI,CAAC,YAAY,CAAC;gBAEzB,IAAI,CAAC,MAAM,EAAE,CAAC;gBAEd,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB;QAGL,CAAC;QAEL,gBAAC;IAAD,CAhjCA,AAgjCC,IAAA;IAhjCY,oBAAS,YAgjCrB,CAAA;IAOD;QACI,qBAAY,SAAoB,EAAE,UAAkB;YAApD,iBA0GC;YAED,mBAAc,GAAiB,IAAI,CAAC;YACpC,cAAS,GAAiB,IAAI,CAAC;YAC/B,SAAI,GAAiB,IAAI,CAAC;YAC1B,aAAQ,GAAiB,IAAI,CAAC;YAC9B,SAAI,GAAiB,IAAI,CAAC;YAC1B,aAAQ,GAAiB,IAAI,CAAC;YAC9B,aAAQ,GAAiB,IAAI,CAAC;YAC9B,iBAAY,GAAiB,IAAI,CAAC;YAElC,aAAQ,GAAyC,EAAE,CAAC;YAEpD,QAAG,GAAmB,EAAE,CAAC;YArHrB,QAAQ,UAAU,EAAE;gBAChB,KAAK,UAAU,CAAC,cAAc,CAAC,IAAI;oBAC/B;wBACI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,WAAA,YAAY,CAAC;4BAC9E,QAAQ,EAAE,MAAM,CAAC,YAAY;4BAC7B,SAAS,EAAE,MAAM,CAAC,aAAa;4BAC/B,UAAU,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BAC5D,iBAAiB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BACnE,kBAAkB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BACpE,yBAAyB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BAC3E,MAAM,EAAE,CAAC;4BACT,QAAQ,EAAE,CAAC;yBACd,EAAE,SAAS,CAAC,CAAC,CAAC;wBAEf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,WAAA,YAAY,CAAC;4BACjE,QAAQ,EAAE,MAAM,CAAC,mBAAmB;4BACpC,SAAS,EAAE,MAAM,CAAC,oBAAoB;4BACtC,UAAU,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BAC5D,iBAAiB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BACnE,kBAAkB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BACpE,yBAAyB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BAC3E,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,IAAI,CAAC,IAAI;yBACpB,EAAE,SAAS,CAAC,CAAC,CAAC;qBAClB;oBACD,MAAM;gBACV,KAAK,UAAU,CAAC,cAAc,CAAC,QAAQ;oBACnC;wBACI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,WAAA,YAAY,CAAC;4BAC7D,QAAQ,EAAE,MAAM,CAAC,YAAY;4BAC7B,SAAS,EAAE,MAAM,CAAC,aAAa;4BAC/B,UAAU,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE;4BAC9E,iBAAiB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE;4BACrF,kBAAkB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE;4BACtF,yBAAyB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE;4BAC7F,MAAM,EAAE,CAAC;4BACT,QAAQ,EAAE,CAAC;4BACX,SAAS,EAAE,IAAI;yBAClB,EAAE,SAAS,CAAC,CAAC,CAAC;wBAEf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,WAAA,YAAY,CAAC;4BAC9E,QAAQ,EAAE,MAAM,CAAC,gBAAgB;4BACjC,SAAS,EAAE,MAAM,CAAC,iBAAiB;4BACnC,UAAU,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BAC5D,iBAAiB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BACnE,kBAAkB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BACpE,yBAAyB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BAC3E,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,IAAI,CAAC,IAAI;yBACpB,EAAE,SAAS,CAAC,CAAC,CAAC;wBAEf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,WAAA,YAAY,CAAC;4BACrE,QAAQ,EAAE,MAAM,CAAC,mBAAmB;4BACpC,SAAS,EAAE,MAAM,CAAC,oBAAoB;4BACtC,UAAU,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BAC5D,iBAAiB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BACnE,kBAAkB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BACpE,yBAAyB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BAC3E,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,IAAI,CAAC,QAAQ;yBACxB,EAAE,SAAS,CAAC,CAAC,CAAC;qBAClB;oBACD,MAAM;gBACV,SAAS,eAAe;oBACpB;wBACI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,WAAA,YAAY,CAAC;4BAClF,QAAQ,EAAE,MAAM,CAAC,gBAAgB;4BACjC,SAAS,EAAE,MAAM,CAAC,iBAAiB;4BACnC,UAAU,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;4BAC9B,iBAAiB,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;4BACrC,kBAAkB,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;4BACtC,yBAAyB,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;4BAC7C,MAAM,EAAE,CAAC;4BACT,QAAQ,EAAE,CAAC;yBACd,EAAE,SAAS,CAAC,CAAC,CAAC;wBAEf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,WAAA,YAAY,CAAC;4BAC7D,QAAQ,EAAE,MAAM,CAAC,YAAY;4BAC7B,SAAS,EAAE,MAAM,CAAC,aAAa;4BAC/B,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,IAAI,CAAC,QAAQ;4BACrB,kBAAkB,EAAE,IAAI;yBAC3B,EAAE,SAAS,CAAC,CAAC,CAAC;wBAEf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,WAAA,YAAY,CAAC;4BACjE,QAAQ,EAAE,MAAM,CAAC,mBAAmB;4BACpC,SAAS,EAAE,MAAM,CAAC,oBAAoB;4BACtC,UAAU,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BAC5D,iBAAiB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BACnE,kBAAkB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BACpE,yBAAyB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;4BAC3E,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,IAAI,CAAC,IAAI;yBACpB,EAAE,SAAS,CAAC,CAAC,CAAC;qBAClB;oBACD,MAAM;aACb;YAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;gBACvB,IAAI,CAAC,IAAI,KAAI,CAAC,CAAC,CAAC,IAAI,KAAI,CAAC,CAAC,CAAC,YAAY,WAAA,YAAY,EAAE;oBACjD,IAAI,CAAC,GAAG,KAAI,CAAC,CAAC,CAAiB,CAAC;oBAChC,KAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;iBACjC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAcL,kBAAC;IAAD,CAzHA,AAyHC,IAAA;IAzHY,sBAAW,cAyHvB,CAAA;IAED;QACI,mBAAY,IAAY,EAAE,KAAW;YACjC,IAAI,CAAC,KAAK,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YAChD,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QAIL,gBAAC;IAAD,CAVA,AAUC,IAAA;IAVY,oBAAS,YAUrB,CAAA;IAED;QACI,oBAAY,IAAY,EAAE,OAAqB,EAAE,QAAkB;YAC/D,IAAI,CAAC,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC3D,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QAML,iBAAC;IAAD,CAdA,AAcC,IAAA;IAdY,qBAAU,aActB,CAAA;IAED;QACI,0BAAY,SAAoB;YAAhC,iBAeC;YAGD,kBAAa,GAAY,KAAK,CAAC;YAE/B,aAAQ,GAAW,yBAAyB,CAAC;YAC7C,aAAQ,GAAY,IAAI,CAAC;YACzB,UAAK,GAAW,CAAC,CAAC;YAClB,UAAK,GAAY,IAAI,CAAC;YACtB,cAAS,GAAW,CAAC,CAAC;YACtB,eAAU,GAAW,CAAC,CAAC;YAGvB,WAAM,GAAiB,EAAE,CAAC;YA3BtB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEf,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAC/B;gBACI,GAAG,EAAE;oBACD,OAAO,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,EAAV,CAAU,CAAC,CAAC;gBAC9C,CAAC;gBACD,GAAG,EAAE,UAAC,CAAC;oBACH,KAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClD,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,cAAM,OAAA,IAAI,CAAC,KAAK,CAAC,KAAI,CAAC,SAAS,GAAG,KAAI,CAAC,KAAK,CAAC,EAAvC,CAAuC,CAAC,CAAC;YACtF,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,cAAM,OAAA,IAAI,CAAC,KAAK,CAAC,KAAI,CAAC,UAAU,GAAG,KAAI,CAAC,KAAK,CAAC,EAAxC,CAAwC,CAAC,CAAC;QAC5F,CAAC;QAcL,uBAAC;IAAD,CA9BA,AA8BC,IAAA;IA9BY,2BAAgB,mBA8B5B,CAAA;IAED;QACI,0BAAY,SAAoB;YAAhC,iBAkHC;YAGD,aAAQ,GAAW,wBAAwB,CAAC;YAOpC,WAAM,GAAW,CAAC,CAAC;YA3HvB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAE3B,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EACzB;gBACI,GAAG,EAAE;oBACD,IAAI,GAAG,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,EACnD,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC;oBAC/B,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS;wBAClB,OAAO,WAAA,OAAO,CAAC,IAAI,CAAC;oBACxB,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC;oBACpD,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,OAAO;wBAC1B,OAAO,WAAA,OAAO,CAAC,IAAI,CAAC;oBACxB,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAA,OAAO,CAAC,IAAI,CAAC;gBACrG,CAAC;gBACD,GAAG,EAAE,UAAC,CAAU;oBACZ,IAAI,GAAG,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,EACnD,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC;oBAC/B,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS;wBAClC,OAAO;oBAEX,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAEnC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtD,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAC9B;gBACI,GAAG,EAAE;oBACD,IAAI,GAAG,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC;oBACxD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO;wBACpB,OAAO,CAAC,CAAC;oBACb,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;gBAC7B,CAAC;gBACD,GAAG,EAAE,UAAC,CAAS;oBACX,IAAI,GAAG,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC;oBACxD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO;wBACpB,OAAO;oBAEX,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAC3B;gBACI,GAAG,EAAE;oBACD,IAAI,GAAG,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC;oBACxD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO;wBACpB,OAAO,CAAC,CAAC;oBACb,OAAO,GAAG,CAAC,MAAM,CAAC;gBACtB,CAAC;gBACD,GAAG,EAAE,UAAC,CAAS;oBACX,IAAI,GAAG,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC;oBACxD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO;wBACpB,OAAO;oBAEX,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAC/B;gBACI,GAAG,EAAE;oBACD,IAAI,GAAG,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC;oBACxD,IAAI,OAAO,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,uBAAuB,CAA0B,CAAC;oBACnG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO;wBAChC,OAAO,CAAC,CAAC;oBACb,OAAO,GAAG,CAAC,UAAU,CAAC;gBAC1B,CAAC;gBACD,GAAG,EAAE,UAAC,CAAS;oBACX,IAAI,GAAG,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC;oBACxD,IAAI,OAAO,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,uBAAuB,CAA0B,CAAC;oBACnG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO;wBAChC,OAAO;oBAEX,IAAI,EAAE,GAAG,KAAI,CAAC,SAAS,CAAC;oBAExB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;wBACjB,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;wBAEhB,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;wBAClC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;wBAEhC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBAC1B,mBAAmB;wBAEnB,IAAI,SAAS,GAAG,WAAA,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAA,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAA,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAEnJ,GAAG,CAAC,SAAS,CAAC,IAAI,WAAA,YAAY,CAAC,WAAA,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,WAAA,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;wBAE5K,OAAO,CAAC,WAAW,CAAC,WAAA,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,WAAA,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC/G;gBACL,CAAC;aACJ,CAAC,CAAC;YAEP,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAC3B;gBACI,GAAG,EAAE;oBACD,OAAO,KAAI,CAAC,MAAM,CAAC;gBACvB,CAAC;gBACD,GAAG,EAAE,UAAC,CAAS;oBACX,IAAI,GAAG,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC;oBACxD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO;wBACpB,OAAO,CAAC,CAAC;oBACb,IAAI,CAAC,GAAG,CAAC,GAAG,KAAI,CAAC,MAAM,CAAC;oBACxB,KAAI,CAAC,MAAM,GAAG,CAAC,CAAC;oBAChB,IAAI,CAAC,IAAI,CAAC,EAAE;wBACR,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;qBACvC;gBACL,CAAC;aACJ,CAAC,CAAC;QACX,CAAC;QAaD,uCAAY,GAAZ,UAAa,CAAkB;YAC3B,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,OAAO;gBACZ,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;gBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;gBACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;gBACjD,EAAE,EAAE,IAAI;aACX,CAAC,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,kCAAO,GAAP,UAAQ,CAAkB;YACtB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC,OAAO;gBACb,GAAG,EAAE,OAAO;gBACZ,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;gBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;gBACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;gBACjD,EAAE,EAAE,IAAI;aACX,CAAC,CAAC;YACP,IAAI,CAAC,GAAG,GAAG,IAAI,WAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,kCAAO,GAAP,UAAQ,CAAkB;YACtB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC,OAAO;gBACb,GAAG,EAAE,OAAO;gBACZ,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;gBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;gBACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;gBACjD,EAAE,EAAE,IAAI;aACX,CAAC,CAAC;YACP,IAAI,CAAC,GAAG,GAAG,IAAI,WAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,sCAAW,GAAX,UAAY,CAAkB;YAC1B,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC,GAAG;gBACT,GAAG,EAAE,GAAG;gBACR,eAAe,EAAE,IAAI;gBACrB,WAAW,EAAE,IAAI;aACpB,CAAC,CAAC;YACP,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACtB,CAAC;QAED,mCAAQ,GAAR,UAAS,CAAkB;YACvB,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,GAAG;gBACR,eAAe,EAAE,IAAI;gBACrB,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,CAAC,GAAG,GAAG;aACjB,CAAC,CAAC;YACP,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACnB,CAAC;QAED,mCAAQ,GAAR,UAAS,CAAkB;YACvB,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,OAAO;gBACZ,eAAe,EAAE,IAAI;gBACrB,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,CAAC,GAAG,GAAG;aACjB,CAAC,CAAC;YACP,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACnB,CAAC;QACL,uBAAC;IAAD,CA9MA,AA8MC,IAAA;IA9MY,2BAAgB,mBA8M5B,CAAA;IAED,IAAY,wBAMX;IAND,WAAY,wBAAwB;QAChC,yEAAS,CAAA;QACT,2FAAkB,CAAA;QAClB,6EAAW,CAAA;QACX,mFAAc,CAAA;QACd,qFAAe,CAAA;IACnB,CAAC,EANW,wBAAwB,GAAxB,mCAAwB,KAAxB,mCAAwB,QAMnC;IAED;QAiCI,8BAAY,SAAoB;YAAhC,iBAwCC;YAvED,aAAQ,GAAW,oBAAoB,CAAC;YAExC,gBAAW,GAAG,CAAC,CAAC;YAChB,UAAK,GAAG,CAAC,CAAC;YAKV,cAAS,GAAW,CAAC,CAAC;YAKtB,eAAU,GAAG,IAAI,CAAC;YAClB,aAAQ,GAAG,KAAK,CAAC;YAEjB,kBAAa,GAAW,CAAC,CAAC;YAElB,iBAAY,GAA4B,EAAE,CAAC;YAC3C,mBAAc,GAAW,IAAI,CAAC;YAOtC,cAAS,GAAW,IAAI,WAAA,MAAM,EAAE,CAAC;YACjC,YAAO,GAAW,IAAI,WAAA,MAAM,EAAE,CAAC;YAC/B,UAAK,GAAW,IAAI,WAAA,MAAM,EAAE,CAAC;YAC7B,QAAG,GAAW,IAAI,WAAA,MAAM,EAAE,CAAC;YAGvB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC;YAE9C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAE3B,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE;gBACjC,IAAI,CAAC,GAAG,KAAI,CAAC,KAAK,EACd,CAAC,GAAG,KAAI,CAAC,GAAG,CAAC;gBAEjB,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAClC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,mBAAmB,EAAE;gBAEzC,IAAI,CAAC,GAAG,KAAI,CAAC,KAAK,EACd,CAAC,GAAG,KAAI,CAAC,GAAG,EACZ,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC;gBAEjC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE;oBACxB,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;gBAElC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EACpB,GAAG,GAAG,WAAA,OAAO,CAAC,eAAe,CAAC,KAAI,CAAC,WAAW,CAAC,EAC/C,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACzB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAEjF,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;YAC/C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,mBAAmB,EACvC;gBACI,GAAG,EAAE;oBACD,OAAO,KAAI,CAAC,SAAS,GAAG,KAAI,CAAC,iBAAiB,GAAG,KAAI,CAAC,SAAS,CAAC;gBACpE,CAAC;gBACD,GAAG,EAAE,UAAC,CAAS;oBACX,KAAI,CAAC,SAAS,GAAG,CAAC,GAAG,KAAI,CAAC,SAAS,GAAG,KAAI,CAAC,iBAAiB,CAAC;gBACjE,CAAC;aACJ,CAAC,CAAC;QACX,CAAC;QAnDD,+FAA+F;QAEvF,qDAAsB,GAA9B;YACI,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAwB,CAAC;QAC5F,CAAC;QAiDD,2CAAY,GAAZ,UAAa,CAAkB;YAC3B,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,OAAO;gBACZ,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;gBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;gBACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;gBACjD,EAAE,EAAE,IAAI;aACX,CAAC,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,mDAAoB,GAApB,UAAqB,CAAkB;YACnC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,EAC3C;gBACI,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,OAAO;gBACZ,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,MAAM,CAAC,iBAAiB;gBAChC,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB;gBACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;gBACjD,EAAE,EAAE,IAAI;aACX,CAAC,CAAC;YACP,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC/B,CAAC;QAED,6CAAc,GAAd;YACI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM;gBACxB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC;gBACxD,IAAI,GAAG;oBACH,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;aAC/C;YACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACpC,CAAC;QAED,0CAAW,GAAX,UAAY,KAAa,EAAE,GAAW,EAAE,WAAmB,EAAE,WAAmB,EAAE,KAAa;YAA/F,iBAoCC;YAnCG,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC;gBAC7C,OAAO;YACX,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YAEnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;YAE3B,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC;YAClC,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAc,CAAC;YACxE,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;YAEzD,IAAI,SAAS,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB,IAAI,SAAS,CAAC,KAAK,KAAK,WAAW,EAAE;gBACnF,yBAAyB;gBACzB,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,UAAA,GAAG;oBAC/B,IAAI,GAAG,YAAY,WAAA,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,mBAAmB,EAAE;wBACzE,KAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;qBACtD;gBACL,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;aACpB;YAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,IAAI,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC;YACnD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAExB,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO;gBAClB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC;YAE/C,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;YAE5C,gCAAgC;QACpC,CAAC;QAED,8CAAe,GAAf;YACI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,sBAAsB,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACnF,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACpC,CAAC;QAED,6CAAc,GAAd;YAAA,iBAaC;YAZG,UAAU,CAAC;gBACP,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACpB,IAAI,SAAS,GAAG,KAAI,CAAC,SAAS,EAC1B,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC;gBAE/B,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,KAAK,SAAS,EAAE;oBAC3D,KAAI,CAAC,cAAc,EAAE,CAAC;oBACtB,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACpB,+JAA+J;oBAC/J,KAAI,CAAC,cAAc,CAAC,KAAI,CAAC,KAAK,EAAE,KAAI,CAAC,GAAG,EAAE,SAAS,EAAE,KAAI,CAAC,aAAa,CAAC,CAAC;iBAC5E;YACL,CAAC,EAAE,CAAC,CAAC,CAAC;QACV,CAAC;QAED,6CAAc,GAAd,UAAe,KAAa,EAAE,GAAW,EAAE,SAAiB,EAAE,IAAY;YACtE,IAAI,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YAE7C,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;gBAE7M,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,EACrB,CAAC,GAAG,GAAG,CAAC,SAAS,EAAE,EACnB,EAAE,GAAG,SAAS,GAAG,SAAS,EAC1B,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAE/B,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE,EAC1C,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAc,CAAC;gBAErF,IAAI,SAAS,EAAE;oBACX,IAAI,SAAS,CAAC,kBAAkB;wBAC5B,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;oBAEjC,QAAQ,IAAI,EAAE;wBACV,KAAK,wBAAwB,CAAC,cAAc,CAAC;wBAC7C,KAAK,wBAAwB,CAAC,KAAK;4BAC/B;gCACI,IAAI,SAA2B,CAAC;gCAChC,IAAI,IAAI,KAAK,wBAAwB,CAAC,cAAc,EAAE;oCAClD,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EACb,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;oCACjC,SAAS,GAAG,WAAA,gBAAgB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAA,gBAAgB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAA,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAA,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAA,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;iCACxP;;oCACG,SAAS,GAAG,WAAA,gBAAgB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAA,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAA,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gCAEvK,IAAI,SAAS,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB,IAAI,SAAS,CAAC,KAAK,KAAK,WAAW,EAAE;oCACnF,wBAAwB;oCACxB,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,UAAA,GAAG;wCAC/B,IAAI,GAAG,YAAY,WAAA,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,mBAAmB,EAAE;4CACzE,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;yCACxD;oCACL,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;iCACpB;gCAED,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gCAE3D,IAAI,CAAC,KAAK,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gCACxD,IAAI,CAAC,GAAG,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gCAEtD,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC;gCACxD,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,KAAK,wBAAwB,CAAC,KAAK;oCAClF,GAAG,CAAC,SAAS,CAAC,IAAI,WAAA,YAAY,CAAC,WAAA,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,WAAA,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;6BACnL;4BACD,MAAM;wBACV,KAAK,wBAAwB,CAAC,OAAO;4BACjC;gCACI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EACZ,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,EACpB,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EACpB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;gCAE9C,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAC5B,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EACrB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAC5B,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;gCAE1B,IAAI,CAAC,KAAK,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC3F,IAAI,CAAC,GAAG,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAEzF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,GAAG,CAAC,UAAA,CAAC;oCAClE,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAC3B,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;oCACvB,OAAO,WAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC9F,CAAC,CAAC,EAJ4D,CAI5D,CAAC,CAAC,CAAC;gCAEL,IAAI,SAAS,CAAC,mBAAmB,IAAI,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE;oCACvE,SAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAA,EAAE;wCACpC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAqB,UAAA,EAAE;4CAC3E,IAAI,CAAC,GAAG,WAAA,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAChC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAC3B,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;4CACvB,OAAO,WAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wCAC9F,CAAC,CAAC,CAAC,CAAC;oCACR,CAAC,CAAC,CAAC;iCACN;gCAED,IAAI,SAAS,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB,IAAI,SAAS,CAAC,KAAK,KAAK,WAAW,EAAE;oCACnF,wBAAwB;oCACxB,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,UAAA,GAAG;wCAC/B,IAAI,GAAG,YAAY,WAAA,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,mBAAmB,EAAE;4CAEzE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,GAAG,CAAC,UAAA,CAAC;gDACtD,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAC3B,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gDACvB,OAAO,WAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4CAC9F,CAAC,CAAC,EAJgD,CAIhD,CAAC,CAAC,CAAC;4CAEL,GAAG,CAAC,MAAM,EAAE,CAAC;yCAChB;oCACL,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;iCACpB;gCAED,SAAS,CAAC,MAAM,EAAE,CAAC;6BACtB;4BACD,MAAM;wBACV,KAAK,wBAAwB,CAAC,WAAW;4BACrC;gCACI,IAAI,EAAE,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gCACrD,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gCACrC,SAAS,CAAC,MAAM,EAAE,CAAC;gCAEnB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gCAChB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;6BAC1B;4BACD,MAAM;wBACV,KAAK,wBAAwB,CAAC,UAAU;4BACpC;gCACI,IAAI,EAAE,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gCACrD,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gCACnC,SAAS,CAAC,MAAM,EAAE,CAAC;gCAEnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;gCAC3B,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;6BACjB;4BACD,MAAM;qBACb;oBAED,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAEpB,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;iBAC9D;aAEJ;QACL,CAAC;QAEL,2BAAC;IAAD,CAjTA,AAiTC,IAAA;IAjTY,+BAAoB,uBAiThC,CAAA;IAED;QAOI,6BAAY,SAAoB;YALhC,aAAQ,GAAW,0BAA0B,CAAC;YAG9C,UAAK,GAAW,CAAC,CAAC;YAGd,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC/B,CAAC;QAED,sCAAQ,GAAR;YACI,OAAO,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,4CAAc,GAAd,UAAe,GAAW;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QAChE,CAAC;QACL,0BAAC;IAAD,CApBA,AAoBC,IAAA;IApBY,8BAAmB,sBAoB/B,CAAA;AACL,CAAC,EAjxDM,UAAU,KAAV,UAAU,QAixDhB;;ACjxDD,IAAO,UAAU,CA20FhB;AA30FD,WAAO,UAAU;IACb;QAEI,mBAAY,IAAa,EAAE,OAA2B;YAmiBtD,oBAAe,GAAG,KAAK,CAAC;YACxB,sBAAiB,GAAG,KAAK,CAAC;YAC1B,sBAAiB,GAAG,KAAK,CAAC;YAC1B,uBAAkB,GAA2B,IAAI,CAAC;YAClD,sBAAiB,GAAG,KAAK,CAAC;YAC1B,mBAAc,GAAG,CAAC,CAAC;YAmnDnB,oBAAe,GAAgB;gBAC3B,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,SAAS;gBACtB,aAAa,EAAE,GAAG;gBAClB,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,IAAI;aAChB,CAAC;YAWF,cAAS,GAAG,KAAK,CAAC;YACV,gBAAW,GAAG,KAAK,CAAC;YAC5B,mBAAc,GAAG,KAAK,CAAC;YACvB,iBAAY,GAAG,KAAK,CAAC;YACrB,cAAS,GAAG,KAAK,CAAC;YAClB,aAAQ,GAAG,KAAK,CAAC;YACjB,YAAO,GAAG,KAAK,CAAC;YAChB,cAAS,GAAG,KAAK,CAAC;YACV,cAAS,GAAG,KAAK,CAAC;YAClB,sBAAiB,GAAoC,EAAE,CAAC;YAqBhE,cAAS,GAAG,KAAK,CAAC;YAElB,gBAAW,GAA2B,IAAI,CAAC;YAC3C,WAAM,GAAW,IAAI,WAAA,MAAM,EAAE,CAAC;YAC9B,eAAU,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAA,cAAc,CAAC,CAAC;YAGrE,iBAAY,GAAe,EAAE,CAAC;YA0X9B,8BAAyB,GAAgB;gBACrC,YAAY,EAAE,GAAG;gBACjB,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,SAAS;gBACtB,aAAa,EAAE,GAAG;aACrB,CAAC;YAEF,uBAAkB,GAAgB;gBAC9B,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,SAAS;gBACtB,aAAa,EAAE,GAAG;aACrB,CAAC;YAEF,sBAAiB,GAAgB;gBAC7B,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,SAAS;gBACtB,aAAa,EAAE,GAAG;aACrB,CAAC;YAEF,eAAU,GAAgB;gBACtB,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,SAAS;gBACtB,aAAa,EAAE,GAAG;aACrB,CAAC;YAEF,oBAAe,GAAgB;gBAC3B,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,SAAS;gBACtB,aAAa,EAAE,IAAI;gBACnB,MAAM,EAAE,EAAE;aACb,CAAC;YApnFE,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE;gBAC9B,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC;gBAEnC,WAAA,eAAe,CAAC,mBAAmB,EAAE,CAAC;gBACtC,WAAA,aAAa,CAAC,mBAAmB,EAAE,CAAC;aAEvC;YAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAEjB,wIAAwI;YACxI,wCAAwC;YAExC,iCAAiC;YACjC,OAAO;YACP,4CAA4C;YAC5C,qBAAqB;YACrB,qBAAqB;YACrB,qBAAqB;YACrB,oBAAoB;YACpB,SAAS;YACT,iBAAiB;YACjB,gCAAgC;YAChC,GAAG;YACH,+CAA+C;YAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAMD,wBAAI,GAAJ,UAAK,OAA2B,EAAE,YAAsB;YAAxD,iBAyUC;YAvUG,IAAI,CAAC,OAAO,GAAG;gBACX,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;gBAC1B,KAAK,EAAE,GAAG;gBACV,MAAM,EAAE,GAAG;gBACX,WAAW,EAAE,IAAI;gBACjB,aAAa,EAAE,IAAI;gBACnB,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,wCAAwC;gBACjD,UAAU,EAAE,KAAK;aACpB,CAAC;YAEF,IAAI,OAAO,EAAE;gBACT,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE;oBACrB,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC;wBAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;iBACxC;aACJ;YAED,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAEvB,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;gBACrC,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC;YAE/B,IAAI,OAAO,CAAC,QAAQ,EAAE;gBAClB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACxD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;aACpI;YAED,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAErB,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAE/B,IAAI,CAAC,SAAS;gBACV,IAAI,CAAC,SAAS,GAAG,SAAS,GAAG,IAAI,WAAA,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;;gBAE3E,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;YAEnD,IAAI,CAAC,CAAC,uBAAuB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE;gBACrE,uEAAuE;gBAEvE,SAAS,CAAC,uBAAuB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBACxE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAClC,OAAO;aACV;YAED,SAAS,CAAC,uBAAuB,GAAG,IAAI,CAAC;YAEzC,IAAI,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,uBAAuB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1F,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAE3E,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACnB,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,QAAQ,GAAG,WAAA,MAAM,CAAC,SAAS,CAAC;YAChC,IAAI,aAAa,GAAG,CAAC,YAAY,CAAC;YAClC,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;YAE1B,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC,WAAW,CAAC;YAE3D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAExD,eAAe,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YAC1E,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YAC7E,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;YACpC,SAAS,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;YAEtC,IAAI,GAAG,EAAE;gBACL,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAEzC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAE9B,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAElB,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAE5B,aAAa,GAAG,KAAK,CAAC;aACzB;iBACI;gBACD,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;oBAChC,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;oBACtE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS;oBAC1C,OAAO,EAAE,CAAC;oBACV,IAAI,EAAE,CAAC;oBACP,cAAc,EAAE,IAAI;oBACpB,qBAAqB,EAAE;wBACnB,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa;qBACvD;oBACD,iBAAiB,EAAE,KAAK;oBACxB,sBAAsB,EAAE,IAAI;oBAC5B,kBAAkB,EAAE,KAAK;oBACzB,UAAU,EAAE,KAAK;oBACjB,aAAa,EAAE,KAAK;oBACpB,YAAY,EAAE,KAAK;oBACnB,WAAW,EAAE,IAAI;oBACjB,WAAW,EAAE,KAAK;oBAClB,gBAAgB,EAAE,IAAI;oBACtB,eAAe,EAAE,QAAQ;iBAC5B,CAAC,CAAC;gBAGH,IAAI,4BAA4B,GAAG,CAAC,CAAC,yCAAyC,CAAC,CAAC,KAAK,EAAE,CAAC;gBACxF,4BAA4B,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACnD,IAAI,iBAAiB,GAAG,4BAA4B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC/E,IAAI,IAAI,CAAC,SAAS,CAAC,4BAA4B;oBAC3C,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAExC,iBAAiB,CAAC,QAAQ,CAAC;oBACvB,QAAQ,EAAE;wBACN,KAAI,CAAC,SAAS,CAAC,4BAA4B,GAAG,CAAC,KAAI,CAAC,SAAS,CAAC,4BAA4B,CAAC;wBAC3F,uCAAuC;oBAC3C,CAAC;iBACJ,CAAC,CAAC;gBAEH,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAG7F,IAAI,WAAW,GAAG,CAAC,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;gBACrD,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAClC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;gBAEhF,uFAAuF;gBACvF,sDAAsD;gBACtD,KAAK;gBAEL,IAAI,UAAU,GAAG,EAAE,CAAC;gBAEpB,wDAAwD;gBACxD,sDAAsD;gBACtD,kGAAkG;gBAClG,QAAQ;gBACR,yDAAyD;gBACzD,4BAA4B;gBAC5B,yBAAyB;gBACzB,MAAM;gBAEN,2DAA2D;gBAC3D,oCAAoC;gBACpC,6CAA6C;gBAC7C,+CAA+C;gBAC/C,oIAAoI;gBAEpI,8JAA8J;gBAE9J,qBAAqB;gBACrB,QAAQ;gBACR,yDAAyD;gBACzD,qBAAqB;gBACrB,0BAA0B;gBAC1B,gBAAgB;gBAChB,MAAM;gBAEN,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,EAC9B,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;gBAEjC,IAAI,CAAC,WAAW,EAAE;oBACd,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG;wBAC7B,IAAI;wBACF,IAAI,WAAA,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBACnE,IAAI,WAAA,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBAC7D,OAAO;qBACV,CAAC;iBACL;gBAED,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;oBACjC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,WAAA,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG,qBAAqB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE7G,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAC/B;oBACI,OAAO,EAAE,UAAC,KAAwB,EAAE,IAAY,EAAE,aAAuB;wBAErE,IAAI,GAAG,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;wBAE7C,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;wBAC1B,uDAAuD;wBAEvD,OAAO,GAAG,CAAC;oBACf,CAAC;oBACD,WAAW,EAAE,UAAC,IAAa;wBACvB,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa;4BAC1B,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBAC7C,CAAC;oBACD,QAAQ,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;oBAClD,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;oBACxB,OAAO,EAAE,UAAU;oBACnB,OAAO,EAAE,CAAC;iBACb,CAAC,CAAC;gBAEP,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAC/B;oBACI,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBACvD,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBAC5D,QAAQ,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;oBAClD,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;oBACxB,OAAO,EAAE,UAAU;oBACnB,OAAO,EAAE,CAAC;iBACb,CAAC,CAAC;gBAEP,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;oBACjC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBACvD,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBAC5D,QAAQ,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;oBAClD,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;oBACxB,OAAO,EAAE,UAAU;oBACnB,OAAO,EAAE,CAAC;iBACb,CAAC,CAAC;gBAEH,IAAI,UAAU,EAAE;oBACZ,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;wBACjC,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;wBAC/C,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;wBACpD,QAAQ,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;wBAClD,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;wBACxB,OAAO,EAAE,UAAU;wBACnB,OAAO,EAAE,CAAC;qBACb,CAAC,CAAC;oBACH,SAAS,CAAC,sBAAsB,GAAG,IAAI,CAAC;iBAC3C;;oBACG,SAAS,CAAC,sBAAsB,GAAG,KAAK,CAAC;gBAE7C,sCAAsC;gBACtC,OAAO;gBACP,yFAAyF;gBACzF,oGAAoG;gBACpG,YAAY;gBACZ,2CAA2C;gBAC3C,6CAA6C;gBAC7C,uDAAuD;gBACvD,YAAY;gBACZ,6DAA6D;gBAC7D,mCAAmC;gBACnC,8BAA8B;gBAC9B,oBAAoB;gBACpB,SAAS;gBAET,qEAAqE;gBACrE,oCAAoC;gBACpC,6CAA6C;gBAC7C,+CAA+C;gBAC/C,oIAAoI;gBAEpI,8JAA8J;gBAE9J,qBAAqB;gBACrB,QAAQ;gBACR,yDAAyD;gBACzD,+BAA+B;gBAC/B,0BAA0B;gBAC1B,gBAAgB;gBAChB,MAAM;gBAEN,wCAAwC;gBACxC,qFAAqF;gBACrF,wFAAwF;gBACxF,QAAQ;gBACR,uCAAuC;gBACvC,yCAAyC;gBACzC,mDAAmD;gBACnD,QAAQ;gBACR,yDAAyD;gBACzD,+BAA+B;gBAC/B,0BAA0B;gBAC1B,gBAAgB;gBAChB,KAAK;gBAEL,yDAAyD;gBACzD,+DAA+D;gBAC/D,6CAA6C;gBAC7C,+CAA+C;gBAC/C,oIAAoI;gBAEpI,sJAAsJ;gBAEtJ,qBAAqB;gBAErB,0EAA0E;gBAC1E,gIAAgI;gBAChI,uBAAuB;gBACvB,QAAQ;gBACR,yDAAyD;gBACzD,mBAAmB;gBACnB,0BAA0B;gBAC1B,gBAAgB;gBAChB,MAAM;gBAEN,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAE5B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;gBAEf,UAAU,CAAC;oBACP,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAC7C,CAAC,EAAE,CAAC,CAAC,CAAC;aACT;YAED,IAAI,CAAC,IAAI,CAAC,gBAAgB;gBACtB,IAAI,CAAC,gBAAgB,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE/D,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;YAEzC,IAAI,CAAC,cAAc,EAAE;gBACjB,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;oBAC1E,WAAW,EAAE,IAAI;oBACjB,cAAc,EAAE,KAAK;oBACrB,GAAG,EAAE,GAAG;iBACX,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO,CAAC,UAAU;oBACnB,IAAI,CAAC,UAAU,EAAE,CAAC;aACzB;;gBACG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAE/B,IAAI,CAAC,IAAI,CAAC,aAAa;gBACnB,IAAI,CAAC,aAAa,GAAG,IAAI,WAAA,aAAa,CAAC,IAAI,CAAC,CAAC;iBAC5C;gBACD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACjC;YAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACpB,IAAI,CAAC,YAAY,GAAG,IAAI,WAAA,YAAY,EAAE,CAAC;aAC1C;YAED,IAAI,aAAa;gBACb,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;YAG/D,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,qCAAiB,GAAjB,UAAkB,QAA0E,EAAE,iBAAyB;YAAvH,iBAwCC;YAxC6F,kCAAA,EAAA,yBAAyB;YACnH,IAAI,QAAQ,YAAY,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;gBAC3C,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtB,IAAI,IAAI,CAAC,cAAc,EAAE;oBACrB,IAAI,UAAU,GAAI,QAAkC,CAAC,SAAS,EAAE,CAAC;oBACjE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,UAAA,IAAI;wBAC/C,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;4BACvB,IAAI,EAAE,GAAG,IAAI,CAAC,QAAqB,CAAC;4BACpC,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,kBAAkB,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;gCACrE,OAAO,KAAK,CAAC;yBACpB;wBACD,OAAO,UAAU,CAAC,UAAU,CAAC,KAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;oBAClE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,QAAqB,EAA1B,CAA0B,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;oBAClJ,OAAO;iBACV;gBACD,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAiC,CAAC,CAAC;aAChF;iBAAM,IAAI,QAAQ,YAAY,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC/C,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtB,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAA8B,CAAC,CAAC;aAC1E;YAED,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACzC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtB,OAAO;aACV;YAED,IAAI,QAAQ,YAAY,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;gBACzC,IAAI,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBAChC,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC9D,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;gBACrF,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;gBACxC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;oBACpF,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM;wBACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;iBAC7B;qBAAM;oBACH,IAAI,CAAC,UAAU,CAAC,QAAe,CAAC,CAAC;iBACpC;aACJ;;gBACwB,QAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;QAED,gCAAY,GAAZ;YACI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,2CAA2C;YAC3C,qBAAqB;YAErB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAA,QAAQ;gBAC5E,IAAI,QAAQ,CAAC,MAAM;oBACf,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;YAEH,2DAA2D;YAC3D,gDAAgD;YAEhD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAC7D,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAEzD,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE;gBACrB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;gBACvE,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;gBACnE,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;gBACvE,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;aACtE;iBACI;gBACD,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;gBACxE,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;gBACnE,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;aACnE;YAGD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAAA,CAAC;YAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAAA,CAAC;YAC9B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;YAAA,CAAC;QACtC,CAAC;QAID,SAAS;QACT,qDAAiC,GAAjC,UAAkC,KAA6B,EAAE,KAAmC,EAAE,GAAoB;YAEtH,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC,CAAC,cAAc,EAAE;gBAClB,UAAU,GAAG,EAAE,CAAC;YACpB,IAAI,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB;YACrD,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC1D,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,UAAU,EAAE,UAAU,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC;YACrG,IAAI,aAAa,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,aAAa;YAEvE,IAAI,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC;YACtC,IAAI,uBAAuB,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;YAClD,IAAI,gBAAgB,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CACxC,gBAAgB,CAAC,CAAC,GAAG,uBAAuB,CAAC,IAAI,EACjD,gBAAgB,CAAC,CAAC,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;YAEtD,IAAI,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;YAC3D,IAAI,iBAAiB,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAClF,2CAA2C;YAC3C,+BAA+B;YAC/B,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE;gBACjD,IAAI,UAAU,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACrC,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;gBAErE,IAAI,CAAC,eAAe,GAAG,WAAA,mBAAmB,CAAC,IAAI,CAAC;gBAChD,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;oBACpC,IAAI,CAAC,eAAe,IAAI,WAAA,mBAAmB,CAAC,IAAI,CAAC;gBACrD,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;oBACpC,IAAI,CAAC,eAAe,IAAI,WAAA,mBAAmB,CAAC,GAAG,CAAC;gBACpD,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;oBACpC,IAAI,CAAC,eAAe,IAAI,WAAA,mBAAmB,CAAC,KAAK,CAAC;gBACtD,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;oBACpC,IAAI,CAAC,eAAe,IAAI,WAAA,mBAAmB,CAAC,MAAM,CAAC;gBAEvD,kDAAkD;aACrD;;gBAEG,IAAI,CAAC,eAAe,GAAG,WAAA,mBAAmB,CAAC,IAAI,CAAC;YAEpD,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YACtB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,wCAAoB,GAApB,UAAqB,eAAoC,EAAE,YAAoB;YAC3E,IAAI,WAAW,GAAY,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,eAAe,KAAK,WAAA,mBAAmB,CAAC,IAAI,IAAI,WAAW;gBAC3D,OAAO;YAEX,IAAI,WAAW,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,eAAe,GAAG,WAAA,mBAAmB,CAAC,IAAI,CAAC,KAAK,WAAA,mBAAmB,CAAC,IAAI;gBACzE,WAAW,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;YAClC,IAAI,CAAC,eAAe,GAAG,WAAA,mBAAmB,CAAC,KAAK,CAAC,KAAK,WAAA,mBAAmB,CAAC,KAAK;gBAC3E,WAAW,CAAC,CAAC,GAAG,YAAY,CAAC;YACjC,IAAI,CAAC,eAAe,GAAG,WAAA,mBAAmB,CAAC,GAAG,CAAC,KAAK,WAAA,mBAAmB,CAAC,GAAG;gBACvE,WAAW,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;YAClC,IAAI,CAAC,eAAe,GAAG,WAAA,mBAAmB,CAAC,MAAM,CAAC,KAAK,WAAA,mBAAmB,CAAC,MAAM;gBAC7E,WAAW,CAAC,CAAC,GAAG,YAAY,CAAC;YAEjC,2CAA2C;YAC3C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;YAC7C,4CAA4C;QAChD,CAAC;QAID,iCAAa,GAAb;YAAA,iBASC;YARG,IAAI,QAAQ,GAAG,GAAG,CAAC,CAAC,oCAAoC;YACxD,IAAI,YAAY,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE;gBACpB,iBAAiB;gBACjB,oBAAoB;aACvB;YAED,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,cAAM,OAAA,KAAI,CAAC,oBAAoB,CAAC,KAAI,CAAC,eAAe,EAAE,YAAY,CAAC,EAA7D,CAA6D,EAAE,QAAQ,CAAC,CAAC;QACrH,CAAC;QAED,iCAAa,GAAb;YACI,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACvC,CAAC;QAED,SAAS;QACT,qCAAiB,GAAjB,UAAkB,GAAoB,EAAE,KAAwB;YAC5D,IAAI,UAAU,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;YACrC,IAAI,QAAQ,GAAG,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;YAC5E,IAAI,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;YAC9E,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,8BAA8B;YAC9D,OAAO,UAAU,CAAC,iBAAiB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7H,CAAC;QAAA,CAAC;QAEF,qCAAiB,GAAjB,UAAkB,MAA0B;YACxC,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAC1C,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YAClC,IAAI,QAAQ,GAAG,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YACnE,IAAI,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YACrE,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5C,IAAI,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAC7B,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EACjD,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YACrD,OAAO,KAAK,CAAC;QACjB,CAAC;QASD,8BAAU,GAAV;YAAA,iBAgVC;YA/UG,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;YACzC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YAEnB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,iBAAiB,EAAE,UAAC,CAA2C;gBACrI,KAAI,CAAC,iBAAiB,CAAmE,CAAC,CAAC,OAAO,CAAC,CAAC;YACxG,CAAC,CAAC,CAAC,CAAC;YAEJ,2GAA2G;YAC3G,6BAA6B;YAC7B,iBAAiB;YACjB,oCAAoC;YACpC,mDAAmD;YACnD,MAAM;YAEN,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,UAAC,KAA6B;gBACtG,KAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,GAAG,KAAK,CAAC;gBAC9C,KAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;gBAChC,oCAAoC;gBACpC,KAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,KAAI,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC,CAAC;YAEJ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,UAAC,KAA6B;;gBACpG,4BAA4B;gBAC5B,kDAAkD;gBAClD,MAAA,KAAI,CAAC,SAAS,CAAC,WAAW,0CAAE,SAAS,CAAC,KAAK,EAAE,KAAI,EAAE;YACvD,CAAC,CAAC,CAAC,CAAC;YAEJ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,UAAC,KAA6B;gBACtG,oEAAoE;gBACpE,oBAAoB;gBACpB,aAAa;gBACb,KAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;gBAC9B,8BAA8B;gBAC9B,sBAAsB;gBACtB,4BAA4B;gBAC5B,KAAI,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,KAAI,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC,CAAC;YAEJ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,UAAC,KAA6B;gBACjG,yBAAyB;gBACzB,2BAA2B;gBAE3B,mCAAmC;gBACnC,6DAA6D;gBAC7D,uCAAuC;gBAEvC,KAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC;YACjD,CAAC,CAAC,CAAC,CAAC;YAEJ,4EAA4E;YAC5E,mCAAmC;YACnC,wEAAwE;YACxE,wBAAwB;YACxB,iBAAiB;YAEjB,4BAA4B;YAC5B,kCAAkC;YAClC,0DAA0D;YAC1D,KAAK;YAEL,IAAI,CAAC,cAAc,GAAG,UAAC,CAAgB;gBACnC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAW,CAAC;gBACvD,QAAQ,IAAI,EAAE;oBACV,KAAK,EAAE,EAAE,OAAO;wBACZ,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC;wBACtB,MAAM;oBACV,KAAK,EAAE,EAAE,MAAM;wBACX,KAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;wBACrB,IAAI,KAAI,CAAC,QAAQ;4BACb,CAAC,CAAC,cAAc,EAAE,CAAC;wBACvB,MAAM;oBACV,KAAK,EAAE,EAAE,KAAK;wBACV,KAAI,CAAC,OAAO,GAAG,IAAI,CAAC;wBACpB,IAAI,KAAI,CAAC,QAAQ;4BACb,CAAC,CAAC,cAAc,EAAE,CAAC;wBACvB,MAAM;oBACV,KAAK,EAAE,EAAE,OAAO;wBACZ,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC;wBACtB,MAAM;oBACV,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,EAAE,QAAQ;wBACb,IAAI,KAAI,CAAC,QAAQ,EAAE;4BAEf,IAAI,GAAY,CAAC;4BAEjB,QAAQ,IAAI,EAAE;gCACV,KAAK,EAAE;oCACH,GAAG,GAAG,IAAI,WAAA,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oCACzB,MAAM;gCACV,KAAK,EAAE;oCACH,GAAG,GAAG,IAAI,WAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oCACxB,MAAM;gCACV,KAAK,EAAE;oCACH,GAAG,GAAG,IAAI,WAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oCACxB,MAAM;gCACV,KAAK,EAAE;oCACH,GAAG,GAAG,IAAI,WAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oCACzB,MAAM;6BACb;4BAED,IAAI,KAAI,CAAC,SAAS;gCACd,GAAG,GAAG,WAAA,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE,KAAI,CAAC,CAAC;4BAE9C,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAI,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;4BAEtE,IAAI,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,QAAQ,KAAK,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAA7D,CAA6D,CAAC,EAAE;gCACrG,KAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAA,GAAG;oCAC1B,IAAI,GAAG,YAAY,WAAA,SAAS,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE;wCACrD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;wCACtB,GAAG,CAAC,MAAM,EAAE,CAAC;qCAChB;gCACL,CAAC,CAAC,CAAC;6BACN;iCAAM;gCACH,KAAI,CAAC,SAAS,CAAC,eAAe,CAAC,UAAA,GAAG;oCAC9B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;oCACtB,GAAG,CAAC,MAAM,EAAE,CAAC;gCACjB,CAAC,CAAC,CAAC;6BACN;4BAED,OAAO;yBACV;wBACD,MAAM;iBACb;gBACD,IAAI,KAAI,CAAC,QAAQ;oBACb,KAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,KAAI,CAAC,CAAC;YACzD,CAAC,CAAC;YAEF,IAAI,CAAC,YAAY,GAAG,UAAC,CAAgB;gBACjC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAW,CAAC;gBACvD,QAAQ,IAAI,EAAE;oBACV,KAAK,EAAE,EAAE,OAAO;wBACZ,KAAI,CAAC,SAAS,GAAG,KAAK,CAAC;wBACvB,MAAM;oBACV,KAAK,EAAE,EAAE,MAAM;wBACX,KAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;wBACtB,IAAI,KAAI,CAAC,QAAQ;4BACb,CAAC,CAAC,cAAc,EAAE,CAAC;wBACvB,MAAM;oBACV,KAAK,EAAE,EAAE,KAAK;wBACV,KAAI,CAAC,OAAO,GAAG,KAAK,CAAC;wBACrB,IAAI,KAAI,CAAC,QAAQ;4BACb,CAAC,CAAC,cAAc,EAAE,CAAC;wBACvB,MAAM;oBACV,KAAK,EAAE,EAAE,OAAO;wBACZ,KAAI,CAAC,SAAS,GAAG,KAAK,CAAC;wBACvB,MAAM;oBACV,KAAK,EAAE,EAAE,QAAQ;wBACb,IAAI,KAAI,CAAC,QAAQ;4BACb,KAAI,CAAC,eAAe,EAAE,CAAC;wBAC3B,OAAO;oBACX,KAAK,EAAE,EAAE,QAAQ;wBACb,IAAI,KAAI,CAAC,QAAQ;4BACb,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;wBAC1B,OAAO;iBACd;gBACD,IAAI,KAAI,CAAC,QAAQ;oBACb,KAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAI,CAAC,CAAC;YACvD,CAAC,CAAC;YAEF,IAAI,CAAC,gBAAgB,GAAG,UAAC,CAAa;gBAClC,KAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACtB,iDAAiD;YACrD,CAAC,CAAC;YAEF,IAAI,CAAC,cAAc,GAAG,UAAC,CAAgC;gBACnD,KAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,gCAAgC;gBAChC,IAAI,eAAe,GAAG,IAAI,CAAC;gBAC3B,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;oBACzB,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,eAAe,IAAI,IAAI,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;oBAClE,eAAe,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,eAAe,EAAE;oBAEjB,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAA;oBACnC,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;oBACpC,YAAY;oBACZ,iBAAiB;oBACjB,CAAC,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;oBAChC,CAAC,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;oBAChC,+BAA+B;oBAC/B,+BAA+B;oBAC/B,oBAAoB;oBACpB,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;oBACpC,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;iBACvC;gBACD,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC;YAEF,IAAI,CAAC,gBAAgB,GAAG,UAAC,CAAgC;gBACrD,6HAA6H;gBAC7H,IAAI,KAAI,CAAC,cAAc,IAAI,CAAC;oBACxB,KAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBACnC,KAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,KAAI,CAAC,cAAc,GAAG,CAAC,EAAE;oBACzB,KAAI,CAAC,cAAc,GAAG,CAAC,CAAC;oBACxB,IAAI,CAAC,KAAI,CAAC,iBAAiB,IAAI,KAAI,CAAC,SAAS,CAAC,gBAAgB,KAAK,UAAU,IAAI,CAAC,KAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,EAAE;wBACrH,KAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;qBACxC;iBACJ;gBAED,IAAI,eAAe,GAAG,IAAI,CAAC;gBAC3B,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;oBACzB,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,eAAe,IAAI,IAAI,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;oBAClE,eAAe,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,eAAe,EAAE;oBAEjB,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAA;oBACnC,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;oBACpC,YAAY;oBACZ,iBAAiB;oBACjB,CAAC,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;oBAChC,CAAC,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;oBAChC,+BAA+B;oBAC/B,+BAA+B;oBAC/B,oBAAoB;oBACpB,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;oBACpC,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;iBACvC;gBAED,KAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC9B,KAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAClC,CAAC,CAAC;YAEF,IAAI,CAAC,oBAAoB,GAAG,UAAC,CAAgC;gBACzD,gDAAgD;gBAChD,KAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAC/B,KAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,KAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAE/B,IAAI,eAAe,GAAG,IAAI,CAAC;gBAC3B,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;oBACzB,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,eAAe,IAAI,IAAI,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;oBAClE,eAAe,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,eAAe,EAAE;oBAEjB,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAA;oBACnC,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;oBACpC,YAAY;oBACZ,iBAAiB;oBACjB,CAAC,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;oBAChC,CAAC,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;oBAChC,+BAA+B;oBAC/B,+BAA+B;oBAC/B,oBAAoB;oBACpB,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;oBACpC,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;iBACvC;gBACD,KAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,IAAI,SAAS,GAAG,KAAI,CAAC,SAAS,EAC1B,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC;gBAEzC,gCAAgC;gBAChC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE;oBACpB,iBAAiB;oBACjB,iDAAiD;oBACjD,iDAAiD;oBACjD,6BAA6B;oBAC7B,6BAA6B;oBAC7B,oEAAoE;oBACpE,4BAA4B;oBAC5B,IAAI,MAAM,GAAG,KAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;oBAC7C,IAAI,KAAK,GAAG,KAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;oBAC5C,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;wBACvB,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACjC,KAAI,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;wBACrC,4CAA4C;wBAC5C,kCAAkC;wBAClC,wBAAwB;wBACxB,gDAAgD;wBAChD,GAAG;wBAEH,mCAAmC;qBACtC;yBACI;wBACD,IAAI,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;4BAC7C,IAAI,MAAI,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;4BAC1C,uBAAuB;4BACvB,SAAS,GAAG,IAAI,CAAC;4BACjB,KAAI,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;yBACxC;qBACJ;iBACJ;gBAED,qCAAqC;gBACrC,IAAI,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;oBAC7C,IAAI,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBAC1C,IAAI,IAAI,YAAY,WAAA,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW;wBAC9C,KAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;iBACvD;YAEL,CAAC,CAAC;YAEF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAE1D,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE;gBACrB,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;gBACpE,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;gBACpE,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;gBAChE,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,8DAA8D;aAClI;iBACI;gBACD,4DAA4D;gBAC5D,uEAAuE;gBACvE,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;gBACrE,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;gBAChE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,8DAA8D;aAC/H;YAED,+CAA+C;YAC/C,2CAA2C;YAC3C,+BAA+B;YAC/B,KAAK;YACL,6DAA6D;YAC7D,0CAA0C;YAC1C,2CAA2C;YAC3C,mCAAmC;YACnC,KAAK;YACL,qDAAqD;YACrD,mCAAmC;YACnC,2CAA2C;YAC3C,+BAA+B;YAC/B,KAAK;YACL,cAAc;YACd,2DAA2D;YAC3D,2CAA2C;YAC3C,6BAA6B;YAC7B,KAAK;QAET,CAAC;QAED,qCAAiB,GAAjB,UAAkB,WAAgB,EAAE,KAAmC;YACnE,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrC,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrC,OAAO,WAAW,CAAC;QACvB,CAAC;QAED,yCAAqB,GAArB;YACI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAE3B,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAE9E,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;gBAC3B,gBAAgB,EAAE,IAAI,CAAC,eAAe;aACzC,CAAC,CAAC;QAEP,CAAC;QAED,0CAAsB,GAAtB;YACI,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAE5B,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EACnC,kBAAkB,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAEpF,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;gBAC3B,gBAAgB,EAAE,kBAAkB;aACvC,CAAC,CAAC;YAEH,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,2CAAuB,GAAvB,UAAwB,CAAa;YACjC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACnB,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,IAAI,UAAU,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;YACrC,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,qBAAqB,EAAE,CAAC;YAClD,IAAI,WAAW,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACrF,IAAI,SAAS,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,SAAS;gBACV,OAAO,IAAI,CAAC;YAChB,IAAI,KAAK,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,KAAK,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;YAErC,IAAI,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YAC7D,IAAI,GAAG,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YAExH,OAAO,UAAU,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;QAED,4CAAwB,GAAxB,UAAyB,CAAa;YAClC,OAAO,WAAA,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,yCAAqB,GAArB,UAAsB,KAA2B;YAC7C,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;gBACd,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC5B,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;oBACd,IAAI,CAAC,OAAO,CAAC,UAAA,MAAM;wBACf,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC1B,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,wCAAoB,GAApB,UAAqB,IAAwB;YACzC,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;gBACd,IAAI,CAAC,OAAO,CAAC,UAAA,MAAM;oBACf,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1B,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,0CAAsB,GAAtB,UAAuB,MAA0B;YAC7C,IAAI,MAAM,GAAyB,EAAE,EACjC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,EAC3B,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,EAC3B,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAC7D,UAAU,GAAG,GAAG,GAAG,SAAS,CAAC;YAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;gBAChC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;aAC7F;YAED,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EACnC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;YAE5D,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;gBACxC,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,SAAS,EAAE,CAAC,IAAI,CAAC,YAAY;gBAC7B,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,MAAM;aAChB,EAAE,UAAU,CAA+B,CAAC,CAAC;QAClD,CAAC;QAED,6CAAyB,GAAzB,UAA0B,SAAgC;YACtD,IAAI,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,EAC1B,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YAE/B,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EACnC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;YAE5D,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;gBACxC,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,SAAS,EAAE,CAAC,IAAI,CAAC,YAAY;gBAC7B,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;aAC1G,EAAE,UAAU,CAA+B,CAAC,CAAC;QAClD,CAAC;QAED,kCAAc,GAAd;YACI,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/B,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;gBAElE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;gBAEtB,yCAAyC;gBACzC,aAAa;gBACb,8DAA8D;gBAC9D,mEAAmE;gBACnE,GAAG;gBAEH,2BAA2B;gBAC3B,4BAA4B;YAEhC,CAAC,CAAC,CAAC;QACP,CAAC;QAED,6BAAS,GAAT;YAAA,iBAKC;YAJG,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/B,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,UAAA,KAAK;gBAC7B,KAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,QAAqB,EAA1B,CAA0B,CAAC,CAAC,CAAC;YACnF,CAAC,CAAC,CAAC;QACP,CAAC;QAED,yBAAK,GAAL;YACI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;QAED,mCAAe,GAAf,UAAgB,IAAqB;YACjC,IAAI,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC;gBAC/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QAED,mCAAe,GAAf;YACI,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/B,IAAI,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACtE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QAED,qCAAiB,GAAjB,UAAkB,KAAwB;YAA1C,iBAYC;YAXG,IAAI,CAAC,KAAK;gBACN,OAAO;YAEX,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;YAEjC,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;gBACd,KAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAA,KAAK,IAAI,OAAA,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAtB,CAAsB,CAAC;gBAC/D,IAAI,CAAC,SAAS,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAClD,CAAC;QAED,yCAAqB,GAArB,UAAsB,IAAqB;YACvC,IAAI,CAAC,IAAI,CAAC,MAAM;gBACZ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QAED,oCAAgB,GAAhB,UAAiB,IAAqB;YAClC,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;gBAEnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAElB,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,oBAAoB;oBAC7C,IAAI,CAAC,eAAe,EAAE,CAAC;aAC9B;QACL,CAAC;QAED,gCAAY,GAAZ;YAAA,iBA4EC;YA1EG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM;gBACpD,OAAO,EAAE,CAAC;YAEd,IAAI,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,EACpD,aAAa,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAEvF,4CAA4C;YAC5C,0EAA0E;YAE1E,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,WAAW,IAAI,CAAC,aAAa,CAAC,QAAQ;gBACtE,OAAO,IAAI,CAAC;YAEhB,IAAI,aAAa,GAAG,aAAa,CAAC,QAAqB,CAAC;YAExD,aAAa,CAAC,UAAU,EAAE,CAAC;YAE3B,IAAI,oBAAoB,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAC5F,eAAe,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC,CAAC;YAE5E,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAlC,CAAkC,CAAC,CAAC,GAAG,CAAC,UAAA,IAAI;gBAC1F,OAAO,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAqB,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,CAAC,CAAC;gBAE1G,4CAA4C;gBAE5C,wCAAwC;gBAExC,oBAAoB;gBAEpB,8BAA8B;gBAE9B,qCAAqC;gBACrC,+CAA+C;gBAC/C,8BAA8B;gBAC9B,kLAAkL;gBAClL,6PAA6P;gBAC7P,eAAe;gBACf,2BAA2B;gBAC3B,KAAK;gBAEL,kDAAkD;gBAClD,mDAAmD;gBAEnD,oEAAoE;gBACpE,8CAA8C;gBAC9C,yCAAyC;gBACzC,8DAA8D;gBAC9D,qFAAqF;gBACrF,gGAAgG;gBAChG,mCAAmC;gBACnC,kCAAkC;gBAClC,0CAA0C;gBAC1C,oBAAoB;gBACpB,2BAA2B;gBAC3B,oCAAoC;gBACpC,cAAc;gBACd,mCAAmC;gBACnC,SAAS;gBACT,GAAG;gBAEH,uCAAuC;gBACvC,4BAA4B;gBAC5B,kCAAkC;gBAClC,4BAA4B;gBAC5B,yBAAyB;gBACzB,sCAAsC;gBACtC,4FAA4F;gBAC5F,kCAAkC;gBAClC,2CAA2C;gBAC3C,yCAAyC;gBACzC,2CAA2C;gBAC3C,QAAQ;gBACR,gBAAgB;YACpB,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,+BAAW,GAAX,UAAY,IAAe,EAAE,aAAyB,EAAE,eAAwB,EAAE,oBAA6B;YAA/G,iBA8EC;YA7EG,IAAI,CAAC,UAAU,EAAE,CAAC;YAElB,IAAI,CAAC,aAAa,EAAE;gBAChB,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE;oBAChE,aAAa,GAAG,IAAI,CAAC;iBACxB;qBACI;oBACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM;wBACpD,OAAO,IAAI,CAAC;oBAEhB,IAAI,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,EACpD,aAAa,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAEvF,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,WAAW,IAAI,CAAC,aAAa,CAAC,QAAQ;wBACtE,OAAO,IAAI,CAAC;oBAEhB,aAAa,GAAG,aAAa,CAAC,QAAqB,CAAC;oBAEpD,aAAa,CAAC,UAAU,EAAE,CAAC;iBAC9B;aACJ;YAED,IAAI,CAAC,eAAe,EAAE;gBAClB,eAAe,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC,CAAC;aAC3E;YAED,IAAI,oBAAoB,KAAK,IAAI,IAAI,KAAK,CAAC,oBAAoB,CAAC,EAAE;gBAC9D,oBAAoB,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;aAChG;YAED,IAAI,KAAK,GAA8B,EAAE,EACrC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAErB,IAAI,EAAE,GAAG,IAAI,WAAA,YAAY,EAAE,CAAC;YAE5B,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,UAAC,IAAI;gBACzB,IAAI,GAAG,GAAG,WAAA,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACzC,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;gBACxB,4KAA4K;gBAC5K,IAAI,IAAI,GAAG,KAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,WAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;gBACvP,IAAI,IAAI;oBACJ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,IAAI,WAAW,GAA8B,EAAE,EAC3C,YAAY,GAA8B,EAAE,CAAC;YAEjD,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;gBAC7D,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAA,EAAE;oBAC/B,IAAI,EAAE,GAAG,KAAI,CAAC,gBAAgB,CAC1B,WAAA,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAC/C,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAoB,EACtE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,WAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,EACjF,aAAa,CAAC,MAAM,EACpB,aAAa,CAAC,KAAK,EACnB,aAAa,CAAC,aAAa,EAC3B,IAAI,CAAC,CAAC;oBACV,IAAI,EAAE,CAAC,SAAS;wBACZ,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;wBAEtB,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC7B,CAAC,CAAC,CAAC;aACN;YAED,IAAI,MAAM,GAA0B;gBAChC,QAAQ,EAAE,IAAI,CAAC,EAAE;gBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,IAAI;gBACjF,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,mBAAmB,EAAE,WAAW;gBAChC,gBAAgB,EAAE,YAAY;gBAC9B,aAAa,EAAE,IAAI,CAAC,aAAa;aACpC,CAAC;YACF,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,+BAAW,GAAX,UAAY,KAA4B,EAAE,MAAiC;YAA3E,iBA4FC;YA3FG,IAAI,KAAK,GAA2B,EAAE,CAAC;YAEvC,IAAI,CAAC,MAAM;gBACP,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAE5C,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,aAAa,GAAG,IAAI,CAAC;YAEzB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAA,IAAI;gBACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAA,CAAC;oBACxB,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;oBAC7D,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;wBACP,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACZ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACtB,OAAO,MAAM,CAAC;gBAClB,CAAC,CAAC,CAAC,CAAC;gBACJ,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;gBACxB,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;YACnF,CAAC,CAAC,CAAC;YAEH,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EACrD,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;YAE5D,IAAI,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;gBAC7C,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,SAAS,EAAE,CAAC,IAAI,CAAC,YAAY;gBAC7B,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,KAAK;aACf,EAAE,UAAU,CAA+B,CAAC,CAAC;YAE9C,IAAI,QAAQ,GAAG,KAAK,CAAC;YAErB,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;gBAC9D,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAc,CAAC;gBACjE,QAAQ,GAAG,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC;gBACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAClB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;aACjD;YAED,IAAI,SAAS,GAAG,IAAI,WAAA,SAAS,CAAC,IAAI,EAAE,KAAY,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YAE/F,SAAS,CAAC,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;YAChD,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;YACtC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;YACxB,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC;YAC9B,SAAS,CAAC,aAAa,GAAG,aAAa,CAAC;YACxC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;YAC1C,IAAI,QAAQ;gBACR,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;YAE3B,KAAa,CAAC,QAAQ,GAAG,SAAS,CAAC;YAEpC,IAAI,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,GAAG,GAAG,IAAI,WAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;gBACpF,SAAS,CAAC,WAAW,GAAG,IAAI,WAAA,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;aAC9F;YAED,IAAI,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,mBAAmB,CAAC,MAAM,EAAE;gBAC/D,KAAK,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAA,IAAI;oBAClC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAA,CAAC;wBACvB,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;wBAC7D,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;4BACP,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBACZ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBACtB,OAAO,MAAM,CAAC;oBAClB,CAAC,CAAC,CAAC;oBACH,IAAI,kBAAkB,GAAG,IAAI,WAAA,kBAAkB,CAAC,KAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBAChF,CAAC,CAAC,CAAC;aACN;YAED,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE;gBACzD,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAA,IAAI;oBAC/B,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAA,CAAC;wBACvB,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;wBAC7D,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;4BACP,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBACZ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBACtB,OAAO,MAAM,CAAC;oBAClB,CAAC,CAAC,CAAC;oBACH,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;wBACd,IAAI,eAAe,GAAG,IAAI,WAAA,kBAAkB,CAAC,KAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBACvF,CAAC,CAAC,CAAC;aACN;YAED,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YAErB,IAAI,CAAC,UAAU,CAAC,KAAY,CAAC,CAAC;YAE9B,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,gCAAY,GAAZ,UAAa,MAA+B;YAA5C,iBA4BC;YA3BG,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;gBAEzB,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBAE5C,IAAI,QAAQ,GAAc,IAAI,CAAC;gBAE/B,IAAI,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB,EAA1C,CAA0C,CAAC,CAAC;gBAEvF,IAAI,aAAa,CAAC,MAAM;oBACpB,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAE1D,MAAM,CAAC,MAAM,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB,EAA1C,CAA0C,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;oBAC5E,IAAI,SAAS,GAAG,KAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBAEhD,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,YAAY,EAAE;wBACpD,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAClC,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC;qBAC/B;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAI,QAAQ;oBACR,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAEtB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;oBACjB,OAAO,WAAA,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;aACtD;YACD,OAAO,IAAI,WAAA,YAAY,EAAE,CAAC;QAC9B,CAAC;QAED,oCAAgB,GAAhB,UAAiB,IAAc;YAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EACpD,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;YAE5D,IAAI,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;gBAC7C,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,SAAS,EAAE,CAAC,IAAI,CAAC,YAAY;gBAC7B,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,UAAU,EAAE,EAAf,CAAe,CAAC,CAAC,EAAxD,CAAwD,CAAC,CAAC;aACrH,EAAE,UAAU,CAA+B,CAAC,CAAC;YAE9C,IAAI,SAAS,GAAG,IAAI,WAAA,SAAS,CAAC,IAAI,EAAE,KAAY,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElH,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAE9B,KAAa,CAAC,QAAQ,GAAG,SAAS,CAAC;YAEpC,IAAI,CAAC,UAAU,CAAC,KAAY,CAAC,CAAC;QAClC,CAAC;QAED,8BAAU,GAAV,UAAW,IAAwB;YAC/B,IAAI,IAAI,GAAG,IAAI,CAAC,QAAqB,CAAC;YACtC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;YAExG,IAAI,KAAK,EAAE;gBACP,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aAChC;iBAAM;gBACH,IAAI,IAAI;oBACJ,IAAI,CAAC,OAAO,EAAE,CAAC;;oBAEf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtB,QAAQ,CAAC,gBAAgB,CAAC,oCAAoC,CAAC,CAAC;gBAChE,OAAO,IAAI,CAAC;aACf;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,gCAAY,GAAZ,UAAa,MAAyB,EAAE,cAAwB,EAAE,QAAkB,EAAE,WAAqB;YAA3G,iBAUC;YARG,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC7B,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAE/B,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC5E,IAAI,CAAC,cAAc,EAAE,CAAC;aACzB;YAED,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,EAA5D,CAA4D,CAAC,CAAC;QACtF,CAAC;QAED,sCAAkB,GAAlB,UAAmB,IAAqB,EAAE,cAAwB,EAAE,QAAkB,EAAE,WAAqB;YACzG,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM;gBACtC,OAAO;YACX,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/B,IAAI,cAAc,EAAE;gBAChB,QAAQ,GAAG,KAAK,CAAC;gBACjB,SAAS,GAAG,KAAK,CAAC;aACrB;iBAAM,IAAI,QAAQ,EAAE;gBACjB,QAAQ,GAAG,KAAK,CAAC;gBACjB,SAAS,GAAG,IAAI,CAAC;aACpB;iBAAM,IAAI,WAAW,EAAE;gBACpB,QAAQ,GAAG,IAAI,CAAC;gBAChB,SAAS,GAAG,IAAI,CAAC;aACpB;YACD,yCAAyC;YACzC,wEAAwE;YACxE,aAAa;YACb,aAAa;YAEb,0BAA0B;YAE1B,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAC5B,OAAO;aACV;YAED,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;YAE/B,IAAI,QAAQ,IAAI,CAAC,SAAS,EAAE;gBACxB,kBAAkB;gBAClB,IAAI,UAAU,EAAE;oBACZ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;oBAEnC,wBAAwB;oBACxB,2BAA2B;oBAC3B,4BAA4B;oBAC5B,8EAA8E;oBAC9E,oDAAoD;iBACvD;qBAAM;oBACH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;oBAE9B,uBAAuB;oBACvB,yBAAyB;oBACzB,0BAA0B;oBAC1B,6FAA6F;oBAC7F,iCAAiC;iBACpC;aACJ;iBAAM,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE;gBAC/B,uBAAuB;gBACvB,IAAI,CAAC,UAAU,EAAE;oBACb,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;oBAE9B,uBAAuB;oBACvB,yBAAyB;oBACzB,0BAA0B;oBAC1B,6FAA6F;oBAC7F,iCAAiC;iBACpC;aACJ;iBAAM,IAAI,QAAQ,IAAI,SAAS,EAAE;gBAC9B,4BAA4B;gBAC5B,IAAI,UAAU,EAAE;oBACZ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;oBAEnC,wBAAwB;oBACxB,0BAA0B;oBAC1B,2BAA2B;oBAC3B,6EAA6E;oBAC7E,oDAAoD;iBACvD;aACJ;iBAAM;gBACH,wBAAwB;gBACxB,IAAI,CAAC,cAAc,EAAE,CAAC;gBAEtB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAE9B,uBAAuB;gBACvB,yBAAyB;gBACzB,0BAA0B;gBAC1B,6FAA6F;gBAC7F,iCAAiC;aACpC;QACL,CAAC;QAED,uCAAmB,GAAnB,UAAoB,EAAU;YAC1B,IAAI,EAAE;gBACF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,KAAK,EAAE,EAAX,CAAW,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,CAAC;QAED,2CAAuB,GAAvB,UAAwB,IAAqB;YACzC,IAAI,IAAI,EAAE;gBACN,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACf,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACzD,IAAI,KAAK;wBACL,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;iBACnC;gBACD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACrC;QACL,CAAC;QAED,sCAAkB,GAAlB,UAAmB,IAAqB;YACpC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YACzC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACf,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACzD,IAAI,KAAK;wBACL,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;iBACnC;gBACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACxB;QACL,CAAC;QAED,uCAAmB,GAAnB,UAAoB,KAAwB;YAA5C,iBAeC;YAdG,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YACzC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM;gBACrB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAnC,CAAmC,CAAC,CAAC;YACtE,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;gBACvB,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;oBACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACrB,IAAI,IAAI,CAAC,QAAQ,EAAE;wBACf,IAAI,KAAK,GAAG,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACzD,IAAI,KAAK;4BACL,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;qBACnC;gBACL,CAAC,CAAC,CAAC;gBACH,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;aAC1C;QACL,CAAC;QAED,2CAAuB,GAAvB;YACI,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/B,IAAI,SAAS,CAAC,gBAAgB,KAAK,uBAAuB,EAAE;gBACxD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACzB;iBAAM;gBACH,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;aAC5C;QACL,CAAC;QAED,uCAAmB,GAAnB;YACI,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/B,IAAI,SAAS,CAAC,gBAAgB,KAAK,uBAAuB,EAAE;gBACxD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;aAC3B;QACL,CAAC;QAED,uCAAmB,GAAnB;YAAA,iBAiBC;YAfG,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,GAAG,EAAP,CAAO,CAAC,CAAC;YAE/D,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAChB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACtB,OAAO;aACV;YAED,YAAY,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAC,MAAM;gBACjH,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAEtB,KAAI,CAAC,SAAS,CAAC,sBAAsB,GAAG,IAAI,CAAC;gBAC7C,KAAI,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,UAAA,EAAE;oBAChD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC;QAED,mCAAe,GAAf,UAAgB,QAAgB,EAAE,OAAgB;YAExC,MAAO,CAAC,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAEnD,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEzC,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ;gBACrB,OAAO;YAEX,IAAI,cAAc,GAAG,CAAC,CAAC,sBAAsB,GAAG,QAAQ,CAAC,CAAC;YAC1D,IAAI,cAAc,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC;YAE1D,IAAI,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;YAC5D,IAAI,mBAAmB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;YAClE,cAAc,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;YAChD,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YAExC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC9B,cAAc,CAAC,QAAQ,EAAE,CAAC;gBAC1B,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAClC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACrC;YAED,IAAI,OAAO;gBACP,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEtC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;QAED,8BAAU,GAAV,UAAW,QAAgB,EAAE,OAAgB;YACzC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,OAAO,GAAG,SAAS,CAAC,WAAW,EAC/B,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEzC,SAAS,CAAC,eAAe,EAAE,CAAC;YAE5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACxB,QAAQ,GAAG,YAAY,CAAC;gBACxB,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;aACxC;YAED,IAAI,OAAO;gBACP,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE3B,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;YAE7B,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,gBAAgB,IAAI,QAAQ,KAAK,YAAY,EAAE;gBACzF,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,UAAA,IAAI;oBAC9B,IAAI,IAAI,CAAC,QAAQ,EAAE;wBACf,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC;wBAC7B,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;qBACxC;gBACL,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,EAAE;oBACjC,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC;gBACtB,CAAC,CAAC,CAAC;aACN;iBAAM;gBACH,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,UAAA,IAAI;oBAC9B,IAAI,IAAI,CAAC,QAAQ,EAAE;wBACf,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;wBAC5B,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;qBACzC;gBAEL,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,EAAE;oBACjC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC;gBACrB,CAAC,CAAC,CAAC;aACN;YAED,IAAI,IAAI;gBACJ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC;QACpD,CAAC;QAED,6BAAS,GAAT,UAAU,KAA2B;YACjC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;gBACvB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,QAAqB,EAA1B,CAA0B,CAAC,EAAE,IAAI,CAAC,CAAC;aAC1E;QACL,CAAC;QAED,yCAAqB,GAArB,UAAsB,CAA2B;YAC7C,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EACd,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,EAC7B,SAAS,GAAG,GAAG,CAAC,SAAS,EAAE,EAC3B,KAAK,GAAG,SAAS,CAAC,YAAY,EAAE,EAChC,KAAK,GAAG,SAAS,CAAC,YAAY,EAAE,EAChC,GAAG,GAAG,IAAI,WAAA,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,4EAA4E;YAExI,OAAO,WAAA,MAAM,CAAC,WAAW,CAAC,IAAI,WAAA,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,0HAA0H;QACxO,CAAC;QAEM,6BAAmB,GAA1B,UAA2B,CAAC,EAAE,CAAC,EAAE,IAAI;YACjC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC5B,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAChB,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAChB,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBACvB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gBACnB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;aACtB;YACD,OAAO,CAAC,CAAC;QACb,CAAC;QAED,iIAAiI;QACjI,2CAA2C;QAC3C,sCAAsC;QACtC,+CAA+C;QAE/C,0DAA0D;QAC1D,0CAA0C;QAC1C,0CAA0C;QAE1C,mDAAmD;QACnD,yDAAyD;QACzD,6BAA6B;QAC7B,yBAAyB;QACzB,8BAA8B;QAE9B,wCAAwC;QACxC,wCAAwC;QAExC,wBAAwB;QACxB,wBAAwB;QAExB,6BAA6B;QAE7B,sGAAsG;QAEtG,mDAAmD;QAEnD,kKAAkK;QAElK,oCAAoC;QACpC,2DAA2D;QAC3D,mGAAmG;QACnG,yIAAyI;QAEzI,wEAAwE;QAExE,iBAAiB;QAGjB,mDAAmD;QACnD,qDAAqD;QACrD,0IAA0I;QAE1I,oKAAoK;QAEpK,2BAA2B;QAC3B,GAAG;QAEH,wBAAI,GAAJ,UAAK,QAAqB;YAA1B,iBAgEC;YA/DG,YAAY,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,UAAC,MAAM;gBACjG,KAAI,CAAC,KAAK,EAAE,CAAC;gBAEb,IAAI,MAAM,GAAG,IAAI,WAAA,YAAY,EAAE,CAAC;gBAEhC,IAAI,CAAC,MAAM;oBACP,MAAM,GAAG,EAAS,CAAC;gBAEvB,IAAI,MAAM,CAAC,MAAM,EAAE;oBACf,IAAI,GAAG,GAAG,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC3C,IAAI,CAAC,GAAG,CAAC,OAAO;wBACZ,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBAC1B;gBAED,IAAI,MAAM,CAAC,cAAc,EAAE;oBACvB,IAAI,GAAG,GAAG,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBACnD,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,KAAK,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO;wBAC7G,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBAC1B;gBAED,IAAI,KAAI,CAAC,WAAW,IAAI,KAAI,CAAC,WAAW,CAAC,MAAM,EAAE;oBAC7C,KAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,EAAE;wBACvB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACpB,CAAC,CAAC,CAAC;oBACH,KAAI,CAAC,WAAW,GAAG,IAAI,CAAC;iBAC3B;gBAED,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE;oBACnD,IAAI,MAAM,GAA2B,EAAE,CAAC;oBAExC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,UAAA,IAAI;wBAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,EAA/C,CAA+C,CAAC,CAAC,CAAC;oBACvF,CAAC,CAAC,CAAC;oBAEH,IAAI,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;wBAC7C,GAAG,EAAE,KAAI,CAAC,GAAG;wBACb,KAAK,EAAE,MAAM;qBAChB,EAAE,KAAI,CAAC,eAAe,CAA+B,CAAC,CAAC;oBAExD,KAAI,CAAC,WAAW,GAAG,CAAC,KAAY,CAAC,CAAC;iBACrC;gBAED,KAAI,CAAC,eAAe,EAAE,CAAC;gBAEvB,KAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,MAAM,CAAC,SAAS,EAAE;oBAClB,IAAI,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,KAAK,MAAM,CAAC,SAAS,EAAtB,CAAsB,CAAC,EAAE;wBACnD,KAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;qBAC3C;yBAAM,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;wBAClD,KAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC7C;iBACJ;gBAED,IAAI,CAAC,MAAM,CAAC,OAAO;oBACf,KAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBAElD,yBAAyB;gBACzB,IAAI,gBAAgB,GAAG,KAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;gBACzE,KAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;gBAElC,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,UAAU;oBAC1C,QAAQ,EAAE,CAAC;YACnB,CAAC,CAAC,CAAC;QACP,CAAC;QAED,oCAAgB,GAAhB,UAAiB,QAAqB;YAAtC,iBAyBC;YAxBG,YAAY,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,UAAC,MAAM;gBAC3G,KAAI,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,UAAA,EAAE;oBAChD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC,CAAC,CAAC;gBAEH,IAAI,MAAM,GAAG,IAAI,WAAA,YAAY,EAAE,CAAC;gBAEhC,IAAI,CAAC,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO;oBAC9B,MAAM,CAAC,MAAM,CAAC,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAEzC,IAAI,MAAM,CAAC,cAAc,EAAE;oBACvB,IAAI,GAAG,GAAG,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBACnD,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,KAAK,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO;wBAC7G,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBAC1B;gBAED,IAAI,CAAC,MAAM,CAAC,OAAO;oBACf,KAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBAElD,KAAI,CAAC,cAAc,EAAE,CAAC;gBAEtB,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,UAAU;oBAC1C,QAAQ,EAAE,CAAC;YACnB,CAAC,CAAC,CAAC;QACP,CAAC;QAED,mCAAe,GAAf;YACI,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;YAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC3C,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;oBACf,SAAS,CAAC,qBAAqB,GAAG,KAAK,CAAC,QAAQ,CAAC;oBACjD,MAAM;iBACT;aACJ;YAED,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC9D,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACtE,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC5C,CAAC;QAED,mCAAe,GAAf;YACI,IAAI,EAAE,GAAG,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;YACvC,IAAI,OAAO,GAA0B,EAAE,CAAC;YACxC,yCAAyC;YAEzC,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAlC,CAAkC,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;gBACjF,IAAI,SAAS,GAAG,IAAI,CAAC,QAAqB,CAAC;gBAC3C,IAAI,SAAS,CAAC,QAAQ,KAAK,MAAM,CAAC,YAAY,EAAE;oBAC5C,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnC,kEAAkE;oBAClE,qBAAqB;oBACrB,mBAAmB;oBACnB,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;iBAC/B;YACL,CAAC,CAAC,CAAC;YAEH,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAElB,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EACZ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;YAElB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE;gBACxC,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EACzB,IAAY,EACZ,MAAM,GAAG,GAAG,EACZ,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAC7C,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACxB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,EAClC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;gBAExC,IAAI,OAAO,GAAG,GAAG;oBACb,IAAI,GAAG,EAAE,CAAC;qBACT,IAAI,OAAO,GAAG,GAAG;oBAClB,IAAI,GAAG,EAAE,CAAC;;oBAEV,IAAI,GAAG,EAAE,CAAC;gBAEd,GAAG,CAAC,OAAO,CAAC;oBACR,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,IAAI;oBACX,WAAW,EAAE,KAAK;oBAClB,YAAY,EAAE,MAAM;oBACpB,aAAa,EAAE,IAAI;oBACnB,MAAM,EAAE,UAAC,MAAM,EAAE,EAAE;wBAEf,IAAI,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;wBAE3B,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;wBAEnD,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;wBAC1B,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;wBAE5B,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;wBACxC,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC;wBAChC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;wBACjC,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;wBACvC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;wBACzC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;wBAC/B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;wBAEvC,IAAI,SAAS,GAAG,KAAK,GAAG,MAAM,EAC1B,MAAM,GAAG,IAAI,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC,EACtC,CAAS,EACT,CAAS,EACT,CAAS,CAAC;wBAEd,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;wBAEtE,IAAI,GAAG,GAAoB,EAAE,CAAC;wBAE9B,IAAI,IAAI,GAAiB,EAAE,EACvB,MAAM,GAAkB,EAAE,CAAC;wBAE/B,OAAO,CAAC,OAAO,CAAC,UAAA,MAAM;4BAClB,IAAI,SAAS,GAAa,EAAE,EACxB,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;4BAE5B,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,UAAA,EAAE;gCACpB,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gCAC/B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;4BACvE,CAAC,CAAC,CAAC;4BAEH,UAAU,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE,UAAC,CAAC,EAAE,CAAC;gCACvD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE;oCAC3C,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAC7B,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EACf,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,EACnB,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,EACnB,GAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;oCAE9B,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,GAAC,CAAC,CAAC;oCACjD,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oCAC1F,IAAI,GAAC,GAAG,IAAI;wCACR,IAAI,GAAG,GAAC,CAAC;iCAChB;4BACL,CAAC,CAAC,CAAC;4BAEH,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;4BAEjF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BAChB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;wBAE/B,CAAC,CAAC,CAAC;wBAEH,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,EAC3B,QAAQ,GAAG,CAAC,CAAC;wBAEjB,wBAAwB;wBACxB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;4BACzB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gCACxB,IAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAChC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,EAChB,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,EACpB,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gCAEzB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gCAE1B,IAAI,CAAC,GAAG,QAAQ;oCACZ,QAAQ,GAAG,CAAC,CAAC;gCACjB,IAAI,CAAC,GAAG,QAAQ;oCACZ,QAAQ,GAAG,CAAC,CAAC;6BACpB;yBACJ;wBAED,IAAI,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAClC,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAC5D,IAAI,GAAG,SAAS,CAAC,IAAI,EACrB,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;wBAErC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;4BACzB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gCACxB,IAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAC9C,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAC9B,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,EAChB,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,EACpB,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gCAEzB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gCAE1B,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC;gCAEhE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gCACd,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gCAClB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gCAClB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;6BACvB;yBACJ;wBAED,IAAI,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,CAAC;4BACjB,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,EACjB,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,EAClC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,EAClC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;4BAEvC,OAAO,CAAC,GAAG,CAAC,qBAAmB,KAAK,CAAC,MAAM,CAAC,CAAC,aAAQ,KAAK,CAAC,MAAM,CAAC,CAAC,aAAQ,KAAK,CAAC,MAAM,CAAC,CAAC,iBAAY,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAK,CAAC,CAAC;4BAEzK,UAAU,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE,UAAC,CAAC,EAAE,CAAC;gCACvD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE;oCAC3C,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oCACzE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oCACxB,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oCAC5B,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;iCAC/B;4BACL,CAAC,CAAC,CAAC;wBAEP,CAAC,CAAC,CAAC;wBAEH,OAAO,CAAC,GAAG,CAAC,sBAAoB,UAAU,OAAI,CAAC,CAAC;wBAEhD,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;wBAEjD,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBAElC,IAAI,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;wBAE3B,OAAO,CAAC,GAAG,CAAC,sCAAoC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,cAAW,CAAC,CAAC;oBAClF,CAAC;iBACJ,CAAC,CAAC;aACN;QACL,CAAC;QAED,wBAAI,GAAJ,UAAK,QAAqB;YACtB,IAAI,aAAa,CAAC,SAAS,EAAE;gBACzB,OAAO,KAAK,CAAC;YAEjB,aAAa,CAAC,aAAa,EAAE,CAAC;YAE9B,IAAI,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC;YAC3E,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;YAElC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAEpB,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAExD,CAAC;QAEO,8BAAU,GAAlB,UAAmB,QAAqB;YAAxC,iBAyGC;YAxGG,aAAa,CAAC,gBAAgB,EAAE,CAAC;YAEjC,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,EAC5B,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EACtC,UAAU,GAAG,OAAO,KAAK,WAAW,CAAC;YAEzC,IAAI,IAAI,GAA+B;gBACnC,SAAS,EAAE,OAAO;gBAClB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,CAAC;gBACb,WAAW,EAAE,CAAC;gBACd,aAAa,EAAE,CAAC;gBAChB,cAAc,EAAE,CAAC;gBACjB,gBAAgB,EAAE,CAAC;gBACnB,aAAa,EAAE,IAAI;gBACnB,oBAAoB,EAAE,CAAC;gBACvB,qBAAqB,EAAE,CAAC;gBACxB,oBAAoB,EAAE,CAAC;gBACvB,qBAAqB,EAAE,CAAC;aAC3B,CAAC;YAEF,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;YAE9C,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE;gBAEpB,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;gBACrB,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;gBAElB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC;gBACvB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC;gBAClC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC;gBACpC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC;gBAChC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,SAAS,CAAC;gBAClC,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,YAAY,CAAC;aAC5C;YAED,IAAI,UAAU,EAAE;gBAEZ,IAAI,IAAE,GAAG,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;gBAEvC,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAlC,CAAkC,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;oBACjF,IAAI,SAAS,GAAG,IAAI,CAAC,QAAqB,CAAC;oBAC3C,IAAE,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,GAAG,IAAE,CAAC,KAAK,EACZ,CAAC,GAAG,IAAE,CAAC,MAAM,CAAC;gBAElB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE;oBACxC,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EACzB,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EACzC,IAAY,EACZ,MAAM,GAAG,IAAI,EACb,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAC7C,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACxB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,EACpC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;oBAE1C,IAAI,OAAO,GAAG,GAAG;wBACb,IAAI,GAAG,EAAE,CAAC;yBACT,IAAI,OAAO,GAAG,GAAG;wBAClB,IAAI,GAAG,EAAE,CAAC;;wBAEV,IAAI,GAAG,EAAE,CAAC;oBAEd,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;oBACvB,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;oBAEzB,qCAAqC;oBACrC,6BAA6B;oBAC7B,8BAA8B;oBAC9B,sCAAsC;oBACtC,wCAAwC;oBACxC,4BAA4B;oBAC5B,oCAAoC;oBACpC,0BAA0B;oBAC1B,kDAAkD;oBAClD,oCAAoC;oBAEpC,aAAa,CAAC,aAAa,EAAE,CAAC;oBAE9B,GAAG,CAAC,aAAa,CAAC,IAAE,EAAE,IAAI,EAAE,cAAM,OAAA,MAAM,EAAN,CAAM,EAAE,UAAC,OAAO;wBAC9C,aAAa,CAAC,gBAAgB,EAAE,CAAC;wBAEjC,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,SAAS,IAAI,UAAU,EAAE;4BAC5D,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;4BACnD,IAAI,CAAC,oBAAoB,GAAG,IAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;4BAC5C,IAAI,CAAC,qBAAqB,GAAG,IAAE,CAAC,GAAG,CAAC,SAAS,CAAC;4BAC9C,IAAI,CAAC,oBAAoB,GAAG,IAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;4BAC5C,IAAI,CAAC,qBAAqB,GAAG,IAAE,CAAC,GAAG,CAAC,SAAS,CAAC;yBACjD;wBAED,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACxB,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;oBAEtB,yBAAyB;oBAEzB,OAAO;iBACV;aAEJ;YAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC;QAEO,4BAAQ,GAAhB,UAAiB,IAAgC,EAAE,QAAqB;YAAxE,iBAuDC;YAtDG,YAAY,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAC,MAAM;gBAC7G,IAAI,CAAC,MAAM;oBACP,MAAM,GAAG,EAAS,CAAC;gBACvB,IAAI,MAAM,CAAC,YAAY;oBACnB,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;qBAC9C;oBACD,IAAI,KAAI,CAAC,MAAM;wBACX,QAAQ,CAAC,IAAI,CAAC,KAAI,CAAC,MAAM,CAAC,CAAC;oBAE/B,IAAI,eAAe,GAAG,KAAI,CAAC,SAAS,CAAC,eAAe,CAAC;oBAErD,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE;wBAC/B,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,mBAAmB,EAAE,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,MAAM,CAAC,eAAe,EACvG;4BACI,WAAW,EAAE,IAAI;yBACpB,CAAC,CAAC,CAAC;wBACR,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,kBAAkB,EAAE,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,EACjG;4BACI,WAAW,EAAE,IAAI;4BACjB,IAAI,EAAE,IAAI;4BACV,EAAE,EAAE,eAAe,CAAC,EAAE;yBACzB,CAAC,CAAC,CAAC;wBACR,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,MAAM,CAAC,SAAS,EACtG;4BACI,WAAW,EAAE,IAAI;yBACpB,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;wBAErB,IAAI,MAAM,CAAC,QAAQ,EAAE;4BACjB,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM;gCACvB,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;4BAC1C,IAAI,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM;gCAC5B,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;yBACnD;wBAED,IAAI,MAAM,CAAC,mBAAmB,KAAK,SAAS;4BACxC,MAAM,CAAC,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC;wBAE9D,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,EAAE;4BACzB,MAAM,CAAC,0BAA0B,GAAG;gCAChC,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;4BACxD,CAAC,CAAC;4BAEF,MAAM,CAAC,iCAAiC,GAAG;gCACvC,QAAQ,CAAC,eAAe,CAAC,wBAAwB,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,mBAAmB,EAAE,EAAE,MAAM,CAAC,0BAA0B,CAAC,CAAC;4BACpJ,CAAC,CAAC;4BAEF,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;yBACvD;qBACJ;iBACJ;gBAED,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,UAAU;oBAC1C,QAAQ,EAAE,CAAC;YACnB,CAAC,CAAC,CAAC;QACP,CAAC;QAkCD,sBAAI,+BAAQ;iBAAZ;gBACI,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;YACzF,CAAC;iBAED,UAAa,CAAU;gBACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACvB,CAAC;;;WAJA;QAMD,4CAAwB,GAAxB,UAAyB,MAAe;YACpC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,EACxC,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YAClE,IAAI,aAAa,IAAI,IAAI;gBACrB,aAAa,CAAC,OAAO,CAAC,UAAA,IAAI;oBACtB,IAAI,IAAI,CAAC,QAAQ,IAAK,IAAI,CAAC,QAAsB,CAAC,mBAAmB;wBAChE,IAAI,CAAC,QAAsB,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChG,CAAC,CAAC,CAAC;QACX,CAAC;QAaD,kCAAc,GAAd;YACI,IAAI,IAAI,CAAC,GAAG;gBACR,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,CAAC;QACb,CAAC;QAED,kCAAc,GAAd,UAAe,CAAU;YACrB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,sCAAkB,GAAlB,UAAmB,YAAgC;YAC/C,IAAI,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAChE,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,UAAA,KAAK,IAAI,OAAA,cAAc,CAAC,YAAY,EAAE,KAAY,CAAC,EAA1C,CAA0C,CAAC,CAAC;QAC7F,CAAC;QAED,kCAAc,GAAd;YACI,IAAI,MAAM,GAAyB,EAAE,CAAC;YACtC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,UAAA,KAAK;gBAClC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAd,CAAc,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,qCAAiB,GAAjB,UAAkB,MAAoB,EAAE,MAAuB,EAAE,aAAuB;YACpF,IAAI,MAAM,GAAsB,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM;gBACP,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC3C,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;oBACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;wBAC9B,SAAS;oBACb,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;oBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC7C,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,EAClB,IAAI,GAAG,IAAI,CAAC,QAAqB,CAAC;wBACtC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;4BACrB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;4BACpB,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gCAClB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;yBACzB;qBACJ;iBACJ;aAEJ;YACD,IAAI,CAAC,aAAa,EAAE;gBAChB,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;gBAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAChD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/B;aACJ;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,+BAAW,GAAX,UAAY,MAAc,EAAE,cAAsB,EAAE,MAAuB,EAAE,aAAuB;YAChG,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAC1C,MAAM,GAAG,cAAc,GAAG,QAAQ,EAClC,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,EACtB,CAAC,GAAG,IAAI,WAAA,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,MAAM,GAAG,IAAI,WAAA,YAAY,CAAC,WAAA,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAA,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE1F,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QACjE,CAAC;QAED,qCAAiB,GAAjB,UAAkB,MAAc,EAAE,cAAsB,EAAE,MAAuB,EAAE,aAAuB,EAAE,aAAuB;YAE/H,IAAI,MAAM,GAAc,IAAI,EACxB,OAAO,GAAG,MAAM,CAAC,SAAS,EAC1B,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAC1C,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YAE3B,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,UAAC,IAAqB;gBACtF,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAA,GAAG;oBAC1B,IAAI,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;oBAC7C,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,GAAG,OAAO,EAAE;wBAC1C,OAAO,GAAG,IAAI,CAAC;wBACf,MAAM,GAAG,GAAG,CAAC;qBAChB;gBACL,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;gBAC1E,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,EAAE;oBAEvB,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,UAAA,IAAI;wBACjC,IAAI,MAAM,GAAG,WAAA,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EACvD,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;wBAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;4BAC1B,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EACd,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAC1B,GAAG,GAAG,IAAI,WAAA,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;4BAEhC,IAAI,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;4BAC7C,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,GAAG,OAAO,EAAE;gCAC1C,OAAO,GAAG,IAAI,CAAC;gCACf,MAAM,GAAG,GAAG,CAAC;6BAChB;yBACJ;oBACL,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;aACN;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,mCAAe,GAAf,UAAgB,MAAc,EAAE,cAAsB,EAAE,uBAAgC,EAAE,YAAqB,EAAE,MAAuB,EAAE,aAAuB;YAE7J,IAAI,MAAM,GAAY,IAAI,EACtB,OAAO,GAAG,MAAM,CAAC,SAAS,EAC1B,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAC1C,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,EACtB,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;YAE7C,IAAI,uBAAuB,EAAE;gBACzB,IAAI,EAAgB,EAChB,GAAW,CAAC;gBAEhB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;oBACxB,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,UAAA,UAAU,IAAI,OAAA,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,cAAc,EAA5D,CAA4D,CAAC,CAAC;oBACpG,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;oBAChB,IAAI,GAAG,GAAG,CAAC,EAAE;wBACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;4BAC1B,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;4BAChB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gCAC9B,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EACX,EAAE,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gCAE1C,IAAI,EAAE,EAAE;oCACJ,IAAI,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;oCACvC,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,GAAG,OAAO,EAAE;wCAC1C,OAAO,GAAG,IAAI,CAAC;wCACf,MAAM,GAAG,EAAE,CAAC;qCACf;iCACJ;6BACJ;yBACJ;qBACJ;iBACJ;gBACD,IAAI,CAAC,MAAM,EAAE;oBACT,IAAI,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;oBACvE,IAAI,GAAG,EAAE;wBACL,IAAI,CAAC,EAAE,EAAE;4BACL,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,UAAA,UAAU,IAAI,OAAA,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,cAAc,EAA5D,CAA4D,CAAC,CAAC;4BACpG,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;yBACnB;wBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;4BAC1B,IAAI,KAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EACX,EAAE,GAAG,KAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;4BAClC,IAAI,EAAE,EAAE;gCACJ,IAAI,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;gCACvC,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,GAAG,OAAO,EAAE;oCAC1C,OAAO,GAAG,IAAI,CAAC;oCACf,MAAM,GAAG,EAAE,CAAC;iCACf;6BACJ;yBACJ;qBACJ;iBACJ;aACJ;YAED,IAAI,YAAY,IAAI,CAAC,MAAM,EAAE;gBACzB,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBAClE,IAAI,CAAC,OAAO,CAAC,UAAC,IAAqB;oBAC/B,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,UAAC,GAAG;wBACzB,GAAG,CAAC,OAAO,CAAC,UAAA,EAAE;4BACV,IAAI,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;4BACvC,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,GAAG,OAAO,EAAE;gCAC1C,OAAO,GAAG,IAAI,CAAC;gCACf,MAAM,GAAG,EAAE,CAAC;6BACf;wBACL,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,EAAE;oBACT,IAAI,CAAC,OAAO,CAAC,UAAC,IAAqB;wBAC/B,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAA,GAAG;4BAC1B,IAAI,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;4BAC1B,IAAI,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;4BACxC,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,GAAG,OAAO,EAAE;gCAC1C,OAAO,GAAG,IAAI,CAAC;gCACf,MAAM,GAAG,GAAG,CAAC;6BAChB;wBACL,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;iBACN;aACJ;YAED,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;gBAC1E,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,EAAE;oBAEvB,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,UAAA,IAAI;wBACjC,IAAI,MAAM,GAAG,WAAA,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EACvD,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;wBAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;4BAC1B,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EACd,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;4BACvC,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,GAAG,OAAO,EAAE;gCAC1C,OAAO,GAAG,IAAI,CAAC;gCACf,MAAM,GAAG,EAAE,CAAC;6BACf;yBACJ;oBACL,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;aACN;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,uCAAmB,GAAnB,UAAoB,MAAc,EAAE,cAAsB;YAEtD,IAAI,MAAM,GAAc,EAAE,EACtB,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAC1C,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,EACtB,OAAO,GAAG,MAAM,CAAC,SAAS,EAC1B,KAAK,GAAY,IAAI,CAAC;YAE1B,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,UAAC,IAAqB;gBACnE,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,UAAC,GAAG;oBACzB,GAAG,CAAC,OAAO,CAAC,UAAA,EAAE;wBACV,IAAI,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;wBACvC,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,GAAG,OAAO,EAAE;4BAC1C,OAAO,GAAG,IAAI,CAAC;4BACf,KAAK,GAAG,EAAE,CAAC;yBACd;oBACL,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,mDAA+B,GAA/B,UAAgC,KAAqB;YACjD,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;YACzC,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;YAE7C,IAAI,KAAK,IAAI,cAAc,EAAE;gBACzB,cAAc,CAAC,UAAU,CAAC;oBACtB,aAAa,EAAE,KAAK,CAAC,kBAAkB;oBACvC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB;oBACvF,cAAc,EAAE,KAAK,CAAC,kBAAkB;iBAC3C,CAAC,CAAC;aACN;QACL,CAAC;QAED,oCAAgB,GAAhB,UAAiB,OAAiB,EAAE,cAAsB,EAAE,MAAc,EAAE,KAAa,EAAE,WAAmB,EAAE,aAAsB,EAAE,SAAmB;YACvJ,6BAA6B;YAE7B,oEAAoE;YAEpE,4CAA4C;YAC5C,uCAAuC;YAEvC,wBAAwB;YAExB,kCAAkC;YAElC,eAAe;YACf,gCAAgC;YAChC,kCAAkC;YAClC,kBAAkB;YAClB,cAAc;YACd,cAAc;YACd,UAAU;YACV,KAAK;YACL,KAAK;YAEL,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAChC,OAAO,IAAI,CAAC;YAEhB,IAAI,YAAY,GAAG,WAAA,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,SAAS,IAAI,YAAY,CAAC,OAAO;gBAClC,OAAO,IAAI,CAAC;YAEhB,IAAI,KAAK,GAAG,WAAA,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YACpD,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhF,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAA,EAAE;gBACvB,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACzC,OAAO,IAAI,WAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;YAEH,yBAAyB;YACzB,sDAAsD;YAEtD,iDAAiD;YACjD,GAAG;YAEH,IAAI,MAAM,GAAG,WAAA,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAEzC,2BAA2B;YAC3B,qCAAqC;YACrC,mBAAmB;YAEnB,IAAI,WAAW,GAAG,WAAA,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9C,IAAI,YAAY,GAA4B,OAAO,CAAC,GAAG,CAAC,UAAC,MAAM,EAAE,CAAC;gBAC9D,OAAO;oBACH,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,QAAQ,EAAE,CAAC;oBACX,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACd,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACd,CAAC,EAAE,KAAK;iBACX,CAAC;YACN,CAAC,CAAC,CAAC;YAEH,OAAO;gBACH,MAAM,EAAE,YAAY;gBACpB,WAAW,EAAE,WAAW;gBACxB,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,QAAQ;gBACjC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,SAAS;gBAClC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,QAAQ;gBACjC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,SAAS;gBAClC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9B,KAAK,EAAE,WAAW;gBAClB,aAAa,EAAE,aAAa;gBAC5B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACrB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;aACzB,CAAC;YAEF,sBAAsB;YACtB,sBAAsB;YAEtB,uGAAuG;YACvG,2CAA2C;YAC3C,2CAA2C;YAC3C,wCAAwC;YACxC,qCAAqC;YAErC,iBAAiB;YACjB,kBAAkB;YAElB,6BAA6B;YAC7B,4DAA4D;YAC5D,uDAAuD;YACvD,8BAA8B;YAC9B,8BAA8B;YAC9B,+BAA+B;YAC/B,+BAA+B;YAE/B,kDAAkD;YAClD,yBAAyB;YACzB,0CAA0C;YAE1C,kEAAkE;YAClE,kEAAkE;YAElE,kCAAkC;YAClC,kCAAkC;YAClC,kCAAkC;YAClC,kCAAkC;YAClC,GAAG;YAEH,UAAU;YACV,qBAAqB;YACrB,mDAAmD;YACnD,uBAAuB;YACvB,uBAAuB;YACvB,uBAAuB;YACvB,uBAAuB;YACvB,iBAAiB;YACjB,iBAAiB;YACjB,iBAAiB;YACjB,gBAAgB;YAChB,IAAI;QACR,CAAC;QA2CD,+BAAW,GAAX,UAAY,IAAY,EAAE,QAA6C,IAAkB,OAAO,IAAI,CAAC,CAAC,CAAC;QAEvG,+BAAW,GAAX,UAAY,IAAY,EAAE,QAA6C,IAAa,OAAO,KAAK,CAAC,CAAC,CAAC;QAEnG,kCAAc,GAAd,UAAe,IAAa,EAAE,QAA8C,IAAU,CAAC;QAEvF,iCAAa,GAAb,UAAc,KAAyB,IAAU,CAAC;QAElD,gCAAY,GAAZ,UAAa,cAAoD;YAAjE,iBA0BC;YAzBG,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/B,IAAI,MAAM,GAAG,IAAI,WAAA,YAAY,EAAE,CAAC;YAChC,cAAc,CAAC,OAAO,CAAC,UAAA,aAAa;gBAChC,IAAI,aAAa,CAAC,EAAE,EAAE;oBAElB,IAAI,MAAM,GAAG,IAAI,WAAA,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;oBAEzE,IAAI,KAAG,GAAG,WAAA,YAAY,CAAC,qBAAqB,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,GAAG,IAAI,EAAE,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;oBACtH,IAAI,CAAC,KAAG,CAAC,OAAO;wBACZ,MAAM,CAAC,MAAM,CAAC,KAAG,CAAC,CAAC;oBAEvB,aAAa,CAAC,aAAa,EAAE,CAAC;oBAC9B,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,4DAA0D,aAAa,CAAC,EAAE,cAAS,GAAG,CAAC,KAAK,CAAC,YAAY,EAAI,EAC7H,UAAC,GAAG;wBACA,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,WAAA,eAAe,CAAC,aAAa,CAAC,EAAE,EAC9D,GAAG,CAAC,GAAG,EACP,KAAG,EACH,KAAI,CAAC,GAAG,EACR,aAAa,CAAC,WAAW,EACzB,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAC7B,aAAa,CAAC,gBAAgB,EAAE,CAAC;oBACrC,CAAC,CAAC,CAAC;iBACV;YACL,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,qCAAiB,GAAjB;YAAA,iBAoBC;YAlBG,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;YAC9C,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;gBACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACtB,OAAO;aACV;YACD,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;YACrB,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;YAClB,IAAI,IAAI,GAAG;gBACP,EAAE,EAAE,GAAG,CAAC,GAAG;gBACX,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI;gBAClB,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI;gBACnB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,WAAW,EAAE,GAAG,CAAC,YAAY;aAChC,CAAC;YACF,YAAY,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAC,MAAM;gBACnG,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;QACP,CAAC;QAED,gCAAY,GAAZ,UAAa,OAAuC;YAChD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACnB,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAED,qCAAiB,GAAjB,UAAkB,KAAoB;YAClC,IAAI,CAAC,KAAK;gBACN,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;YAExC,IAAI,IAAI,GAAG,EAAE,EACT,MAAM,GAAG,CAAC,CAAC;YAEf,OAAO,IAAI,WAAA,WAAW,EAAE,CAAC,GAAG,CAAC;gBACzB,IAAI,EAAE,IAAI;gBACV,SAAS,EAAE,MAAM;gBACjB,WAAW,EAAE,CAAC;gBACd,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,KAAK,CAAC,kBAAkB,CAAC,WAAW;gBAC/C,SAAS,EAAE,IAAI,WAAA,KAAK,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC;aAC/H,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5C,CAAC;QAED,kCAAc,GAAd,UAAe,EAAe,EAAE,GAAW,EAAE,GAAW;YACpD,IAAI,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;YACrD,IAAI,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;YAExC,EAAE,CAAC,GAAG,CAAC;gBACH,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAC3D;oBACI,SAAS,EAAE,eAAe,CAAC,SAAS;oBACpC,MAAM,EAAE,QAAQ;oBAChB,WAAW,EAAE,CAAC,QAAQ;oBACtB,IAAI,EAAE,GAAG;oBACT,EAAE,EAAE,eAAe,CAAC,EAAE;iBACzB,CAAC,GAAG,GAAG,GAAG,eAAe,CAAC,EAAE;gBACjC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC7B,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;gBACvB,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,GAAG;aAC9D,CAAC,CAAC;QACP,CAAC;QAED,gCAAY,GAAZ,UAAa,EAAe,EAAE,IAAY,EAAE,MAAc,EAAE,KAAa;YACrE,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YAE1B,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAElB,IAAI,IAAI,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;YAC1B,IAAI,IAAI,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;YAE1B,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEzB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;YAChD,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;YAEhD,IAAU,CAAE,CAAC,MAAM,CAAC,OAAO;gBACvB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAQ,CAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YAEnE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;YAEpC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;YAErB,EAAE,CAAC,GAAG,CAAC;gBACH,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC7B,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC9B,UAAU,EAAE,WAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;aACxC,CAAC,CAAC;QACP,CAAC;QAED,iCAAa,GAAb,UAAc,EAAe,EAAE,MAAc;YACzC,IAAI,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;YACrD,IAAI,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;YAExC,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9D,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,EAC9D;gBACI,SAAS,EAAE,eAAe,CAAC,SAAS;gBACpC,MAAM,EAAE,QAAQ;gBAChB,WAAW,EAAE,CAAC,QAAQ;gBACtB,IAAI,EAAE,GAAG;gBACT,EAAE,EAAE,eAAe,CAAC,EAAE;aACzB,CAAC,CAAC,CAAC;YAER,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,EAC9D;gBACI,SAAS,EAAE,eAAe,CAAC,SAAS;gBACpC,MAAM,EAAE,QAAQ;gBAChB,WAAW,EAAE,CAAC,QAAQ;gBACtB,IAAI,EAAE,GAAG;gBACT,EAAE,EAAE,eAAe,CAAC,EAAE;aACzB,CAAC,CAAC,CAAC;YAER,IAAI,SAAS,GAAG,MAAI,IAAI,SAAI,IAAI,MAAG,CAAC;YAEpC,EAAE,CAAC,GAAG,CAAC;gBACH,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,CAAC;gBACR,UAAU,EAAE,IAAI;aACnB,CAAC,CAAC;QAEP,CAAC;QAED,sCAAkB,GAAlB,UAAmB,EAAe,EAAE,MAAc,EAAE,GAAW,EAAE,MAAgB;YAC7E,EAAE,CAAC,GAAG,CAAC;gBACH,IAAI,EAAE,IAAI,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,CAAC,MAAM;gBAChB,KAAK,EAAE,CAAC;gBACR,UAAU,EAAE,IAAI;aACnB,CAAC,CAAC;QACP,CAAC;QAQD,iCAAa,GAAb;YACI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,UAAA,IAAI;gBAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,EAAE;oBACvB,IAAI,EAAE;wBACF,EAAE,CAAC,QAAQ,EAAE,CAAC;gBACtB,CAAC,CAAC,CAAC;aACN;YACD,cAAc,EAAE,CAAC;QACrB,CAAC;QApyFM,qBAAW,GAAW,QAAQ,CAAC;QAqyF1C,gBAAC;KAv0FD,AAu0FC,IAAA;IAv0FY,oBAAS,YAu0FrB,CAAA;IAED,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC,EA30FM,UAAU,KAAV,UAAU,QA20FhB;;;;;;;;;;;;;;;AC30FD,IAAO,UAAU,CAq7EhB;AAr7ED,WAAO,UAAU;IACb;QAAgC,8BAAY;QAA5C;YAAA,qEAkBC;YAjBG,WAAK,GAAG,CAAC,CAAC;YACV,WAAK,GAAG,CAAC,CAAC;;QAgBd,CAAC;QAdG,6BAAQ,GAAR,UAAS,SAAoB,EAAE,QAAsB,EAAE,OAAe;YAClE,gDAAgD;QACpD,CAAC;QAED,+BAAU,GAAV,UAAW,SAAoB;YAC3B,SAAS,CAAC,sBAAsB,EAAE,CAAC;YACnC,iDAAiD;QACrD,CAAC;QAED,4BAAO,GAAP,UAAQ,EAA0B,EAAE,SAAoB;YACpD,gDAAgD;YAChD,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ;gBAC3C,SAAS,CAAC,cAAc,EAAE,CAAC;QACnC,CAAC;QACL,iBAAC;IAAD,CAlBA,AAkBC,CAlB+B,WAAA,YAAY,GAkB3C;IAlBY,qBAAU,aAkBtB,CAAA;IAED;QAA8B,4BAAY;QAA1C;YAAA,qEAgBC;YAfG,WAAK,GAAG,CAAC,CAAC;YACV,WAAK,GAAG,CAAC,CAAC;;QAcd,CAAC;QAZG,2BAAQ,GAAR,UAAS,SAAoB,EAAE,QAAsB,EAAE,OAAe;YAClE,gDAAgD;QACpD,CAAC;QAED,6BAAU,GAAV,UAAW,SAAoB;YAC3B,SAAS,CAAC,sBAAsB,EAAE,CAAC;YACnC,iDAAiD;QACrD,CAAC;QAED,0BAAO,GAAP,UAAQ,EAA0B,EAAE,SAAoB;YACpD,gDAAgD;QACpD,CAAC;QACL,eAAC;IAAD,CAhBA,AAgBC,CAhB6B,WAAA,YAAY,GAgBzC;IAhBY,mBAAQ,WAgBpB,CAAA;IAED;QAAoC,kCAAY;QAAhD;YAAA,qEAWC;YAVG,WAAK,GAAG,EAAE,CAAC;YACX,WAAK,GAAG,CAAC,CAAC;;QASd,CAAC;QAPG,iCAAQ,GAAR,UAAS,SAAoB,EAAE,QAAsB,EAAE,OAAe;YAClE,SAAS,CAAC,qBAAqB,EAAE,CAAC;QACtC,CAAC;QAED,mCAAU,GAAV,UAAW,SAAoB;YAC3B,SAAS,CAAC,sBAAsB,EAAE,CAAC;QACvC,CAAC;QACL,qBAAC;IAAD,CAXA,AAWC,CAXmC,WAAA,YAAY,GAW/C;IAXY,yBAAc,iBAW1B,CAAA;IAED;QAA8B,4BAAY;QACtC,kBAAY,SAAoB,EAAE,IAAY;YAA9C,YACI,kBAAM,SAAS,EAAE,IAAI,CAAC,SAGzB;YAID,WAAK,GAAG,EAAE,CAAC;YACX,WAAK,GAAG,CAAC,CAAC;YACV,aAAO,GAAG;YACN,uCAAuC;YACvC,0CAA0C;YAC1C,uCAAuC;YACvC,mCAAmC;YACnC,mGAAmG;YACnG,wFAAwF;YACxF,wFAAwF;YACxF,uFAAuF;aAC1F,CAAC;YAEF,UAAI,GAAW,CAAC,CAAC;YAEjB,cAAQ,GAA+C,IAAI,CAAC;YAC5D,iBAAW,GAAuB,IAAI,CAAC;YACvC,sBAAgB,GAAY,KAAK,CAAC;YAClC,gBAAU,GAAuB,IAAI,CAAC;YACtC,aAAO,GAAY,KAAK,CAAC;YACzB,kBAAY,GAAkB,EAAE,CAAC;YACjC,gBAAU,GAAkB,EAAE,CAAC;YAC/B,iBAAW,GAAkB,EAAE,CAAC;YAChC,uBAAiB,GAAkB,EAAE,CAAC;YAEtC,kBAAY,GAAG,KAAK,CAAC;YACrB,iBAAW,GAAG,KAAK,CAAC;YACpB,oBAAc,GAAuB,IAAI,CAAC;YAjCtC,4BAA4B;YAC5B,KAAI,CAAC,MAAM,GAAG,WAAQ,SAAS,CAAC,OAAO,CAAC,WAAW,iCAA6B,CAAC;;QACrF,CAAC;QAiCD,2BAAQ,GAAR,UAAS,SAAoB,EAAE,QAAsB,EAAE,OAAe;YAClE,gDAAgD;YAEhD,IAAI,CAAC,UAAU,GAAG,OAAO,GAAG,OAAO,IAAI,SAAS,CAAC;YAEjD,IAAI,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC;YAC7C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;gBACxB,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBACnC,OAAO;aACV;YAED,SAAS,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACvB,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG,EAAE,CAAC;YAErC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAE3D,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAE/B,IAAI,YAAY,GAAgC;gBAC5C,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,KAAK;aACnB,CAAC;YAEF,QAAQ,OAAO,EAAE;gBACb,KAAK,WAAW;oBACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,kBAAkB,CAA+B,CAAC,CAAC;oBACxH,IAAI,CAAC,YAAY,GAAG,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC;oBACnF,MAAM;gBACV,KAAK,QAAQ;oBACT,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,kBAAkB,CAA+B,CAAC,CAAC;oBACzH,IAAI,CAAC,YAAY,GAAG,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC;oBACpD,MAAM;gBACV,SAAS,oBAAoB;oBACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,kBAAkB,CAAgC,CAAC,CAAC;oBAC1H,MAAM;aACb;YAED,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAEjC,IAAI,SAAS,CAAC,SAAS,CAAC,aAAa,IAAI,CAAC;gBACtC,CAAC,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,6BAAU,GAAV,UAAW,SAAoB;YAC3B,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAC5D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aAC3B;YACD,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAC3D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;aAC1B;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;aACxB;YACD,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;gBAC1B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnD,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;aAC1B;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;gBACxB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;aACxB;YACD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;gBACzB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;aACzB;YACD,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;gBAC/B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;aAC/B;YAED,SAAS,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAE1C,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC9B,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG,EAAE,CAAC;YAErC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;YAEpD,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QAED,yCAAsB,GAAtB,UAAuB,SAAoB;YACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACjC,CAAC;QAED,wCAAqB,GAArB,UAAsB,SAAoB;YACtC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAClC,CAAC;QAED,6BAAU,GAAV,UAAW,SAAS,EAAE,KAAyB,EAAE,MAA0B,EAAE,aAAqB;YAC9F,8CAA8C;YAC9C,IAAI,KAAK,GAAG,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,UAAU,GAAG,IAAI,WAAA,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAE/C,IAAI,OAAO,GAAG,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,YAAY,GAAG,IAAI,WAAA,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;YAErD,IAAI,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YACnD,IAAI,UAAU,GAAG,QAAQ,IAAI,aAAa,CAAC;YAC3C,OAAO,UAAU,CAAC;QACtB,CAAC;QAED,cAAc;QACd,0BAAO,GAAP,UAAQ,EAAkC,EAAE,SAAoB;YAC5D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;YAEhC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE;gBACpB,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,MAAM,EAAE;oBAC5B,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ;wBAC/D,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;oBAElD,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACnC,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,EAAE;wBACjC,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC;wBACxG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACtB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;qBACjB;yBACI,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;wBACnC,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC;wBACxG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACtB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG;qBACrB;iBACJ;aACJ;QACL,CAAC;QAED,8BAAW,GAAX,UAAY,EAAkC,EAAE,SAAoB,EAAE,mBAA6B;YAC/F,6BAA6B;YAE7B,mDAAmD;YACnD,qFAAqF;YACrF,uBAAuB;YACvB,sCAAsC;YACtC,eAAe;YACf,GAAG;YAEH,IAAI,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACzH,IAAI,SAAS,CAAC,SAAS,CAAC,WAAW;oBAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC;gBAE1D,IAAI,MAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACnC,MAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;gBAErB,IAAI,SAAS,CAAC,SAAS,CAAC,UAAU;oBAC9B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC;gBACzD,IAAI,SAAS,CAAC,SAAS,CAAC,gBAAgB,EAAE;oBACtC,IAAI,WAAW,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC;oBAChD,SAAS,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,WAAA,MAAM,EAAE,EAAE,MAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;oBAChF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;iBAC5C;aACJ;YAED,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,IAAI,QAAQ,IAAI,EAAE,CAAC,MAAM,EAAE;gBACvB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACnC,IAAI,UAAU,KAAK,WAAW,EAAE;oBAC5B,WAAW;oBACX,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE;wBACvB,IAAI,IAAI,CAAC,UAAU;4BACf,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;qBAC3H;yBAAM;wBACH,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;wBACzF,IAAI,IAAI,CAAC,UAAU;4BACf,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;wBACvD,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;qBACjD;iBACJ;qBACI,IAAI,UAAU,KAAK,QAAQ,EAAE;oBAC9B,QAAQ;oBACR,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE;wBACvB,IAAI,IAAI,CAAC,UAAU;4BACf,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;qBAC3H;yBAAM;wBACH,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBAC3E,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;wBACxF,IAAI,IAAI,CAAC,UAAU;4BACf,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;wBACvD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;qBAC9C;iBACJ;qBACI;oBACD,iBAAiB;oBACjB,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC3B,IAAI,GAAG,EAAE;wBACL,IAAI,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBAC/F,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBAC7F,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;wBAE/F,IAAI,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,WAAW,IAAI,GAAG,GAAG,CAAC;4BAC7E,QAAQ,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;wBAEnE,IAAI,IAAI,CAAC,UAAU;4BACf,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;wBAEvD,IAAI,mBAAmB,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE;4BAC5C,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;4BAE3C,IAAI,MAAM,IAAI,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM;gCAC9C,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;4BAEhG,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM;gCACjC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAuB,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;4BAE1J,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM;gCACvB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;4BAErF,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM;gCAC7B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;oCAC1D,MAAM,EAAE,QAAQ;oCAChB,OAAO,EAAE,IAAI;iCAChB,CAAC,CAAC;yBACV;qBAGJ;yBAAM,IAAI,IAAI,CAAC,UAAU;wBACtB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;iBAC3H;aACJ;iBAAM,IAAI,IAAI,CAAC,UAAU;gBACtB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YAExH,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;gBAChE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,4BAAS,GAAT,UAAU,EAAkC,EAAE,SAAoB;YAC9D,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAE7C,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,WAAW,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC;gBAClI,OAAO;YAEX,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC;gBAC7H,OAAO;YAEX,IAAI,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,WAAW,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACvJ,sFAAsF;gBACtF,qEAAqE;gBACrE,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACnC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,OAAO;aACV;YAGD,IAAI,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAE1C,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC7B,IAAI,QAAQ,IAAI,EAAE,CAAC,MAAM,EAAE;gBACvB,8CAA8C;gBAC9C,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAEnC,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,EAAE;oBACjC,WAAW;oBACX,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE;wBACvB,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC;wBACxG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;qBACzB;yBACI;wBACD,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;wBAC/G,IAAI,CAAC,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC1F,IAAI,CAAC,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC1F,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;4BAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;wBACzB,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;qBACpC;iBAEJ;qBACI,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;oBACnC,QAAQ;oBACR,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE;wBACvB,uBAAuB;wBACvB,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC;wBACxG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;qBACzB;yBACI;wBACD,4BAA4B;wBAC5B,2BAA2B;wBAC3B,QAAQ;wBACR,IAAI,GAAG,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;wBAC3G,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC3D,IAAI,CAAC,IAAI,CAAC;4BACN,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;qBAC5B;oBACD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;oBACjC,GAAG;iBACN;qBACI;oBACD,iBAAiB;oBACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;wBAEnB,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;wBAEzF,IAAI,IAAI,GAAuB;4BAC3B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;4BACnC,KAAK,EAAE,CAAC;4BACR,YAAY,EAAE,CAAC;4BACf,aAAa,EAAE,CAAC;4BAChB,WAAW,EAAE,CAAC;4BACd,SAAS,EAAE,MAAM;yBACpB,CAAC;wBAEF,IAAI,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC;wBAC7C,IAAI,KAAK,EAAE;4BACP,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC;4BACxD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,kBAAkB,CAAC,aAAa,CAAC;yBAC/D;wBAED,IAAI,CAAC,WAAW,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;4BACtC,GAAG,EAAE,SAAS,CAAC,GAAG;4BAClB,SAAS,EAAE,IAAI;4BACf,SAAS,EAAE,KAAK;4BAChB,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE;4BAC/B,IAAI,EAAE,IAAI;4BACV,MAAM,EAAE,EAAE;yBACb,CAAC,CAAC;wBAEH,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;wBAEnD,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;wBACnF,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;wBAC7F,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;wBAE3F,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;wBAEjC,IAAI,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE;4BAChC,IAAI,UAAU,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC;4BAC/C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;4BAClC,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;yBACjD;wBACD,IAAI,SAAS,CAAC,SAAS,CAAC,gBAAgB,EAAE;4BACtC,IAAI,WAAW,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC;4BAChD,SAAS,CAAC,kBAAkB,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;4BACtE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;yBAC5C;qBACJ;yBAAM;wBACH,IAAI,SAAS,CAAC,SAAS,CAAC,qBAAqB;4BACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC;wBACxD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;4BAChD,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;4BAC/D,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;yBAC1C;qBACJ;oBAED,IAAI,SAAS,CAAC,SAAS,CAAC,WAAW;wBAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC;oBAE1D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;oBAErB,IAAI,SAAS,CAAC,SAAS,CAAC,UAAU;wBAC9B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC;oBACzD,IAAI,SAAS,CAAC,SAAS,CAAC,gBAAgB,EAAE;wBACtC,IAAI,WAAW,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC;wBAChD,SAAS,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,WAAA,MAAM,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;wBAChF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;qBAC5C;iBACJ;aACJ;YAED,mBAAmB;YACnB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC9B,CAAC;QAED,mCAAgB,GAAhB,UAAiB,SAAoB;YACjC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAClB,IAAI,QAAQ,GAAuB;oBAC/B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;oBACnC,KAAK,EAAE,CAAC;oBACR,YAAY,EAAE,CAAC;oBACf,aAAa,EAAE,CAAC;oBAChB,WAAW,EAAE,CAAC;iBACjB,CAAC;gBAEF,IAAI,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC;gBAE7C,IAAI,KAAK,EAAE;oBACP,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC;oBAC1D,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,kBAAkB,CAAC,aAAa,CAAC;oBAC9D,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC,YAAY,GAAG,CAAC,CAAC;iBAC9D;gBAED,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;gBAElC,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;oBACrC,GAAG,EAAE,SAAS,CAAC,GAAG;oBAClB,SAAS,EAAE,KAAK;oBAChB,SAAS,EAAE,KAAK;oBAChB,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE;oBAC1D,IAAI,EAAE,QAAQ;iBACjB,CAAC,CAAC;gBAEH,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aACrC;QACL,CAAC;QAED,gCAAa,GAAb,UAAc,IAA8C,EAAE,MAAc,EAAE,SAAoB;YAC9F,IAAI,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC;YAElD,IAAI,CAAC,MAAM;gBACP,MAAM,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhD,IAAI,GAAG,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EACxC,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,EACpB,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,EACvB,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAExB,IAAI,EAAE,GAAG,WAAA,OAAO,CAAC,KAAK,CAAC;YACvB,IAAI,EAAE,GAAG,WAAA,OAAO,CAAC,KAAK,CAAC;YAEvB,IAAI,WAAW,CAAC,MAAM,IAAI,SAAS,CAAC,SAAS,EAAE;gBAC3C,IAAI,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAChC,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxB,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAC3B;YAED,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAExB,IAAI,GAAG,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjD,IAAI,GAAG,GAAG,MAAM,CAAC;YACjB,IAAI,GAAG,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjD,IAAI,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC;YAEpE,IAAI,SAAS,CAAC,SAAS,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,aAAa,GAAG,CAAC,CAAC,EAAE;gBACpF,IAAI,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBAC1C,IAAI,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBAE1C,IAAI,UAAU,GAAG,QAAQ,CAAC;gBAC1B,IAAI,UAAU,GAAG,QAAQ,CAAC;gBAE1B,IAAI,SAAS,CAAC,SAAS,CAAC,aAAa,GAAG,CAAC,EAAE;oBACvC,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;iBAC/D;qBAAM;oBACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC,GAAG,aAAa,CAAC;oBAClE,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC,GAAG,aAAa,CAAC;oBAElE,IAAI,UAAU,IAAI,CAAC;wBACf,UAAU,GAAG,aAAa,CAAC;oBAC/B,IAAI,QAAQ,IAAI,CAAC;wBACb,QAAQ,GAAG,UAAU,CAAC;oBAE1B,IAAI,UAAU,IAAI,CAAC;wBACf,UAAU,GAAG,aAAa,CAAC;oBAC/B,IAAI,QAAQ,IAAI,CAAC;wBACb,QAAQ,GAAG,UAAU,CAAC;iBAC7B;gBAED,EAAE,IAAI,UAAU,GAAG,QAAQ,CAAC;gBAC5B,EAAE,IAAI,UAAU,GAAG,QAAQ,CAAC;gBAC5B,GAAG,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7C,GAAG,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7D,GAAG,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAChD;YAED,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YAEhC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAEzD,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAE7D,CAAC;QAED,6BAAU,GAAV,UAAW,IAA8C,EAAE,GAAW,EAAE,SAAoB;YACxF,IAAI,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAC7C,MAAM,GAAa,EAAE,CAAC;YAE1B,IAAI,GAAG;gBACH,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;;gBAEhC,GAAG,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7C,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,EAC/B,GAAG,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EACxC,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAC5B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EACjG,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,EACpB,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,EACtE,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,EACxB,GAAG,GAAG,WAAA,MAAM,CAAC,GAAG,CAAC;YAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE;gBAChC,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,EAC/C,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBAEhB,IAAI,GAAG,GAAG,KAAK;oBACX,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,WAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;;oBAE7C,IAAI,CAAC,IAAI,CAAC,WAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9C;YAED,KAAK,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;aAC/B;YAED,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAE7D,CAAC;QAED,4BAAS,GAAT,UAAU,OAAe,EAAE,SAAoB;YAC3C,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE,EAAE,aAAa;gBAC/C,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;QAED,0BAAO,GAAP,UAAQ,OAAe,EAAE,SAAoB;YACzC,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE,EAAE,aAAa;gBAC/C,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;QAED,gCAAa,GAAb,UAAc,SAAoB;YAC9B,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ;gBACnE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;iBAC5D,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ;gBACrE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAClE,CAAC;QAED,gCAAa,GAAb,UAAc,aAAqB,EAAE,UAAkB,EAAE,SAAiB,EAAE,SAAoB;YAE5F,IAAI,IAAI,GAAG,WAAA,UAAU,CAAC,oBAAoB,CAAC,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAEvH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAE5B,IAAI,UAAU,IAAI,SAAS,CAAC,SAAS,CAAC,aAAa,GAAG,CAAC;gBACnD,IAAI,CAAC,MAAM,GAAG,WAAA,UAAU,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAC3G,IAAI,SAAS,CAAC,QAAQ,IAAI,UAAU,IAAI,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,GAAG,CAAC;gBACvF,IAAI,CAAC,MAAM,GAAG,WAAA,UAAU,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAErF,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,IAAI,UAAU,EAAE;gBACzD,WAAW;gBACX,IAAI,qBAAqB,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;aAC1H;iBACI,IAAI,SAAS,CAAC,SAAS,CAAC,4BAA4B,IAAI,aAAa,IAAI,UAAU,EAAE;gBACtF,IAAI,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK;gBAClC,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,mBAAmB;gBAChD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;aAC1G;YAED,OAAO,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;QAED,mCAAgB,GAAhB,UAAiB,qBAA8B,EAAE,aAAqB,EAAE,UAAkB,EAAE,OAAe,EAAE,SAAiB,EAAE,QAAiB;YAE7I,oJAAoJ;YACpJ,IAAI,CAAC,UAAU;gBACX,OAAO,OAAO,CAAC;YAEnB,IAAI,aAAa,GAAG,CAAC,CAAC;YACtB,IAAI,qBAAqB,IAAI,aAAa,EAAE;gBACxC,IAAI,GAAC,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;gBAClC,IAAI,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,GAAC,CAAC,CAAC;gBAC5C,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjD,aAAa,GAAG,SAAS,GAAG,SAAS,CAAC;aACzC;YAED,IAAI,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjC,IAAI,MAAM,GAAG,CAAC,CAAC;YAEf,IAAI,QAAQ,EAAE;gBACV,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;gBACrB,IAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB;gBAC7E,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,MAAM,EAAE,EAAE;oBACpD,IAAI,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;oBACrC,IAAI,cAAc,GAAG,WAAW,GAAG,YAAY,CAAC;oBAChD,IAAI,cAAc,GAAG,WAAW,GAAG,YAAY,CAAC;oBAEhD,IAAI,kBAAkB,GAAG,cAAc,IAAI,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC;oBAEpE,IAAI,cAAc,GAAG,KAAK,GAAG,aAAa,CAAC;oBAC3C,IAAI,kBAAkB;wBAClB,cAAc,GAAG,KAAK,GAAG,aAAa,CAAC;yBACtC;wBACD,IAAI,cAAc,GAAG,CAAC;4BAClB,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,kCAAkC;qBACjG;oBAED,IAAI,cAAc,GAAG,cAAc,IAAI,cAAc,IAAI,cAAc,IAAI,cAAc,CAAC;oBAC1F,IAAI,cAAc,EAAE;wBAChB,WAAW,GAAG,MAAM,CAAC;wBACrB,MAAM;qBACT;iBACJ;gBAED,IAAI,WAAW,GAAG,CAAC;oBACf,OAAO,OAAO,CAAC,CAAC,0EAA0E;;oBAE1F,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;aACxC;;gBAEG,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC;YAE3E,IAAI,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;YAC5B,MAAM,IAAI,aAAa,CAAC;YAExB,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,GAAG,GAAG,IAAI,WAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpF,OAAO,WAAA,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QAED,sBAAG,GAAH,UAAI,CAAC,EAAE,CAAC;YACJ,+CAA+C;YAC/C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,uCAAoB,GAApB,UAAqB,CAAS,EAAE,CAAS,EAAE,SAAiB;YACxD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QACzC,CAAC;QAED,mCAAgB,GAAhB,UAAiB,SAAoB;YACjC,uBAAuB;YACvB,YAAY;YACZ,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC7B,IAAI,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC;YAC7C,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,IAAI,QAAQ,IAAI,KAAK,EAAE;gBACnB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACnC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE;oBACnF,IAAI,UAAU,KAAK,MAAM,EAAE;wBACvB,IAAI,CAAC,GAAG,EAAE,CAAC;wBAEX,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC,aAAa,CAAC,EACrF,OAAO,GAAG,WAAA,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EACnD,YAAY,GAAG,WAAA,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,EAChD,MAAM,GAAG,YAAY,CAAC,GAAG,EACzB,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAA,EAAE,IAAM,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC;wBAEjH,IAAI,CAAC,KAAK,EAAE,CAAC;wBAEb,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAArB,CAAqB,CAAC,CAAC;wBACjH,IAAI,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE;4BAC3D,QAAQ,CAAC,OAAO,CAAC,UAAA,GAAG;gCAChB,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,UAAU,EAAE,EAApD,CAAoD,CAAC,CAAC;gCAC7E,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gCACnD,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;4BACtC,CAAC,CAAC,CAAC;yBACN;qBACJ;yBACI,IAAI,UAAU,KAAK,SAAS,EAAE;wBAC/B,IAAI,SAAS,CAAC,SAAS,EAAE;4BACrB,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,EACtB,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,EAC1F,MAAM,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAuB,CAAC,EACvE,MAAM,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAC5D,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;4BAEvE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;yBACxE;wBAED,IAAI,CAAC,GAAG,EAAE,CAAC;wBAEX,qBAAqB;wBACrB,IAAI,SAAS,CAAC,SAAS,CAAC,4BAA4B,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE;4BAC3E,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;4BAClC,uDAAuD;4BACvD,IAAI,UAAU,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;4BAChE,IAAI,cAAc,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;4BACpE,IAAI,QAAQ,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;4BAC3E,IAAI,YAAY,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;4BAE/E,IAAI,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;4BAC/C,IAAI,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;4BAEzC,IAAI,kBAAkB,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;4BACtE,IAAI,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;4BAEtF,IAAI,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;4BAChD,IAAI,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;4BAC/C,IAAI,uBAAuB,GAAG,IAAI,CAAC,GAAG,CAAC,WAAA,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;4BAE5F,IAAI,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,WAAA,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;4BACnF,IAAI,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;gCACpD,IAAI,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE;oCAC/D,IAAI,CAAC,GAAG,EAAE,CAAC;oCACX,IAAI,CAAC,IAAI,CAAC,WAAA,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;iCAC3D;6BACJ;yBACJ;qBAEJ;yBAAM,IAAI,UAAU,KAAK,QAAQ,EAAE;wBAChC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBACjB,IAAI,CAAC,GAAG,EAAE,CAAC;qBACd;oBACD,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;wBACtB,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;4BAC/B,KAAK,EAAE,SAAS;yBACnB,CAAC,CAAC;wBAEH,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;wBACpB,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;wBAElC,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU;4BAC7B,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;qBACzC;oBACD,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;iBAC/C;aACJ;QACL,CAAC;QAED,gCAAa,GAAb,UAAc,SAAoB,EAAE,GAAW;YAC3C,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE;gBAC9C,IAAI,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;oBACzB,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;oBACzB,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;oBAEzB,IAAI,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC;oBAC1D,IAAI,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;oBAExC,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,IAAI,EACjD;wBACI,eAAe,EAAE,IAAI;wBACrB,MAAM,EAAE,QAAQ;wBAChB,WAAW,EAAE,CAAC,QAAQ;wBACtB,IAAI,EAAE,eAAe,CAAC,EAAE;wBACxB,EAAE,EAAE,GAAG;qBACV,CAAC,CAAC;oBAEP,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,IAAI,EACjD;wBACI,eAAe,EAAE,IAAI;wBACrB,MAAM,EAAE,QAAQ;wBAChB,WAAW,EAAE,CAAC,QAAQ;wBACtB,IAAI,EAAE,eAAe,CAAC,EAAE;wBACxB,EAAE,EAAE,GAAG;qBACV,CAAC,CAAC;oBAEP,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAClG,OAAO;oBAEX,IAAI,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC;oBAE7C,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EACrD,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;oBAEhD,IAAI,CAAC,IAAI;wBACL,OAAO;oBAEX,IAAI,SAAS,CAAC,SAAS,CAAC,cAAc,EAAE;wBACpC,IAAI,UAAU;4BACV,EAAE,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;qBAC5D;oBAED,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;oBAErC,IAAI,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;wBAC7C,IAAI,EAAE,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC5C,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;4BACnB,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;4BACjC,OAAO;yBACV;wBACD,IAAI,EAAE,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;wBACzD,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;4BACjB,OAAO;qBACd;oBAED,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;oBAC7D,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,yBAAyB;oBAErF,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;oBACtD,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;oBAE5C,IAAI,GAAG,GAAG,WAAA,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBAC3C,IAAI,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE;wBACjC,GAAG,GAAG,WAAA,YAAY,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;oBAE5G,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC;iBACnD;aACJ;QACL,CAAC;QA7zBM,kBAAS,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QA8zBpC,eAAC;KAr0BD,AAq0BC,CAr0B6B,WAAA,YAAY,GAq0BzC;IAr0BY,mBAAQ,WAq0BpB,CAAA;IAED;QAAqC,mCAAY;QAC7C,yBAAY,SAAoB,EAAE,IAAY;YAA9C,YACI,kBAAM,SAAS,EAAE,IAAI,CAAC,SAEzB;YAED,WAAK,GAAG,CAAC,CAAC;YACV,WAAK,GAAG,CAAC,CAAC;YAEV,gBAAU,GAAe,IAAI,CAAC;YAC9B,gBAAU,GAAuB,IAAI,CAAC;YACtC,UAAI,GAAW,CAAC,CAAC;YACjB,aAAO,GAAY,KAAK,CAAC;YATrB,KAAI,CAAC,MAAM,GAAG,WAAW,CAAC;;QAC9B,CAAC;QAUD,kCAAQ,GAAR,UAAS,SAAoB,EAAE,QAAsB,EAAE,OAAe;YAClE,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAE3D,SAAS,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAEzC,SAAS,CAAC,cAAc,EAAE,CAAC;YAE3B,IAAI,CAAC,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;YAEvD,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAEd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAEtD,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBACrC,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE;gBACxB,IAAI,EAAE;oBACF,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;oBACnC,KAAK,EAAE,WAAA,UAAU,CAAC,UAAU,CAAC,YAAY,GAAG,CAAC;oBAC7C,SAAS,EAAE,WAAA,UAAU,CAAC,UAAU,CAAC,WAAW;oBAC5C,WAAW,EAAE,WAAA,UAAU,CAAC,UAAU,CAAC,aAAa;oBAChD,aAAa,EAAE,CAAC;iBACnB;gBACD,MAAM,EAAE,CAAC;aACZ,CAAC,CAAC;QAEP,CAAC;QAED,oCAAU,GAAV,UAAW,SAAoB;YAE3B,SAAS,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAE1C,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;aAC1B;YACD,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;aAC1B;YAED,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAExD,CAAC;QAEO,0CAAgB,GAAxB,UAAyB,CAAS,EAAE,SAAoB;YACpD,IAAI,UAAU,GAAG,IAAI,WAAA,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACjD,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;YACzB,+BAA+B;YAC/B,OAAO,UAAU,CAAC;QACtB,CAAC;QAED,mCAAS,GAAT,UAAU,EAA0B,EAAE,SAAoB;YACtD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE;gBACjB,IAAI,KAAK,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EACtC,EAAE,GAAG,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;gBAClF,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACtD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;gBACvD,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;aACjB;;gBAEG,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QAED,iCAAO,GAAP,UAAQ,EAA0B,EAAE,SAAoB;YACpD,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,EAC5B,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,IAAI,UAAU,IAAI,EAAE,CAAC,MAAM,EAAE;gBAEzB,QAAQ,IAAI,CAAC,IAAI,EAAE;oBACf,KAAK,CAAC;wBACF;4BACI,IAAI,KAAK,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EACtC,EAAE,GAAG,eAAe,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;4BACjE,IAAI,CAAC,EAAE,EAAE;gCACL,EAAE,GAAG,KAAK,CAAC;gCACX,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;6BACxB;;gCACG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;4BACxB,sBAAsB;4BACtB,UAAU,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;4BAC/B,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;4BACxC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC;4BACjC,gBAAgB;yBACnB;wBACD,MAAM;oBACV,KAAK,CAAC;wBACF;4BACI,IAAI,KAAK,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EACtC,EAAE,GAAG,eAAe,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;4BAC7E,IAAI,CAAC,EAAE,EAAE;gCACL,EAAE,GAAG,KAAK,CAAC;gCACX,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;6BACxB;;gCACG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;4BACxB,UAAU,CAAC,GAAG,GAAG,EAAE,CAAC;4BACpB,0CAA0C;4BAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;4BAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC;yBAClC;wBACD,MAAM;iBACb;gBACD,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAChC;QACL,CAAC;QAED,qCAAW,GAAX,UAAY,EAA0B,EAAE,SAAoB;YAExD,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,EAC5B,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,IAAI,UAAU,IAAI,EAAE,CAAC,MAAM,EAAE;gBAEzB,QAAQ,IAAI,CAAC,IAAI,EAAE;oBACf,KAAK,CAAC;wBACF;4BACI,IAAI,KAAK,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EACtC,EAAE,GAAG,eAAe,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;4BACjE,IAAI,CAAC,EAAE,EAAE;gCACL,EAAE,GAAG,KAAK,CAAC;gCACX,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;6BACxB;;gCACG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;4BACxB,UAAU,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;4BAC/B,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;yBAC3C;wBACD,MAAM;oBACV,KAAK,CAAC;wBACF;4BACI,IAAI,KAAK,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EACtC,EAAE,GAAG,eAAe,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;4BAC7E,IAAI,CAAC,EAAE,EAAE;gCACL,EAAE,GAAG,KAAK,CAAC;gCACX,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;6BACxB;;gCACG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;4BACxB,UAAU,CAAC,GAAG,GAAG,EAAE,CAAC;4BACpB,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;yBAC3C;wBACD,MAAM;iBACb;gBACD,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,CAAC,UAAU,EAAE;oBACxC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC3C;QACL,CAAC;QAEM,+BAAe,GAAtB,UAAuB,UAAkB,EAAE,SAAiB,EAAE,SAAoB,EAAE,MAAuB;YACvG,IAAI,MAAM,GAAW,IAAI,EACrB,cAAc,GAAG,WAAA,UAAU,CAAC,cAAc,CAAC;YAE/C,IAAI,EAAE,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAC7E,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAEtF,IAAI,UAAU,IAAI,SAAS,CAAC,SAAS,EAAE;gBACnC,IAAI,iBAAiB,GAAG,WAAA,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,WAAA,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,WAAA,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBAChN,IAAI,SAAS,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE;oBACvD,IAAI,EAAE;wBACF,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC;yBACjC,IAAI,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE;wBACpE,IAAI,KAAK,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,WAAA,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,iBAAiB,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;wBACnH,IAAI,KAAK,EAAE;4BACP,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAC/C,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,QAAQ,CAAC;4BAC7E,IAAI,IAAI,IAAI,cAAc;gCACtB,MAAM,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;yBAC1C;qBACJ;oBACD,IAAI,CAAC,MAAM;wBACP,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC;iBACzC;aACJ;YAED,IAAI,CAAC,MAAM,EAAE;gBACT,IAAI,EAAE,EAAE;oBACJ,MAAM,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;iBACnC;qBAAM,IAAI,GAAG,EAAE;oBACZ,IAAI,EAAE,GAAG,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;oBACpD,IAAI,EAAE,EAAE;wBACJ,MAAM,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;qBACnC;iBACJ;aACJ;YAED,qDAAqD;YACrD,oHAAoH;YACpH,yDAAyD;YACzD,qCAAqC;YACrC,GAAG;YAEH,OAAO,MAAM,CAAC;QAClB,CAAC;QAEL,sBAAC;IAAD,CAhNA,AAgNC,CAhNoC,WAAA,YAAY,GAgNhD;IAhNY,0BAAe,kBAgN3B,CAAA;IAED;QAAqC,mCAAY;QAC7C,yBAAY,SAAoB,EAAE,IAAY;YAA9C,YACI,kBAAM,SAAS,EAAE,IAAI,CAAC,SAEzB;YAED,WAAK,GAAG,EAAE,CAAC;YACX,WAAK,GAAG,CAAC,CAAC;YAEV,cAAQ,GAAkC,IAAI,CAAC;YAC/C,cAAQ,GAAyB,IAAI,CAAC;YAEtC,iBAAW,GAAgB,IAAI,CAAC;YAChC,mBAAa,GAAW,IAAI,CAAC;YAC7B,wBAAkB,GAAY,KAAK,CAAC;;YAXhC,qFAAqF;QACzF,CAAC;QAoBD,kCAAQ,GAAR,UAAS,SAAoB,EAAE,QAAsB,EAAE,OAAe;YAAtE,iBA6CC;YA5CG,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,EAC/B,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,EACjC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;YAE3B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACf,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBACnC,OAAO;aACV;YAED,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAEhC,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;gBACd,IAAI,IAAI,GAAG,IAAI,CAAC,QAAqB,CAAC;gBACtC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBAC3B,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;oBAClC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;wBAC7B,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;qBACrC;oBACD,IAAI,IAAI,CAAC,WAAW,EAAE;wBAClB,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;wBACnC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC;wBAC7B,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC;qBAC/B;iBACJ;YACL,CAAC,CAAC,CAAC;YACH,6DAA6D;YAC7D,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,IAAI,YAAY,GAAgC;gBAC5C,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,YAAY,EAAE,KAAK,CAAC,yBAAyB,CAAC,YAAY,GAAG,CAAC;gBAC9D,WAAW,EAAE,KAAK,CAAC,yBAAyB,CAAC,WAAW;gBACxD,aAAa,EAAE,GAAG;aACrB,CAAC;YAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAEvD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACzD,CAAC;QAED,oCAAU,GAAV,UAAW,SAAoB;YAC3B,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,EAC/B,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,EACjC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;YAE3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aAC3B;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;aACxB;YACD,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,KAAK,EAAE;gBACP,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;oBACd,IAAI,IAAI,GAAG,IAAI,CAAC,QAAqB,CAAC;oBACtC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE;wBAC/C,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;wBACnC,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC;wBAC9B,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC;qBAC/B;gBACL,CAAC,CAAC,CAAC;aACN;YACD,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,2CAAiB,GAAjB,UAAkB,SAAoB;YAClC,OAAO,IAAI,WAAA,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,CAAC;QAED,mCAAS,GAAT,UAAU,EAA0B,EAAE,SAAoB;YACtD,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE;gBACpB,IAAI,IAAI,CAAC,UAAU;oBACf,OAAO;;oBAEP,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;aACvC;YAED,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE;gBAEpE,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,EAC/B,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,EACjC,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAEpD,IAAI,IAAI,EAAE;oBACN,IAAI,IAAI,GAAG,IAAI,CAAC,QAAqB,CAAC;oBACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;oBAC7B,IAAI,IAAI,EAAE;wBACN,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;wBACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;wBACxB,IAAI,CAAC,MAAM,EAAE,CAAC;wBACd,IAAI,CAAC,UAAU,EAAE,CAAC;wBAClB,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;wBAClC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE;4BACrB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;gCACzB,SAAS,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;;gCAExC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;yBAC1C;6BACI;4BACD,SAAS,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;yBAC3C;qBAEJ;iBACJ;aACJ;QACL,CAAC;QAED,cAAc;QACd,iCAAO,GAAP,UAAQ,EAA0B,EAAE,SAAoB;QAExD,CAAC;QAED,qCAAW,GAAX,UAAY,EAA0B,EAAE,SAAoB;YACxD,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,KAAK,GAAG,KAAK,EACb,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAEjD,IAAI,QAAQ,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE;gBAC9C,IAAI,MAAM,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EACvC,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBACzC,IAAI,CAAC,EAAE;oBAEH,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,EACf,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,EACxB,WAAW,GAAG,GAAG,CAAC,cAAc,EAAE,EAClC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;oBAExB,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE;wBAClC,WAAW,IAAI,IAAI,CAAC,EAAE,CAAC;qBAC1B;oBAED,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC;oBAE1B,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,WAAA,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBACvD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC;oBAC3C,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;oBAEhC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAA,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,WAAA,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAChG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAE/B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;oBACzD,6DAA6D;oBAE7D,KAAK,GAAG,IAAI,CAAC;iBAChB;aACJ;YAED,IAAI,CAAC,KAAK,EAAE;gBACR,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC;gBACjC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAChC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpD,6DAA6D;aAChE;QACL,CAAC;QAED,uCAAa,GAAb,UAAc,CAAU,EAAE,SAAoB;YAA9C,iBA6BC;YA5BG,IAAI,MAAM,GAAuC,IAAI,CAAC;YACtD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,OAAO,GAAG,MAAM,CAAC,SAAS,EAC1B,cAAc,GAAG,eAAe,CAAC,cAAc,EAC/C,QAAQ,GAAG,SAAS,CAAC,cAAc,EAAE,EACrC,QAAQ,GAAc,IAAI,EAC1B,OAAO,GAAW,IAAI,CAAC;gBAE3B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;oBAChC,KAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;wBACxB,IAAI,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;wBAC7C,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,GAAG,OAAO,EAAE;4BAC1C,OAAO,GAAG,IAAI,CAAC;4BACf,QAAQ,GAAG,GAAG,CAAC;4BACf,OAAO,GAAG,CAAC,CAAC;yBACf;oBACL,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBAEH,IAAI,QAAQ,IAAI,OAAO,EAAE;oBACrB,MAAM,GAAG;wBACL,OAAO,EAAE,QAAQ;wBACjB,EAAE,EAAE,OAAO;qBACd,CAAC;iBACL;aACJ;YACD,6DAA6D;YAC7D,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,gDAAsB,GAAtB,UAAuB,WAAwB,EAAE,SAAoB;YACjE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,+CAAqB,GAArB,UAAsB,WAAwB,EAAE,SAAoB;YAChE,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC;QAChC,CAAC;QAED,4CAAkB,GAAlB,UAAmB,WAAwB,EAAE,SAAoB;YAAjE,iBAYC;YAXG,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,EAC/B,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,EACjC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;YAE3B,IAAI,WAAW,IAAI,KAAK,CAAC,MAAM,EAAE;gBAC7B,KAAK,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAK,IAAI,CAAC,QAAsB,CAAC,WAAW,IAAK,IAAI,CAAC,QAAsB,CAAC,WAAW,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,EAAnI,CAAmI,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;oBAClK,KAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAqB,CAAC,CAAC;gBACvD,CAAC,CAAC,CAAC;aACN;YAED,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QACpC,CAAC;QAED,2CAAiB,GAAjB,UAAkB,KAAgB;YAC9B,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE;gBAC5B,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;gBAC5B,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;aAC5B;QACL,CAAC;QA5OM,8BAAc,GAAG,EAAE,CAAC;QAEpB,8BAAc,GAAgB;YACjC,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,SAAS;YACtB,aAAa,EAAE,GAAG;SACrB,CAAC;QAuON,sBAAC;KA7PD,AA6PC,CA7PoC,WAAA,YAAY,GA6PhD;IA7PY,0BAAe,kBA6P3B,CAAA;IAED;QAAgC,8BAAY;QACxC,oBAAY,SAAoB,EAAE,IAAY;YAA9C,YACI,kBAAM,SAAS,EAAE,IAAI,CAAC,SAEzB;YACD,WAAK,GAAG,CAAC,CAAC;YACV,WAAK,GAAG,CAAC,CAAC;YAHN,KAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA,uEAAuE;;QAC5F,CAAC;QAID,6BAAQ,GAAR,UAAS,SAAoB,EAAE,QAAsB,EAAE,OAAe;YAClE,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;YACpC,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE;gBAC5B,SAAS,CAAC,eAAe,EAAE,CAAC;gBAC5B,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC;gBAC5B,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC5E,OAAO;aACV;YACD,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;gBACtB,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC;gBAC3B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;aAC9D;QACL,CAAC;QAED,+BAAU,GAAV,UAAW,SAAoB;YAC3B,IAAI,SAAS,CAAC,SAAS,EAAE;gBACrB,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC;gBAC5B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;aACvD;QACL,CAAC;QACL,iBAAC;IAAD,CA5BA,AA4BC,CA5B+B,WAAA,YAAY,GA4B3C;IA5BY,qBAAU,aA4BtB,CAAA;IAED;QAA2C,yCAAY;QAAvD;YAAA,qEAoUC;YAlUG,YAAM,GAAW,IAAI,WAAA,MAAM,EAAE,CAAC;YAC9B,UAAI,GAAW,IAAI,WAAA,MAAM,EAAE,CAAC;YA8BpB,iBAAW,GAAuB,IAAI,CAAC;YACvC,eAAS,GAAuB,IAAI,CAAC;YACrC,oBAAc,GAAyB,IAAI,CAAC;YAC5C,cAAQ,GAAyB,IAAI,CAAC;YAC9C,UAAI,GAA0B,IAAI,CAAC;YAUnC,mBAAa,GAAoB,IAAI,CAAC;;QAqR1C,CAAC;QA/TG,sBAAI,wCAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,MAAM,CAAC;YACvB,CAAC;iBAED,UAAU,KAAa;gBACnB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,CAAC;;;WALA;QAOD,sBAAI,sCAAG;iBAAP;gBACI,OAAO,IAAI,CAAC,IAAI,CAAC;YACrB,CAAC;iBAED,UAAQ,KAAa;gBACjB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,CAAC;;;WALA;QAOD,sBAAI,0CAAO;iBAAX;gBACI,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;YAC9B,CAAC;;;WAAA;QAED,2CAAW,GAAX,UAAY,CAAS,EAAE,CAAS;YAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QAkBD,2CAAW,GAAX;YACI,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa;gBAC/B,OAAO;YAEX,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;YAEjB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACxD,aAAa,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACtD,CAAC;QAED,yCAAS,GAAT;YACI,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa;gBAC/B,OAAO;YAEX,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACnB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YAEtE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACxD,aAAa,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACtD,CAAC;QAED,+CAAe,GAAf;YAEI,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI;gBACjC,OAAO;YAEX,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YACvC,IAAI,UAAU,GAAG,WAAA,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACxE,IAAI,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC;YAC/B,IAAI,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;YAEnC,IAAI,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC;YACtC,IAAI,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC;YAE7B,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC5B,OAAO;YAEX,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAEjE,IAAI,SAAS,GAAG,WAAA,YAAY,CAAC,qBAAqB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAE7F,IAAI,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC3B,OAAO;YAEX,aAAa,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAE7C,CAAC;QAED,wCAAQ,GAAR,UAAS,SAAoB,EAAE,QAAsB,EAAE,OAAe;YAAtE,iBAuKC;YAtKG,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,EACnB,SAAS,GAAG,SAAS,CAAC,SAAS,EAC/B,aAAa,GAAG,SAAS,CAAC,oBAAoB,CAAC;YAEnD,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,mBAAmB,IAAI,IAAI,EAAE;gBACzD,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBACnC,OAAO;aACV;YAED,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,IAAI;gBAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;oBACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,SAAS,CAAC,mBAAmB,GAAG,SAAS,CAAC,aAAa,CAAC,iBAAiB,CAAC;YAE1E,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;YAEnC,IAAI,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,cAAc;gBACpB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YAE7B,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAElE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAExC,aAAa,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAElD,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,EAAE,CAAC;YAEZ,IAAI,KAAK,GAAG,MAAI,EAAE,cAAS,EAAE,WAAM,EAAE,eAAU,EAAE,cAAS,EAAE,UAAK,EAAE,eAAU,EAAE,WAAM,EAAI,CAAC;YAE1F,IAAI,CAAC,WAAW,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBACtC,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE;gBACxB,IAAI,EAAE;oBACF,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;oBACnC,KAAK,EAAE,EAAE;oBACT,YAAY,EAAE,CAAC;oBACf,WAAW,EAAE,qBAAqB,CAAC,WAAW;oBAC9C,aAAa,EAAE,qBAAqB,CAAC,aAAa;iBACrD;gBACD,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,CAAC;gBACV,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC5B,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE;gBACxB,IAAI,EAAE;oBACF,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;oBACnC,KAAK,EAAE,EAAE;oBACT,YAAY,EAAE,CAAC;oBACf,WAAW,EAAE,qBAAqB,CAAC,WAAW;oBAC9C,aAAa,EAAE,qBAAqB,CAAC,aAAa;iBACrD;gBACD,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,KAAK;gBAChB,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,CAAC;aACZ,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAEpD,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC5B,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE;gBACxB,IAAI,EAAE;oBACF,IAAI,EAAE,KAAK;oBACX,WAAW;oBACX,oBAAoB;oBACpB,WAAW,EAAE,qBAAqB,CAAC,WAAW;oBAC9C,oDAAoD;iBACvD;gBACD,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,KAAK;gBAChB,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,CAAC;aACZ,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAEpD,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAErE,IAAI,CAAC,SAAS,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE;gBACxB,IAAI,EAAE;oBACF,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;oBACnC,KAAK,EAAE,EAAE;oBACT,YAAY,EAAE,CAAC;oBACf,WAAW,EAAE,qBAAqB,CAAC,WAAW;oBAC9C,aAAa,EAAE,qBAAqB,CAAC,aAAa;iBACrD;gBACD,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,CAAC;gBACV,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC5B,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE;gBACxB,IAAI,EAAE;oBACF,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;oBACnC,KAAK,EAAE,EAAE;oBACT,YAAY,EAAE,CAAC;oBACf,WAAW,EAAE,qBAAqB,CAAC,WAAW;oBAC9C,aAAa,EAAE,qBAAqB,CAAC,aAAa;iBACrD;gBACD,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,KAAK;gBAChB,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,CAAC;aACZ,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAElD,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC5B,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE;gBACxB,IAAI,EAAE;oBACF,IAAI,EAAE,KAAK;oBACX,WAAW;oBACX,oBAAoB;oBACpB,WAAW,EAAE,qBAAqB,CAAC,WAAW;oBAC9C,oDAAoD;iBACvD;gBACD,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,KAAK;gBAChB,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,CAAC;aACZ,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAElD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAEjE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAEzC,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACrC,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;gBACtC,YAAY,EAAE,qBAAqB,CAAC,YAAY;gBAChD,WAAW,EAAE,qBAAqB,CAAC,WAAW;gBAC9C,aAAa,EAAE,qBAAqB,CAAC,aAAa,GAAG,GAAG;gBACxD,GAAG,EAAE,GAAG;gBACR,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;gBAClC,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,gBAAgB,EAAE;gBAChD,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,CAAC;gBACT,GAAG,EAAE,GAAG;gBACR,YAAY,EAAE,qBAAqB,CAAC,gBAAgB;gBACpD,WAAW,EAAE,qBAAqB,CAAC,eAAe;gBAClD,aAAa,EAAE,qBAAqB,CAAC,iBAAiB;gBACtD,WAAW,EAAE,GAAG;gBAChB,SAAS,EAAE,SAAS;aACvB,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAEzE,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG;gBAC/B,KAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAI,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACvE,CAAC,CAAC;QACN,CAAC;QAED,0CAAU,GAAV,UAAW,SAAoB;YAA/B,iBAwCC;YAvCG,IAAI,CAAC,IAAI,CAAC,OAAO;gBACb,OAAO;YAEX,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;YAEpC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,IAAI;gBAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;oBACrD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC;YACrC,SAAS,CAAC,sBAAsB,GAAG,IAAI,CAAC;YAExC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YAE9D,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,CAAC;gBACzB,CAAC,CAAC,SAAS,EAAE,CAAC;gBACd,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAEjB,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC;YACxC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAE1B,mBAAmB;QACvB,CAAC;QAED,4CAAY,GAAZ;YACI,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa;gBAC/B,OAAO;YAEX,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACnB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;YAEjB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACxD,aAAa,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACtD,CAAC;QA5RM,iCAAW,GAAW,cAAc,CAAC;QACrC,kCAAY,GAAW,CAAC,CAAC;QACzB,mCAAa,GAAW,GAAG,CAAC;QAE5B,qCAAe,GAAW,gBAAgB,CAAC;QAC3C,sCAAgB,GAAW,CAAC,CAAC;QAC7B,uCAAiB,GAAW,GAAG,CAAC;QAuR3C,4BAAC;KApUD,AAoUC,CApU0C,WAAA,YAAY,GAoUtD;IApUY,gCAAqB,wBAoUjC,CAAA;IAED;QAAsC,oCAAY;QAAlD;;QAyBA,CAAC;QAxBG,0CAAe,GAAf,UAAgB,SAAoB,EAAE,IAAyB;YAC3D,IAAI,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC/C,IAAI,IAAI,IAAI,KAAK,EAAE;gBACf,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE;oBAE9B,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM;wBACrB,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,QAAqB,EAAxB,CAAwB,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC,CAAC,CAAC;oBAErG,SAAS,CAAC,SAAS,CAAC,YAAY,GAAG,KAAK,CAAC;oBAEzC,SAAS,CAAC,iBAAiB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;iBAC1F;aACJ;YACD,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACvC,CAAC;QAED,mCAAQ,GAAR,UAAS,SAAoB;YACzB,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QACxF,CAAC;QAED,qCAAU,GAAV,UAAW,SAAoB;YAC3B,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;QACL,uBAAC;IAAD,CAzBA,AAyBC,CAzBqC,WAAA,YAAY,GAyBjD;IAzBY,2BAAgB,mBAyB5B,CAAA;IAED;QAAyC,uCAAY;QAArD;YAAA,qEAsNC;YArNG,WAAK,GAAG,EAAE,CAAC;YACX,WAAK,GAAG,CAAC,CAAC;YAEV,cAAQ,GAAkC,IAAI,CAAC;YAC/C,cAAQ,GAAyB,IAAI,CAAC;YACtC,sBAAgB,GAAyB,IAAI,CAAC;YAE9C,mBAAa,GAAW,IAAI,CAAC;YAC7B,oBAAc,GAAW,IAAI,CAAC;;QA6MlC,CAAC;QA3MG,sCAAQ,GAAR,UAAS,SAAoB,EAAE,QAAsB,EAAE,OAAe;YAClE,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,EAC/B,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;YAEtC,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,mBAAmB,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAC3E,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBACnC,OAAO;aACV;YAED,SAAS,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,cAAc,GAAG,SAAS,CAAC,mBAAmB,GAAG,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC;YAE7F,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAE3B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAE/B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;YAEpD,IAAI,YAAY,GAAgC;gBAC5C,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,YAAY,EAAE,KAAK,CAAC,yBAAyB,CAAC,YAAY,GAAG,CAAC;gBAC9D,WAAW,EAAE,KAAK,CAAC,yBAAyB,CAAC,WAAW;gBACxD,aAAa,EAAE,GAAG;aACrB,CAAC;YAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAEvD,YAAY,CAAC,WAAW,GAAG,gBAAgB,CAAC;YAC5C,YAAY,CAAC,aAAa,GAAG,GAAG,CAAC;YACjC,YAAY,CAAC,YAAY,IAAI,CAAC,CAAC;YAE/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAE/D,cAAc,CAAC,KAAK,GAAG,IAAI,WAAA,MAAM,EAAE,CAAC;YACpC,cAAc,CAAC,GAAG,GAAG,IAAI,WAAA,MAAM,EAAE,CAAC;QACtC,CAAC;QAED,wCAAU,GAAV,UAAW,SAAoB;YAC3B,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;YAEpC,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAErC,SAAS,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAE1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YAErB,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;aACxB;YAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;aAChC;YAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAE3B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,2CAAa,GAAb,UAAc,CAAU,EAAE,SAAoB;YAC1C,OAAO,eAAe,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAC5E,CAAC;QAED,qCAAO,GAAP,UAAQ,EAA0B,EAAE,SAAoB;YACpD,IAAI,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;gBAE3E,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,EAC/B,cAAc,GAAG,SAAS,CAAC,mBAA2C,EACtE,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EACxC,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAvB,CAAuB,CAAC,CAAC;gBAE5E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;gBAEzC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAqB,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,UAAU,EAAE,EAAf,CAAe,CAAC,CAAC,CAAC;gBAC9E,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAElC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAE3B,IAAI,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAc,CAAC;gBAEzE,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,IAAI,YAAY,EAAE;oBACd,IAAI,YAAY,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB,IAAI,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE;wBAC5G,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BAC1D,IAAI,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;4BAErC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gCACpC,YAAY,GAAG,KAAK,CAAC;gCACrB,MAAM;6BACT;yBACJ;qBACJ;oBAED,IAAI,YAAY,CAAC,WAAW,IAAI,YAAY,CAAC,KAAK,EAAE;wBAChD,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC;wBACnD,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;qBAC9B;iBACJ;gBAED,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;gBAEtF,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;aAEvD;QACL,CAAC;QAED,yCAAW,GAAX,UAAY,EAA0B,EAAE,SAAoB;YACxD,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,KAAK,GAAG,KAAK,CAAC;YAElB,IAAI,QAAQ,IAAI,EAAE,CAAC,MAAM,EAAE;gBACvB,IAAI,MAAM,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EACvC,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;gBAE3B,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBACzC,IAAI,CAAC,EAAE;oBAEH,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC;oBAEpB,KAAK,GAAG,IAAI,CAAC;oBAEb,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,CAAC,EAAE,EAAE;wBACrD,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,WAAA,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAA5B,CAA4B,CAAC,CAAC;wBAC/F,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;4BACtD,KAAK,GAAG,KAAK,CAAC;qBACrB;oBAED,IAAI,KAAK,EAAE;wBACP,IAAI,IAAI,GAAG,CAAC,WAAA,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,WAAA,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;wBAEpF,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC;wBAE1B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBAC5B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;wBAE/B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;qBAC5D;iBACJ;aACJ;YAED,IAAI,CAAC,KAAK,EAAE;gBACR,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAChC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;aACvD;QACL,CAAC;QAED,4CAAc,GAAd,UAAe,KAAa,EAAE,GAAW,EAAE,SAAoB;YAC3D,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAE7C,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE,EAAE;gBACnC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;gBACzD,2KAA2K;aAC9K;YAED,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,UAAU,EAAE,EAAE;gBACnD,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;gBACjE,2LAA2L;aAC9L;YAED,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAEpB,SAAS,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAE/B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QAEO,4CAAc,GAAtB,UAAuB,SAAoB;YAA3C,iBAmBC;YAlBG,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,EAC/B,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,EACjC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;YAE3B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YAEnB,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;gBACd,IAAI,IAAI,GAAG,IAAI,CAAC,QAAqB,CAAC;gBAEtC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBAC3B,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;wBAC7B,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;qBACrC;iBACJ;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC9B,CAAC;QACL,0BAAC;IAAD,CAtNA,AAsNC,CAtNwC,WAAA,YAAY,GAsNpD;IAtNY,8BAAmB,sBAsN/B,CAAA;IAED;QAA+B,6BAAY;QACvC,mBAAY,SAAoB,EAAE,IAAY;YAA9C,YACI,kBAAM,SAAS,EAAE,IAAI,CAAC,SAGzB;YAED,WAAK,GAAG,EAAE,CAAC;YACX,WAAK,GAAG,CAAC,CAAC;YAEV,aAAO,GAAG;gBACN,IAAI,WAAA,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;gBACjC,IAAI,WAAA,eAAe,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;aACxC,CAAC;YAEF,YAAM,GAAc,IAAI,CAAC;YACzB,wBAAkB,GAAuB,IAAI,CAAC;YACtC,eAAS,GAA2B,IAAI,CAAC;YACzC,gBAAU,GAAuB,IAAI,CAAC;YAC9C,aAAO,GAAY,KAAK,CAAC;YACzB,eAAS,GAAY,KAAK,CAAC;YAC3B,UAAI,GAAW,CAAC,CAAC;YAlBb,KAAI,CAAC,MAAM,GAAG,WAAW,CAAC;YAC1B,KAAI,CAAC,SAAS,GAAG,KAAK,CAAC;;QAC3B,CAAC;QAkBD,4BAAQ,GAAR,UAAS,SAAoB,EAAE,QAAsB,EAAE,OAAe;YAClE,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,EAC/B,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,EACxC,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YAElE,IAAI,CAAC,UAAU,GAAG,OAAO,GAAG,OAAO,IAAI,MAAM,CAAC;YAE9C,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;gBACzC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBACnC,OAAO;aACV;YAED,IAAI,OAAO,KAAK,UAAU,EAAE;gBACxB,IAAI,SAAS,CAAC,mBAAmB,IAAI,IAAI,EAAE;oBACvC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;oBACnC,OAAO;iBACV;gBACD,SAAS,CAAC,mBAAmB,GAAG,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC;aAC1E;YAED,SAAS,CAAC,cAAc,EAAE,CAAC;YAE3B,aAAa,CAAC,OAAO,CAAC,UAAA,IAAI;gBACrB,IAAI,CAAC,QAAsB,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAA,EAAE;oBACvD,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC;gBACrB,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,iEAAiE;YAEjE,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,QAAqB,CAAC;YAErD,IAAI,CAAC,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;YAEvD,IAAI,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,WAAA,kBAAkB,CAAC,UAAU,CAAC,CAAC;YAC7D,IAAI,IAAI,CAAC,SAAS;gBACd,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC;YAEvC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;oBAChD,GAAG,EAAE,SAAS,CAAC,GAAG;oBAClB,SAAS,EAAE,KAAK;oBAChB,QAAQ,EAAE,KAAK;oBACf,SAAS,EAAE,KAAK;oBAChB,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,CAAC;oBACT,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;iBACzC,EAAE,UAAU,CAAgC,CAAC,CAAC,CAAC;YAEhD,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAEd,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBACrC,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE;gBACxB,IAAI,EAAE;oBACF,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;oBACnC,KAAK,EAAE,UAAU,CAAC,YAAY,GAAG,CAAC;oBAClC,SAAS,EAAE,UAAU,CAAC,WAAW;oBACjC,WAAW,EAAE,UAAU,CAAC,aAAa;oBACrC,aAAa,EAAE,CAAC;iBACnB;gBACD,MAAM,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAE/B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,8BAAU,GAAV,UAAW,SAAoB;YAC3B,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,EAC/B,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,EAChC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YAE1C,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAErC,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;gBACb,IAAI,CAAC,QAAsB,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAA,EAAE;oBACvD,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC;gBACtB,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;aAC1B;YACD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBACzC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAA,QAAQ;oBAC3B,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACzB;YAED,IAAI,IAAI,CAAC,kBAAkB;gBACvB,IAAI,CAAC,kBAAkB,CAAC,SAAS;gBACjC,IAAI,CAAC,kBAAkB,CAAC,OAAO;gBAC/B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;gBAC7C,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;aACpC;YAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAE/B,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAEhC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,+BAAW,GAAX,UAAY,EAA0B,EAAE,SAAoB;YAExD,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,EAC5B,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAC5B,EAAU,CAAC;YAEf,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE;gBAChC,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAEhH,IAAI,KAAK,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;gBAE3C,EAAE,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAErG,IAAI,CAAC,EAAE,EAAE;oBACL,EAAE,GAAG,KAAK,CAAC;oBACX,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;iBACxB;;oBACG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBAExB,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE;oBACjB,IAAI,QAAQ,CAAC,UAAU,EAAE;wBACrB,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;iBACpD;;oBAEG,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;aAExC;iBAAM;gBACH,IAAI,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAE7F,IAAI,KAAK,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;gBAE3C,EAAE,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAErG,IAAI,CAAC,EAAE,EAAE;oBACL,EAAE,GAAG,KAAK,CAAC;oBACX,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;iBACxB;;oBACG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBAExB,IAAI,QAAQ,CAAC,UAAU,EAAE,EAAE;oBACvB,IAAI,YAAY,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACtC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;iBAC1C;aACJ;YAED,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;YAGxC,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,CAAC,UAAU,EAAE;gBACxC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5C,CAAC;QAED,2BAAO,GAAP,UAAQ,EAA0B,EAAE,SAAoB;YAAxD,iBAsEC;YArEG,IAAI,IAAI,CAAC,MAAM,EAAE;gBAEb,IAAI,KAAK,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,EACtC,MAAM,SAAQ,EACd,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAEjC,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE;oBAChC,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC5G,IAAI,IAAE,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACzG,IAAI,CAAC,IAAE,EAAE;wBACL,IAAE,GAAG,KAAK,CAAC;wBACX,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;qBACxB;;wBACG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBAExB,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE;wBACjB,IAAI,QAAQ,CAAC,UAAU,EAAE,EAAE;4BACvB,IAAI,YAAY,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;4BACtC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,IAAE,CAAC,UAAU,EAAE,CAAC,CAAC;4BACvC,IAAI,WAAA,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAE,CAAC,GAAG,KAAK;gCACjE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;yBACrB;6BAAM;4BACH,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;4BAC1B,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAE,CAAC,UAAU,EAAE,EAAE,IAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;yBACxD;qBACJ;yBAAM;wBACH,IAAI,CAAC,YAAY,CAAC,IAAE,EAAE,SAAS,CAAC,CAAC;wBAEjC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAA,EAAE;4BACrB,IAAI,EAAE,GAAG,IAAI,WAAA,kBAAkB,CAAC,SAAS,EAAE,KAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAA9C,CAA8C,CAAC,EAAE,CAAC,CAAC,KAAI,CAAC,SAAS,CAAC,CAAC;wBAC9K,CAAC,CAAC,CAAC;wBAEH,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;wBAErB,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;qBACpD;oBAED,OAAO;iBACV;gBAED,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,OAAO,EAAV,CAAU,CAAC;oBACtD,OAAO;gBAEX,IAAI,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACjD,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,WAAA,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAEzF,IAAI,EAAE,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACzG,IAAI,CAAC,EAAE,EAAE;oBACL,EAAE,GAAG,KAAK,CAAC;oBACX,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;iBACxB;;oBACG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBAExB,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,IAAW,CAAC,EAAE;oBAEtG,IAAI,CAAC,kBAAkB;wBACnB,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,WAAA,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAE1I,kBAAkB,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;oBAE5D,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;wBACtB,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAE9B,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;oBAErD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;iBACxB;aACJ;QAEL,CAAC;QAED,6BAAS,GAAT,UAAU,OAAe,EAAE,SAAoB;YAC3C,IAAI,OAAO,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG;gBAClC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;iBAC5B,IAAI,OAAO,KAAK,GAAG,EAAE,MAAM;aAChC;gBACI,IAAI,mBAAmB,GAAG,SAAS,CAAC,SAAS,CAAC,mBAA0C,CAAC;gBACzF,IAAI,mBAAmB,EAAE;oBACrB,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;iBACtC;aACJ;iBACI,IAAI,OAAO,KAAK,GAAG,EAAE,UAAU;aACpC;gBACI,IAAI,mBAAmB,GAAG,SAAS,CAAC,SAAS,CAAC,mBAA0C,CAAC;gBACzF,IAAI,mBAAmB,EAAE;oBACrB,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;iBACtC;aACJ;QACL,CAAC;QAED,gCAAY,GAAZ,UAAa,EAAU,EAAE,SAAoB;YACzC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;gBAClF,OAAO;YAEX,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,EACvB,YAAY,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YAEtC,IAAI,CAAC,EAAE;gBACH,EAAE,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjF,IAAI,mBAAmB,GAAG,SAAS,CAAC,SAAS,CAAC,mBAA0C,EACpF,EAAE,GAAG,WAAA,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EACpD,EAAE,GAAG,WAAA,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EACpD,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,EACnB,KAAK,GAAG,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EACvC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAErB,IAAI,SAAS,CAAC,SAAS,EAAE;gBACrB,IAAI,CAAC,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC,cAAc,EAAE,CAAC;gBAC7C,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACzC;YAED,IAAI,SAAS,CAAC,MAAM,KAAK,KAAK,EAAE;gBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC9C,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC1B,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;iBACvB;gBAED,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACnC,SAAS,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;wBAC7C,GAAG,EAAE,SAAS,CAAC,GAAG;wBAClB,SAAS,EAAE,KAAK;wBAChB,QAAQ,EAAE,KAAK;wBACf,SAAS,EAAE,KAAK;wBAChB,OAAO,EAAE,IAAI;wBACb,MAAM,EAAE,CAAC;wBACT,IAAI,EAAE,CAAC,WAAA,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,WAAA,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;qBACrE,EAAE,WAAA,kBAAkB,CAAC,UAAU,CAAgC,CAAC,CAAC,CAAC;iBACtE;aACJ;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EACT,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAErC,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBAEtC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,WAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/C,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,WAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC3D;QACL,CAAC;QACL,gBAAC;IAAD,CA7UA,AA6UC,CA7U8B,WAAA,YAAY,GA6U1C;IA7UY,oBAAS,YA6UrB,CAAA;IAED;QAA6B,2BAAS;QAKlC,iBAAY,SAAoB,EAAE,IAAY;YAA9C,YACI,kBAAM,SAAS,EAAE,IAAI,CAAC,SAEzB;YAND,WAAK,GAAG,EAAE,CAAC;YACX,WAAK,GAAG,CAAC,CAAC;YAIN,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC;;QAC1B,CAAC;QACL,cAAC;IAAD,CATA,AASC,CAT4B,SAAS,GASrC;IATY,kBAAO,UASnB,CAAA;IAED;QAAoC,kCAAY;QAAhD;YAAA,qEAsBC;YApBG,WAAK,GAAG,CAAC,CAAC;YACV,WAAK,GAAG,CAAC,CAAC;;QAmBd,CAAC;QAjBG,iCAAQ,GAAR,UAAS,SAAoB,EAAE,QAAsB,EAAE,OAAe;YAClE,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;QAExC,CAAC;QAED,mCAAU,GAAV,UAAW,SAAoB;YAC3B,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;QAExC,CAAC;QAED,gCAAO,GAAP,UAAQ,EAA0B,EAAE,SAAoB;YACpD,IAAI,KAAK,GAAG,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,YAAY,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,YAAY,UAAU,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,MAAM,CAAC,YAAY,EAAvJ,CAAuJ,CAAC,CAAC;YAC5N,IAAI,KAAK,CAAC,MAAM,EAAE;gBACd,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAqB,CAAC;gBACxC,EAAE,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC;aAC9B;QACL,CAAC;QACL,qBAAC;IAAD,CAtBA,AAsBC,CAtBmC,WAAA,YAAY,GAsB/C;IAtBY,yBAAc,iBAsB1B,CAAA;IAED;QAAgC,8BAAY;QAA5C;YAAA,qEAkBC;YAjBG,WAAK,GAAG,EAAE,CAAC;YACX,WAAK,GAAG,CAAC,CAAC;;QAgBd,CAAC;QAdG,6BAAQ,GAAR,UAAS,SAAoB,EAAE,QAAsB,EAAE,OAAe;YAClE,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;YACpC,UAAU,CAAC,aAAa,CAAC,iBAAiB,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAExG,IAAI,SAAS,CAAC,mBAAmB,IAAI,IAAI,EAAE;gBACvC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBACnC,OAAO;aACV;QACL,CAAC;QAED,+BAAU,GAAV,UAAW,SAAoB;YAC3B,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;YACpC,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC;QACzC,CAAC;QACL,iBAAC;IAAD,CAlBA,AAkBC,CAlB+B,WAAA,YAAY,GAkB3C;IAlBY,qBAAU,aAkBtB,CAAA;IAED;QAAiC,+BAAY;QAA7C;YAAA,qEA2IC;YA1IG,WAAK,GAAG,CAAC,CAAC;YACV,WAAK,GAAG,CAAC,CAAC;YAEV,mBAAa,GAAwB,IAAI,CAAC;YAE1C,qBAAe,GAA0B,EAAE,CAAC;YAE5C,iBAAW,GAA+B;gBACtC,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,SAAS;gBACtB,aAAa,EAAE,GAAG;aACrB,CAAA;;QA0HL,CAAC;QAxHG,8BAAQ,GAAR,UAAS,SAAoB,EAAE,QAAsB,EAAE,OAAe;YAClE,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAE9B,IAAI,aAAa,GAA+B;gBAC5C,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,GAAG;gBACjB,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,SAAS;gBACtB,aAAa,EAAE,GAAG;gBAClB,KAAK,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAClI,CAAC;YAEF,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAE5D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QAChE,CAAC;QAED,gCAAU,GAAV,UAAW,SAAoB;YAC3B,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;aAC7B;YACD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;gBACrD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,UAAA,IAAI;oBAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC,CAAC,CAAC;aACN;YACD,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC9B,CAAC;QAED,iCAAW,GAAX,UAAY,EAA0B,EAAE,SAAoB;YACxD,IAAI,aAAa,CAAC,SAAS,EAAE;gBACzB,OAAO;YAEX,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAChG,CAAC;QAED,6BAAO,GAAP,UAAQ,GAAW,EAAE,GAAW;YAC5B,IAAI,GAAG,GAAG,2DAA2D,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,+BAA+B,CAAC;YAE1H,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE;gBAC3B,CAAC,CAAC,8FAA8F,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC1H,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,EAAE,cAAc,CAAC,CAAC;aAC7F;iBAAM;gBACH,CAAC,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC;aAC7B;YAED,IAAI,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;YAEtB,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;YAChB,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;YAEjB,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAE1C,aAAa,CAAC,aAAa,EAAE,CAAC;YAE9B,GAAG,CAAC,MAAM,GAAG;gBAET,aAAa,CAAC,gBAAgB,EAAE,CAAC;gBAEjC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;gBAElB,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,CAAC,CAAC;YAEF,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;YAEd,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,6BAAO,GAAP,UAAQ,EAA0B,EAAE,SAAoB;YAAxD,iBA4BC;YA3BG,IAAI,aAAa,CAAC,SAAS,EAAE;gBACzB,OAAO;YAEX,IAAI,YAAY,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YAElD,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC;gBAC3D,OAAO;YAEX,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YAE1E,YAAY,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAA,GAAG;gBAChJ,IAAI,eAAe,GAAG,KAAI,CAAC,eAAe,CAAC;gBAC3C,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,EAAE;oBAC3C,eAAe,CAAC,OAAO,CAAC,UAAA,IAAI;wBACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtB,CAAC,CAAC,CAAC;iBACN;gBACD,eAAe,GAAG,EAAE,CAAC;gBACrB,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE;oBACnB,IAAI,WAAW,GAAG,KAAI,CAAC,WAAW,CAAC;oBAEnC,GAAG,CAAC,OAAO,CAAC,UAAA,EAAE;wBACV,eAAe,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,EAAjD,CAAiD,CAAC,EAAE,EAAE,WAAW,CAA+B,CAAC,CAAC,CAAC;oBACvM,CAAC,CAAC,CAAC;iBACN;YACL,CAAC,CAAC,CAAC;QAEP,CAAC;QAED,mCAAa,GAAb,UAAc,IAA8C,EAAE,SAAoB,EAAE,MAAe;YAE/F,IAAI,CAAC,MAAM;gBACP,MAAM,GAAG,WAAA,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;YAE5D,IAAI,SAAS,GAAG,WAAA,YAAY,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAErE,IAAI,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YAEhC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAE3C,CAAC;QACL,kBAAC;IAAD,CA3IA,AA2IC,CA3IgC,WAAA,YAAY,GA2I5C;IA3IY,sBAAW,cA2IvB,CAAA;AACL,CAAC,EAr7EM,UAAU,KAAV,UAAU,QAq7EhB","file":"mapDrawer.js","sourcesContent":["module MapDrawing.Ajax {\r\n\r\n\tconst cacheKeyMapDrawerData = 'MapDrawerData';\r\n\r\n\tvar initialized = false;\r\n\r\n\texport function init() {\r\n\t\tif (initialized)\r\n\t\t\treturn;\r\n\t\tinitialized = true;\r\n\r\n\t\tvar bindings: { [url: string]: (data?: any) => any } = {\r\n\t\t\t\"/Anordnung3DService.asmx/GetOsmBuildingsBounds\": null,\r\n\t\t\t\"/WebServices/MapServices.asmx/DeleteImportedImages\": null,\r\n\t\t\t\"/WebServices/MapServices.asmx/EditImportedImage\": null,\r\n\t\t\t\"/WebServices/MapServices.asmx/GetDataForMapDrawer\": GetDataForMapDrawer,\r\n\t\t\t\"/WebServices/MapServices.asmx/GetImportedImagesForMapDrawer\": null,\r\n\t\t\t\"/WebServices/MapServices.asmx/SaveMapDrawerData\": SaveMapDrawerData,\r\n\t\t\t\"/WebServices/MapServices.asmx/TestMapping\": null\r\n\t\t};\r\n\r\n\t\tAManager.RegisterAjaxBindings(bindings);\r\n\t}\r\n\r\n\texport async function GetDataForMapDrawer() {\r\n\t\tlet defaultData: SolarProTool.MapDrawerData = {\r\n\t\t\tmapTypeId: null,\r\n\t\t\tShapes: [],\r\n\t\t\tImportedImages: [],\r\n\t\t\tImageId: null,\r\n\t\t\tImageWidth: 0,\r\n\t\t\tImageHeight: 0,\r\n\t\t\tImageLatitude: 0,\r\n\t\t\tImageLongitude: 0,\r\n\t\t\tImageOrientation: 0,\r\n\t\t\tGhostBorders: [],\r\n\t\t\tMapsImageData: null,\r\n\t\t\tMapsImageMinLatitude: 0,\r\n\t\t\tMapsImageMinLongitude: 0,\r\n\t\t\tMapsImageMaxLatitude: 0,\r\n\t\t\tMapsImageMaxLongitude: 0\r\n\t\t};\r\n\r\n\t\tvar mapDrawerData = await localforage.getItem(cacheKeyMapDrawerData);\r\n\r\n\t\treturn mapDrawerData || defaultData;\r\n\t};\r\n\r\n\texport async function SaveMapDrawerData(d: { data: SolarProTool.MapDrawerData }) {\r\n\t\tawait localforage.setItem(cacheKeyMapDrawerData, d.data);\r\n\t}\r\n}","module MapDrawing {\r\n\r\n export enum ElementPositionType {\r\n None = 0, // 0000\r\n Top = 1 << 0, // 0001 -- the bitshift is unnecessary, but done for consistency\r\n Right = 1 << 1, // 0010\r\n Bottom = 1 << 2, // 0100\r\n Left = 1 << 3, // 1000\r\n }\r\n\r\n export interface IShapeStyle { //SolarProTool.WebServices.ProjectServices.ShapeStyle\r\n fillColor?: string; // System.String\r\n fillOpacity?: number; // System.Double?\r\n strokeColor?: string; // System.String\r\n strokeOpacity?: number; // System.Double?\r\n strokeWeight?: number; // System.Double?\r\n zIndex?: number;\r\n clickable?: boolean;\r\n editable?: boolean;\r\n draggable?: boolean;\r\n visible?: boolean;\r\n }\r\n\r\n export interface IPolygonLayer { //SolarProTool.WebServices.ProjectServices.PolygonLayer\r\n count?: number; // System.Int32\r\n maxCount?: number; // System.Int32?\r\n typeName: string; // System.String\r\n layerName: string; // System.String\r\n locked?: boolean; // System.Boolean\r\n shapeSelectedHoveredStyle?: IShapeStyle; // SolarProTool.WebServices.ProjectServices.ShapeStyle\r\n shapeSelectedStyle?: IShapeStyle; // SolarProTool.WebServices.ProjectServices.ShapeStyle\r\n shapeHoveredStyle?: IShapeStyle; // SolarProTool.WebServices.ProjectServices.ShapeStyle\r\n shapeStyle?: IShapeStyle; // SolarProTool.WebServices.ProjectServices.ShapeStyle\r\n zIndex?: number;\r\n parent?: IPolygonLayer;\r\n child?: IPolygonLayer;\r\n controlledByParent?: boolean;\r\n isPassive?: boolean;\r\n }\r\n\r\n export interface ISelectableItem {\r\n id: string;\r\n typeName: string;\r\n locked: boolean;\r\n frozen: boolean;\r\n selected: boolean;\r\n hovered: boolean;\r\n _isDisposed: boolean;\r\n pos: Point2D;\r\n rotation: number;\r\n dispose();\r\n remove(mapDrawer: MapDrawer);\r\n moveByLatLng(latLng: LatLng);\r\n moveByOffset(offset: Point2D);\r\n updateStyle();\r\n getMap(): google.maps.Map;\r\n getSegments(): Segment2D[];\r\n getPoints(): Point2D[][];\r\n update(): void;\r\n }\r\n\r\n export interface IImportedImageFileInfo {\r\n ProjectId: string;\r\n RoofId: string;\r\n Id: string;\r\n Latitude: number;\r\n Longitude: number;\r\n X: number;\r\n Y: number;\r\n RealWidth: number;\r\n RealHeight: number;\r\n Orientation: number;\r\n }\r\n\r\n export enum EditorModeEnum {\r\n Building = 0, //roof\r\n Area = 1, //carport area\r\n FreeArea = 2 //freearea\r\n }\r\n\r\n //SPTEnums/RoofEnum.cs\r\n export enum CadImportErrorCodeEnum {\r\n Success = 0,\r\n FileToBig,\r\n InvalidFile,\r\n InvalidFileName,\r\n InvalidFileExtension,\r\n InvalidImage,\r\n FileIsEmpty\r\n }\r\n\r\n //SPTEnums/SeparationPolylinesTypeEnum.cs\r\n export enum SeparationPolylinesTypeEnum {\r\n Ridge = 0,\r\n Eave\r\n }\r\n\r\n export interface IImportCadResult {\r\n ErrorCode: CadImportErrorCodeEnum;\r\n IsCADImport: boolean;\r\n CadLayers: string[];\r\n CadLayerSelection: string[];\r\n ImageWidth: number;\r\n ImageHeight: number;\r\n RealWidth: number;\r\n RealHeight: number;\r\n ImageInfo: IImportedImageFileInfo;\r\n }\r\n\r\n export interface ISubToolIcon {\r\n selected?: boolean;\r\n visible?: boolean;\r\n name: string;\r\n iconsetOffset?: string;\r\n iconX?: number;\r\n iconY?: number;\r\n }\r\n\r\n export class BaseSubToolIcon implements ISubToolIcon {\r\n constructor(name: string, iconX?: number, iconY?: number) {\r\n this.name = name;\r\n this.iconX = iconX || 0;\r\n this.iconY = iconY || 0;\r\n\r\n ko.track(this);\r\n\r\n ko.defineProperty(this, \"iconsetOffset\", () => {\r\n return `-${this.iconX * 30}px -${this.iconY * 30}px`;\r\n });\r\n }\r\n iconX: number;\r\n iconY: number;\r\n name: string;\r\n iconsetOffset: string;\r\n visible = true;\r\n }\r\n\r\n export class BaseSubToolIconNew implements ISubToolIcon {\r\n constructor(name: string, className: string, pathCount: number) {\r\n this.name = name;\r\n this.className = className;\r\n this.pathCount = pathCount;\r\n\r\n ko.track(this);\r\n }\r\n className: string;\r\n name: string;\r\n pathCount: number;\r\n visible = true;\r\n }\r\n\r\n export class BaseToolIcon {\r\n constructor(mapDrawer: MapDrawer, name: string) {\r\n ko.track(this);\r\n\r\n this.name = name;\r\n\r\n this.iconX = this.iconX || 0;\r\n this.iconY = this.iconY || 0;\r\n\r\n Object.defineProperty(this, \"iconsetOffset\",\r\n {\r\n enumerable: true,\r\n configurable: true,\r\n get: () => {\r\n return `-${this.iconX * 30}px -${this.iconY * 30}px`;\r\n }\r\n });\r\n }\r\n\r\n subMenu: ISubToolIcon[] = [];\r\n curSubmenu: string = null;\r\n iconX: number;\r\n iconY: number;\r\n Cursor: string;\r\n name: string;\r\n iconsetOffset: string;\r\n visible = true;\r\n disabled = false;\r\n isDragging = false;\r\n\r\n getSubTool(name: string): ISubToolIcon {\r\n if (!name)\r\n return null;\r\n var submenu = this.subMenu;\r\n for (var i = 0, j = submenu.length; i < j; i++) {\r\n var m = submenu[i];\r\n if (m.name === name)\r\n return m;\r\n }\r\n return null;\r\n }\r\n\r\n select(mapDrawer: MapDrawer, prevTool: BaseToolIcon, subMenu: string) {\r\n this.curSubmenu = subMenu || null;\r\n this.onSelect(mapDrawer, prevTool, subMenu);\r\n }\r\n\r\n deselect(mapDrawer: MapDrawer) {\r\n this.onDeselect(mapDrawer);\r\n }\r\n\r\n onSelect(mapDrawer: MapDrawer, prevTool: BaseToolIcon, subMenu: string) {\r\n\r\n }\r\n\r\n onDeselect(mapDrawer: MapDrawer) {\r\n\r\n }\r\n\r\n onClick(ev: google.maps.MouseEvent, mapDrawer: MapDrawer) { } // mousedown\r\n onMouseUp(ev: google.maps.MouseEvent, mapDrawer: MapDrawer) { }\r\n\r\n onMousemove(ev: google.maps.MouseEvent, mapDrawer: MapDrawer) { }\r\n onKeyDown(keyCode: number, mapDrawer: MapDrawer) { }\r\n onKeyUp(keyCode: number, mapDrawer: MapDrawer) { }\r\n onCommandText(mapDrawer: MapDrawer, cmd: string) { }\r\n }\r\n\r\n export class PolyData {\r\n constructor(id: string, latLngs: LatLng[][], typeName: string, title: string, height: number) {\r\n this.latLngs = latLngs;\r\n this.typeName = typeName;\r\n this.title = title;\r\n this.height = height;\r\n this.id = id || spt.Utils.GenerateGuid();\r\n }\r\n\r\n static fromShapeData(shapeData: ShapeData, id?: string): PolyData {\r\n return new PolyData(id || shapeData.id, shapeData.latLngs.map(lls => lls.slice()), shapeData.typeName, shapeData.title, shapeData.height);\r\n }\r\n\r\n latLngs: LatLng[][];\r\n typeName: string;\r\n title: string;\r\n height: number;\r\n id: string;\r\n\r\n }\r\n\r\n export class ShapeData implements IGmUserData {\r\n constructor(mapDrawer: MapDrawer, poly: IGoogleMapsPolygon, id?: string, title?: string, typeName?: string) {\r\n id = id || spt.Utils.GenerateGuid();\r\n this.title = title || \"Form\";\r\n this.typeName = typeName || null;\r\n this.height = 0;\r\n this._slope = 0;\r\n this.poly = poly;\r\n this.mapDrawer = mapDrawer;\r\n\r\n if (typeName === window.BuildingTypeName) {\r\n if ($(\"#Roof_Angle\").length) {\r\n this._slope = spt.Utils.GetFloatFromInput(\"#Roof_Angle\",\r\n {\r\n min: 0,\r\n max: 89,\r\n precision: 2,\r\n notImperial: true,\r\n isFeet: false\r\n }) || 0;\r\n }\r\n\r\n if ($(\"#Roof_RoofHeight\").length) {\r\n this.height = spt.Utils.GetFloatFromInput(\"#Roof_RoofHeight\",\r\n {\r\n min: 0,\r\n max: 1000000,\r\n applyArithmetic: false,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n }) || 10000;\r\n }\r\n }\r\n\r\n ko.track(this);\r\n\r\n poly.userData = this;\r\n\r\n this.mType = 'ShapeData';\r\n this.subsciptions = [];\r\n\r\n mapDrawer.viewModel.setInstance(id, this);\r\n Object.defineProperty(this, \"id\",\r\n {\r\n configurable: true,\r\n enumerable: true,\r\n get: () => {\r\n return id;\r\n },\r\n set: (v) => {\r\n if (id && mapDrawer.viewModel.hasInstance(id))\r\n mapDrawer.viewModel.removeInstance(id);\r\n id = v;\r\n if (id && !this._isDisposed)\r\n mapDrawer.viewModel.setInstance(id, this);\r\n }\r\n });\r\n\r\n ko.defineProperty(this, \"frozen\",\r\n {\r\n get: () => {\r\n return this._frozen || this.controlledByParent;\r\n },\r\n set: (v: boolean) => {\r\n this._frozen = v;\r\n }\r\n });\r\n\r\n ko.defineProperty(this, \"locked\",\r\n {\r\n get: () => {\r\n return this._locked || (this.controlledByParent && this.parent && this.parent.locked);\r\n },\r\n set: (v: boolean) => {\r\n this._locked = v;\r\n }\r\n });\r\n\r\n ko.defineProperty(this, \"latLngs\",\r\n {\r\n get: () => {\r\n var poly = this.poly;\r\n if (!poly)\r\n return [];\r\n var paths = poly.getPaths();\r\n if (paths)\r\n return paths.getArray().map(path => path.getArray().map((ll: google.maps.LatLng) => LatLng.FromGMLatLng(ll)));\r\n return [];\r\n },\r\n set: (latLngs: LatLng[][]) => {\r\n if (this._isDisposed)\r\n return;\r\n\r\n var poly = this.poly;\r\n\r\n if (poly && latLngs)\r\n poly.setPaths(latLngs.map(lls => lls.map(ll => ll.ToGMLatLng())));\r\n }\r\n });\r\n\r\n ko.defineProperty(this, \"points\", () => {\r\n if (!this.poly || !this.mapDrawer)\r\n return [];\r\n var viewModel = this.mapDrawer.viewModel,\r\n axis = viewModel.referenceAxis,\r\n latLngs = this.latLngs,\r\n refLatLng = viewModel.referenceLatLng,\r\n height = this.height;\r\n return latLngs.map(lls => lls.map(ll => refLatLng.DirectionTo(ll).mul(1000).Project(axis).to3D(height)));\r\n });\r\n\r\n ko.defineProperty(this, \"labelPosition\", () => {\r\n if (!this.poly || !this.mapDrawer)\r\n return new Circle2D();\r\n\r\n let viewModel = this.mapDrawer.viewModel,\r\n latLngs = this.latLngs;\r\n\r\n if (!latLngs || !latLngs.length)\r\n return new Circle2D();\r\n\r\n let lls = latLngs[0],\r\n refLatLng = viewModel.referenceLatLng;\r\n\r\n if (!lls || !lls.length)\r\n return new Circle2D();\r\n\r\n if (lls.length < 3)\r\n return new Circle2D(lls[0].ToPoint2D(), 0);\r\n\r\n return MapDrawing.biggestCircleInLatLngPolygon(lls, refLatLng);\r\n });\r\n\r\n ko.defineProperty(this, \"bounds\", () => {\r\n return BoundsLatLng.FromLatLngs(this.latLngs);\r\n });\r\n\r\n ko.defineProperty(this, \"pos\",\r\n {\r\n get: () => {\r\n if (!this.poly || !this.mapDrawer)\r\n return Point2D.Zero;\r\n var viewModel = this.mapDrawer.viewModel,\r\n refLatLng = viewModel.referenceLatLng,\r\n axis = viewModel.referenceAxis,\r\n origin = this.originLatLng;\r\n return refLatLng.DirectionTo(origin).mul(1000).Project(axis);\r\n },\r\n set: (p: Point2D) => {\r\n if (!this.poly)\r\n return;\r\n var viewModel = this.mapDrawer.viewModel,\r\n axis = viewModel.referenceAxis;\r\n\r\n let t = p.sub(this.pos).mul(0.001).Unproject(axis),\r\n center = BoundsLatLng.FromLatLngs(this.latLngs).Center,\r\n transform = Transformation3D.Translation(center.Offset(t.y, t.x).ToPoint2D().sub(center.ToPoint2D()));\r\n\r\n this.applyTransform(transform, mapDrawer);\r\n\r\n //let latLngs = this.latLngs.map(lls => lls.map(ll => ll.Offset(t.y, t.x).ToGMLatLng()));\r\n\r\n //if (latLngs.length) {\r\n // this.poly.setPaths(latLngs);\r\n // this.update();\r\n\r\n // if (this.typeName === window.RoofTypeName && this.mType === 'ShapeData') {\r\n // //move all others\r\n // mapDrawer.viewModel.foreachItem(sel => {\r\n // if (sel instanceof ShapeData) {\r\n // let latLngs = sel.latLngs,\r\n // newLatLngs = latLngs.map(lls => lls.map(ll => ll.Offset(t.y, t.x).ToGMLatLng()));\r\n // if (newLatLngs.length) {\r\n // sel.poly.setPaths(newLatLngs);\r\n // sel.update();\r\n // }\r\n // }\r\n // }, this.id);\r\n // }\r\n //}\r\n }\r\n });\r\n\r\n ko.defineProperty(this, \"rotation\",\r\n {\r\n get: () => {\r\n return this._rot;\r\n },\r\n set: (r: number) => {\r\n if (!this.poly)\r\n return;\r\n var tr = r - this._rot;\r\n this._rot = r;\r\n if (tr != 0) {\r\n let pts = this.getBorderPoints(),\r\n centroid = Point2D.computeCenter(pts);\r\n if (centroid) {\r\n let transform = Transformation3D.Rotation(LatLng.Grad2Rad(tr), centroid);\r\n this.applyTransform(transform, mapDrawer, pts);\r\n\r\n //var newLatLngs = pts.map(ps => ps.map(p => LatLng.FromPoint2D(transform.transform(p)).ToGMLatLng()));\r\n //if (newLatLngs.some(nlls => nlls.length > 0)) {\r\n // this.poly.setPaths(newLatLngs);\r\n // this.update();\r\n\r\n // if (this.typeName === window.RoofTypeName && this.mType === 'ShapeData') {\r\n // //move all others\r\n // mapDrawer.viewModel.foreachItem(sel => {\r\n // if (sel instanceof ShapeData) {\r\n // let pts = sel.getBorderPoints(),\r\n // newLatLngs = pts.map(ps => ps.map(p => LatLng.FromPoint2D(transform.transform(p)).ToGMLatLng()));\r\n // if (newLatLngs.length) {\r\n // sel.poly.setPaths(newLatLngs);\r\n // sel.update();\r\n // }\r\n // }\r\n // }, this.id);\r\n // }\r\n //}\r\n }\r\n }\r\n\r\n }\r\n });\r\n\r\n ko.defineProperty(this, \"scale\",\r\n {\r\n get: () => {\r\n return this._scale;\r\n },\r\n set: (v: number) => {\r\n if (!this.poly)\r\n return;\r\n let s = v / this._scale;\r\n this._scale = v;\r\n if (s != 1) {\r\n let pts = this.getBorderPoints(),\r\n centroid = Point2D.computeCenter(pts);\r\n if (centroid) {\r\n let transform = Transformation3D.Translation(-centroid.x, -centroid.y).multiply(Transformation3D.Scale(s, s)).multiply(Transformation3D.Translation(centroid.x, centroid.y));\r\n this.applyTransform(transform, mapDrawer, pts);\r\n\r\n //var newLatLngs = pts.map(ps => ps.map(p => LatLng.FromPoint2D(transform.transform(p)).ToGMLatLng()));\r\n //if (newLatLngs.some(nlls => nlls.length > 0)) {\r\n // this.poly.setPaths(newLatLngs);\r\n // this.update();\r\n\r\n // if (this.typeName === window.RoofTypeName && this.mType === 'ShapeData') {\r\n // //move all others\r\n // mapDrawer.viewModel.foreachItem(sel => {\r\n // if (sel instanceof ShapeData) {\r\n // let pts = sel.getBorderPoints(),\r\n // newLatLngs = pts.map(ps => ps.map(p => LatLng.FromPoint2D(transform.transform(p)).ToGMLatLng()));\r\n // if (newLatLngs.length) {\r\n // sel.poly.setPaths(newLatLngs);\r\n // sel.update();\r\n // }\r\n // }\r\n // }, this.id);\r\n // }\r\n //}\r\n }\r\n }\r\n\r\n }\r\n });\r\n\r\n ko.defineProperty(this, \"originLatLng\", () => {\r\n if (this.typeName === window.BuildingTypeName)\r\n return LatLng.FromPoint2D(this.getOrientedOrigin());\r\n\r\n var viewModel = this.mapDrawer.viewModel;\r\n return LatLng.FromPoint2D(this.getOrientedOrigin(viewModel.referenceOrientation));\r\n });\r\n\r\n ko.defineProperty(this, \"slope\",\r\n {\r\n get: () => {\r\n return this.slopeOverride ? this.customSlope : this._slope;\r\n },\r\n set: (v: number) => {\r\n this._slope = v || 0;\r\n if (!this.slopeOverride)\r\n this.customSlope = v || 0;\r\n }\r\n });\r\n\r\n ko.defineProperty(this, \"ridgeLines\", () => {\r\n if (this.separationPolylines && this.separationPolylines.length)\r\n return this.separationPolylines.filter(sp => !sp.isCutting);\r\n return [] as SeparationPolyline[];\r\n });\r\n\r\n ko.defineProperty(this, \"eavesLines\", () => {\r\n if (this.separationPolylines && this.separationPolylines.length)\r\n return this.separationPolylines.filter(sp => sp.isCutting);\r\n return [] as SeparationPolyline[];\r\n });\r\n\r\n //this.subsciptions.push(ko.getObservable(this, 'poly').subscribe(this.onPolygonChangedIntern.bind(this)));\r\n this.subsciptions.push(ko.getObservable(this, 'isActive').subscribe(this.updateStyle.bind(this)));\r\n this.subsciptions.push(ko.getObservable(this, 'hidden').subscribe(this.updateStyle.bind(this)));\r\n this.subsciptions.push(ko.getObservable(this, 'selected').subscribe(this.updateSelected.bind(this)));\r\n this.subsciptions.push(ko.getObservable(this, 'hovered').subscribe(this.updateStyle.bind(this)));\r\n this.subsciptions.push(ko.getObservable(this, 'locked').subscribe(this.updateStyle.bind(this)));\r\n this.subsciptions.push(ko.getObservable(this, 'frozen').subscribe(this.updateStyle.bind(this)));\r\n\r\n //this.onPolygonChangedIntern();\r\n }\r\n\r\n subsciptions: KnockoutSubscription[];\r\n mapDrawer: MapDrawer;\r\n mType: string;\r\n poly: IGoogleMapsPolygon;\r\n id: string;\r\n title: string;\r\n isParallel: boolean = true;\r\n typeName: string;\r\n height: number;\r\n //slope in degree\r\n slope: number;\r\n private _slope: number = 0;\r\n slopeOverride: boolean = false;\r\n customSlope: number = 0;\r\n useProjection: boolean = true;\r\n isActive: boolean = true;\r\n //private _isActive: boolean = true;\r\n private _active: boolean = true;\r\n latLngs: LatLng[][];\r\n points: IPoint3D[][];\r\n readonly bounds: BoundsLatLng;\r\n labelPosition: Circle2D;\r\n\r\n _locked: boolean = false;\r\n locked: boolean;\r\n _frozen: boolean = false;\r\n frozen: boolean;\r\n controlledByParent: boolean = false;\r\n hidden: boolean = false;\r\n pos: Point2D;\r\n private _rot: number = 0;\r\n rotation: number;\r\n private _scale: number = 1;\r\n scale: number;\r\n _isDisposed: boolean;\r\n selected: boolean = false;\r\n hovered: boolean = false;\r\n southMarker: SouthMarker = null;\r\n dragPosition: LatLng;\r\n currentStyle: keyof PolygonLayer;\r\n isFrozen: boolean;\r\n isLocked: boolean;\r\n skipUpdate: boolean;\r\n originLatLng: LatLng;\r\n separationPolylines: SeparationPolyline[] = [];\r\n ridgeLines: SeparationPolyline[];\r\n eavesLines: SeparationPolyline[];\r\n parent: ShapeData = null;\r\n children: ShapeData[] = [];\r\n\r\n measureTexts: OverlayText[] = [];\r\n angleTexts: OverlayText[] = [];\r\n coordsTexts: OverlayText[] = [];\r\n coordsNumberTexts: OverlayText[] = [];\r\n\r\n clearTexts() {\r\n if (this.measureTexts.length) {\r\n this.measureTexts.forEach(ot => { ot.dispose(); });\r\n this.measureTexts = [];\r\n }\r\n if (this.angleTexts.length) {\r\n this.angleTexts.forEach(ot => { ot.dispose(); });\r\n this.angleTexts = [];\r\n }\r\n if (this.coordsTexts.length) {\r\n this.coordsTexts.forEach(ot => { ot.dispose(); });\r\n this.coordsTexts = [];\r\n }\r\n if (this.coordsNumberTexts.length) {\r\n this.coordsNumberTexts.forEach(ot => { ot.dispose(); });\r\n this.coordsNumberTexts = [];\r\n }\r\n }\r\n\r\n detailsViewVisible: boolean = false;\r\n\r\n setPaths(latLngs: google.maps.LatLng[][]) {\r\n this.poly.setPaths(latLngs);\r\n\r\n this.update();\r\n }\r\n\r\n applyTransform(transform: Transformation3D, mapDrawer: MapDrawer, pts?: Point2D[][], skipChildren?: boolean) {\r\n if (!pts)\r\n pts = this.getBorderPoints();\r\n\r\n var newLatLngs = pts.map(ps => ps.map(p => LatLng.FromPoint2D(transform.transform(p)).ToGMLatLng()));\r\n\r\n if (newLatLngs.some(nlls => nlls.length > 0)) {\r\n this.poly.setPaths(newLatLngs);\r\n\r\n this.separationPolylines.forEach(sp => {\r\n sp.applyTransform(transform);\r\n });\r\n\r\n if (this.typeName === window.BuildingTypeName && this.mType === 'ShapeData' && !skipChildren) {\r\n //move all others\r\n mapDrawer.viewModel.foreachItem(sel => {\r\n if (sel instanceof ShapeData) {\r\n let pts = sel.getBorderPoints(),\r\n newLatLngs = pts.map(ps => ps.map(p => LatLng.FromPoint2D(transform.transform(p)).ToGMLatLng()));\r\n if (newLatLngs.length) {\r\n sel.poly.setPaths(newLatLngs);\r\n sel.update();\r\n }\r\n }\r\n }, this.id);\r\n\r\n mapDrawer.viewModel.importedImages.forEach(img => { img.applyTransform(transform, mapDrawer); });\r\n\r\n if (this.southMarker)\r\n this.southMarker.applyTransform(transform, mapDrawer);\r\n }\r\n\r\n this.update();\r\n }\r\n }\r\n\r\n toggleDetailsViewVisible(b) {\r\n this.detailsViewVisible = !!b;\r\n if (b && !this.mapDrawer.viewModel.showCoordNumbers)\r\n this.mapDrawer.viewModel.showCoordNumbers = true;\r\n }\r\n\r\n toggleLocked(b) {\r\n this.locked = !!b;\r\n }\r\n\r\n moveByLatLng(latLng: LatLng) {\r\n if (this._isDisposed)\r\n return;\r\n\r\n var poly = this.poly,\r\n paths = poly ? poly.getPaths() : null;\r\n\r\n if (paths)\r\n poly.setPaths(paths.getArray().map(path => path.getArray().map(ll => new google.maps.LatLng(ll.lat() + latLng.Latitude, ll.lng() + latLng.Longitude))));\r\n\r\n this.separationPolylines.forEach(sp => {\r\n sp.moveByLatLng(latLng);\r\n });\r\n\r\n if (this.southMarker)\r\n this.southMarker.moveByLatLng(latLng);\r\n }\r\n\r\n moveByOffset(offset: Point2D) {\r\n if (this._isDisposed)\r\n return;\r\n\r\n var poly = this.poly,\r\n paths = poly ? poly.getPaths() : null;\r\n\r\n if (paths)\r\n poly.setPaths(paths.getArray().map(path => path.getArray().map(ll => LatLng.FromGMLatLng(ll).Offset(offset.y, offset.x).ToGMLatLng())));\r\n\r\n this.separationPolylines.forEach(sp => {\r\n sp.moveByOffset(offset);\r\n });\r\n\r\n if (this.southMarker)\r\n this.southMarker.moveByOffset(offset);\r\n }\r\n\r\n //tolerance in meters\r\n hasSegment(llStart: LatLng, llEnd: LatLng, tolerance = 0.001) {\r\n if (this._isDisposed || !this.poly)\r\n return false;\r\n var latLngs = this.latLngs;\r\n\r\n for (var j = 0, llen = latLngs.length; j < llen; j++) {\r\n var lls = latLngs[j],\r\n len = lls.length;\r\n\r\n if (len <= 2)\r\n continue;\r\n\r\n for (var i = 0; i < len; i++) {\r\n var llst = lls[i],\r\n lle = lls[(i + 1) % len];\r\n if ((llst.DistanceTo(llStart) <= tolerance && lle.DistanceTo(llEnd) <= tolerance) ||\r\n (llst.DistanceTo(llEnd) <= tolerance && lle.DistanceTo(llStart) <= tolerance))\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getSegments(checkOrientation?: boolean): Segment2D[] {\r\n if (this._isDisposed || !this.poly)\r\n return [];\r\n var latLngs = this.latLngs;\r\n\r\n var result: Segment2D[] = [];\r\n\r\n latLngs.forEach(lls => {\r\n var points = lls.map(ll => ll.ToPoint2D());\r\n\r\n var len = points.length;\r\n\r\n if (len <= 2)\r\n return;\r\n\r\n if (checkOrientation && Point2D.isClockwise(points))\r\n points.reverse();\r\n\r\n for (var i = 0; i < len; i++) {\r\n var p1 = points[i],\r\n p2 = points[(i + 1) % len];\r\n\r\n result.push(new Segment2D(p1, p2));\r\n }\r\n });\r\n\r\n if (this.separationPolylines && this.separationPolylines.length)\r\n this.separationPolylines.forEach(spl => {\r\n result.push.apply(result, spl.getSegments());\r\n });\r\n\r\n return result;\r\n }\r\n\r\n getBorderPoints(): Point2D[][] {\r\n if (this._isDisposed || !this.poly)\r\n return [];\r\n\r\n return this.latLngs.map(lls => lls.map(ll => ll.ToPoint2D()));\r\n }\r\n\r\n getPoints(): Point2D[][] {\r\n if (this._isDisposed || !this.poly)\r\n return [];\r\n\r\n var result = this.getBorderPoints();\r\n\r\n if (this.separationPolylines && this.separationPolylines.length)\r\n this.separationPolylines.forEach(spl => {\r\n result.push.apply(result, spl.getPoints());\r\n });\r\n\r\n return result;\r\n }\r\n\r\n isClockwise(): boolean {\r\n return Point2D.isClockwise(this.points as Point3D[][]);\r\n }\r\n\r\n getOrientedOrigin(orientation?: number): Point2D {\r\n\r\n if (orientation == undefined)\r\n orientation = this.southMarker ? this.southMarker.orientation : 0;\r\n\r\n var points = this.getBorderPoints(),\r\n xAxis = Point2D.FromOrientation(orientation),\r\n yAxis = xAxis.rot90(),\r\n bounds = Bounds2D.FromPoints(points),\r\n center = bounds.Center;\r\n\r\n if (bounds.IsEmpty || orientation == 0)\r\n return bounds.Min;\r\n\r\n bounds = Bounds2D.FromPoints(points.map(ps => ps.map(p => new Point2D(xAxis.dot(p.sub(center)), yAxis.dot(p.sub(center))))));\r\n\r\n return center.add(xAxis.mul(bounds.Min.x)).add(yAxis.mul(bounds.Min.y));\r\n }\r\n\r\n isOnEdgePoint(p: Point2D): boolean {\r\n var latLngs = this.latLngs,\r\n pxFactor = this.mapDrawer.getPixelFactor();\r\n\r\n if (!latLngs || !latLngs.length)\r\n return false;\r\n\r\n for (var i = 0, j = latLngs.length; i < j; i++) {\r\n let lls = latLngs[i];\r\n for (let k = 0, l = lls.length; k < l; k++) {\r\n let latLng = lls[k],\r\n nextLatLng = lls[(k + 1) % l];\r\n\r\n if (p.sub(latLng.ToPoint2D()).mul(pxFactor).GetLengthSquared() <= 42.25) { // 6,5 px\r\n return true;\r\n }\r\n\r\n if (p.sub(latLng.add(nextLatLng).mul(0.5).ToPoint2D()).mul(pxFactor).GetLengthSquared() <= 42.25) { // 6,5 px\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n for (var m = 0, n = this.separationPolylines.length; m < n; m++) {\r\n let lls = this.separationPolylines[m].polyline.getPath().getArray().map(ll => LatLng.FromGMLatLng(ll));\r\n\r\n for (let k = 0, l = lls.length; k < l; k++) {\r\n let latLng = lls[k];\r\n\r\n if (p.sub(latLng.ToPoint2D()).mul(pxFactor).GetLengthSquared() <= 42.25) { // 6,5 px\r\n return true;\r\n }\r\n }\r\n\r\n }\r\n\r\n return false;\r\n }\r\n\r\n updateSelected() {\r\n\r\n if (this.children.length) {\r\n setTimeout(() => {\r\n if (!this._isDisposed && !this.selected && this.children.length) {\r\n var selChildren = this.children.filter(ch => !ch._isDisposed && ch.selected);\r\n if (selChildren.length)\r\n selChildren.forEach(s => this.mapDrawer.removeItemFromSelection(s));\r\n }\r\n }, 0);\r\n }\r\n\r\n this.updateStyle();\r\n }\r\n\r\n selectChildren(latLng: LatLng) {\r\n var ll = latLng.ToGMLatLng();\r\n this.selectChildrenByIds(this.children.filter(ch => !ch._isDisposed && google.maps.geometry.poly.containsLocation(ll, ch.poly as any)).map(ch => ch.id));\r\n }\r\n\r\n selectChildrenByIds(childIds: string[]) {\r\n\r\n var mapDrawer = this.mapDrawer,\r\n forceSelection = !mapDrawer.ctrlDown && !mapDrawer.shiftDown,\r\n addSelection = mapDrawer.ctrlDown !== mapDrawer.shiftDown,\r\n removeSelection = mapDrawer.ctrlDown && mapDrawer.shiftDown;\r\n\r\n //setTimeout(() => {\r\n if (!this._isDisposed && this.selected && this.children.length) {\r\n if (forceSelection) {\r\n var selChildren = this.children.filter(ch => !ch._isDisposed && ch.selected);\r\n if (selChildren.length)\r\n selChildren.forEach(s => mapDrawer.removeItemFromSelection(s));\r\n }\r\n if (forceSelection || addSelection) {\r\n this.children.forEach(ch => {\r\n if (childIds.indexOf(ch.id) !== -1)\r\n mapDrawer.addItemToSelection(ch);\r\n });\r\n } else if (removeSelection) {\r\n this.children.forEach(ch => {\r\n if (childIds.indexOf(ch.id) !== -1)\r\n mapDrawer.removeItemFromSelection(ch);\r\n });\r\n }\r\n }\r\n //}, 0);\r\n }\r\n\r\n updateStyle() {\r\n if (!this.mapDrawer || !this.poly)\r\n return;\r\n var poly = this.poly,\r\n layer = this.mapDrawer.viewModel.layer.typeName[this.typeName],\r\n hovered = this.hovered,\r\n selected = this.selected,\r\n locked = this.locked,\r\n clickable = !this.frozen && !locked,\r\n hidden = this.hidden,\r\n isActive = this.isActive,\r\n controlledByParent = this.controlledByParent;\r\n\r\n if (!layer)\r\n return;\r\n\r\n //if (!clickable && this.selected) {\r\n // this.mapDrawer.selectShape(this, false, false, true);\r\n // return;\r\n //}\r\n\r\n //this.separationPolylines.forEach(spolyline => {\r\n // spolyline.selected = selected;\r\n //});\r\n\r\n let newStyle: keyof PolygonLayer = hidden ? null : (selected ? (hovered ? 'shapeSelectedHoveredStyle' : 'shapeSelectedStyle') : (hovered ? 'shapeHoveredStyle' : 'shapeStyle'));\r\n\r\n var opts: google.maps.PolygonOptions = null;\r\n\r\n if (this.currentStyle !== newStyle || this._active !== isActive) {\r\n this._active = isActive;\r\n opts = (newStyle ? $.extend({}, layer[newStyle]) : {});\r\n if (!isActive)\r\n opts.fillOpacity = 0;\r\n this.currentStyle = newStyle;\r\n }\r\n\r\n if (this.isLocked !== locked) {\r\n this.isLocked = locked;\r\n if (!opts)\r\n opts = (newStyle ? $.extend({}, layer[newStyle]) : {});\r\n\r\n opts.clickable = clickable;\r\n }\r\n\r\n if (this.isFrozen !== this.frozen) {\r\n this.isFrozen = this.frozen;\r\n if (!opts)\r\n opts = {};\r\n opts.clickable = clickable;\r\n }\r\n\r\n if (!controlledByParent && poly.getEditable() != selected) {\r\n if (!opts)\r\n opts = {};\r\n opts.editable = !!selected;\r\n opts.draggable = false;\r\n\r\n //this.separationPolylines.forEach(spolyline => {\r\n // spolyline.visible = opts.editable;\r\n //});\r\n }\r\n\r\n if (opts) {\r\n if (opts.visible === undefined)\r\n opts.visible = !hidden;\r\n opts.strokeWeight = 2.5;\r\n\r\n if (locked) {\r\n if (opts.fillColor)\r\n opts.fillColor = (new Color().setStyle(opts.fillColor).getGrayscale()).toString();\r\n if (opts.strokeColor)\r\n opts.strokeColor = (new Color().setStyle(opts.strokeColor).getGrayscale()).toString();\r\n if (this.detailsViewVisible)\r\n this.detailsViewVisible = false;\r\n }\r\n\r\n poly.setOptions(opts);\r\n }\r\n\r\n }\r\n\r\n setHeight(v: string | number) {\r\n this.height = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: 0,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n });\r\n\r\n this.regenerate();\r\n }\r\n\r\n refreshRoofSettings() {\r\n var newHeight = $(\"#detailsRoofHeight\").val();\r\n var newSlope = $('#detailsRoofAngle').val();\r\n lsGoogleMaps.saveRoofSettings(newHeight, newSlope);\r\n }\r\n\r\n setSlope(v: string | number) {\r\n this.slope = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: -89,\r\n max: 89,\r\n applyArithmetic: true,\r\n isFeet: false,\r\n notImperial: true\r\n });\r\n\r\n this.regenerate();\r\n }\r\n\r\n setSlopeOverride(v?: boolean) {\r\n this.slopeOverride = !!v;\r\n\r\n if (this.parent)\r\n this.parent.regenerate();\r\n }\r\n\r\n setCustomSlope(v: string | number) {\r\n this.customSlope = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: 0,\r\n max: 89,\r\n applyArithmetic: true,\r\n isFeet: false,\r\n notImperial: true\r\n });\r\n\r\n if (this.parent)\r\n this.parent.regenerate();\r\n }\r\n\r\n setPosX(v: string | number) {\r\n var y = this.pos.y;\r\n var x = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: -1000000,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n });\r\n this.pos = new Point2D(x, y);\r\n }\r\n\r\n setPosY(v: string | number) {\r\n var x = this.pos.x;\r\n var y = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: -1000000,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n });\r\n this.pos = new Point2D(x, y);\r\n }\r\n\r\n setPointX(pathIndex: number, index: number, viewModel: ViewModel, v: string | number) {\r\n var poly = this.poly,\r\n paths = poly ? poly.getPaths() : null;\r\n\r\n if (!paths || paths.getLength() <= pathIndex)\r\n return;\r\n\r\n var path = paths.getAt(pathIndex),\r\n pts = this.points[pathIndex],\r\n axis = viewModel.referenceAxis;\r\n\r\n if (index >= 0 && path && path.getLength() > index && pts && pts.length > index) {\r\n var p = pts[index],\r\n latLng = this.latLngs[pathIndex][index];\r\n\r\n var dx = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: -1000000,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n }) - p.x;\r\n\r\n if (dx) {\r\n var t = new Point2D(dx * 0.001, 0).Unproject(axis);\r\n\r\n path.setAt(index, latLng.Offset(t.y, t.x).ToGMLatLng());\r\n this.update();\r\n }\r\n }\r\n\r\n }\r\n\r\n setPointY(pathIndex: number, index: number, viewModel: ViewModel, v: string | number) {\r\n var poly = this.poly,\r\n paths = poly ? poly.getPaths() : null;\r\n\r\n if (!paths || paths.getLength() <= pathIndex)\r\n return;\r\n\r\n var path = paths.getAt(pathIndex),\r\n pts = this.points[pathIndex],\r\n axis = viewModel.referenceAxis;\r\n\r\n if (index >= 0 && path && path.getLength() > index && pts && pts.length > index) {\r\n var p = pts[index],\r\n latLng = this.latLngs[pathIndex][index];\r\n\r\n var dy = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: -1000000,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n }) - p.y;\r\n\r\n if (dy) {\r\n var t = new Point2D(0, dy * 0.001).Unproject(axis);\r\n\r\n path.setAt(index, latLng.Offset(t.y, t.x).ToGMLatLng());\r\n this.update();\r\n }\r\n }\r\n }\r\n\r\n setPointZ(pathIndex: number, index: number, viewModel: ViewModel, v: string | number) {\r\n var z = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: -1000000,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n });\r\n\r\n this.height = z;\r\n }\r\n\r\n deltePoint(pathIndex: number, index: number) {\r\n var poly = this.poly,\r\n paths = poly ? poly.getPaths() : null;\r\n\r\n if (!paths || paths.getLength() <= pathIndex)\r\n return;\r\n\r\n var path = paths.getAt(pathIndex);\r\n\r\n if (index >= 0 && path && path.getLength() > index) {\r\n if (path.getLength() > 3) {\r\n path.removeAt(index);\r\n this.update();\r\n } else {\r\n DManager.showErrorMessage(\"Couldn't delete point. Polygons with less than 3 points aren't supported!\");\r\n }\r\n }\r\n }\r\n\r\n setRotation(v: string | number) {\r\n var r = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: -360,\r\n max: 360,\r\n applyArithmetic: true,\r\n notImperial: true\r\n });\r\n this.rotation = r;\r\n }\r\n\r\n setScale(v: string | number) {\r\n var s = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: 0.01,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n notImperial: true,\r\n scale: 1 / 100\r\n });\r\n this.scale = s;\r\n }\r\n\r\n getChildByLatLng(latLng: LatLng): ShapeData {\r\n if (!this.children.length)\r\n return null;\r\n\r\n let gmLatLng = latLng.ToGMLatLng();\r\n\r\n var childs = this.children.filter(ch => google.maps.geometry.poly.containsLocation(gmLatLng, ch.poly as any));\r\n\r\n if (!childs.length)\r\n return null;\r\n else if (childs.length === 1)\r\n return childs[0];\r\n\r\n let child: ShapeData = null,\r\n dist = Number.MAX_VALUE;\r\n\r\n childs.forEach(ch => {\r\n var d = latLng.DistanceTo(ch.bounds.Center);\r\n if (d < dist) {\r\n dist = d;\r\n child = ch;\r\n }\r\n });\r\n\r\n return child;\r\n }\r\n\r\n movePoint(from: LatLng, to: LatLng, sourceId: string) {\r\n if (this._isDisposed || !this.poly || this.skipUpdate)\r\n return;\r\n this.skipUpdate = true;\r\n if (this.id !== sourceId) {\r\n this.poly.getPaths().forEach(path => {\r\n var len = path.getLength();\r\n for (var i = len - 1; i >= 0; i--) {\r\n if (LatLng.FromGMLatLng(path.getAt(i)).DistanceTo(from) <= 0.01)\r\n path.setAt(i, to.ToGMLatLng());\r\n }\r\n });\r\n }\r\n\r\n this.separationPolylines.forEach(separationPolyline => {\r\n if (separationPolyline.id !== sourceId)\r\n separationPolyline.movePoint(from, to);\r\n });\r\n\r\n this.skipUpdate = false;\r\n }\r\n\r\n private static trianglesAdjacent(tr1: number[], tr2: number[], ignoredEdges?: [number, number][]): boolean {\r\n var e = tr1.filter((oidx) => tr2.some(idx => oidx === idx));\r\n return e.length === 2 && (!ignoredEdges || !ignoredEdges.some(se => (se[0] === e[0] && se[1] === e[1]) || (se[0] === e[1] && se[1] === e[0])));\r\n }\r\n\r\n private static trianglesCollectionAdjacent(tr1s: number[][], tr2s: number[][], ignoredEdges?: [number, number][]): boolean {\r\n return tr1s.some(tr1 => tr2s.some(tr2 => ShapeData.trianglesAdjacent(tr1, tr2, ignoredEdges)));\r\n }\r\n\r\n updateOverlayTexts(mapDrawer: MapDrawer) {\r\n var viewModel = mapDrawer.viewModel,\r\n poly = this.poly,\r\n paths = poly.getPaths(),\r\n layer = this.mapDrawer.viewModel.layer.typeName[this.typeName],\r\n measureTexts = this.measureTexts,\r\n angleTexts = this.angleTexts,\r\n coordsTexts = this.coordsTexts,\r\n coordsNumberTexts = this.coordsNumberTexts,\r\n countMeasureTexts = 0,\r\n countAngleTexts = 0,\r\n countCoordsTexts = 0,\r\n countCoordsNumberTexts = 0;\r\n\r\n if (!layer)\r\n return;\r\n\r\n paths.forEach(path => {\r\n var length = path.getLength();\r\n\r\n if (length > 0) {\r\n var showCoordNumbers = viewModel.showCoordNumbers,\r\n showCoords = !showCoordNumbers && viewModel.showCoords,\r\n showAngle = viewModel.showAngle && length > 2,\r\n showLengths = viewModel.showLengths && length > 1,\r\n latLngs = path.getArray().map(ll => LatLng.FromGMLatLng(ll));\r\n\r\n for (var cur = 0, len = length - 1; cur <= len; cur++) {\r\n var prev = cur === 0 ? len : cur - 1;\r\n var next = cur === len ? 0 : cur + 1;\r\n\r\n if (showCoords) {\r\n if (coordsTexts.length <= countCoordsTexts)\r\n coordsTexts.push(mapDrawer.createOverlayText(layer));\r\n mapDrawer.setCoordsText(coordsTexts[countCoordsTexts], latLngs[cur]);\r\n countCoordsTexts++;\r\n }\r\n if (showAngle) {\r\n if (angleTexts.length <= countAngleTexts)\r\n angleTexts.push(mapDrawer.createOverlayText(layer));\r\n mapDrawer.setAngleText(angleTexts[countAngleTexts], latLngs[prev], latLngs[cur], latLngs[next]);\r\n countAngleTexts++;\r\n }\r\n if (showLengths) {\r\n if (measureTexts.length <= countMeasureTexts)\r\n measureTexts.push(mapDrawer.createOverlayText(layer));\r\n mapDrawer.setMeasureText(measureTexts[countMeasureTexts], latLngs[cur], latLngs[next]);\r\n countMeasureTexts++;\r\n }\r\n if (showCoordNumbers) {\r\n if (coordsNumberTexts.length <= countCoordsNumberTexts)\r\n coordsNumberTexts.push(mapDrawer.createOverlayText(layer));\r\n mapDrawer.setCoordNumberText(coordsNumberTexts[countCoordsNumberTexts], latLngs[cur], cur + 1);\r\n countCoordsNumberTexts++;\r\n }\r\n }\r\n }\r\n });\r\n\r\n if (coordsNumberTexts.length > countCoordsNumberTexts) {\r\n let delCount = coordsNumberTexts.length - countCoordsNumberTexts;\r\n coordsNumberTexts.splice(-delCount, delCount).forEach(ot => { ot.dispose(); });\r\n }\r\n if (coordsTexts.length > countCoordsTexts) {\r\n let delCount = coordsTexts.length - countCoordsTexts;\r\n coordsTexts.splice(-delCount, delCount).forEach(ot => { ot.dispose(); });\r\n }\r\n if (angleTexts.length > countAngleTexts) {\r\n let delCount = angleTexts.length - countAngleTexts;\r\n angleTexts.splice(-delCount, delCount).forEach(ot => { ot.dispose(); });\r\n }\r\n if (measureTexts.length > countMeasureTexts) {\r\n let delCount = measureTexts.length - countMeasureTexts;\r\n measureTexts.splice(-delCount, delCount).forEach(ot => { ot.dispose(); });\r\n }\r\n }\r\n\r\n computeArea() {\r\n var poly = this.poly,\r\n paths = poly.getPaths().getArray().map(path => path.getArray()).filter(path => path.length > 2);\r\n return !paths.length ? 0 : Math.abs(paths.reduce((prev, cur) => prev + google.maps.geometry.spherical.computeSignedArea(cur), 0));\r\n }\r\n\r\n approximateParameters() {\r\n if (this._isDisposed || LoaderManager.isLoading())\r\n return;\r\n \r\n if (this.typeName !== window.BuildingTypeName && (this.typeName !== window.RoofTypeName || !this.slopeOverride))\r\n return;\r\n\r\n var area = this.computeArea();\r\n\r\n if (area < 1)\r\n return;\r\n \r\n var mapDrawer = this.mapDrawer,\r\n children = this.children,\r\n child = this.typeName !== window.BuildingTypeName || (!children || children.length < 2) ? null : children.map(child => { return { child: child, area: child.computeArea() }; })\r\n .reduce((prev, cur) => prev.area > cur.area ? prev : cur).child;\r\n\r\n if (!child || child.computeArea() <= 0) {\r\n\r\n this.getApproximatedRoofPlane((plane, minDepth, maxDepth) => {\r\n if (!plane)\r\n return;\r\n\r\n var slope = +(plane.normal.angleTo(new THREE.Vector3(0, 0, 1)) / Math.PI * 180).toFixed(2);\r\n\r\n if (this.typeName === window.RoofTypeName) {\r\n this.setCustomSlope(slope);\r\n return;\r\n }\r\n\r\n var height = Math.round(maxDepth - minDepth) * 1000;\r\n\r\n this.slope = slope;\r\n this.height = height;\r\n\r\n this.regenerate();\r\n }, mapDrawer);\r\n\r\n return;\r\n }\r\n\r\n child.getApproximatedRoofPlane((plane, minDepth, maxDepth) => {\r\n if (!plane)\r\n return;\r\n\r\n var slope = +(plane.normal.angleTo(new THREE.Vector3(0, 0, 1)) / Math.PI * 180).toFixed(2);\r\n var height = Math.round(maxDepth - minDepth) * 1000;\r\n\r\n this.slope = slope;\r\n this.height = height;\r\n\r\n this.regenerate();\r\n }, mapDrawer);\r\n }\r\n\r\n regenerate(debugOutput?: boolean) {\r\n if (this._isDisposed)\r\n return;\r\n\r\n if (this.typeName === window.InterfernceTypeName) {\r\n this.updateOverlayTexts(this.mapDrawer);\r\n return;\r\n }\r\n\r\n this.updateOverlayTexts(this.mapDrawer);\r\n\r\n if (this.typeName !== window.BuildingTypeName)\r\n return;\r\n\r\n var mapDrawer = this.mapDrawer,\r\n viewModel = mapDrawer.viewModel,\r\n children = this.children,\r\n layer = this.mapDrawer.viewModel.layer.typeName[this.typeName],\r\n childLayer = layer.child as PolygonLayer,\r\n refLatLng = viewModel.referenceLatLng,\r\n separationPolylines = this.separationPolylines.filter(sp => !sp.isCutting);\r\n\r\n if (!this.poly) {\r\n this.clearTexts();\r\n return;\r\n }\r\n\r\n let childShapesArray: { paths: google.maps.LatLng[][]; pos: LatLng; southMarkerPos: LatLng; orientation: number; slope: number; }[] = [];\r\n\r\n this.getCuttingSeparatedPolygons().forEach(border => {\r\n childShapesArray.push.apply(childShapesArray, this.calculateSeparatedChildShapes([border], separationPolylines, refLatLng, debugOutput));\r\n });\r\n\r\n if (!childShapesArray || !childShapesArray.length) {\r\n\r\n let paths = this.poly.getPaths().getArray().map((path) => path.getArray().slice()).slice();\r\n\r\n childShapesArray = [\r\n {\r\n paths: paths,\r\n southMarkerPos: this.southMarker ? this.southMarker.position.Clone() : null,\r\n orientation: this.southMarker ? this.southMarker.orientation : 0,\r\n slope: this.slope,\r\n pos: BoundsLatLng.FromGmLatLngs(paths).Center\r\n }];\r\n } else if (childShapesArray.length == 1) {\r\n childShapesArray[0].slope = this.slope;\r\n }\r\n\r\n var childCount = childShapesArray.length;\r\n\r\n if (children.length > childCount)\r\n children.splice(childCount, children.length - childCount).forEach(sh => sh.remove());\r\n\r\n var childHash: { [id: string]: boolean } = {};\r\n\r\n var childSouthMarkerVisible = false;\r\n\r\n for (var i = 0; i < childCount; i++) {\r\n let childShapes = childShapesArray[i],\r\n child: ShapeData = null,\r\n dist = Number.MAX_VALUE;\r\n\r\n children.forEach(ch => {\r\n if (!childHash[ch.id]) {\r\n var d = childShapes.pos.DistanceTo(ch.bounds.Center);\r\n if (d < dist) {\r\n dist = d;\r\n child = ch;\r\n }\r\n }\r\n });\r\n\r\n if (child)\r\n child.poly.setPaths(childShapes.paths);\r\n\r\n if (!child) {\r\n let poly = new google.maps.Polygon({ paths: childShapes.paths });\r\n (poly as any).userData = child = new ShapeData(mapDrawer, poly as any, spt.Utils.GenerateGuid(), childLayer.getNewName(), childLayer.typeName);\r\n mapDrawer.addPolygon(poly as any);\r\n child.parent = this;\r\n children.push(child);\r\n }\r\n\r\n childHash[child.id] = true;\r\n\r\n if (childShapes.southMarkerPos) {\r\n if (!child.southMarker) {\r\n child.southMarker = new SouthMarker(childShapes.southMarkerPos.Clone(), childShapes.orientation, true, mapDrawer);\r\n } else {\r\n child.southMarker.visible = true;\r\n child.southMarker.orientation = childShapes.orientation;\r\n child.southMarker.position = childShapes.southMarkerPos.Clone();\r\n }\r\n } else if (child.southMarker) {\r\n child.southMarker.dispose();\r\n child.southMarker = null;\r\n }\r\n child.slope = childShapes.slope;\r\n\r\n if (child.southMarker && child.southMarker.visible)\r\n childSouthMarkerVisible = true;\r\n\r\n child.update();\r\n }\r\n\r\n this.calculateChildSlopes();\r\n\r\n if (this.southMarker)\r\n this.southMarker.visible = !childSouthMarkerVisible;\r\n }\r\n\r\n private edgeInList(edge: [number, number], list: [number, number][]): boolean {\r\n return edge && list.some(e => (e[0] === edge[0] && e[1] === edge[1]) || (e[1] === edge[0] && e[0] === edge[1]));\r\n }\r\n\r\n private triangleEdgeConnected(a: [number, number, number], b: [number, number, number]): [number, number] {\r\n let res = a.filter(idx => b.some(ix => idx === ix));\r\n return (res.length === 2 ? res : null) as [number, number];\r\n }\r\n\r\n private calculatePolygonsFromTriangles(pts: Point3D[], edges: [number, number][], triangles: [number, number, number][]): Point3D[][] {\r\n\r\n let result: Point3D[][] = [],\r\n joinedTriangles: number[][] = [],\r\n remainingTriangles: number[] = [],\r\n connectedTriangles = triangles.map((tr, idx) => {\r\n remainingTriangles.push(idx);\r\n let otherTriangles: number[] = [];\r\n triangles.forEach((otr, oidx) => {\r\n if (idx != oidx) {\r\n let commonEdge = this.triangleEdgeConnected(tr, otr);\r\n if (commonEdge && !this.edgeInList(commonEdge, edges))\r\n otherTriangles.push(oidx);\r\n }\r\n });\r\n return otherTriangles;\r\n });\r\n\r\n while (remainingTriangles.length) {\r\n let work: number[] = remainingTriangles.splice(0, 1),\r\n joined: number[] = [];\r\n\r\n while (work.length) {\r\n var cur = work.splice(0, 1)[0];\r\n joined.push(cur);\r\n connectedTriangles[cur].forEach(idx => {\r\n if (joined.every(i => idx !== i) && work.every(i => idx !== i))\r\n work.push(idx);\r\n });\r\n }\r\n\r\n remainingTriangles = remainingTriangles.filter(ridx => joined.every(i => ridx !== i));\r\n joinedTriangles.push(joined);\r\n }\r\n\r\n joinedTriangles.forEach(tris => {\r\n let polys = new ClipperLib.Paths(),\r\n resultPolys: ClipperLib.Paths;\r\n\r\n tris.map(trIdx => triangles[trIdx]).forEach(tr => {\r\n var poly = new ClipperLib.Path();\r\n\r\n tr.forEach(idx => {\r\n var p = pts[idx];\r\n\r\n poly.push(new ClipperLib.IntPoint(p.X, p.Y, p.Z));\r\n });\r\n\r\n polys.push(poly);\r\n });\r\n\r\n if (polys.length > 1) {\r\n var c = new ClipperLib.Clipper();\r\n c.AddPaths(polys, ClipperLib.PolyType.ptSubject, true);\r\n resultPolys = new ClipperLib.Paths();\r\n c.Execute(ClipperLib.ClipType.ctUnion, resultPolys, ClipperLib.PolyFillType.pftNonZero, ClipperLib.PolyFillType.pftNonZero);\r\n } else {\r\n resultPolys = polys;\r\n }\r\n\r\n if (resultPolys.map(rp => ClipperLib.Clipper.Area(rp)).reduce((a, b) => a + b, 0) < 0)\r\n ClipperLib.Clipper.ReversePaths(resultPolys);\r\n\r\n resultPolys.forEach(rpoly => {\r\n result.push(rpoly.map(rp => new Point3D(rp.X, rp.Y, rp.Z)));\r\n });\r\n });\r\n\r\n return result;\r\n\r\n }\r\n\r\n private getBordersAsEdges(borders: LatLng[][], refLatLng: LatLng, outPts: Point3D[], outLatLngs: LatLng[], outEdges: [number, number][], offsetIndex: number) {\r\n\r\n borders.forEach(border => {\r\n //cleanup clockwise border\r\n\r\n let borderPts = border.map((ll: LatLng) => {\r\n return { ll: ll, pt: refLatLng.DirectionTo(ll).mul(1000).round().to3D(0) };\r\n });\r\n\r\n let cleanedBorderPts: { ll: LatLng; pt: Point3D; }[] = [];\r\n\r\n for (var k = 0, p = borderPts.length; k < p; k++) {\r\n let bp1 = borderPts[k],\r\n bp2 = borderPts[(k + 1) % p];\r\n\r\n if (bp2.pt.sub(bp1.pt).GetLengthSquared() > 100)\r\n cleanedBorderPts.push(bp2);\r\n }\r\n\r\n borderPts = cleanedBorderPts;\r\n\r\n if (borderPts.length > 2) {\r\n if (Point2D.isClockwise(borderPts.map(bp => bp.pt)))\r\n borderPts.reverse();\r\n\r\n for (let idx = 0, j = borderPts.length; idx < j; idx++) {\r\n outLatLngs.push(borderPts[idx].ll);\r\n outPts.push(borderPts[idx].pt);\r\n outEdges.push([offsetIndex + idx, offsetIndex + idx + 1]);\r\n }\r\n\r\n outEdges[outEdges.length - 1][1] = offsetIndex;\r\n\r\n offsetIndex += border.length;\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n private calculateSeparatedChildShapes(borders: LatLng[][], separationPolylines: SeparationPolyline[], refLatLng: LatLng, debugOutput?: boolean): { paths: google.maps.LatLng[][]; pos: LatLng; southMarkerPos: LatLng; orientation: number; slope: number; }[] {\r\n\r\n var childShapesArray: { paths: google.maps.LatLng[][]; pos: LatLng; southMarkerPos: LatLng; orientation: number; slope: number; }[] = [];\r\n\r\n if (!separationPolylines.length) {\r\n childShapesArray.push(\r\n {\r\n paths: borders.map(b => b.map(ll => ll.ToGMLatLng())),\r\n southMarkerPos: this.southMarker ? this.southMarker.position.Clone() : null,\r\n orientation: this.southMarker ? this.southMarker.orientation : 0,\r\n slope: this.slope,\r\n pos: BoundsLatLng.FromLatLngs(borders).Center\r\n });\r\n return childShapesArray;\r\n }\r\n\r\n var pts: Point3D[] = [];\r\n var latLngs: LatLng[] = [];\r\n\r\n var borderEdges: [number, number][] = [];\r\n var separationEdges: [number, number][] = [];\r\n var additionalEdges: [number, number][] = [];\r\n\r\n var checkForRemove: number[] = [];\r\n\r\n let borderPoly = new google.maps.Polygon({ paths: borders[0].map(ll => ll.ToGMLatLng()) });\r\n\r\n var separationOffsetIndex = 0;\r\n\r\n //special case: add inbetween points of separation edges to border points if they are on border lines\r\n var inbetweenSeparationPoints: Point2D[] = [],\r\n seperationHeadsTails = [].concat.apply([], separationPolylines.map(sp => sp.polyline.getPath().getArray().map((gmll: google.maps.LatLng) => refLatLng.DirectionTo(LatLng.FromGMLatLng(gmll)).mul(1000).round())).filter(ispts => {\r\n if (ispts.length > 2)\r\n ispts.splice(1, ispts.length - 2).forEach(sp => {\r\n if (!inbetweenSeparationPoints.some(p => p.sub(sp).GetLengthSquared() <= 100))\r\n inbetweenSeparationPoints.push(sp);\r\n });\r\n return ispts.length > 1;\r\n })) as Point2D[];\r\n\r\n seperationHeadsTails.forEach((sp, spIdx) => {\r\n if (!inbetweenSeparationPoints.some(p => p.sub(sp).GetLengthSquared() <= 100) && seperationHeadsTails.some((p, idx) => spIdx != idx && p.sub(sp).GetLengthSquared() <= 100))\r\n inbetweenSeparationPoints.push(sp);\r\n });\r\n\r\n borders.forEach(border => {\r\n if (border.length > 2) {\r\n var newLLs: LatLng[] = [];\r\n ArrayHelper.forEachPairClosed(border, (ll1, ll2) => {\r\n newLLs.push(ll1);\r\n\r\n var s = refLatLng.DirectionTo(ll1).mul(1000).round(),\r\n e = refLatLng.DirectionTo(ll2).mul(1000).round(),\r\n delta = e.sub(s),\r\n lenSq = delta.GetLengthSquared();\r\n\r\n if (lenSq < 100)\r\n return;\r\n\r\n var len = Math.sqrt(lenSq),\r\n lenEnd = len - 10,\r\n dir = delta.divide(len),\r\n norm = dir.rot90(),\r\n newPts: Point2D[] = [];\r\n\r\n inbetweenSeparationPoints.forEach(p => {\r\n var d = p.sub(s),\r\n t = dir.dot(d);\r\n\r\n if (t > 10 && t < lenEnd && Math.abs(norm.dot(d)) < 10) {\r\n newPts.push(s.add(dir.mul(t)));\r\n }\r\n });\r\n\r\n if (newPts.length) {\r\n newPts.sort((p1, p2) => dir.dot(p1) - dir.dot(p2));\r\n newLLs.push.apply(newLLs, newPts.map(pt => refLatLng.OffsetVector(pt.divide(1000))));\r\n }\r\n\r\n });\r\n\r\n if (newLLs.length > border.length)\r\n border.splice.apply(border, ([0, border.length] as any[]).concat(newLLs));\r\n }\r\n });\r\n\r\n //add borders\r\n this.getBordersAsEdges(borders, refLatLng, pts, latLngs, borderEdges, 0);\r\n\r\n var idxOff = latLngs.length;\r\n\r\n var bds = Bounds2D.FromPoints(pts);\r\n if (bds.Delta.GetLengthSquared() > 100) {\r\n\r\n separationOffsetIndex = idxOff;\r\n\r\n var spPts: [number, number][] = [];\r\n\r\n separationPolylines.forEach(sp => {\r\n var cspPts = sp.polyline.getPath().getArray().map((gmll: google.maps.LatLng) => refLatLng.DirectionTo(LatLng.FromGMLatLng(gmll)).mul(1000).round()),\r\n spIndices: number[] = [];\r\n\r\n //split separation edge on border points\r\n for (var j = 1, k = cspPts.length - 1; j <= k; j++) {\r\n let sp1 = cspPts[j - 1],\r\n sp2 = cspPts[j],\r\n delta = sp2.sub(sp1),\r\n lenSq = delta.GetLengthSquared();\r\n\r\n if (lenSq <= 100)\r\n continue;\r\n\r\n spIndices.push(spPts.length);\r\n spPts.push([sp1.X, sp1.Y] as [number, number]);\r\n\r\n let len = Math.sqrt(lenSq),\r\n dir = delta.divide(len),\r\n n = dir.LeftHandNormal(),\r\n apts = pts.map(bept3D => {\r\n var bept = bept3D.getXY(),\r\n beDelta = bept.sub(sp1);\r\n if (Math.abs(n.dot(beDelta)) <= 10)\r\n return dir.dot(beDelta);\r\n return 0;\r\n }).filter(t => t > 10 && t < len - 10);\r\n\r\n if (apts.length) {\r\n apts.sort((a, b) => a - b);\r\n\r\n apts.forEach(t => {\r\n var tpt = sp1.add(dir.mul(t));\r\n spIndices.push(spPts.length);\r\n spPts.push([tpt.X, tpt.Y] as [number, number]);\r\n });\r\n }\r\n }\r\n\r\n var lastcspPt = cspPts[cspPts.length - 1];\r\n\r\n spIndices.push(spPts.length);\r\n spPts.push([lastcspPt.X, lastcspPt.Y] as [number, number]);\r\n\r\n for (var j = 1, k = spIndices.length - 1; j <= k; j++) {\r\n let sp1 = spIndices[j - 1],\r\n sp2 = spIndices[j];\r\n if (sp1 !== sp2)\r\n separationEdges.push([sp1, sp2]);\r\n }\r\n });\r\n\r\n cleanPslg(spPts, separationEdges);\r\n\r\n var separationEdgesIndices: number[] = [];\r\n\r\n spPts.forEach(spPt => {\r\n var pt = new Point3D(spPt[0], spPt[1], 0),\r\n llIndex = ArrayHelper.searchIndex(pts, p => p.sub(pt).GetLengthSquared() <= 100);\r\n if (llIndex < 0) {\r\n llIndex = pts.length;\r\n latLngs.push(refLatLng.Offset(pt.Y * 0.001, pt.X * 0.001));\r\n pts.push(pt);\r\n }\r\n separationEdgesIndices.push(llIndex);\r\n });\r\n\r\n separationEdges = separationEdges.filter(se => {\r\n se[0] = separationEdgesIndices[se[0]];\r\n se[1] = separationEdgesIndices[se[1]];\r\n return se[0] !== se[1];\r\n });\r\n\r\n //replace borderegeds with separationedges if needed\r\n //borderEdges = borderEdges.filter(e => !separationEdges.some(se => (se[0] === e[0] && se[1] === e[1]) || (se[0] === e[1] && se[1] === e[0])));\r\n\r\n //cut separation edges on borders and filter\r\n separationEdges = separationEdges.filter(separationEdge => {\r\n\r\n let changed = true, sp1: Point3D, sp2: Point3D;\r\n\r\n //cut on border edges\r\n while (changed) {\r\n changed = false;\r\n\r\n sp1 = pts[separationEdge[0]];\r\n sp2 = pts[separationEdge[1]];\r\n\r\n for (var j = 0, k = borderEdges.length; j < k; j++) {\r\n var borderEdge = borderEdges[j];\r\n\r\n let ep1 = pts[borderEdge[0]],\r\n ep2 = pts[borderEdge[1]],\r\n delta = ep2.sub(ep1),\r\n dir = delta.GetNormalized(),\r\n n = dir.LeftHandNormal(),\r\n dp1 = sp1.sub(ep1),\r\n n1Dot = n.dot(dp1),\r\n dp2 = sp2.sub(ep1),\r\n n2Dot = n.dot(dp2);\r\n\r\n if (n1Dot > 0 !== n2Dot > 0 && Math.abs(n1Dot) > 10 && Math.abs(n2Dot) > 10) {\r\n\r\n var inter = Segment2D.GetIntersection(sp1, sp2, ep1, ep2);\r\n\r\n if (inter) {\r\n var sidx = 0;\r\n if (n.dot(dp1) < 0)\r\n sidx = 1;\r\n\r\n pts[separationEdge[sidx]] = inter.to3D(0);\r\n latLngs[separationEdge[sidx]] = refLatLng.Offset(inter.y * 0.001, inter.x * 0.001);\r\n\r\n changed = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n //filter edges\r\n sp1 = pts[separationEdge[0]];\r\n sp2 = pts[separationEdge[1]];\r\n //let detla = sp2.sub(sp1);\r\n\r\n //if (detla.GetLengthSquared() <= 100)\r\n // return false;\r\n\r\n for (var si = 0; si < 2; si++) {\r\n var sp = pts[separationEdge[si]];\r\n\r\n var bidx = -1,\r\n bDist = Number.MAX_VALUE;\r\n\r\n for (var bi = 0; bi < separationOffsetIndex; bi++) {\r\n var bPt = pts[bi];\r\n var bd = bPt.sub(sp).GetLengthSquared();\r\n if (bd <= 100 && bd < bDist) {\r\n bDist = bd;\r\n bidx = bi;\r\n }\r\n }\r\n\r\n if (bidx >= 0) {\r\n var oSidx = separationEdge[si];\r\n separationEdge[si] = bidx;\r\n if (checkForRemove.indexOf(oSidx) === -1)\r\n checkForRemove.push(oSidx);\r\n }\r\n }\r\n\r\n if (separationEdge[0] < separationOffsetIndex || separationEdge[1] < separationOffsetIndex) {\r\n\r\n //add to additional\r\n if (separationEdge[0] < separationOffsetIndex !== separationEdge[1] < separationOffsetIndex) {\r\n additionalEdges.push(separationEdge);\r\n return false;\r\n }\r\n //return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n //if borderedges are marked as separationEdges, put them to additionalEdges\r\n //var elevatedIndizesHash: { [idx: number]: boolean } = {};\r\n //borderEdges.filter(e => separationEdges.some(se => (se[0] === e[0] && se[1] === e[1]) || (se[0] === e[1] && se[1] === e[0]))).forEach(e => {\r\n // elevatedIndizesHash[e[0]] = true;\r\n // elevatedIndizesHash[e[1]] = true;\r\n //});\r\n //var elevatedIndizes = Object.keys(elevatedIndizesHash).map(k => +k);\r\n //additionalEdges.push.apply(additionalEdges, borderEdges.filter(e => (elevatedIndizes.indexOf(e[0]) !== -1 || elevatedIndizes.indexOf(e[1]) !== -1) && !separationEdges.some(se => (se[0] === e[0] && se[1] === e[1]) || (se[0] === e[1] && se[1] === e[0]))));\r\n\r\n //split border edges\r\n borderEdges = borderEdges.filter(e => {\r\n\r\n let ep1 = pts[e[0]],\r\n ep2 = pts[e[1]],\r\n delta = ep2.sub(ep1),\r\n len = delta.GetLength(),\r\n dir = delta.mul(1 / len),\r\n n = dir.LeftHandNormal(),\r\n sPts: number[] = [];\r\n\r\n for (var si = separationOffsetIndex, j = pts.length; si < j; si++) {\r\n let pt = pts[si],\r\n dp = pt.sub(ep1),\r\n dDot = dir.dot(dp),\r\n nDot = Math.abs(n.dot(dp));\r\n\r\n if (dDot > 0 && dDot < len && nDot <= 10) {\r\n sPts.push(si);\r\n }\r\n }\r\n\r\n if (sPts.length) {\r\n\r\n sPts.sort((i1, i2) => dir.dot(pts[i1]) - dir.dot(pts[i2]));\r\n sPts.unshift(e[0]);\r\n sPts.push(e[1]);\r\n\r\n for (var k = 0, p = sPts.length - 1; k < p; k++) {\r\n additionalEdges.push([sPts[k], sPts[k + 1]]);\r\n }\r\n\r\n return false;\r\n }\r\n //return elevatedIndizes.indexOf(e[0]) === -1 && elevatedIndizes.indexOf(e[1]) === -1;\r\n return !separationEdges.some(se => (se[0] === e[0] && se[1] === e[1]) || (se[0] === e[1] && se[1] === e[0]));\r\n });\r\n\r\n var allEdges = borderEdges.concat(additionalEdges).concat(separationEdges);\r\n\r\n //remove some points\r\n if (checkForRemove.length) {\r\n checkForRemove.sort((a, b) => { return b - a });\r\n checkForRemove.forEach(chckr => {\r\n if (!allEdges.some(e => e[0] === chckr || e[1] === chckr)) {\r\n pts.splice(chckr, 1);\r\n latLngs.splice(chckr, 1);\r\n allEdges.forEach(e => {\r\n if (e[0] > chckr)\r\n e[0]--;\r\n if (e[1] > chckr)\r\n e[1]--;\r\n });\r\n if (separationOffsetIndex > chckr)\r\n separationOffsetIndex--;\r\n }\r\n });\r\n }\r\n\r\n try {\r\n //constrained delaunay triangulation\r\n var triangles = cdt2d(pts.map(pt => [pt.X, pt.Y] as [number, number]), allEdges,\r\n {\r\n delaunay: true,\r\n interior: true,\r\n exterior: false,\r\n infinity: false\r\n });\r\n\r\n //edges <-> triangle relationship\r\n var edgeHash: { [key: string]: { edge: [number, number], triangles: number[] } } = {};\r\n\r\n //filter too small triangles and make all counter clockwise\r\n triangles = triangles.filter(tr => {\r\n let area = Point2D.computeArea((tr).map(ci => pts[ci]));\r\n if (Math.abs(area) > 100 && google.maps.geometry.poly.containsLocation(refLatLng.OffsetVector(pts[tr[0]].add(pts[tr[1]].add(pts[tr[2]])).getXY().divide(3000)).ToGMLatLng(), borderPoly)) {\r\n if ((area > 0)) {\r\n //isClockwise\r\n let swap = tr[1];\r\n tr[1] = tr[2];\r\n tr[2] = swap;\r\n }\r\n\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n //build edgeHash. Edges spanning between seperation edges\r\n triangles.forEach((tr, idx) => {\r\n [\r\n [tr[0], tr[1]],\r\n [tr[1], tr[2]],\r\n [tr[2], tr[0]]\r\n ].filter(e => e[0] >= separationOffsetIndex && e[1] >= separationOffsetIndex && !allEdges.some(se => (se[0] === e[0] && se[1] === e[1]) || (se[0] === e[1] && se[1] === e[0])))\r\n .forEach((e: [number, number]) => {\r\n var k = `${Math.min(e[0], e[1])}_${Math.max(e[0], e[1])}`;\r\n if (!edgeHash[k])\r\n edgeHash[k] = { edge: e, triangles: [idx] };\r\n else\r\n edgeHash[k].triangles.push(idx);\r\n });\r\n });\r\n\r\n //swap triangles so that at best all seperation edges points are connected to the edge with a straight line\r\n Object.keys(edgeHash).map(k => edgeHash[k]).filter(trInd => trInd.triangles.length === 2).forEach(trInd => {\r\n var e = trInd.edge;\r\n var tr1 = triangles[trInd.triangles[0]] as number[];\r\n var tr2 = triangles[trInd.triangles[1]] as number[];\r\n var idxOff = tr1.concat(tr2).filter(idx => idx !== e[0] && idx !== e[1]);\r\n if (idxOff.length === 2 && ((idxOff[0] < separationOffsetIndex) !== (idxOff[1] < separationOffsetIndex))) {\r\n\r\n var idxEdge = idxOff[0] < separationOffsetIndex ? idxOff[0] : idxOff[1];\r\n var idxSep = idxOff[0] < separationOffsetIndex ? idxOff[1] : idxOff[0];\r\n\r\n let edgeSeg = new Segment2D(pts[e[0]].getXY(), pts[e[1]].getXY()),\r\n crossSeg = new Segment2D(pts[idxEdge].getXY(), pts[idxSep].getXY()),\r\n intersecParams = edgeSeg.getIntersectionParams(crossSeg);\r\n\r\n if (intersecParams.p && intersecParams.t1 > 0 && intersecParams.t1 < 1 && intersecParams.t2 > 0 && intersecParams.t2 < 1) {\r\n triangles[trInd.triangles[0]] = [idxEdge, e[0], idxSep];\r\n triangles[trInd.triangles[1]] = [idxEdge, e[1], idxSep];\r\n }\r\n }\r\n\r\n });\r\n\r\n //set z for all points connected to edges\r\n pts.forEach((pt, idx) => {\r\n if (idx < separationOffsetIndex)\r\n return;\r\n\r\n let h = 0;\r\n\r\n triangles.filter(tr => tr.some(ind => ind === idx)).forEach(tr => {\r\n let cBorderEdge = 0,\r\n cSeparationEdge = 0;\r\n\r\n let trEdges = [\r\n [tr[0], tr[1]],\r\n [tr[1], tr[2]],\r\n [tr[2], tr[0]]\r\n ].map(e => {\r\n let isBorderEdge = borderEdges.some(be => (be[0] === e[0] && be[1] === e[1]) || (be[0] === e[1] && be[1] === e[0])),\r\n isSeparationEdge = !isBorderEdge && separationEdges.some(se => (se[0] === e[0] && se[1] === e[1]) || (se[0] === e[1] && se[1] === e[0]));\r\n if (isBorderEdge)\r\n cBorderEdge++;\r\n if (isSeparationEdge)\r\n cSeparationEdge++;\r\n return {\r\n isBorderEdge: isBorderEdge,\r\n isSeparationEdge: isSeparationEdge,\r\n edge: e as [number, number],\r\n ptIdx: e.indexOf(idx)\r\n };\r\n });\r\n\r\n if ((cBorderEdge + cSeparationEdge) === 1) {\r\n if (cBorderEdge) {\r\n let tE = trEdges.filter(tre => tre.isBorderEdge)[0];\r\n if (tE.ptIdx === -1) {\r\n let ePts = tE.edge.map(ei => pts[ei]),\r\n z = Math.abs(ePts[1].sub(ePts[0]).GetNormalized().LeftHandNormal().dot(pt.sub(ePts[0])));// * hFactor;\r\n if (h < z)\r\n h = z;\r\n }\r\n } else {\r\n let tE = trEdges.filter(tre => tre.isSeparationEdge)[0];\r\n if (tE.ptIdx !== -1) {\r\n let ePts = tE.edge.map(ei => pts[ei]),\r\n z = Math.abs(ePts[1].sub(ePts[0]).GetNormalized().LeftHandNormal().dot(pts[tr.filter(tri => !tE.edge.some(tEi => tri === tEi))[0]].sub(ePts[0])));// * hFactor;\r\n if (h < z)\r\n h = z;\r\n }\r\n }\r\n }\r\n\r\n });\r\n\r\n pt.setZ(h);\r\n });\r\n\r\n //set z for every other point\r\n triangles.filter(tr => tr.every(idx => idx >= separationOffsetIndex)).forEach(tr => {\r\n var cpts = (tr).map(ci => pts[ci]);\r\n var z = cpts.reduce((a, b) => { return (a.z < b.z && a.z > 0) || b.z <= 0 ? a : b; }).z;\r\n if (z > 0) {\r\n cpts.filter(pt => pt.z <= 0).forEach(pt => {\r\n pt.setZ(z);\r\n });\r\n }\r\n });\r\n\r\n //build a helper structure\r\n var triangleDefinitons = triangles.map((tr, idx) => {\r\n let ctr = (tr).slice();\r\n let cpts = ctr.map(ci => pts[ci]);\r\n\r\n let trEdges = [[tr[0], tr[1]], [tr[1], tr[2]], [tr[2], tr[0]]],\r\n borderRefEdges = trEdges.filter(trEdge => {\r\n return borderEdges.some(bEdgeRef => (bEdgeRef[0] === trEdge[0] && bEdgeRef[1] === trEdge[1]) || (bEdgeRef[0] === trEdge[1] && bEdgeRef[1] === trEdge[0]));\r\n }),\r\n cEdge: number[] = null;\r\n\r\n if (borderRefEdges.length) {\r\n if (borderRefEdges.length === 1) {\r\n cEdge = borderRefEdges[0];\r\n } else {\r\n let cEdgeLength = 0;\r\n\r\n borderRefEdges.forEach(edgeRef => {\r\n var edgeRefLength = pts[edgeRef[1]].sub(pts[edgeRef[0]]).GetLengthSquared();\r\n if (edgeRefLength > cEdgeLength) {\r\n cEdgeLength = edgeRefLength;\r\n cEdge = edgeRef;\r\n }\r\n });\r\n }\r\n }\r\n\r\n let n = Point3D.getUpwardsNormalFromPoints(pts[tr[0]], pts[tr[1]], pts[tr[2]]);\r\n return {\r\n idx: idx,\r\n tr: [ctr],\r\n //pts: cpts,\r\n n: n,\r\n edge: cEdge ? new Segment2D(pts[cEdge[0]].getXY(), pts[cEdge[1]].getXY()) : null, //border edge\r\n nearestNeighboorIdx: -1,\r\n faceUpwards: cpts.every(pt => pt.Z === cpts[0].Z),\r\n slope: (Point3D.ZAxis.angleTo(n) * 180 / Math.PI), // / 45 * targetSlope,\r\n collectedIdx: []\r\n } as ITriangleDefinition;\r\n });\r\n\r\n //define nearest likely neighboor (a neighboor is the most likely adjacent triangle that defines the same surface area)\r\n triangleDefinitons.forEach(triangleDefiniton => {\r\n if (!triangleDefiniton.edge) {\r\n //var neighboors = triangleDefinitons.filter(other => other.tr.filter((oidx) => triangleDefiniton.tr.some(idx => oidx === idx)).length >= 2);\r\n var neighboors = triangleDefinitons.filter(other => other.idx !== triangleDefiniton.idx && other.faceUpwards === triangleDefiniton.faceUpwards && ShapeData.trianglesAdjacent(other.tr[0], triangleDefiniton.tr[0], allEdges));\r\n\r\n var edgeNeighboors = neighboors.filter(neighboor => !!neighboor.edge);\r\n\r\n if (edgeNeighboors.length === 1) {\r\n triangleDefiniton.nearestNeighboorIdx = edgeNeighboors[0].idx;\r\n } else {\r\n let nearestNeighboorIdx = -1,\r\n nearestNeighboorDist = Number.MAX_VALUE;\r\n\r\n neighboors.forEach((neighboor) => {\r\n var dist = Math.abs(triangleDefiniton.n.dot(neighboor.n) - 1);\r\n if (dist < nearestNeighboorDist) {\r\n nearestNeighboorIdx = neighboor.idx;\r\n nearestNeighboorDist = dist;\r\n }\r\n });\r\n\r\n triangleDefiniton.nearestNeighboorIdx = nearestNeighboorIdx;\r\n }\r\n }\r\n\r\n });\r\n\r\n //if (debugOutput) {\r\n // triangleDefinitons.forEach(trd => {\r\n // console.log(JSON.stringify(trd));\r\n // });\r\n //}\r\n\r\n var edgeTriangles = triangleDefinitons.filter(trd => !!trd.edge && !trd.faceUpwards),\r\n edgeTrianglesFaceUpwards = triangleDefinitons.filter(trd => !!trd.edge && !!trd.faceUpwards);\r\n triangleDefinitons = triangleDefinitons.filter(trd => !trd.edge);\r\n\r\n //join triangles together that belong most likely to the same surface areas\r\n edgeTriangles.forEach(triangleDefiniton => {\r\n var collectedIdx = triangleDefiniton.collectedIdx = [triangleDefiniton.idx];\r\n\r\n if (triangleDefinitons.length) {\r\n var changed = true;\r\n\r\n while (changed) {\r\n changed = false;\r\n\r\n for (var j = 0, k = triangleDefinitons.length; j < k; j++) {\r\n var other = triangleDefinitons[j];\r\n\r\n if (collectedIdx.indexOf(other.idx) === -1 && collectedIdx.indexOf(other.nearestNeighboorIdx) !== -1) {\r\n //join\r\n\r\n collectedIdx.push(other.idx);\r\n\r\n triangleDefiniton.tr.push.apply(triangleDefiniton.tr, other.tr);\r\n\r\n triangleDefinitons.splice(j, 1);\r\n\r\n if (!triangleDefiniton.edge || (other.edge && triangleDefiniton.edge.Length < other.edge.Length))\r\n triangleDefiniton.edge = other.edge;\r\n\r\n changed = true;\r\n\r\n break;\r\n\r\n //var indices = [\r\n // triangleDefiniton.tr.indexOf(other.tr[0]),\r\n // triangleDefiniton.tr.indexOf(other.tr[1]),\r\n // triangleDefiniton.tr.indexOf(other.tr[2])\r\n //];\r\n\r\n //var commonIdx = indices.filter(idx => idx == -1).length;\r\n\r\n //if (commonIdx === 1) {\r\n // changed = true;\r\n\r\n // collectedIdx.push(other.idx);\r\n\r\n // var minIdx = Math.min.apply(Math, indices.filter(idx => idx !== -1));\r\n // var maxIdx = Math.max.apply(Math, indices.filter(idx => idx !== -1));\r\n\r\n // if (minIdx === 0 && maxIdx === triangleDefiniton.tr.length - 1)\r\n // triangleDefiniton.tr.push(other.tr[indices.indexOf(-1)]);\r\n // else\r\n // triangleDefiniton.tr.splice(minIdx + 1, 0, other.tr[indices.indexOf(-1)]);\r\n\r\n // if (!triangleDefiniton.edge)\r\n // triangleDefiniton.edge = other.edge;\r\n\r\n // triangleDefinitons.splice(j, 1);\r\n\r\n // break;\r\n //} else if (commonIdx === 3) {\r\n\r\n //}\r\n }\r\n }\r\n }\r\n }\r\n\r\n });\r\n\r\n //join upwards facing edge triangles\r\n if (edgeTrianglesFaceUpwards.length) {\r\n edgeTriangles.forEach(triangleDefiniton => {\r\n var collectedIdx = triangleDefiniton.collectedIdx;\r\n\r\n if (edgeTrianglesFaceUpwards.length) {\r\n var changed = true;\r\n\r\n while (changed) {\r\n changed = false;\r\n\r\n for (var j = 0, k = edgeTrianglesFaceUpwards.length; j < k; j++) {\r\n var other = edgeTrianglesFaceUpwards[j];\r\n\r\n if (collectedIdx.indexOf(other.idx) === -1) {\r\n\r\n for (var p = 0, q = triangleDefiniton.tr.length; p < q; p++) {\r\n var triangleDefinitonTr = triangleDefiniton.tr[p];\r\n\r\n if (ShapeData.trianglesAdjacent(triangleDefinitonTr, other.tr[0], allEdges)) {\r\n\r\n //join\r\n\r\n collectedIdx.push(other.idx);\r\n\r\n triangleDefiniton.tr.push.apply(triangleDefiniton.tr, other.tr);\r\n\r\n edgeTrianglesFaceUpwards.splice(j, 1);\r\n\r\n if (!triangleDefiniton.edge || (other.edge && triangleDefiniton.edge.Length < other.edge.Length))\r\n triangleDefiniton.edge = other.edge;\r\n\r\n changed = true;\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (changed)\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n //all edge triangles\r\n var allEdgeTriangles = edgeTriangles.concat(edgeTrianglesFaceUpwards);\r\n\r\n //join non edge triangles\r\n if (triangleDefinitons.length) {\r\n\r\n let changed = true;\r\n\r\n while (changed) {\r\n changed = false;\r\n\r\n let len = triangleDefinitons.length;\r\n\r\n for (let l = 0; l < len; l++) {\r\n let triangleDefiniton = triangleDefinitons[l];\r\n\r\n for (let n = l + 1; n < len; n++) {\r\n let other = triangleDefinitons[n];\r\n\r\n if (triangleDefiniton.idx !== other.idx && other.faceUpwards === triangleDefiniton.faceUpwards) {\r\n\r\n for (let r = 0, trLen = triangleDefiniton.tr.length; r < trLen; r++) {\r\n let triangleDefinitonTr = triangleDefiniton.tr[r];\r\n\r\n for (let t = 0, oTrLen = other.tr.length; t < oTrLen; t++) {\r\n let otherTr = other.tr[t];\r\n\r\n if (ShapeData.trianglesAdjacent(triangleDefinitonTr, otherTr, allEdges)) {\r\n //join\r\n\r\n triangleDefiniton.tr.push.apply(triangleDefiniton.tr, other.tr);\r\n\r\n triangleDefinitons.splice(n, 1);\r\n\r\n if (!triangleDefiniton.edge)\r\n triangleDefiniton.edge = other.edge;\r\n\r\n changed = true;\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (changed)\r\n break;\r\n }\r\n }\r\n\r\n if (changed)\r\n break;\r\n }\r\n\r\n if (changed)\r\n break;\r\n }\r\n }\r\n\r\n //find edge triangles\r\n let idxConts: { edgeTr: ITriangleDefinition, trIdx: number }[] = [];\r\n\r\n for (let l = 0, len = triangleDefinitons.length; l < len; l++) {\r\n let triangleDefiniton = triangleDefinitons[l];\r\n\r\n if (!triangleDefiniton.edge) {\r\n\r\n var adjacentEdgeTriangles = allEdgeTriangles.filter(edgetrs => edgetrs.edge && ShapeData.trianglesCollectionAdjacent(edgetrs.tr, triangleDefiniton.tr, allEdges));\r\n\r\n if (adjacentEdgeTriangles.length === 1)\r\n idxConts.push({ edgeTr: adjacentEdgeTriangles[0], trIdx: l });\r\n else if (adjacentEdgeTriangles.length > 1) {\r\n let nearestNeighboor: ITriangleDefinition = null,\r\n nearestNeighboorDist = Number.MAX_VALUE;\r\n\r\n adjacentEdgeTriangles.forEach((neighboor) => {\r\n var dist = Math.abs(triangleDefiniton.n.dot(neighboor.n) - 1);\r\n if (dist < nearestNeighboorDist) {\r\n nearestNeighboor = neighboor;\r\n nearestNeighboorDist = dist;\r\n }\r\n });\r\n\r\n idxConts.push({ edgeTr: nearestNeighboor, trIdx: l });\r\n }\r\n }\r\n }\r\n\r\n idxConts.sort((a, b) => { return b.trIdx - a.trIdx });\r\n\r\n idxConts.forEach(idxCont => {\r\n let adjacentEdgeTriangle = idxCont.edgeTr,\r\n l = idxCont.trIdx;\r\n\r\n adjacentEdgeTriangle.tr.push.apply(adjacentEdgeTriangle.tr, triangleDefinitons[l].tr);\r\n\r\n triangleDefinitons.splice(l, 1);\r\n });\r\n\r\n }\r\n\r\n //set edges on triangles\r\n if (triangleDefinitons.length) {\r\n\r\n var borderSegments: Segment2D[] = [];\r\n\r\n borders.forEach(lls => {\r\n for (var j = 0, k = lls.length; j < k; j++) {\r\n var ll1 = lls[j],\r\n ll2 = lls[(j + 1) % k];\r\n\r\n borderSegments.push(new Segment2D(refLatLng.DirectionTo(ll1).mul(1000).round(), refLatLng.DirectionTo(ll2).mul(1000).round()));\r\n }\r\n });\r\n\r\n triangleDefinitons.forEach(triangleDefiniton => {\r\n if (!triangleDefiniton.edge) {\r\n\r\n let foundEdge: [number, number] = null;\r\n\r\n triangleDefiniton.tr.forEach(trtr => {\r\n\r\n for (var j = 0, k = trtr.length; j < k; j++) {\r\n var tidx1 = trtr[j],\r\n tidx2 = trtr[(j + 1) % k],\r\n seg = new Segment2D(pts[tidx1].getXY(), pts[tidx2].getXY());\r\n\r\n if (borderSegments.some(bs => bs.isOnSameStraightLine(seg, 1000))) {\r\n if (!foundEdge || seg.Length > pts[foundEdge[0]].getXY().sub(pts[foundEdge[1]].getXY()).GetLength())\r\n foundEdge = [tidx1, tidx2] as [number, number];\r\n }\r\n }\r\n });\r\n\r\n if (foundEdge)\r\n triangleDefiniton.edge = new Segment2D(pts[foundEdge[0]].getXY(), pts[foundEdge[1]].getXY());\r\n }\r\n });\r\n }\r\n\r\n //try to join edge triangles\r\n if (allEdgeTriangles.length) {\r\n let changed = true;\r\n\r\n while (changed) {\r\n changed = false;\r\n\r\n for (let l = 0, len = allEdgeTriangles.length; l < len; l++) {\r\n let edgeTriangle = allEdgeTriangles[l];\r\n\r\n if (edgeTriangle.edge) {\r\n\r\n var adjacentEdgeTriangles = allEdgeTriangles.filter(edgetrs => edgetrs.edge && edgetrs.idx !== edgeTriangle.idx && edgetrs.edge.isOnSameStraightLine(edgeTriangle.edge, 1000) && ShapeData.trianglesCollectionAdjacent(edgetrs.tr, edgeTriangle.tr, allEdges));\r\n\r\n if (adjacentEdgeTriangles.length) {\r\n var otherEdgeTriangle = adjacentEdgeTriangles[0];\r\n\r\n otherEdgeTriangle.tr.push.apply(otherEdgeTriangle.tr, edgeTriangle.tr);\r\n\r\n allEdgeTriangles.splice(l, 1);\r\n\r\n changed = true;\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n //debug output to wavefront obj\r\n //if (debugOutput) {\r\n // var off = new Point3D((bds.Delta.x + 5000), 0, 0).mul(0.0001);\r\n // var objHolder = spt.Utils.SerializeTrianglesToObj(triangles.map(trd => (trd).map(idx => pts[idx].mul(0.0001).add(off))));\r\n\r\n // var rtr: Point3D[][] = [];\r\n\r\n // edgeTriangles.forEach(trd => {\r\n // var rPts: Point3D[] = trd.tr.map(idx => pts[idx].mul(0.0001));\r\n // if (trd.tr.length <= 3)\r\n // rtr.push(rPts);\r\n // else {\r\n // var ridx = rPts.map((p, i) => [i, i + 1] as [number, number]);\r\n // ridx[ridx.length - 1][1] = 0;\r\n\r\n // var rtrs = cdt2d(rPts.map(pt => [pt.X, pt.Y] as [number, number]), ridx,\r\n // {\r\n // delaunay: false,\r\n // interior: true,\r\n // exterior: false,\r\n // infinity: false\r\n // });\r\n\r\n // rtrs.forEach(rtri => {\r\n // rtr.push((rtri).map(ri => rPts[ri]));\r\n // });\r\n // }\r\n // });\r\n\r\n // objHolder = spt.Utils.SerializeTrianglesToObj(rtr, null, objHolder);\r\n // spt.Utils.saveTextAsFile(\"Scene.obj\", objHolder.output);\r\n //}\r\n\r\n var allTriangles = allEdgeTriangles.concat(triangleDefinitons);\r\n\r\n //join triangles that are adjacent, face the same direction and have similiar slopes\r\n if (allTriangles.length) {\r\n var minDirAngle = Math.cos(1 / 180 * Math.PI);\r\n\r\n var changed = true;\r\n while (changed) {\r\n changed = false;\r\n\r\n for (var i = 0, l = allTriangles.length - 1; i < l; i++) {\r\n var curTrd = allTriangles[i];\r\n if (!curTrd.edge)\r\n continue;\r\n\r\n var curEdgeDir = curTrd.edge.Direction;\r\n\r\n for (var j = i + 1; j <= l; j++) {\r\n var otherTrd = allTriangles[j];\r\n if (!otherTrd.edge)\r\n continue;\r\n var otherEdgeDir = otherTrd.edge.Direction;\r\n\r\n if (Math.abs(curTrd.slope - otherTrd.slope) < 1 && curEdgeDir.dot(otherEdgeDir) >= minDirAngle && ShapeData.trianglesCollectionAdjacent(curTrd.tr, otherTrd.tr, allEdges)) {\r\n curTrd.tr = curTrd.tr.concat(otherTrd.tr);\r\n allTriangles.splice(j, 1);\r\n changed = true;\r\n break;\r\n }\r\n }\r\n if (changed)\r\n break;\r\n }\r\n }\r\n }\r\n\r\n childShapesArray = allTriangles.map(trd => {\r\n\r\n let paths: google.maps.LatLng[][];\r\n\r\n if (debugOutput) {\r\n paths = trd.tr.map(trs => trs.map(idx => latLngs[idx].ToGMLatLng()));\r\n } else {\r\n let polys = new ClipperLib.Paths(),\r\n resultPolys = new ClipperLib.Paths(),\r\n c = new ClipperLib.Clipper();\r\n\r\n trd.tr.forEach(tr => {\r\n var poly = new ClipperLib.Path();\r\n\r\n tr.forEach(idx => {\r\n var p = pts[idx];\r\n\r\n poly.push(new ClipperLib.IntPoint(p.X, p.Y, p.Z));\r\n });\r\n\r\n polys.push(poly);\r\n });\r\n\r\n if (polys.length > 1) {\r\n c.AddPaths(polys, ClipperLib.PolyType.ptSubject, true);\r\n c.Execute(ClipperLib.ClipType.ctUnion, resultPolys, ClipperLib.PolyFillType.pftNonZero, ClipperLib.PolyFillType.pftNonZero);\r\n } else {\r\n resultPolys = polys;\r\n }\r\n\r\n if (resultPolys.map(rp => ClipperLib.Clipper.Area(rp)).reduce((a, b) => a + b, 0) < 0)\r\n ClipperLib.Clipper.ReversePaths(resultPolys);\r\n paths = resultPolys.map(rpoly => rpoly.map(rp => refLatLng.Offset(rp.Y * 0.001, rp.X * 0.001).ToGMLatLng()));\r\n }\r\n\r\n //let paths = [trd.tr.map(idx => latLngs[idx].ToGMLatLng())];\r\n if (trd.edge) {\r\n return {\r\n paths: paths,\r\n southMarkerPos: refLatLng.Offset(trd.edge.Start.Y * 0.001, trd.edge.Start.X * 0.001).add(refLatLng.Offset(trd.edge.End.Y * 0.001, trd.edge.End.X * 0.001)).mul(0.5),\r\n orientation: trd.edge.getOrientation() + Math.PI,\r\n slope: trd.slope,\r\n pos: BoundsLatLng.FromGmLatLngs(paths).Center\r\n };\r\n }\r\n return {\r\n paths: paths,\r\n southMarkerPos: this.southMarker ? this.southMarker.position.Clone() : null,\r\n orientation: this.southMarker ? this.southMarker.orientation : 0,\r\n slope: trd.slope,\r\n pos: BoundsLatLng.FromGmLatLngs(paths).Center\r\n };\r\n });\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n return childShapesArray.filter(chsh => {\r\n return chsh.paths.reduce((pv, cv) => pv + Math.abs(google.maps.geometry.spherical.computeArea(cv)), 0) > 1;\r\n });\r\n }\r\n\r\n private getCuttingSeparatedPolygons(): LatLng[][] {\r\n var mapDrawer = this.mapDrawer,\r\n viewModel = mapDrawer.viewModel,\r\n refLatLng = viewModel.referenceLatLng,\r\n cuttingPolylines = this.separationPolylines.filter(sp => sp.isCutting && sp.polyline.getPath().getLength() > 1);\r\n\r\n if (!this.poly)\r\n return null;\r\n\r\n let borders = this.poly.getPaths().getArray().map(path => path.getArray().map((ll: google.maps.LatLng) => LatLng.FromGMLatLng(ll))),\r\n borderPoly = new google.maps.Polygon({ paths: borders[0].map(ll => ll.ToGMLatLng()) });\r\n\r\n if (!cuttingPolylines.length)\r\n return borders;\r\n\r\n let borderEdges: [number, number][] = [],\r\n edges: [number, number][] = [],\r\n pts: Point3D[] = [],\r\n latLngs: LatLng[] = [];\r\n\r\n //add borders\r\n this.getBordersAsEdges(borders, refLatLng, pts, latLngs, borderEdges, 0);\r\n\r\n var separationOffsetIndex = pts.length;\r\n\r\n //add cutting lines\r\n cuttingPolylines.forEach(sp => {\r\n var spLLs = sp.polyline.getPath().getArray().map((gmll: google.maps.LatLng) => {\r\n var spll = LatLng.FromGMLatLng(gmll),\r\n spPt = refLatLng.DirectionTo(spll).mul(1000).round().to3D(0),\r\n llIndex = ArrayHelper.searchIndex(pts, (pt) => pt.getXY().DistanceSquaredTo(spPt.getXY()) < 100);\r\n\r\n if (llIndex < 0) {\r\n llIndex = pts.length;\r\n\r\n pts.push(spPt);\r\n }\r\n\r\n return llIndex;\r\n });\r\n\r\n for (var j = 1, k = spLLs.length - 1; j <= k; j++) {\r\n let sp1 = spLLs[j - 1],\r\n sp2 = spLLs[j];\r\n if (sp1 !== sp2)\r\n edges.push([sp1, sp2]);\r\n }\r\n });\r\n\r\n //split border edges\r\n borderEdges = borderEdges.filter(borderEdge => {\r\n\r\n let ep1 = pts[borderEdge[0]],\r\n ep2 = pts[borderEdge[1]],\r\n delta = ep2.sub(ep1),\r\n len = delta.GetLength(),\r\n dir = delta.mul(1 / len),\r\n n = dir.LeftHandNormal(),\r\n sPts: number[] = [];\r\n\r\n for (var si = separationOffsetIndex, j = pts.length; si < j; si++) {\r\n let pt = pts[si],\r\n dp = pt.sub(ep1),\r\n dDot = dir.dot(dp),\r\n nDot = Math.abs(n.dot(dp));\r\n\r\n if (dDot > 0 && dDot < len && nDot <= 10) {\r\n sPts.push(si);\r\n }\r\n }\r\n\r\n if (sPts.length) {\r\n\r\n sPts.sort((i1, i2) => dir.dot(pts[i1]) - dir.dot(pts[i2]));\r\n sPts.unshift(borderEdge[0]);\r\n sPts.push(borderEdge[1]);\r\n\r\n for (var k = 0, p = sPts.length - 1; k < p; k++) {\r\n edges.push([sPts[k], sPts[k + 1]]);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n edges = edges.concat(borderEdges);\r\n\r\n let ptsArray: [number, number][] = pts.map(p => [p.X, p.Y] as [number, number]);\r\n\r\n //clean line intersections\r\n cleanPslg(ptsArray, edges);\r\n\r\n pts = ptsArray.map(pt => new Point3D(pt[0], pt[1], 0));\r\n\r\n //constrained delaunay triangulation\r\n let triangles = cdt2d(ptsArray,\r\n edges,\r\n {\r\n delaunay: true,\r\n interior: true,\r\n exterior: false,\r\n infinity: false\r\n }).filter(tr => {\r\n return !Point2D.pointsOnLine(pts[tr[0]].getXY(), pts[tr[1]].getXY(), pts[tr[2]].getXY()) && google.maps.geometry.poly.containsLocation(refLatLng.OffsetVector(pts[tr[0]].add(pts[tr[1]].add(pts[tr[2]])).getXY().divide(3000)).ToGMLatLng(), borderPoly);\r\n });\r\n //return triangles.map(tr => tr.map(idx => refLatLng.Offset(pts[idx].y * 0.001, pts[idx].x * 0.001)));\r\n return this.calculatePolygonsFromTriangles(pts, edges, triangles).map(poly => poly.map(pt => refLatLng.Offset(pt.Y * 0.001, pt.X * 0.001)));\r\n\r\n }\r\n\r\n calculateChildSlopes() {\r\n if (this._isDisposed || !this.children || this.children.length < 2) {\r\n if (!this._isDisposed && this.children && this.children.length) {\r\n var h = this.height;\r\n this.children.forEach(child => {\r\n child.height = h;\r\n });\r\n }\r\n\r\n return;\r\n }\r\n\r\n let mapDrawer = this.mapDrawer,\r\n viewModel = mapDrawer.viewModel,\r\n targetSlope = this.slope,\r\n targetHeight = this.height,\r\n refLatLng = viewModel.referenceLatLng,\r\n bOff = 0,\r\n isNegativeSlope = targetSlope < 0;\r\n\r\n if (isNegativeSlope)\r\n targetSlope = -targetSlope;\r\n\r\n this.getCuttingSeparatedPolygons().forEach(border => {\r\n\r\n let borderPoly = new google.maps.Polygon({ paths: border.map(ll => ll.ToGMLatLng()) }),\r\n pts: Point3D[] = [],\r\n isSet: { [idx: number]: boolean } = {},\r\n children = this.children.filter(child => google.maps.geometry.poly.containsLocation(LatLng.Point2DToGMLatLng(child.labelPosition.Center), borderPoly)).map(child => {\r\n let indices: number[] = [],\r\n orientation = child.southMarker ? child.southMarker.orientation : 0,\r\n up = Point2D.FromOrientation(orientation + LatLng.PiHalf);\r\n\r\n child.poly.getPaths().getArray().forEach(path => {\r\n path.getArray().forEach((ll: google.maps.LatLng) => {\r\n let pt = refLatLng.DirectionTo(LatLng.FromGMLatLng(ll)).mul(1000).round().to3D(0),\r\n idx = ArrayHelper.searchIndex(pts, p => p.DistanceSquaredTo(pt) <= 1);\r\n if (idx < 0) {\r\n idx = pts.length;\r\n pts.push(pt);\r\n }\r\n indices.push(idx);\r\n });\r\n });\r\n\r\n let minDistance = Number.MAX_VALUE,\r\n distances = indices.map(idx => {\r\n let d = up.dot(pts[idx].getXY());\r\n if (d < minDistance)\r\n minDistance = d;\r\n return d;\r\n }).map(d => d - minDistance),\r\n ptsMeta = indices.map((idx, i) => {\r\n return {\r\n pt: pts[idx],\r\n idx: idx,\r\n dist: distances[i]\r\n } as { pt: Point3D; idx: number; dist: number; };\r\n });\r\n\r\n return {\r\n shapeData: child,\r\n slope: child.slopeOverride ? child.customSlope : -1,\r\n orientation: orientation,\r\n area: Math.abs(Point2D.computeArea(indices.map(idx => pts[idx]))),//google.maps.geometry.spherical.computeArea((child.poly).getPath()),\r\n pts: ptsMeta\r\n };\r\n });\r\n\r\n children.sort((a, b) => b.area - a.area);\r\n\r\n let toCheck = children.filter(c => c.pts.some(cpt => !isSet[cpt.idx])),\r\n current = toCheck.length ? (ArrayHelper.firstOrNull(toCheck, c => c.slope >= 0) || toCheck[0]) : null;\r\n\r\n while (current) {\r\n\r\n let currentPts = current.pts,\r\n setPts = currentPts.filter(cpt => isSet[cpt.idx]),\r\n plane: Plane3D = null;\r\n\r\n //try to find the best fitting plane\r\n\r\n if (setPts.length >= 3)\r\n plane = Plane3D.fromPoints(setPts.map(cpt => cpt.pt));\r\n\r\n if (!plane && setPts.length >= 2) {\r\n let g = ArrayHelper.byMin(currentPts, cpt => cpt.dist),\r\n p1 = ArrayHelper.firstOrNull(setPts, cpt => cpt.dist > g.dist);\r\n if (p1) {\r\n let p2 = ArrayHelper.firstOrNull(setPts, cpt => cpt.dist > g.dist && cpt !== p1 && !Point3D.pointsOnLine(g.pt, p1.pt, cpt.pt));\r\n if (p2)\r\n plane = Plane3D.fromThreePoints(g.pt, p1.pt, p2.pt);\r\n }\r\n }\r\n\r\n if (!plane && setPts.length >= 1) {\r\n let g = ArrayHelper.byMin(currentPts, cpt => cpt.dist),\r\n p1 = g.pt.add(Point2D.FromOrientation(current.orientation).to3D(0)),\r\n p2 = ArrayHelper.firstOrNull(setPts, cpt => cpt.dist > g.dist && !Point3D.pointsOnLine(g.pt, p1, cpt.pt));\r\n if (p2)\r\n plane = Plane3D.fromThreePoints(g.pt, p1, p2.pt);\r\n }\r\n\r\n if (!plane) {\r\n let slope = current.slope;\r\n if (slope < 0)\r\n slope = current.slope = targetSlope;\r\n\r\n let slopeRad = slope * Math.PI / 180;\r\n\r\n let g = ArrayHelper.byMin(currentPts, cpt => cpt.dist),\r\n p1 = g.pt.add(Point2D.FromOrientation(current.orientation).to3D(0)),\r\n p2 = g.pt.add(Point2D.FromOrientation(current.orientation + LatLng.PiHalf).to3D(Math.tan(slopeRad)));\r\n plane = Plane3D.fromThreePoints(g.pt, p1, p2);\r\n }\r\n\r\n if (plane.dir.Z < 0)\r\n plane.dir = plane.dir.neg();\r\n\r\n if (plane.dir.Z <= 0)\r\n plane.dir = new Point3D(0, 0, 1);\r\n\r\n let dir = plane.dir,\r\n pos = plane.pos;\r\n\r\n //use this plane to update z on every point\r\n\r\n currentPts.filter(cpt => !isSet[cpt.idx]).forEach(cpt => {\r\n let p = cpt.pt;\r\n cpt.pt.setZ(((dir.x * (p.x - pos.x) + dir.y * (p.y - pos.y)) / -dir.z) + pos.z);\r\n isSet[cpt.idx] = true;\r\n });\r\n\r\n toCheck = children.filter(c => c.pts.some(cpt => !isSet[cpt.idx]));\r\n current = toCheck.length ? (ArrayHelper.firstOrNull(toCheck, c => c.slope >= 0) || ArrayHelper.byMax(toCheck, c => c.pts.filter(cpt => isSet[cpt.idx]).length)) : null;\r\n }\r\n\r\n var bounds = Bounds3D.FromPoints(pts),\r\n cOff = -bounds.Min.Z,\r\n curbOff = targetHeight - (bounds.Max.Z + cOff);\r\n if (bOff <= 0 || curbOff < bOff)\r\n bOff = curbOff;\r\n //now set orientation and slope\r\n children.forEach(child => {\r\n let childPts = child.pts.map(cpt => cpt.pt),\r\n plane = Plane3D.fromPoints(childPts),\r\n cHeight = Math.max.apply(Math, childPts.map(pt => pt.Z));\r\n\r\n if (plane && plane.dir.Z < 0)\r\n plane.dir = plane.dir.neg();\r\n\r\n if (!plane || plane.dir.Z <= 0)\r\n plane = new Plane3D(childPts[0], new Point3D(0, 0, 1));\r\n\r\n let cSlope = (Point3D.ZAxis.angleTo(plane.dir) * 180 / Math.PI),\r\n cDir = cSlope > 0.1 ? plane.dir.getXY().GetNormalized().LeftHandNormal() : Point2D.FromOrientation(child.orientation);\r\n\r\n let cSeg = ArrayHelper.byMax(child.shapeData.getSegments(), seg => seg.Direction.dot(cDir));\r\n\r\n if (child.shapeData.southMarker) {\r\n child.shapeData.southMarker.orientation = cSeg.getOrientation();\r\n child.shapeData.southMarker.position = LatLng.FromPoint2D(cSeg.getCenter());\r\n } else {\r\n child.shapeData.southMarker = new SouthMarker(LatLng.FromPoint2D(cSeg.getCenter()), cSeg.getOrientation(), true, mapDrawer);\r\n }\r\n\r\n child.shapeData.height = cHeight + cOff;\r\n child.shapeData.slope = cSlope;\r\n\r\n });\r\n });\r\n\r\n if (isNegativeSlope) {\r\n this.children.forEach(child => {\r\n child.height += bOff;\r\n\r\n if (child.southMarker) {\r\n var cDir = Point2D.FromOrientation(child.southMarker.orientation).LeftHandNormal(),\r\n ptLens = (Array.prototype.concat.apply([], child.getBorderPoints()) as Point2D[]).map(pt => pt.dot(cDir)),\r\n minLen = Math.min.apply(null, ptLens) as number,\r\n maxLen = Math.max.apply(null, ptLens) as number,\r\n delta = maxLen - minLen;\r\n\r\n child.southMarker.orientation = (child.southMarker.orientation + Math.PI) % (Math.PI * 2);\r\n child.southMarker.position = LatLng.FromPoint2D(child.southMarker.position.ToPoint2D().add(cDir.mul(delta)));\r\n }\r\n });\r\n } else {\r\n this.children.forEach(child => {\r\n child.height += bOff;\r\n });\r\n }\r\n }\r\n\r\n update() {\r\n this.mapDrawer.viewModel.layer.typeName[this.typeName].onPolygonChanged(this.poly);\r\n }\r\n\r\n getMap(): google.maps.Map {\r\n return this.poly ? this.poly.getMap() : null;\r\n }\r\n\r\n getApproximatedRoofPlane(callback: (plane: THREE.Plane, minDepth: number, maxDepth: number) => void, mapDrawer?: MapDrawer) {\r\n if (this._isDisposed)\r\n return;\r\n\r\n if (!mapDrawer)\r\n mapDrawer = this.mapDrawer;\r\n\r\n var bd = this.bounds.Extend(5),\r\n w = bd.Width,\r\n h = bd.Height;\r\n\r\n if (w <= 0 || w >= 1000 || h <= 0 || h >= 1000)\r\n return;\r\n\r\n var pxSize = 256,\r\n sizeFactor = Math.min(pxSize / w, pxSize / h),\r\n width = Math.round(w * sizeFactor),\r\n height = Math.round(h * sizeFactor),\r\n ocr = mapDrawer.ocrManager.ocr,\r\n zoom: number,\r\n maxSize = Math.max(w, h);\r\n\r\n if (maxSize > 500)\r\n zoom = 18;\r\n else if (maxSize > 250)\r\n zoom = 19;\r\n else\r\n zoom = 23;\r\n\r\n LoaderManager.addLoadingJob();\r\n\r\n ocr.request({\r\n bounds: bd,\r\n level: zoom,\r\n renderWidth: width,\r\n renderHeight: height,\r\n depthMaterial: true,\r\n drawFn: (canvas, gl, order) => {\r\n if (this._isDisposed) {\r\n callback(null, 0, 0);\r\n return;\r\n }\r\n\r\n if (order.maxLevel <= 20) {\r\n DManager.ShowSmallInfo(MDStrings.ApproxNotEnoughDepthError);\r\n callback(null, 0, 0);\r\n return;\r\n }\r\n\r\n var heightData = new Uint8Array(width * height * 4);\r\n gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, heightData);\r\n\r\n var minZ = Number.MAX_VALUE,\r\n maxZ = 0,\r\n idx: number,\r\n r: number,\r\n g: number,\r\n b: number,\r\n wlen = width * 4,\r\n positions: number[] = [],\r\n poly = this.latLngs[0].map(ll => {\r\n let v = bd.Min.DirectionTo(ll);\r\n return [Math.round(v.x * width / w), Math.round(v.y * height / h)];\r\n }).reverse();\r\n\r\n GMapsUtils.triangulationUtils.pointsInPolygon([poly], (x, y) => {\r\n if (x > 0 && x < width && y > 0 && y < height) {\r\n idx = y * wlen + x * 4;\r\n r = heightData[idx];\r\n g = heightData[idx + 1];\r\n b = heightData[idx + 2];\r\n d = r / 256 + g + b * 256;\r\n positions.push(x / width * w, y / height * h, d);\r\n if (d < minZ)\r\n minZ = d;\r\n if (d > maxZ)\r\n maxZ = d;\r\n }\r\n });\r\n\r\n var y: number,\r\n x: number,\r\n d: number,\r\n minDepth = Number.MAX_VALUE, //lowest point in the vicinity\r\n maxDepth = maxZ; //heighest point on the roof\r\n\r\n //calc min and max depth\r\n for (y = 0; y < height; y++) {\r\n for (x = 0; x < width; x++) {\r\n idx = y * wlen + x * 4;\r\n r = heightData[idx];\r\n g = heightData[idx + 1];\r\n b = heightData[idx + 2];\r\n\r\n d = r / 256 + g + b * 256;\r\n\r\n if (d < minDepth)\r\n minDepth = d;\r\n //if (d > maxDepth)\r\n // maxDepth = d;\r\n }\r\n }\r\n\r\n callback(spt.ThreeJs.utils.approximatePlaneFromPositionArray(positions, minZ), minDepth, maxDepth);\r\n\r\n },\r\n callBack: (success) => {\r\n LoaderManager.finishLoadingJob();\r\n }\r\n });\r\n }\r\n\r\n remove(mapDrawer?: MapDrawer) {\r\n if (!mapDrawer)\r\n mapDrawer = this.mapDrawer;\r\n var layer = mapDrawer && mapDrawer.viewModel.layer.typeName[this.typeName];\r\n if (layer)\r\n layer.removeById(this.id);\r\n if (!this._isDisposed)\r\n this.dispose();\r\n }\r\n\r\n dispose() {\r\n if (this._isDisposed)\r\n return;\r\n this.clearTexts();\r\n this._isDisposed = true;\r\n this.subsciptions.forEach(sp => { sp.dispose(); });\r\n this.subsciptions = [];\r\n this.children.splice(0, this.children.length).forEach((sh) => { sh.remove(); });\r\n if (this.parent) {\r\n this.parent.children.remove((sh => sh.id === this.id));\r\n this.parent = null;\r\n }\r\n this.separationPolylines.splice(0, this.separationPolylines.length).forEach((sh) => { sh.remove(); });\r\n ko.untrack(this);\r\n if (this.southMarker) {\r\n this.southMarker.dispose();\r\n this.southMarker = null;\r\n }\r\n this.poly.setMap(null);\r\n this.mapDrawer = null;\r\n this.poly = null;\r\n }\r\n }\r\n\r\n export class MultiPolygon implements IGoogleMapsPolygon {\r\n //getDraggable(): boolean {\r\n // return this.polygons.every(p => p.getDraggable());\r\n //}\r\n\r\n getEditable(): boolean {\r\n return this.polygons.every(p => p.getEditable());\r\n }\r\n\r\n getMap(): google.maps.Map {\r\n var polygons = this.polygons;\r\n for (var i = 0, j = polygons.length; i < j; i++) {\r\n var polygon = polygons[i],\r\n map = polygon.getMap();\r\n if (map)\r\n return map;\r\n }\r\n }\r\n\r\n getPaths(): google.maps.MVCArray> {\r\n var arr: google.maps.MVCArray> = new google.maps.MVCArray>();\r\n this.polygons.forEach(poly => {\r\n var paths = poly ? poly.getPaths() : null;\r\n if (paths)\r\n arr.push(new google.maps.MVCArray(paths.getAt(0).getArray()));\r\n });\r\n return arr;\r\n }\r\n\r\n getVisible(): boolean {\r\n return this.polygons.every(p => p.getVisible());\r\n }\r\n\r\n //setDraggable(draggable: boolean): void {\r\n // this.polygons.forEach(p => { p.setDraggable(draggable); });\r\n //}\r\n\r\n setEditable(editable: boolean): void {\r\n this.polygons.forEach(p => { p.setEditable(editable); });\r\n }\r\n\r\n setMap(map: google.maps.Map): void {\r\n this.polygons.forEach(p => { p.setMap(map); });\r\n }\r\n\r\n setOptions(options: google.maps.PolygonOptions): void {\r\n this.polygons.forEach(p => { p.setOptions(options); });\r\n }\r\n\r\n setPaths(paths: google.maps.LatLng[][]): void {\r\n var polygons = this.polygons;\r\n\r\n if (paths) {\r\n var len = paths.length;\r\n if (polygons.length !== len)\r\n return;\r\n\r\n for (var i = 0; i < len; i++) {\r\n var path = paths[i];\r\n if (path && path.length)\r\n polygons[i].setPaths([path]);\r\n }\r\n\r\n }\r\n }\r\n\r\n setVisible(visible: boolean): void {\r\n this.polygons.forEach(p => { p.setVisible(visible); });\r\n }\r\n\r\n get polygons(): IGoogleMapsPolygon[] {\r\n var data = this.userData as MultiShapeData;\r\n if (data)\r\n return data.shapeDatas.map(d => d.poly);\r\n return [];\r\n }\r\n\r\n userData: MultiShapeData;\r\n\r\n get _isDisposed(): boolean {\r\n return this.polygons.every(p => !!p._isDisposed);\r\n }\r\n\r\n set _isDisposed(disposed: boolean) {\r\n this.polygons.forEach(p => { p._isDisposed = !!disposed; });\r\n }\r\n }\r\n\r\n export class MultiShapeData extends ShapeData {\r\n constructor(mapDrawer: MapDrawer) {\r\n super(mapDrawer, new MultiPolygon(), null, null, null);\r\n\r\n ko.track(this, ['shapeDatas']);\r\n\r\n this.mType = 'MultiShapeData';\r\n\r\n this.subsciptions.forEach(sp => { sp.dispose(); });\r\n this.subsciptions = [];\r\n\r\n //this.subsciptions.push(ko.getObservable(this, 'shapeDatas').subscribe(this.onShapeDatasChanged.bind(this), null, \"arrayChange\"));\r\n\r\n //isParallel, detailsViewVisible, locked, frozen, _rot, _scale, selected, hovered, southMarker, id, title, typeName, height, latLngs, points, bounds, pos, rotation, scale\r\n var sharedBooleans: (keyof ShapeData)[] = [\"isParallel\", \"locked\", \"frozen\", \"detailsViewVisible\"];\r\n var sharedStrings: (keyof ShapeData)[] = [\"id\", \"title\", \"typeName\"];\r\n\r\n ko.untrack(this, [\"height\", \"isParallel\", \"locked\", \"frozen\", \"id\", \"title\", \"typeName\", \"detailsViewVisible\"]);\r\n\r\n delete this.height;\r\n\r\n ko.defineProperty(this, \"height\",\r\n {\r\n get: () => {\r\n var v0 = this.shapeDatas.length ? this.shapeDatas[0].height : 0;\r\n return this.shapeDatas.length && this.shapeDatas.every(d => d.height === v0) ? v0 : 0;\r\n },\r\n set: (v: number) => {\r\n this.shapeDatas.forEach(d => { d.height = v || 0; });\r\n }\r\n });\r\n\r\n sharedBooleans.forEach(k => {\r\n\r\n delete this[k];\r\n\r\n ko.defineProperty(this as any, k,\r\n {\r\n get: () => {\r\n return this.shapeDatas.every(d => !!d[k]);\r\n },\r\n set: (v: boolean) => {\r\n this.shapeDatas.forEach(d => { d[k as any] = !!v; });\r\n }\r\n });\r\n });\r\n\r\n sharedStrings.forEach(k => {\r\n\r\n delete this[k];\r\n\r\n ko.defineProperty(this as any, k,\r\n {\r\n get: () => {\r\n if (this.shapeDatas.length) {\r\n var rd = this.shapeDatas[0][k];\r\n if (this.shapeDatas.every(d => d[k] === rd))\r\n return rd;\r\n }\r\n\r\n return null as any;\r\n },\r\n set: (v: string) => {\r\n this.shapeDatas.forEach(d => { d[k as any] = v; });\r\n }\r\n });\r\n });\r\n }\r\n\r\n shapeDatas: ShapeData[] = [];\r\n\r\n poly: MultiPolygon;\r\n\r\n deleteShapes() {\r\n if (this.shapeDatas.length && confirm(\"Delete selection?\"))\r\n this.mapDrawer.deleteSelectables(this.shapeDatas.splice(0, this.shapeDatas.length));\r\n }\r\n\r\n update() {\r\n this.shapeDatas.forEach(shapeData => {\r\n if (!shapeData._isDisposed)\r\n shapeData.mapDrawer.viewModel.layer.typeName[shapeData.typeName].onPolygonChanged(shapeData.poly);\r\n });\r\n ko.valueHasMutated(this, 'poly');\r\n }\r\n\r\n updateStyle() {\r\n this.shapeDatas.forEach(shapeData => {\r\n if (!shapeData._isDisposed)\r\n shapeData.updateStyle();\r\n });\r\n }\r\n }\r\n\r\n export class PolygonLayer implements IPolygonLayer {\r\n constructor(options: IPolygonLayer, mapDrawer: MapDrawer) {\r\n if (options) {\r\n\r\n ['shapeSelectedHoveredStyle', 'shapeSelectedStyle', 'shapeHoveredStyle', 'shapeStyle']\r\n .forEach((style: string) => {\r\n var s = {};\r\n Object.keys(mapDrawer[style]).forEach(k => { s[k] = mapDrawer[style][k]; });\r\n if (options[style])\r\n Object.keys(options[style]).filter(k => options[style][k] !== undefined && options[style][k] !== null).forEach(k => { s[k] = options[style][k]; });\r\n options[style] = s;\r\n });\r\n\r\n for (var key in options) {\r\n switch (key) {\r\n case 'polygons':\r\n case 'count':\r\n break;\r\n case 'maxCount':\r\n if (options[key] && options[key] > 0)\r\n this[key] = options[key];\r\n break;\r\n default:\r\n this[key] = options[key];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n ko.track(this);\r\n\r\n this.lastClickedIndex = -1;\r\n this.mapDrawer = mapDrawer;\r\n\r\n if (this.locked === undefined)\r\n ko.defineProperty(this, \"locked\", () => { return this.controlledByParent || this.count >= (this.maxCount || 2000); });\r\n\r\n ko.getObservable(this, 'polygons').subscribe(this.onPolygonsChanged.bind(this), null, \"arrayChange\");\r\n\r\n ko.defineProperty(this, \"count\", () => {\r\n return this.polygons.length;\r\n });\r\n\r\n ko.defineProperty(this, \"polygonsLocked\",\r\n {\r\n get: () => {\r\n return this.polygons.every(d => d.userData.locked);\r\n },\r\n set: (v: boolean) => {\r\n this.polygons.forEach(d => { d.userData.locked = v; });\r\n }\r\n });\r\n\r\n //ko.defineProperty(this, \"selectedShapeDataId\", () => {\r\n // var selected = this.mapDrawer.viewModel.selection;\r\n // if (!selected.length)\r\n // return null;\r\n\r\n // var polygons = this.polygons,\r\n // currentSelected = polygons.filter(poly => !poly._isDisposed && poly.userData && !poly.userData._isDisposed && poly.userData.selected);\r\n\r\n // if (currentSelected.length === 1)\r\n // return currentSelected[0].userData.id;\r\n // return null;\r\n //});\r\n\r\n //ko.defineProperty(this, 'currentPolygon',\r\n // {\r\n // get: () => {\r\n // return this.getPolygonById(this.currentPolygonId) || (this.polygons.length ? this.polygons[0] : null);\r\n // },\r\n // set: (p: IGoogleMapsPolygon) => {\r\n // if (p && p.userData)\r\n // this.currentPolygonId = p.userData.id;\r\n // else\r\n // this.currentPolygonId = null;\r\n // }\r\n // });\r\n\r\n ko.defineProperty(this, \"bounds\", () => {\r\n var latLngs: LatLng[] = [];\r\n var polys = this.polygons;\r\n polys.forEach(poly => {\r\n var userData = poly.userData as ShapeData;\r\n if (userData) {\r\n var bd = userData.bounds;\r\n if (bd) {\r\n latLngs.push(bd.Min);\r\n latLngs.push(bd.Max);\r\n }\r\n }\r\n });\r\n return BoundsLatLng.FromLatLngs(latLngs);\r\n });\r\n }\r\n\r\n mapDrawer: MapDrawer;\r\n polygons: IGoogleMapsPolygon[] = [];\r\n //currentPolygonId: string = null;\r\n //currentPolygon: IGoogleMapsPolygon;\r\n //selectedShapeDataId: string;\r\n readonly bounds: BoundsLatLng;\r\n\r\n count: number;\r\n maxCount: number = 0;\r\n zIndex: number;\r\n\r\n lastClickedIndex: number;\r\n\r\n shapeSelectedHoveredStyle: IShapeStyle;\r\n shapeSelectedStyle: IShapeStyle;\r\n shapeHoveredStyle: IShapeStyle;\r\n shapeStyle: IShapeStyle;\r\n\r\n typeName: string;\r\n layerName: string;\r\n\r\n locked: boolean;\r\n polygonsLocked: boolean;\r\n\r\n parent: IPolygonLayer;\r\n child: IPolygonLayer;\r\n controlledByParent: boolean;\r\n isPassive: boolean;\r\n\r\n togglePolygonsLocked(b: boolean) {\r\n this.polygonsLocked = !!b;\r\n }\r\n\r\n getNewName(count?: number): string {\r\n if (count === undefined)\r\n count = this.polygons.length;\r\n var newName = this.layerName;\r\n if (this.typeName === window.RoofTypeName && $(\"#Roof_Title[name='Roof.Title']\").length) {\r\n var n = $(\"#Roof_Title[name='Roof.Title']\").val();\r\n if (n && typeof n === \"string\" && n.length > 1)\r\n newName = n;\r\n }\r\n if (this.typeName !== window.BuildingTypeName)\r\n newName += ' ' + (count > 99 ? ('' + count) : ('0' + count).slice(-2));\r\n return newName;\r\n }\r\n\r\n onPolyListClick(data: ShapeData, index: number) {\r\n var mapDrawer = this.mapDrawer,\r\n lastClickedIndex = this.lastClickedIndex,\r\n polys = this.polygons;\r\n\r\n mapDrawer.selectTool('SelectTool');\r\n\r\n if (data.parent && data.parent instanceof ShapeData) {\r\n var parent = data.parent,\r\n childIds: string[] = [];\r\n mapDrawer.doSelectSelectable(parent);\r\n\r\n if (mapDrawer.shiftDown && index !== lastClickedIndex && lastClickedIndex >= 0 && index >= 0 && polys && polys.length > index && polys.length > lastClickedIndex) {\r\n var step = index < lastClickedIndex ? 1 : -1;\r\n for (var i = index; i !== lastClickedIndex; i += step) {\r\n var poly = polys[i];\r\n if (poly && !poly._isDisposed && poly.userData)\r\n childIds.push(poly.userData.id);\r\n }\r\n } else\r\n childIds.push(data.id);\r\n\r\n parent.selectChildrenByIds(childIds);\r\n } else {\r\n if (mapDrawer.shiftDown && index !== lastClickedIndex && lastClickedIndex >= 0 && index >= 0 && polys && polys.length > index && polys.length > lastClickedIndex) {\r\n var step = index < lastClickedIndex ? 1 : -1;\r\n for (var i = index; i !== lastClickedIndex; i += step) {\r\n var poly = polys[i];\r\n if (poly && !poly._isDisposed && poly.userData)\r\n mapDrawer.doSelectSelectable(poly.userData);\r\n }\r\n } else\r\n mapDrawer.doSelectSelectable(data);\r\n }\r\n\r\n this.lastClickedIndex = +index;\r\n\r\n return true; //false := preventDefault()\r\n }\r\n\r\n getPolygonById(id: string) {\r\n var polygons = this.polygons;\r\n if (!id || !polygons.length)\r\n return null;\r\n\r\n for (var i = 0, j = polygons.length; i < j; i++) {\r\n var poly = polygons[i];\r\n if (poly.userData.id === id)\r\n return poly;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n removeById(id: string) {\r\n var rem = this.polygons.remove(s => s._isDisposed || s.userData.id === id);\r\n rem.forEach(this.onPolygonsRemoved.bind(this));\r\n }\r\n\r\n addPolygon(poly: IGoogleMapsPolygon, mapDrawer: MapDrawer) {\r\n if (poly) {\r\n if (!this.maxCount || this.polygons.length < this.maxCount)\r\n this.polygons.push(poly);\r\n else {\r\n if (poly.userData && poly.userData.dispose)\r\n poly.userData.dispose();\r\n else\r\n poly.setMap(null);\r\n }\r\n }\r\n }\r\n\r\n //onPolyPointInserted(poly: IGoogleMapsPolygon, path: google.maps.MVCArray, index: number) {\r\n // if (!poly || poly._isDisposed || !poly.userData || poly.userData.skipUpdate)\r\n // return;\r\n // //console.log(\"onPolyPointInserted \" + index);\r\n // this.onPolygonChanged(poly);\r\n //}\r\n\r\n //onPolyPointRemoved(poly: IGoogleMapsPolygon, path: google.maps.MVCArray, index: number, prev: google.maps.LatLng) {\r\n // if (!poly || poly._isDisposed || !poly.userData || poly.userData.skipUpdate)\r\n // return;\r\n // //console.log(\"onPolyPointRemoved \" + index);\r\n // this.onPolygonChanged(poly);\r\n //}\r\n\r\n forceUpdateAllPolygons() {\r\n if (this.polygons.length) {\r\n this.polygons.forEach(poly => {\r\n this.onPolygonChanged(poly);\r\n });\r\n }\r\n }\r\n\r\n onPolyPointChanged(shapeData: ShapeData, path: google.maps.MVCArray, index: number, prev: google.maps.LatLng) {\r\n if (!shapeData || shapeData._isDisposed || shapeData.skipUpdate)\r\n return;\r\n //var t = LatLng.FromGMLatLng(prev).DirectionTo(LatLng.FromGMLatLng(path.getAt(index)));\r\n //console.log(`onPolyPointChanged ${index} (${t.x},${t.y})`);\r\n shapeData.movePoint(LatLng.FromGMLatLng(prev), LatLng.FromGMLatLng(path.getAt(index)), shapeData.id);\r\n this.onPolygonChanged(shapeData.poly);\r\n }\r\n\r\n onPolygonChanged(poly: IGoogleMapsPolygon) {\r\n if (!poly || poly._isDisposed || !poly.userData || poly.userData.skipUpdate)\r\n return;\r\n if (poly.userData) {\r\n if (poly.userData.poly)\r\n ko.valueHasMutated(poly.userData, 'poly');\r\n if (poly.userData.regenerate)\r\n poly.userData.regenerate();\r\n }\r\n\r\n ko.valueHasMutated(this, 'polygons');\r\n }\r\n\r\n removeEvents(shapeData: ShapeData) {\r\n var poly = shapeData.poly;\r\n\r\n if ((poly)._gm_events_added_ex) {\r\n (poly)._gm_events_added_ex = false;\r\n\r\n var paths = poly.getPaths();\r\n\r\n paths.forEach(path => {\r\n google.maps.event.clearListeners(path, 'insert_at');\r\n google.maps.event.clearListeners(path, 'remove_at');\r\n google.maps.event.clearListeners(path, 'set_at');\r\n });\r\n\r\n google.maps.event.clearListeners(poly, 'click');\r\n google.maps.event.clearListeners(poly, 'mouseover');\r\n google.maps.event.clearListeners(poly, 'mouseout');\r\n\r\n //google.maps.event.clearListeners(poly, 'dragstart');\r\n //google.maps.event.clearListeners(poly, 'drag');\r\n //google.maps.event.clearListeners(poly, 'dragend');\r\n }\r\n }\r\n\r\n addEvents(shapeData: ShapeData) {\r\n var poly = shapeData.poly,\r\n paths = poly.getPaths(),\r\n mapDrawer = this.mapDrawer,\r\n viewModel = mapDrawer.viewModel;\r\n\r\n if (!(poly)._gm_events_added_ex) {\r\n (poly)._gm_events_added_ex = true;\r\n\r\n google.maps.event.addListener(poly, 'click', viewModel.onSelectableClick.bind(viewModel, shapeData));\r\n google.maps.event.addListener(poly, 'mouseover', viewModel.onSelectableMouseover.bind(viewModel, shapeData));\r\n google.maps.event.addListener(poly, 'mouseout', viewModel.onSelectableMouseout.bind(viewModel, shapeData));\r\n\r\n paths.forEach(path => {\r\n google.maps.event.addListener(path, \"insert_at\", this.onPolygonChanged.bind(this, poly));\r\n google.maps.event.addListener(path, \"remove_at\", this.onPolygonChanged.bind(this, poly));\r\n google.maps.event.addListener(path, \"set_at\", this.onPolyPointChanged.bind(this, poly.userData, path));\r\n });\r\n\r\n //google.maps.event.addListener(poly, 'dragstart', viewModel.onPolygonDragStart.bind(viewModel, poly));\r\n //google.maps.event.addListener(poly, 'drag', viewModel.onPolygonDragged.bind(viewModel, poly));\r\n //google.maps.event.addListener(poly, 'dragend', viewModel.onPolygonDragEnd.bind(viewModel, poly));\r\n\r\n }\r\n }\r\n\r\n onPolygonsChanged(changes: { value: IGoogleMapsPolygon, status: string }[]) {\r\n changes.forEach((change) => {\r\n switch (change.status) {\r\n case \"deleted\":\r\n this.onPolygonsRemoved(change.value);\r\n break;\r\n case \"added\":\r\n this.onPolygonsAdded(change.value);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n onPolygonsRemoved(poly: IGoogleMapsPolygon) {\r\n if (!poly || poly._isDisposed)\r\n return;\r\n\r\n if (poly.userData)\r\n this.removeEvents(poly.userData as ShapeData);\r\n\r\n if (poly.userData && (poly.userData).dispose)\r\n (poly.userData).dispose();\r\n else\r\n poly.setMap(null);\r\n\r\n poly.userData = null;\r\n\r\n poly._isDisposed = true;\r\n\r\n lsGoogleMaps.checkRoofStepAfterRemove();\r\n\r\n }\r\n\r\n onPolygonsAdded(poly: IGoogleMapsPolygon) {\r\n if (!poly || poly._isDisposed)\r\n return;\r\n\r\n var mapDrawer = this.mapDrawer;\r\n\r\n if (!poly.userData)\r\n poly.userData = new ShapeData(mapDrawer, poly, spt.Utils.GenerateGuid(), this.getNewName(), this.typeName);\r\n\r\n if (poly instanceof google.maps.Polygon && !(poly)._gm_setPaths_ex) {\r\n (poly)._gm_setPaths_ex = true;\r\n poly.setPaths = (path: any) => {\r\n if (poly._isDisposed || !poly.userData || poly.userData._isDisposed)\r\n return google.maps.Polygon.prototype.setPaths.call(poly, path);\r\n\r\n this.removeEvents(poly.userData as ShapeData);\r\n var res = google.maps.Polygon.prototype.setPaths.call(poly, path);\r\n this.addEvents(poly.userData as ShapeData);\r\n return res;\r\n };\r\n }\r\n\r\n if (this.controlledByParent)\r\n poly.userData.controlledByParent = true;\r\n\r\n var clickable = !poly.userData.locked && !poly.userData.frozen;\r\n\r\n poly.setOptions({\r\n clickable: clickable,\r\n //draggable: clickable && poly.userData.selected,\r\n draggable: false,\r\n editable: clickable && poly.userData.selected && !poly.userData.controlledByParent,\r\n map: mapDrawer.map,\r\n zIndex: this.zIndex || 0\r\n });\r\n\r\n this.addEvents(poly.userData as ShapeData);\r\n\r\n poly.userData.typeName = this.typeName;\r\n //poly.userData.bounds = BoundsLatLng.FromGmLatLngs(paths);\r\n poly.userData.updateStyle();\r\n if (poly.userData.regenerate)\r\n poly.userData.regenerate();\r\n\r\n var toolName = mapDrawer.viewModel.selectedToolName;\r\n\r\n if (toolName === \"ReferenceLengthTool\")\r\n return;\r\n\r\n if (toolName === \"SelectTool\" || toolName === \"SelectRectTool\" || toolName === \"RidgeTool\") {\r\n //mapDrawer.selectShape(poly.userData as ShapeData);\r\n if (this.locked)\r\n mapDrawer.autoSelectLayer();\r\n } else {\r\n if (this.locked) {\r\n mapDrawer.selectTool(\"SelectTool\");\r\n mapDrawer.autoSelectLayer();\r\n } else\r\n poly.userData.frozen = true;\r\n }\r\n }\r\n }\r\n\r\n export interface ISnapResult {\r\n snapped: boolean;\r\n aligned: boolean;\r\n result: LatLng;\r\n }\r\n\r\n export class Helperline implements ISelectableItem {\r\n constructor(mapDrawer: MapDrawer, start?: LatLng, end?: LatLng, zIndex?: number) {\r\n\r\n this.start = start || new LatLng();\r\n this.end = end || this.start;\r\n\r\n ko.track(this);\r\n\r\n var id = spt.Utils.GenerateGuid();\r\n this.typeName = \"Helperline\";\r\n\r\n mapDrawer.viewModel.setInstance(id, this);\r\n Object.defineProperty(this, \"id\",\r\n {\r\n configurable: true,\r\n enumerable: true,\r\n get: () => {\r\n return id;\r\n },\r\n set: (v) => {\r\n if (id && mapDrawer.viewModel.hasInstance(id))\r\n mapDrawer.viewModel.removeInstance(id);\r\n id = v;\r\n if (id && !this._isDisposed)\r\n mapDrawer.viewModel.setInstance(id, this);\r\n }\r\n });\r\n\r\n this.mapDrawer = mapDrawer;\r\n\r\n var polyLineOpts: google.maps.PolylineOptions = {\r\n map: mapDrawer.map,\r\n draggable: false,\r\n editable: false,\r\n clickable: false,\r\n zIndex: zIndex || 0,\r\n visible: this.isVisible\r\n };\r\n\r\n var polyLine = this.polyLine = new google.maps.Polyline($.extend(polyLineOpts, Helperline.shapeStyle) as google.maps.PolylineOptions);\r\n var polyLineOuter = this.polyLineOuter = new google.maps.Polyline($.extend(polyLineOpts, Helperline.shapeStyle) as google.maps.PolylineOptions);\r\n\r\n polyLineOuter.setPath(polyLine.getPath());\r\n\r\n var clickable = !this.locked && !this.frozen;\r\n\r\n polyLineOuter.setOptions({\r\n strokeWeight: Helperline.clickTolerance,\r\n clickable: clickable,\r\n editable: false,\r\n draggable: clickable && this.selected,\r\n strokeOpacity: 0,\r\n visible: this.isVisible\r\n });\r\n\r\n google.maps.event.addListener(polyLineOuter, 'click', mapDrawer.doSelectSelectable.bind(mapDrawer, this));\r\n google.maps.event.addListener(polyLineOuter, 'mouseover', this.onMouseover.bind(this, mapDrawer));\r\n google.maps.event.addListener(polyLineOuter, 'mouseout', this.onMouseout.bind(this, mapDrawer));\r\n google.maps.event.addListener(polyLineOuter, 'dragend', this.onDragged.bind(this, mapDrawer));\r\n //google.maps.event.addListener(polyLineOuter, 'drag', this.onDragged.bind(this, mapDrawer));\r\n\r\n this.update();\r\n\r\n ko.getObservable(this, 'selected').subscribe(this.onSelected.bind(this, mapDrawer));\r\n\r\n ko.getObservable(this, 'isVisible').subscribe(this.updateVisibility.bind(this));\r\n ko.getObservable(this, 'locked').subscribe(this.updateClickable.bind(this));\r\n ko.getObservable(this, 'frozen').subscribe(this.updateClickable.bind(this));\r\n\r\n ko.defineProperty(this, 'pos',\r\n {\r\n get: () => {\r\n if (!this.polyLine || !this.mapDrawer)\r\n return Point2D.Zero;\r\n var refLatLng = this.mapDrawer.viewModel.referenceLatLng;\r\n return refLatLng.DirectionTo(this.start);\r\n },\r\n set: (p: Point2D) => {\r\n if (!this.polyLine || !this.mapDrawer)\r\n return;\r\n var t = p.sub(this.pos).mul(0.001),\r\n e = this.end,\r\n s = this.start;\r\n this.setStartEnd(s.Offset(t.y, t.x), e.Offset(t.y, t.x));\r\n }\r\n });\r\n\r\n ko.defineProperty(this, 'rotation',\r\n {\r\n get: () => {\r\n if (!this.polyLine || !this.mapDrawer)\r\n return 0;\r\n var d = this.end.ToPoint2D().sub(this.start.ToPoint2D());\r\n return Math.atan2(d.y, d.x) / Math.PI * 180;\r\n },\r\n set: (r: number) => {\r\n if (!this.polyLine || !this.mapDrawer)\r\n return;\r\n var rad = r / 180 * Math.PI;\r\n var d = new Point2D(Math.cos(rad), Math.sin(rad));\r\n this.end = LatLng.FromPoint2D(this.start.ToPoint2D().add(d));\r\n }\r\n });\r\n\r\n }\r\n\r\n private updateVisibility(newValue: boolean) {\r\n console.log(`updateVisibility: ${newValue}`);\r\n this.isVisible = newValue;\r\n if (!this.polyLine)\r\n return;\r\n this.polyLine.setOptions({\r\n visible: this.isVisible\r\n });\r\n this.polyLineOuter.setOptions({\r\n visible: this.isVisible\r\n });\r\n }\r\n\r\n private updateClickable() {\r\n if (!this.polyLine)\r\n return;\r\n\r\n var clickable = !this.locked && !this.frozen;\r\n\r\n this.polyLineOuter.setOptions({\r\n clickable: clickable\r\n });\r\n if (!clickable && this.selected)\r\n this.mapDrawer.doSelectSelectable(this, false, false, true);\r\n }\r\n\r\n static SnapDirection(n: Point2D, mapDrawer: MapDrawer): Point2D {\r\n var helperLines = mapDrawer.viewModel.helperLines;\r\n\r\n if (!helperLines || !helperLines.length)\r\n return n;\r\n\r\n let ndist = 1,\r\n normals: Point2D[] = helperLines.length ? [] : [Point2D.XAxis, Point2D.YAxis],\r\n foundNormal: Point2D = null;\r\n\r\n if (helperLines.length) {\r\n helperLines.forEach(helperLine => {\r\n normals.push.apply(normals, helperLine.dirs);\r\n });\r\n }\r\n\r\n normals.forEach(normal => {\r\n let d = 1 - Math.abs(n.dot(normal));\r\n if (d < ndist) {\r\n ndist = d;\r\n foundNormal = normal;\r\n }\r\n });\r\n\r\n if (foundNormal && n.dot(foundNormal) < 0)\r\n foundNormal = foundNormal.neg();\r\n\r\n return foundNormal || n;\r\n }\r\n\r\n static GetSnapByHelperlines(prevPrevLatLng: LatLng, prevLatLng: LatLng, curLatLng: LatLng, mapDrawer: MapDrawer, align: boolean, snapClosest: boolean): ISnapResult {\r\n var result: LatLng = null;\r\n\r\n var curp = curLatLng.ToPoint2D(),\r\n helperLines = mapDrawer.viewModel.helperLines,\r\n clickTolerance = Helperline.clickTolerance,\r\n pxFactor = mapDrawer.getPixelFactor();\r\n\r\n var snapped = false;\r\n var aligned = false;\r\n\r\n if (align && prevLatLng) {\r\n\r\n let prev = prevLatLng.ToPoint2D(),\r\n t = curp.sub(prev),\r\n lensq = t.GetLengthSquared();\r\n\r\n if (lensq > 0) {\r\n let len = Math.sqrt(lensq),\r\n n = t.divide(len),\r\n ndist = 1,\r\n normals: Point2D[] = helperLines.length ? [] : [Point2D.XAxis, Point2D.YAxis],\r\n foundNormal: Point2D = null;\r\n\r\n // adrian\r\n let isActivePrevDirection = true;\r\n if (isActivePrevDirection) {\r\n let prevNorm = prev.sub(prevPrevLatLng.ToPoint2D()).GetNormalized();\r\n normals = helperLines.length ? [] : [prevNorm, prevNorm.RightHandNormal()]\r\n }\r\n\r\n if (helperLines.length) {\r\n helperLines.forEach(helperLine => {\r\n normals.push.apply(normals, helperLine.dirs);\r\n });\r\n }\r\n\r\n normals.forEach(normal => {\r\n let d = 1 - Math.abs(n.dot(normal));\r\n if (d < ndist) {\r\n ndist = d;\r\n foundNormal = normal;\r\n }\r\n });\r\n\r\n if (foundNormal) {\r\n if (n.dot(foundNormal) < 0)\r\n foundNormal = foundNormal.neg();\r\n\r\n if (helperLines.length) {\r\n let minDist = Number.MAX_VALUE,\r\n nlen = foundNormal.dot(t),\r\n seg = new Segment2D(prev, prev.add(foundNormal.mul(nlen)), true),\r\n foundPoint: Point2D = null;\r\n\r\n if (nlen !== 0) {\r\n\r\n helperLines.forEach(helperLine => {\r\n if (snapClosest) {\r\n let intersection = helperLine.getIntersection(seg);\r\n if (intersection &&\r\n intersection.sub(prev).GetNormalized().dot(foundNormal) > 0) {\r\n let dist = intersection.DistanceTo(curp) * pxFactor;\r\n if (dist <= clickTolerance && dist < minDist) {\r\n minDist = dist;\r\n foundPoint = intersection;\r\n }\r\n }\r\n } else if (helperLine.distanceToPoint(seg.End) * pxFactor <= clickTolerance)\r\n snapped = true;\r\n });\r\n }\r\n\r\n if (foundPoint) {\r\n result = LatLng.FromPoint2D(foundPoint);\r\n snapped = true;\r\n } else {\r\n result = LatLng.FromPoint2D(seg.End);\r\n aligned = true;\r\n }\r\n } else {\r\n result = LatLng.FromPoint2D(prev.add(foundNormal.mul(foundNormal.dot(t))));\r\n snapped = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!result && snapClosest && helperLines.length) {\r\n let minDist = Number.MAX_VALUE,\r\n foundPoint: Point2D = null;\r\n\r\n let p = mapDrawer.getPointByPoint(LatLng.FromPoint2D(curp), clickTolerance, true, false);\r\n if (p) {\r\n minDist = 0;\r\n foundPoint = p;\r\n } else {\r\n helperLines.forEach(helperLine => {\r\n var dist = helperLine.distanceToPoint(curp) * pxFactor;\r\n if (dist <= clickTolerance && dist < minDist) {\r\n minDist = dist;\r\n foundPoint = helperLine.getClosestPoint(curp);\r\n }\r\n });\r\n }\r\n\r\n if (foundPoint) {\r\n result = LatLng.FromPoint2D(foundPoint);\r\n snapped = true;\r\n }\r\n }\r\n\r\n return {\r\n snapped: snapped,\r\n aligned: aligned,\r\n result: result || curLatLng\r\n };\r\n }\r\n\r\n static SnapToNextIncrement(prevLatLng: LatLng, curLatLng: LatLng, mapDrawer: MapDrawer) {\r\n var p1 = prevLatLng.ToPoint2D();\r\n var p2 = curLatLng.ToPoint2D();\r\n var t = p2.sub(p1);\r\n\r\n var realLen = prevLatLng.DistanceTo(curLatLng) * 1000;\r\n var targetLen = Math.round(realLen / mapDrawer.viewModel.keyBoardSteps.internalValue) * mapDrawer.viewModel.keyBoardSteps.internalValue;\r\n if (targetLen <= 0)\r\n targetLen = mapDrawer.viewModel.keyBoardSteps.internalValue;\r\n if (realLen <= 0)\r\n realLen = targetLen;\r\n\r\n return LatLng.FromPoint2D(p1.add(t.mul(targetLen / realLen)));\r\n }\r\n\r\n static SnapToFixedLength(prevLatLng: LatLng, curLatLng: LatLng, targetLen: number) {\r\n var p1 = prevLatLng.ToPoint2D();\r\n var p2 = curLatLng.ToPoint2D();\r\n var t = p2.sub(p1);\r\n\r\n var realLen = prevLatLng.DistanceTo(curLatLng) * 1000;\r\n\r\n return LatLng.FromPoint2D(p1.add(t.mul(targetLen / realLen)));\r\n }\r\n\r\n getClosestPoint(p: Point2D): Point2D {\r\n if (!p || this._isDisposed)\r\n return null;\r\n\r\n return this.segment2D.getClosestPoint(p);\r\n }\r\n\r\n distanceToPoint(p: Point2D): number {\r\n if (!p || this._isDisposed)\r\n return Number.POSITIVE_INFINITY;\r\n\r\n return this.segment2D.distanceToPoint(p);\r\n }\r\n\r\n getSegments(): Segment2D[] {\r\n if (this._isDisposed)\r\n return [];\r\n return [this.segment2D];\r\n }\r\n\r\n getPoints(): Point2D[][] {\r\n return [[]];\r\n }\r\n\r\n getIntersection(seg: Segment2D) {\r\n return this.segment2D.getIntersection(seg);\r\n }\r\n\r\n updateStyle() {\r\n if (!this.mapDrawer || !this.polyLine)\r\n return;\r\n var poly = this.polyLine,\r\n hovered = this.hovered,\r\n selected = this.selected;\r\n if (selected)\r\n poly.setOptions(hovered ? Helperline.shapeSelectedHoveredStyle : Helperline.shapeSelectedStyle);\r\n else\r\n poly.setOptions(hovered ? Helperline.shapeHoveredStyle : Helperline.shapeStyle);\r\n }\r\n\r\n setPosX(v: string | number) {\r\n var y = this.pos.y;\r\n var x = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: -1000000,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n });\r\n this.pos = new Point2D(x, y);\r\n }\r\n\r\n setPosY(v: string | number) {\r\n var x = this.pos.x;\r\n var y = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: -1000000,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n });\r\n this.pos = new Point2D(x, y);\r\n }\r\n\r\n setRotation(v: string | number) {\r\n var r = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: -360,\r\n max: 360,\r\n applyArithmetic: true,\r\n notImperial: true\r\n });\r\n this.rotation = r;\r\n }\r\n\r\n onSelected(mapDrawer: MapDrawer, b: boolean) {\r\n if (!this.polyLine)\r\n return;\r\n this.polyLineOuter.setOptions({\r\n draggable: !!b\r\n });\r\n this.updateStyle();\r\n }\r\n\r\n onMouseover(mapDrawer: MapDrawer) {\r\n if (this.selectable) {\r\n this.hovered = true;\r\n this.updateStyle();\r\n }\r\n }\r\n\r\n onMouseout(mapDrawer: MapDrawer) {\r\n if (this.selectable) {\r\n this.hovered = false;\r\n this.updateStyle();\r\n }\r\n }\r\n\r\n onDragged(mapDrawer: MapDrawer) {\r\n var path = this.polyLine.getPath();\r\n if (path) {\r\n var start = this.start = LatLng.FromGMLatLng(path.getAt(0) as google.maps.LatLng),\r\n end = this.end = LatLng.FromGMLatLng(path.getAt(1) as google.maps.LatLng);\r\n\r\n var s = start.ToPoint2D(),\r\n e = end.ToPoint2D(),\r\n dir = e.sub(s).GetNormalized();\r\n\r\n this.dirs = [dir, dir.rot90()];\r\n\r\n this.segment2D = new Segment2D(s, e, true);\r\n\r\n }\r\n }\r\n\r\n static clickTolerance = 15;\r\n\r\n static shapeStyle: IShapeStyle = {\r\n strokeWeight: 1.5,\r\n strokeColor: '#00d8ff',\r\n strokeOpacity: 0.7\r\n };\r\n\r\n static shapeHoveredStyle: IShapeStyle = {\r\n strokeWeight: 1.5,\r\n strokeColor: '#00d8ff',\r\n strokeOpacity: 0.9\r\n };\r\n\r\n static shapeSelectedStyle: IShapeStyle = {\r\n strokeWeight: 2,\r\n strokeColor: '#00a9e1',\r\n strokeOpacity: 1\r\n };\r\n\r\n static shapeSelectedHoveredStyle: IShapeStyle = {\r\n strokeWeight: 2,\r\n strokeColor: '#00c0ff',\r\n strokeOpacity: 1\r\n };\r\n\r\n id: string;\r\n typeName: string;\r\n selected: boolean = false;\r\n selectable: boolean = false;\r\n hovered: boolean = false;\r\n private start: LatLng;\r\n private end: LatLng;\r\n private delta: LatLng;\r\n private polyLine: google.maps.Polyline;\r\n private polyLineOuter: google.maps.Polyline;\r\n private segment2D: Segment2D;\r\n pos: Point2D;\r\n mapDrawer: MapDrawer;\r\n rotation: number;\r\n dirs: Point2D[] = [new Point2D(0, 1), new Point2D(1, 0)];\r\n locked: boolean = false;\r\n frozen: boolean = false;\r\n isVisible: boolean = false;\r\n _isDisposed: boolean;\r\n\r\n get Start(): LatLng {\r\n return this.start;\r\n }\r\n\r\n set Start(value: LatLng) {\r\n this.start = value;\r\n this.update();\r\n }\r\n\r\n get End(): LatLng {\r\n return this.end;\r\n }\r\n\r\n set End(value: LatLng) {\r\n this.end = value;\r\n this.update();\r\n }\r\n\r\n get Delta(): LatLng {\r\n return this.delta;\r\n }\r\n\r\n get Segment(): Segment2D {\r\n return this.segment2D;\r\n }\r\n\r\n setStartEnd(s: LatLng, e: LatLng) {\r\n this.start = s;\r\n this.end = e;\r\n this.update();\r\n }\r\n\r\n update() {\r\n var start = this.start,\r\n delta = this.delta = this.end.Equals(start) ? new LatLng(0.1, 0) : this.end.sub(start),\r\n end = start.add(delta),\r\n s = start.ToPoint2D(),\r\n e = end.ToPoint2D(),\r\n dir = e.sub(s).GetNormalized(),\r\n d = dir.mul(50);\r\n this.dirs = [dir, dir.rot90()];\r\n\r\n var path = this.polyLine.getPath();\r\n\r\n this.segment2D = new Segment2D(s, e, true);\r\n\r\n path.setAt(0, LatLng.Point2DToGMLatLng(s.sub(d)));\r\n path.setAt(1, LatLng.Point2DToGMLatLng(s.add(d)));\r\n }\r\n\r\n moveByLatLng(latLng: LatLng) {\r\n if (this._isDisposed)\r\n return;\r\n\r\n this.start = this.start.add(latLng);\r\n this.end = this.end.add(latLng);\r\n this.update();\r\n }\r\n\r\n moveByOffset(offset: Point2D) {\r\n if (this._isDisposed)\r\n return;\r\n\r\n this.start = this.start.Offset(offset.y, offset.x);\r\n this.end = this.end.Offset(offset.y, offset.x);\r\n this.update();\r\n }\r\n\r\n setMap(map: google.maps.Map) {\r\n this.polyLine.setMap(map);\r\n }\r\n\r\n getMap(): google.maps.Map {\r\n return this.polyLine.getMap();\r\n }\r\n\r\n remove(mapDrawer: MapDrawer) {\r\n this.dispose();\r\n }\r\n\r\n dispose() {\r\n if (this._isDisposed)\r\n return;\r\n\r\n if (this.id && this.mapDrawer)\r\n this.mapDrawer.viewModel.helperLines.remove(hl => hl.id === this.id);\r\n\r\n ko.untrack(this);\r\n var polyLine = this.polyLine,\r\n polyLineOuter = this.polyLineOuter;\r\n\r\n google.maps.event.clearListeners(polyLineOuter, 'click');\r\n google.maps.event.clearListeners(polyLineOuter, 'mouseover');\r\n google.maps.event.clearListeners(polyLineOuter, 'mouseout');\r\n //google.maps.event.clearListeners(polyLineOuter, 'drag');\r\n google.maps.event.clearListeners(polyLineOuter, 'dragend');\r\n\r\n polyLine.setMap(null);\r\n polyLineOuter.setMap(null);\r\n\r\n this.polyLine = null;\r\n this.polyLineOuter = null;\r\n this._isDisposed = true;\r\n }\r\n }\r\n\r\n export class SouthMarker {\r\n\r\n constructor(position: LatLng, orientation: number, visible: boolean, mapDrawer: MapDrawer, zIndex?: number) {\r\n this.position = position || LatLng.FromGMLatLng(mapDrawer.map.getCenter());\r\n this.orientation = orientation;\r\n this.visible = !!visible;\r\n\r\n ko.track(this);\r\n\r\n this.id = spt.Utils.GenerateGuid();\r\n\r\n var marker = this.marker = new google.maps.Marker({\r\n position: this.position.ToGMLatLng(),\r\n map: mapDrawer.map,\r\n zIndex: zIndex || 11,\r\n visible: this.visible,\r\n clickable: false,\r\n draggable: false\r\n });\r\n\r\n ko.getObservable(this, 'clickable').subscribe(this.updateClickable.bind(this));\r\n ko.getObservable(this, 'visible').subscribe(this.updateVisible.bind(this));\r\n ko.getObservable(this, 'hovered').subscribe(this.updateStyle.bind(this));\r\n ko.getObservable(this, 'orientation').subscribe(this.update.bind(this));\r\n ko.getObservable(this, 'position').subscribe(this.updatePosition.bind(this));\r\n\r\n google.maps.event.addListener(marker, 'click', this.onClick.bind(this, mapDrawer));\r\n google.maps.event.addListener(marker, 'mouseover', this.onMouseover.bind(this, mapDrawer));\r\n google.maps.event.addListener(marker, 'mouseout', this.onMouseout.bind(this, mapDrawer));\r\n\r\n this.update();\r\n }\r\n\r\n clone(mapDrawer: MapDrawer, zIndex?: number): SouthMarker {\r\n return new SouthMarker(this.position.Clone(), this.orientation, this.visible, mapDrawer, zIndex);\r\n }\r\n\r\n onClick(mapDrawer: MapDrawer) {\r\n if (!this._isDisposed && mapDrawer.viewModel.selectedToolName === 'SouthMarkerTool')\r\n (mapDrawer.viewModel.currentTool as SouthMarkerTool).onClickSouthMarker(this, mapDrawer);\r\n }\r\n\r\n onMouseover(mapDrawer: MapDrawer) {\r\n if (!this._isDisposed && mapDrawer.viewModel.selectedToolName === 'SouthMarkerTool')\r\n (mapDrawer.viewModel.currentTool as SouthMarkerTool).onMouseoverSouthMarker(this, mapDrawer);\r\n }\r\n\r\n onMouseout(mapDrawer: MapDrawer) {\r\n if (!this._isDisposed && mapDrawer.viewModel.selectedToolName === 'SouthMarkerTool')\r\n (mapDrawer.viewModel.currentTool as SouthMarkerTool).onMouseoutSouthMarker(this, mapDrawer);\r\n }\r\n\r\n updateVisible() {\r\n if (!this.marker)\r\n return;\r\n this.marker.setVisible(this.visible);\r\n }\r\n\r\n updateClickable() {\r\n if (!this.marker)\r\n return;\r\n this.marker.setClickable(this.clickable);\r\n }\r\n\r\n updateStyle() {\r\n if (!this.marker)\r\n return;\r\n this.marker.setOptions($.extend({\r\n position: this.position.ToGMLatLng(),\r\n visible: this.visible\r\n }, this.hovered ? SouthMarker.shapeHoveredStyle : SouthMarker.shapeStyle));\r\n }\r\n\r\n update() {\r\n if (!this.marker)\r\n return;\r\n this.marker.setOptions({\r\n position: this.position.ToGMLatLng(),\r\n icon: this.getSymbol()\r\n });\r\n }\r\n\r\n updatePosition() {\r\n if (!this.marker)\r\n return;\r\n this.marker.setPosition(this.position.ToGMLatLng());\r\n }\r\n\r\n marker: google.maps.Marker;\r\n position: LatLng;\r\n\r\n static size = 15;\r\n static dist = 8;\r\n hovered: boolean = false;\r\n visible: boolean = true;\r\n clickable: boolean = false;\r\n id: string;\r\n orientation: number;\r\n _isDisposed: boolean;\r\n\r\n static shapeStyle: IShapeStyle = {\r\n strokeColor: '#212121',\r\n fillColor: '#FFFFFF',\r\n fillOpacity: 0.4,\r\n strokeWeight: 2,\r\n strokeOpacity: 0.7\r\n };\r\n\r\n static shapeHoveredStyle: IShapeStyle = {\r\n strokeColor: '#212121',\r\n fillColor: '#FFFFFF',\r\n fillOpacity: 0.6,\r\n strokeWeight: 2,\r\n strokeOpacity: 1\r\n };\r\n\r\n getSymbol(): google.maps.Symbol {\r\n\r\n var size = SouthMarker.size,\r\n dist = SouthMarker.dist,\r\n dirR = Point2D.FromOrientation(this.orientation),\r\n dirL = dirR.neg(),\r\n n = dirL.rot90(),\r\n nb = n.neg(),\r\n nl = n.add(dirL);\r\n\r\n var path = `M ${n.mul(dist)} l ${nl.mul(size * 1.5)} l ${dirR.mul(size)} l ${n.mul(size * 1.5)} l ${dirR.mul(size)} l ${nb.mul(size * 1.5)} l ${dirR.mul(size)} z M${n.mul(dist * 0.7).add(dirL.mul(size * 1.3))} l ${dirR.mul(size * 2.6)}`;\r\n\r\n var icon: google.maps.Symbol = {\r\n path: path,\r\n scale: 1\r\n };\r\n\r\n return $.extend(icon, this.hovered ? SouthMarker.shapeHoveredStyle : SouthMarker.shapeStyle) as google.maps.Symbol;\r\n }\r\n\r\n dispose() {\r\n ko.untrack(this);\r\n if (this.marker) {\r\n var marker = this.marker;\r\n\r\n google.maps.event.clearListeners(marker, 'click');\r\n google.maps.event.clearListeners(marker, 'mouseover');\r\n google.maps.event.clearListeners(marker, 'mouseout');\r\n\r\n marker.setMap(null);\r\n this.marker = null;\r\n }\r\n this._isDisposed = true;\r\n }\r\n\r\n getLatLngOrientation(): SolarProTool.LatLngOrientation {\r\n if (this._isDisposed)\r\n return null;\r\n\r\n var p = this.position;\r\n return {\r\n Latitude: p.Latitude,\r\n Longitude: p.Longitude,\r\n Orientation: this.orientation\r\n }\r\n }\r\n\r\n applyTransform(transformation: Transformation3D, mapDrawer: MapDrawer) {\r\n var dirR = Point2D.FromOrientation(this.orientation),\r\n p = this.position.ToPoint2D(),\r\n pts = [p.sub(dirR), p.add(dirR)].map(pt => transformation.transform(pt)),\r\n delta = pts[1].sub(pts[0]),\r\n orientation = Math.atan2(delta.y, delta.x) || 0;\r\n\r\n this.position = LatLng.FromPoint2D(pts[0].add(pts[1]).mul(0.5));\r\n this.orientation = orientation;\r\n }\r\n\r\n moveByLatLng(latLng: LatLng) {\r\n var pos = this.position = this.position.add(latLng);\r\n this.marker.setPosition(pos.ToGMLatLng());\r\n }\r\n\r\n moveByOffset(offset: Point2D) {\r\n var pos = this.position = this.position.Offset(offset.y, offset.x);\r\n this.marker.setPosition(pos.ToGMLatLng());\r\n }\r\n }\r\n\r\n export interface IOsmBuilding {\r\n Id: string;\r\n Nodes: { Latitude: number, Longitude: number }[];\r\n }\r\n\r\n export class OsmBuildings {\r\n private mapDrawer: MapDrawer = null;\r\n needsUpdate = false;\r\n intervalTime = 100;\r\n swLat = 0.0;\r\n swLong = 0.0;\r\n neLat = 0.0;\r\n neLong = 0.0;\r\n delayTime = 0;\r\n buildingPolys: { [id: string]: google.maps.Polygon } = {};\r\n buildingsVisible = false;\r\n boundsChangedListener: google.maps.MapsEventListener = null;\r\n buildingClickListener: ((polygon: google.maps.Polygon) => void) = null;\r\n time = 0;\r\n interval = 0;\r\n\r\n buildingStyle: IShapeStyle = {\r\n strokeWeight: 1,\r\n fillColor: \"#81EB8A\",\r\n fillOpacity: 0.3,\r\n strokeColor: \"#12B012\",\r\n strokeOpacity: 0.7,\r\n clickable: true,\r\n editable: false,\r\n draggable: false,\r\n visible: true\r\n };\r\n\r\n buildingHoverStyle: IShapeStyle = {\r\n strokeWeight: 1,\r\n fillColor: \"#81EB8A\",\r\n fillOpacity: 0.8,\r\n strokeColor: \"#12B012\",\r\n strokeOpacity: 0.9,\r\n clickable: true,\r\n editable: false,\r\n draggable: false,\r\n visible: true\r\n };\r\n\r\n start(mapDrawer: MapDrawer, clickListener: ((polygon: google.maps.Polygon) => void)) {\r\n this.mapDrawer = mapDrawer;\r\n this.buildingClickListener = clickListener;\r\n this.time = Date.now();\r\n this.buildingsVisible = true;\r\n this.boundsChangedListener = google.maps.event.addListener(mapDrawer.map, 'bounds_changed', this.mapBoundsChange.bind(this));\r\n this.interval = setInterval(this.update.bind(this), this.intervalTime) as any;\r\n this.mapBoundsChange();\r\n }\r\n\r\n stop() {\r\n this.buildingsVisible = false;\r\n this.clearBuildings();\r\n if (this.interval)\r\n clearInterval(this.interval);\r\n if (this.boundsChangedListener) {\r\n google.maps.event.removeListener(this.boundsChangedListener);\r\n this.boundsChangedListener = null;\r\n }\r\n this.buildingClickListener = null;\r\n if (this.mapDrawer) {\r\n this.mapDrawer.map.setOptions({ draggableCursor: null });\r\n this.mapDrawer = null;\r\n }\r\n }\r\n\r\n update() {\r\n var now = Date.now();\r\n var dt = now - this.time;\r\n this.time = now;\r\n if (this.needsUpdate) {\r\n this.delayTime -= dt;\r\n if (this.delayTime <= 0) {\r\n if (this.buildingsVisible) {\r\n AManager.Controller('StaticImages').Method('GetOsmBuildingsBounds').Data({ swLat: this.swLat, swLong: this.swLong, neLat: this.neLat, neLong: this.neLong }).withLoading(false).CallBack(this.onGetBuildings.bind(this));\r\n }\r\n\r\n //AManager.Ajax('Anordnung3DService.asmx', 'GetOsmBuildingsBounds', JSON.stringify({ swLat: this.swLat, swLong: this.swLong, neLat: this.neLat, neLong: this.neLong }), function (res) { self.onGetBuildings(res); });\r\n this.delayTime = 1000;\r\n this.needsUpdate = false;\r\n }\r\n }\r\n }\r\n\r\n mapBoundsChange() {\r\n if (this.buildingsVisible && this.mapDrawer && this.mapDrawer.map.getZoom() >= 17) {\r\n var bounds = this.mapDrawer.map.getBounds();\r\n var ne = bounds.getNorthEast();\r\n var sw = bounds.getSouthWest();\r\n this.swLat = sw.lat();\r\n this.swLong = sw.lng();\r\n this.neLat = ne.lat();\r\n this.neLong = ne.lng();\r\n this.delayTime = 1000;\r\n this.needsUpdate = true;\r\n } else\r\n this.clearBuildings();\r\n }\r\n\r\n clearBuildings() {\r\n for (let id in this.buildingPolys) {\r\n if (this.buildingPolys.hasOwnProperty(id) && this.buildingPolys[id]) {\r\n google.maps.event.clearListeners(this.buildingPolys[id], 'click');\r\n google.maps.event.clearListeners(this.buildingPolys[id], 'mouseover');\r\n google.maps.event.clearListeners(this.buildingPolys[id], 'mouseout');\r\n this.buildingPolys[id].setMap(null);\r\n delete this.buildingPolys[id];\r\n }\r\n }\r\n this.buildingPolys = {};\r\n }\r\n\r\n onBuildingClicked(poly: google.maps.Polygon) {\r\n if (this.buildingsVisible && this.mapDrawer && this.buildingClickListener)\r\n this.buildingClickListener(poly);\r\n }\r\n\r\n onBuildingMouseover(poly: google.maps.Polygon) {\r\n if (this.buildingsVisible && this.mapDrawer) {\r\n poly.setOptions(this.buildingHoverStyle);\r\n this.mapDrawer.map.setOptions({ draggableCursor: 'pointer' });\r\n }\r\n }\r\n\r\n onBuildingMouseout(poly: google.maps.Polygon) {\r\n if (this.buildingsVisible && this.mapDrawer) {\r\n poly.setOptions(this.buildingStyle);\r\n this.mapDrawer.map.setOptions({ draggableCursor: null });\r\n }\r\n }\r\n\r\n onGetBuildings(buildings: IOsmBuilding[]) {\r\n if (buildings && this.mapDrawer && this.buildingsVisible) {\r\n var ids = [];\r\n for (var i = 0, l = buildings.length; i < l; i++) {\r\n var building = buildings[i];\r\n ids.push(building.Id);\r\n if (this.buildingPolys[building.Id])\r\n continue;\r\n var path = new google.maps.MVCArray();\r\n for (var j = 0, l2 = building.Nodes.length - 1; j < l2; j++) {\r\n var node = building.Nodes[j];\r\n path.push(new google.maps.LatLng(node.Latitude, node.Longitude));\r\n }\r\n var polyOpts = $.extend({ map: this.mapDrawer.map, paths: path }, this.buildingStyle) as google.maps.PolygonOptions;\r\n var poly = new google.maps.Polygon(polyOpts);\r\n google.maps.event.addListener(poly, 'click', this.onBuildingClicked.bind(this, poly));\r\n google.maps.event.addListener(poly, 'mouseover', this.onBuildingMouseover.bind(this, poly));\r\n google.maps.event.addListener(poly, 'mouseout', this.onBuildingMouseout.bind(this, poly));\r\n this.buildingPolys[building.Id] = poly;\r\n }\r\n for (let id in this.buildingPolys) {\r\n if (ids.indexOf(parseInt(id)) === -1) {\r\n google.maps.event.clearListeners(this.buildingPolys[id], 'click');\r\n google.maps.event.clearListeners(this.buildingPolys[id], 'mouseover');\r\n google.maps.event.clearListeners(this.buildingPolys[id], 'mouseout');\r\n this.buildingPolys[id].setMap(null);\r\n delete this.buildingPolys[id];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n export class SeparationPolyline implements MapDrawing.ISelectableItem {\r\n\r\n constructor(mapDrawer: MapDrawer, parent: ShapeData, id?: string, path?: google.maps.LatLng[], isCutting?: boolean) {\r\n\r\n id = \"\" + (id || spt.Utils.GenerateGuid());\r\n\r\n ko.track(this);\r\n\r\n var viewModel = mapDrawer.viewModel;\r\n\r\n viewModel.setInstance(id, this);\r\n Object.defineProperty(this, \"id\",\r\n {\r\n configurable: true,\r\n enumerable: true,\r\n get: () => {\r\n return id;\r\n },\r\n set: (v) => {\r\n if (id && mapDrawer.viewModel.hasInstance(id))\r\n mapDrawer.viewModel.removeInstance(id);\r\n id = v;\r\n if (id && !this._isDisposed)\r\n mapDrawer.viewModel.setInstance(id, this);\r\n }\r\n });\r\n\r\n this.subsciptions = [];\r\n this.typeName = 'SeparationPolyline';\r\n this.parent = parent;\r\n this.mapDrawer = mapDrawer;\r\n this.isCutting = !!isCutting;\r\n\r\n var opts: google.maps.PolylineOptions = $.extend({}, SeparationPolyline.shapeStyle,\r\n {\r\n map: mapDrawer.map,\r\n clickable: false,\r\n draggable: false,\r\n editable: false,\r\n visible: true,\r\n zIndex: 9\r\n }) as google.maps.PolylineOptions;\r\n\r\n if (path)\r\n opts.path = path;\r\n\r\n var polyline = this.polyline = new google.maps.Polyline(opts);\r\n\r\n polyline.setPath = (path: any) => {\r\n if ((polyline as any)._isDisposed || this._isDisposed)\r\n return google.maps.Polyline.prototype.setPath.call(polyline, path);\r\n\r\n SeparationPolyline.removeEvents(this);\r\n var res = google.maps.Polyline.prototype.setPath.call(polyline, path);\r\n if (this.hoveredPolyline) {\r\n this.hoveredPolyline.setMap(null);\r\n this.hoveredPolyline = null;\r\n }\r\n if (this.hoveredMarker) {\r\n this.hoveredMarker.setMap(null);\r\n this.hoveredMarker = null;\r\n }\r\n SeparationPolyline.addEvents(this);\r\n ko.valueHasMutated(this, \"polyline\");\r\n this.regenerate();\r\n\r\n return res;\r\n };\r\n\r\n if (!parent.separationPolylines.some(sp => sp.id === this.id))\r\n parent.separationPolylines.push(this);\r\n\r\n ko.defineProperty(this, \"latLngs\",\r\n {\r\n get: () => {\r\n var polyline = this.polyline;\r\n if (!polyline)\r\n return [];\r\n var path = polyline.getPath();\r\n if (path)\r\n return path.getArray().map((ll: google.maps.LatLng) => LatLng.FromGMLatLng(ll));\r\n return [];\r\n },\r\n set: (latLngs: LatLng[]) => {\r\n if (this._isDisposed)\r\n return;\r\n\r\n var polyline = this.polyline;\r\n\r\n if (polyline && latLngs)\r\n polyline.setPath(latLngs.map(ll => ll.ToGMLatLng()));\r\n }\r\n });\r\n\r\n ko.defineProperty(this, 'pos',\r\n {\r\n get: () => {\r\n if (!this.polyline || this._isDisposed)\r\n return Point2D.Zero;\r\n var refLatLng = this.mapDrawer.viewModel.referenceLatLng;\r\n\r\n var c = 0,\r\n p = Point2D.Zero;\r\n this.polyline.getPath().forEach(gmll => {\r\n p = p.add(refLatLng.DirectionTo(LatLng.FromGMLatLng(gmll)));\r\n c++;\r\n });\r\n\r\n return c > 0 ? p.mul(1000 / c) : Point2D.Zero;\r\n },\r\n set: (p: Point2D) => {\r\n if (!this.polyline || this._isDisposed)\r\n return;\r\n var t = p.sub(this.pos).mul(0.001);\r\n this.moveByOffset(t);\r\n }\r\n });\r\n\r\n ko.defineProperty(this, \"points\", () => {\r\n if (!this.polyline || this._isDisposed)\r\n return [];\r\n var viewModel = this.mapDrawer.viewModel,\r\n axis = viewModel.referenceAxis,\r\n latLngs = this.latLngs,\r\n refLatLng = viewModel.referenceLatLng;\r\n return latLngs.map(ll => refLatLng.DirectionTo(ll).mul(1000).Project(axis));\r\n });\r\n\r\n ko.defineProperty(this, \"rotation\",\r\n {\r\n get: () => {\r\n return this._rot;\r\n },\r\n set: (r: number) => {\r\n if (!this.polyline || this._isDisposed)\r\n return;\r\n var tr = r - this._rot;\r\n this._rot = r;\r\n if (tr != 0) {\r\n let pts = this.getPoints(),\r\n centroid = Point2D.computeCenter(pts);\r\n if (centroid)\r\n this.applyTransform(Transformation3D.Rotation(LatLng.Grad2Rad(tr), centroid));\r\n }\r\n\r\n }\r\n });\r\n\r\n SeparationPolyline.addEvents(this);\r\n\r\n this.subsciptions.push(ko.getObservable(this, 'selected').subscribe(this.updateStyle.bind(this)));\r\n this.subsciptions.push(ko.getObservable(this, 'hovered').subscribe(this.updateStyle.bind(this)));\r\n this.subsciptions.push(ko.getObservable(this, 'locked').subscribe(this.updateStyle.bind(this)));\r\n this.subsciptions.push(ko.getObservable(this, 'frozen').subscribe(this.updateStyle.bind(this)));\r\n\r\n if (path && path.length)\r\n this.regenerate();\r\n else\r\n this.updateStyle();\r\n }\r\n\r\n id: string;\r\n mapDrawer: MapDrawer;\r\n typeName: string;\r\n pos: Point2D;\r\n rotation: number;\r\n latLngs: LatLng[];\r\n subsciptions: KnockoutSubscription[];\r\n polyline: google.maps.Polyline = null;\r\n hoveredPolyline: google.maps.Polyline = null;\r\n hoveredMarker: google.maps.Marker = null;\r\n parent: ShapeData;\r\n _isDisposed: boolean;\r\n skipUpdate: boolean;\r\n private _rot = 0;\r\n hovered = false;\r\n private isHovered: boolean;\r\n selected = false;\r\n visible = true;\r\n private isVisible: boolean;\r\n frozen = false;\r\n private isFrozen: boolean;\r\n locked = false;\r\n private isLocked: boolean;\r\n private currentStyle: string;\r\n isCutting: boolean = false;\r\n points: IPoint2D[];\r\n\r\n setPointX(index: number, viewModel: ViewModel, v: string | number) {\r\n if (!this.polyline || this._isDisposed)\r\n return;\r\n var path = this.polyline.getPath();\r\n if (!path)\r\n return;\r\n\r\n var pts = this.points,\r\n axis = viewModel.referenceAxis;\r\n\r\n if (index >= 0 && path && path.getLength() > index && pts && pts.length > index) {\r\n var p = pts[index],\r\n latLng = this.latLngs[index];\r\n\r\n var dx = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: -1000000,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n }) - p.x;\r\n\r\n if (dx) {\r\n var t = new Point2D(dx * 0.001, 0).Unproject(axis);\r\n\r\n path.setAt(index, latLng.Offset(t.y, t.x).ToGMLatLng());\r\n this.update();\r\n }\r\n }\r\n }\r\n\r\n setPointY(index: number, viewModel: ViewModel, v: string | number) {\r\n if (!this.polyline || this._isDisposed)\r\n return;\r\n var path = this.polyline.getPath();\r\n if (!path)\r\n return;\r\n\r\n var pts = this.points,\r\n axis = viewModel.referenceAxis;\r\n\r\n if (index >= 0 && path && path.getLength() > index && pts && pts.length > index) {\r\n var p = pts[index],\r\n latLng = this.latLngs[index];\r\n\r\n var dy = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: -1000000,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n }) - p.y;\r\n\r\n if (dy) {\r\n var t = new Point2D(0, dy * 0.001).Unproject(axis);\r\n\r\n path.setAt(index, latLng.Offset(t.y, t.x).ToGMLatLng());\r\n this.update();\r\n }\r\n }\r\n }\r\n\r\n deltePoint(index: number) {\r\n if (!this.polyline || this._isDisposed)\r\n return;\r\n var path = this.polyline.getPath();\r\n\r\n if (index >= 0 && path && path.getLength() > index) {\r\n if (path.getLength() > 1) {\r\n path.removeAt(index);\r\n this.update();\r\n } else {\r\n this.mapDrawer.deleteSelectable(this);\r\n }\r\n }\r\n }\r\n\r\n onPolylineSelected() {\r\n if (this._isDisposed || !this.polyline)\r\n return;\r\n\r\n this.selected = true;\r\n }\r\n\r\n onPolylineMouseover() {\r\n if (this._isDisposed || !this.polyline)\r\n return;\r\n\r\n this.hovered = true;\r\n }\r\n\r\n onPolylineMouseout() {\r\n if (this._isDisposed || !this.polyline)\r\n return;\r\n\r\n this.hovered = false;\r\n }\r\n\r\n moveByLatLng(latLng: LatLng) {\r\n if (this._isDisposed)\r\n return;\r\n\r\n this.polyline.setPath(this.polyline.getPath().getArray().map(ll => new google.maps.LatLng(ll.lat() + latLng.Latitude, ll.lng() + latLng.Longitude)));\r\n this.onPolylineChanged();\r\n }\r\n\r\n moveByOffset(offset: Point2D) {\r\n if (this._isDisposed)\r\n return;\r\n\r\n this.polyline.setPath(this.polyline.getPath().getArray().map(ll => LatLng.FromGMLatLng(ll).Offset(offset.y, offset.x).ToGMLatLng()));\r\n this.onPolylineChanged();\r\n }\r\n\r\n applyTransform(transform: Transformation3D) {\r\n this.polyline.setPath(this.polyline.getPath().getArray().map(ll => LatLng.FromPoint2D(transform.transform(LatLng.GMLatLngToPoint2D(ll))).ToGMLatLng()));\r\n }\r\n\r\n getSegments(): Segment2D[] {\r\n if (this._isDisposed || !this.polyline)\r\n return [];\r\n var latLngs = this.latLngs,\r\n result: Segment2D[] = [],\r\n points = latLngs.map(ll => ll.ToPoint2D()),\r\n len = points.length;\r\n\r\n for (var i = 1; i < len; i++) {\r\n var p1 = points[i - 1],\r\n p2 = points[i];\r\n\r\n result.push(new Segment2D(p1, p2));\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getPoints(): Point2D[][] {\r\n if (this._isDisposed || !this.polyline)\r\n return [];\r\n\r\n return [this.latLngs.map(ll => ll.ToPoint2D())];\r\n }\r\n\r\n getMap(): google.maps.Map {\r\n return this.polyline.getMap();\r\n }\r\n\r\n update(): void {\r\n this.updateStyle();\r\n }\r\n\r\n updateStyle() {\r\n if (this._isDisposed)\r\n return;\r\n var polyLine = this.polyline,\r\n hoveredPolyline = this.hoveredPolyline,\r\n hoveredMarker = this.hoveredMarker,\r\n hovered = this.hovered,\r\n selected = this.selected,\r\n visible = this.visible,\r\n locked = this.locked,\r\n frozen = this.frozen,\r\n clickable = !frozen && !locked,\r\n isCutting = this.isCutting;\r\n\r\n if (!polyLine || (polyLine as any)._isDisposed)\r\n return;\r\n\r\n let newStyle = (selected ? (hovered ? 'shapeSelectedHoveredStyle' : 'shapeSelectedStyle') : (hovered ? 'shapeHoveredStyle' : 'shapeStyle'));\r\n\r\n var opts: google.maps.PolygonOptions = null;\r\n var hoveredOpts: google.maps.PolygonOptions = null;\r\n\r\n if (this.currentStyle !== newStyle) {\r\n opts = $.extend({}, SeparationPolyline[newStyle]) as google.maps.PolygonOptions;\r\n this.currentStyle = newStyle;\r\n if (isCutting)\r\n opts.strokeColor = '#bc0000';\r\n }\r\n\r\n if (this.isLocked !== locked) {\r\n this.isLocked = locked;\r\n if (!opts)\r\n opts = { strokeColor: SeparationPolyline[newStyle].strokeColor };\r\n if (!hoveredOpts)\r\n hoveredOpts = {};\r\n if (locked) {\r\n if (opts.strokeColor)\r\n opts.strokeColor = (new Color().setStyle(opts.strokeColor).getGrayscale()).toString();\r\n }\r\n hoveredOpts.clickable = clickable;\r\n }\r\n\r\n if (this.isFrozen !== this.frozen) {\r\n this.isFrozen = this.frozen;\r\n if (!hoveredOpts)\r\n hoveredOpts = {};\r\n hoveredOpts.clickable = clickable;\r\n //hoveredOpts.visible = !this.frozen;\r\n }\r\n\r\n if (polyLine.getEditable() != selected) {\r\n if (!opts)\r\n opts = {};\r\n opts.editable = !!selected;\r\n opts.draggable = false;\r\n }\r\n\r\n if (this.isVisible !== visible) {\r\n this.isVisible = visible;\r\n if (!opts)\r\n opts = {};\r\n if (!hoveredOpts)\r\n hoveredOpts = {};\r\n opts.visible = visible;\r\n hoveredOpts.visible = visible;\r\n }\r\n\r\n if (this.isHovered !== hovered) {\r\n this.isHovered = hovered;\r\n\r\n if (!hoveredOpts)\r\n hoveredOpts = {};\r\n hoveredOpts.strokeOpacity = (hovered ? SeparationPolyline.shapeStyle.strokeOpacity * 0.75 : 0);\r\n }\r\n\r\n if (opts)\r\n polyLine.setOptions(opts);\r\n\r\n if (hoveredOpts) {\r\n if (hoveredMarker) {\r\n var path = polyLine.getPath();\r\n if (path.getLength()) {\r\n hoveredMarker.setOptions({\r\n position: path.getAt(0),\r\n clickable: clickable,\r\n visible: visible,\r\n opacity: (hovered ? SeparationPolyline.shapeStyle.strokeOpacity * 0.75 : 0)\r\n });\r\n }\r\n } else if (hoveredPolyline)\r\n hoveredPolyline.setOptions(hoveredOpts);\r\n }\r\n }\r\n\r\n onPolyPointChanged(path: google.maps.MVCArray, index: number, prev: google.maps.LatLng) {\r\n if (this._isDisposed || this.skipUpdate)\r\n return;\r\n\r\n if (this.parent && !this.parent._isDisposed)\r\n this.parent.movePoint(LatLng.FromGMLatLng(prev), LatLng.FromGMLatLng(path.getAt(index)), this.id);\r\n if (path.getLength() === 1 && this.hoveredMarker)\r\n this.hoveredMarker.setPosition(path.getAt(0));\r\n this.onPolylineChanged(path, index);\r\n }\r\n\r\n static removeEvents(separationPolyline: SeparationPolyline) {\r\n if (!separationPolyline || separationPolyline._isDisposed)\r\n return;\r\n var polyline = separationPolyline.polyline,\r\n hoveredPolyline = separationPolyline.hoveredPolyline,\r\n hoveredMarker = separationPolyline.hoveredMarker;\r\n\r\n if ((polyline)._gm_events_added_ex) {\r\n (polyline)._gm_events_added_ex = false;\r\n\r\n var path = polyline.getPath();\r\n\r\n google.maps.event.clearListeners(path, 'insert_at');\r\n google.maps.event.clearListeners(path, 'remove_at');\r\n google.maps.event.clearListeners(path, 'set_at');\r\n\r\n if (hoveredPolyline) {\r\n google.maps.event.clearListeners(hoveredPolyline, 'click');\r\n google.maps.event.clearListeners(hoveredPolyline, 'mouseover');\r\n google.maps.event.clearListeners(hoveredPolyline, 'mouseout');\r\n }\r\n\r\n if (hoveredMarker) {\r\n google.maps.event.clearListeners(hoveredMarker, 'click');\r\n google.maps.event.clearListeners(hoveredMarker, 'mouseover');\r\n google.maps.event.clearListeners(hoveredMarker, 'mouseout');\r\n }\r\n }\r\n }\r\n\r\n static addEvents(separationPolyline: SeparationPolyline) {\r\n if (!separationPolyline || separationPolyline._isDisposed)\r\n return;\r\n var polyline = separationPolyline.polyline,\r\n hoveredPolyline = separationPolyline.hoveredPolyline,\r\n hoveredMarker = separationPolyline.hoveredMarker;\r\n\r\n if (!(polyline)._gm_events_added_ex) {\r\n (polyline)._gm_events_added_ex = true;\r\n\r\n var path = polyline.getPath();\r\n var viewModel = separationPolyline.mapDrawer.viewModel;\r\n\r\n google.maps.event.addListener(path, \"insert_at\", separationPolyline.onPolylineChanged.bind(separationPolyline, path));\r\n google.maps.event.addListener(path, \"remove_at\", separationPolyline.onPolylineChanged.bind(separationPolyline, path));\r\n google.maps.event.addListener(path, \"set_at\", separationPolyline.onPolyPointChanged.bind(separationPolyline, path));\r\n\r\n if (hoveredPolyline) {\r\n google.maps.event.addListener(hoveredPolyline, 'click', viewModel.onSelectableClick.bind(viewModel, separationPolyline));\r\n google.maps.event.addListener(hoveredPolyline, 'mouseover', viewModel.onSelectableMouseover.bind(viewModel, separationPolyline));\r\n google.maps.event.addListener(hoveredPolyline, 'mouseout', viewModel.onSelectableMouseout.bind(viewModel, separationPolyline));\r\n }\r\n\r\n if (hoveredMarker) {\r\n google.maps.event.addListener(hoveredMarker, 'click', viewModel.onSelectableClick.bind(viewModel, separationPolyline));\r\n google.maps.event.addListener(hoveredMarker, 'mouseover', viewModel.onSelectableMouseover.bind(viewModel, separationPolyline));\r\n google.maps.event.addListener(hoveredMarker, 'mouseout', viewModel.onSelectableMouseout.bind(viewModel, separationPolyline));\r\n }\r\n\r\n }\r\n }\r\n\r\n onPolylineChanged(path?: google.maps.MVCArray, index?: number) {\r\n this.regenerate();\r\n ko.valueHasMutated(this, 'polyline');\r\n if (!this._isDisposed && this.parent && !this.parent._isDisposed && !this.skipUpdate)\r\n this.parent.update();\r\n }\r\n\r\n regenerate() {\r\n if (this._isDisposed || !this.parent || this.parent._isDisposed || this.skipUpdate || !this.mapDrawer)\r\n return;\r\n var polyline = this.polyline,\r\n path = polyline.getPath(),\r\n len = path.getLength(),\r\n changed = false,\r\n mapDrawer = this.mapDrawer,\r\n viewModel = mapDrawer.viewModel;\r\n if (len === 0) {\r\n if (this.hoveredPolyline) {\r\n this.hoveredPolyline.setMap(null);\r\n this.hoveredPolyline = null;\r\n changed = true;\r\n }\r\n if (this.hoveredMarker) {\r\n this.hoveredMarker.setMap(null);\r\n this.hoveredMarker = null;\r\n changed = true;\r\n }\r\n } else if (len === 1) {\r\n if (this.hoveredPolyline) {\r\n this.hoveredPolyline.setMap(null);\r\n this.hoveredPolyline = null;\r\n changed = true;\r\n }\r\n if (!this.hoveredMarker) {\r\n var hoveredMarker = this.hoveredMarker = new google.maps.Marker({\r\n map: mapDrawer.map,\r\n clickable: true,\r\n draggable: false,\r\n visible: true,\r\n position: path.getAt(0),\r\n icon: {\r\n path: google.maps.SymbolPath.CIRCLE,\r\n scale: SeparationPolyline.shapeStyle.strokeWeight * 4,\r\n fillColor: this.isCutting ? '#bc0000' : SeparationPolyline.shapeStyle.strokeColor,\r\n fillOpacity: 1,\r\n strokeOpacity: 0\r\n },\r\n zIndex: (polyline.get(\"zIndex\") || 0) - 1,\r\n opacity: SeparationPolyline.shapeStyle.strokeOpacity * 0.75\r\n });\r\n\r\n google.maps.event.addListener(hoveredMarker, 'click', viewModel.onSelectableClick.bind(viewModel, this));\r\n google.maps.event.addListener(hoveredMarker, 'mouseover', viewModel.onSelectableMouseover.bind(viewModel, this));\r\n google.maps.event.addListener(hoveredMarker, 'mouseout', viewModel.onSelectableMouseout.bind(viewModel, this));\r\n\r\n changed = true;\r\n }\r\n } else {\r\n if (this.hoveredMarker) {\r\n this.hoveredMarker.setMap(null);\r\n this.hoveredMarker = null;\r\n changed = true;\r\n }\r\n if (!this.hoveredPolyline) {\r\n var hoveredPolyline = this.hoveredPolyline = new google.maps.Polyline({\r\n map: mapDrawer.map,\r\n clickable: true,\r\n draggable: false,\r\n editable: false,\r\n visible: true,\r\n strokeColor: this.isCutting ? '#bc0000' : SeparationPolyline.shapeStyle.strokeColor,\r\n strokeWeight: SeparationPolyline.shapeStyle.strokeWeight * 4,\r\n strokeOpacity: 0,\r\n zIndex: (polyline.get(\"zIndex\") || 0) + 1\r\n });\r\n\r\n hoveredPolyline.setPath(polyline.getPath());\r\n\r\n google.maps.event.addListener(hoveredPolyline, 'click', viewModel.onSelectableClick.bind(viewModel, this));\r\n google.maps.event.addListener(hoveredPolyline, 'mouseover', viewModel.onSelectableMouseover.bind(viewModel, this));\r\n google.maps.event.addListener(hoveredPolyline, 'mouseout', viewModel.onSelectableMouseout.bind(viewModel, this));\r\n\r\n changed = true;\r\n }\r\n }\r\n if (changed)\r\n this.updateStyle();\r\n }\r\n\r\n remove() {\r\n if (this.parent) {\r\n this.parent.separationPolylines.remove((sp) => sp.id === this.id);\r\n this.parent.update();\r\n }\r\n this.dispose();\r\n }\r\n\r\n dispose() {\r\n if (this._isDisposed)\r\n return;\r\n ko.untrack(this);\r\n if (this.polyline) {\r\n this.polyline.unbindAll();\r\n this.polyline.setMap(null);\r\n }\r\n if (this.hoveredPolyline) {\r\n this.hoveredPolyline.unbindAll();\r\n this.hoveredPolyline.setMap(null);\r\n this.hoveredPolyline = null;\r\n }\r\n if (this.hoveredMarker) {\r\n this.hoveredMarker.unbindAll();\r\n this.hoveredMarker.setMap(null);\r\n this.hoveredMarker = null;\r\n }\r\n this.subsciptions.forEach(sp => { sp.dispose(); });\r\n this.mapDrawer = null;\r\n this.subsciptions = [];\r\n this.polyline = null;\r\n this._isDisposed = true;\r\n }\r\n\r\n movePoint(from: LatLng, to: LatLng) {\r\n if (this._isDisposed || !this.polyline || this.skipUpdate)\r\n return;\r\n this.skipUpdate = true;\r\n var path = this.polyline.getPath();\r\n var len = path.getLength();\r\n for (var i = len - 1; i >= 0; i--) {\r\n if (LatLng.FromGMLatLng(path.getAt(i)).DistanceTo(from) <= 0.01)\r\n path.setAt(i, to.ToGMLatLng());\r\n }\r\n if (len === 1 && this.hoveredMarker)\r\n this.hoveredMarker.setPosition(path.getAt(0));\r\n this.skipUpdate = false;\r\n\r\n ko.valueHasMutated(this, 'polyline');\r\n }\r\n\r\n static shapeStyle: IShapeStyle = {\r\n strokeColor: '#2861ff',\r\n strokeWeight: 2,\r\n strokeOpacity: 0.5\r\n };\r\n\r\n static shapeHoveredStyle: IShapeStyle = {\r\n strokeColor: '#2861ff',\r\n strokeWeight: 2,\r\n strokeOpacity: 0.7\r\n };\r\n\r\n static shapeSelectedStyle: IShapeStyle = {\r\n strokeColor: '#2861ff',\r\n strokeWeight: 2,\r\n strokeOpacity: 0.8\r\n };\r\n\r\n static shapeSelectedHoveredStyle: IShapeStyle = {\r\n strokeColor: '#2861ff',\r\n strokeWeight: 2,\r\n strokeOpacity: 1\r\n };\r\n }\r\n}\r\n\r\ninterface IMapDrawerOptions {\r\n center?: google.maps.LatLngLiteral;\r\n width?: number;\r\n height?: number;\r\n pathToIcons: string;\r\n pathToButtons: string;\r\n dialogId?: string;\r\n mapTypeId?: string;\r\n editorMode?: number;\r\n tileUrl?: string;\r\n isReadOnly: boolean;\r\n}\r\n\r\ninterface JQuery {\r\n mapDrawer(settings: IMapDrawerOptions): JQuery;\r\n mapDrawer(methodName: string): void;\r\n mapDrawer(methodName: 'show'): JQuery;\r\n mapDrawer(methodName: 'clear'): JQuery;\r\n mapDrawer(methodName: 'mapDrawer'): MapDrawing.MapDrawer;\r\n mapDrawer(methodName: 'shapes', shapes?: SolarProTool.MapShape[]): void;\r\n mapDrawer(methodName: 'shapes'): SolarProTool.MapShape[];\r\n}\r\n\r\n(($) => {\r\n $.fn.mapDrawer = function (settings?: IMapDrawerOptions | string, param1?: any) {\r\n var result = null;\r\n var elems = this.each((idx: number, el: Element) => {\r\n if (settings && typeof settings === \"string\") {\r\n switch (settings) {\r\n case \"mapDrawer\":\r\n result = $(el).data(\"MapDrawing.MapDrawer\") as MapDrawing.MapDrawer;\r\n break;\r\n case \"shapes\":\r\n var mapDrawer = $(el).data(\"MapDrawing.MapDrawer\") as MapDrawing.MapDrawer;\r\n if (mapDrawer) {\r\n if (param1)\r\n mapDrawer.importShapes(param1);\r\n else\r\n result = mapDrawer.exportShapes();\r\n }\r\n break;\r\n case \"clear\":\r\n var mapDrawer = $(el).data(\"MapDrawing.MapDrawer\") as MapDrawing.MapDrawer;\r\n if (mapDrawer)\r\n mapDrawer.clear();\r\n break;\r\n case \"show\":\r\n var mapDrawer = $(el).data(\"MapDrawing.MapDrawer\") as MapDrawing.MapDrawer;\r\n if (mapDrawer && mapDrawer.dialog)\r\n DManager.show(mapDrawer.dialog);\r\n break;\r\n }\r\n return false;\r\n } else {\r\n var options = (settings || {}) as IMapDrawerOptions;\r\n if (!options.width || !options.height || options.width < 10 || options.height < 10) {\r\n var cr = el.getBoundingClientRect();\r\n options.width = Math.max(10, cr.right - cr.left);\r\n options.height = Math.max(10, cr.bottom - cr.top);\r\n }\r\n var md = $(el).data(\"MapDrawing.MapDrawer\") as MapDrawing.MapDrawer;\r\n if (md) {\r\n md.init(options);\r\n } else {\r\n $(el).data(\"MapDrawing.MapDrawer\", new MapDrawing.MapDrawer(el, options));\r\n }\r\n }\r\n return true;\r\n });\r\n return result === null ? elems : result;\r\n };\r\n\r\n})(jQuery);\r\n\r\n//var $freeAreaMapDrawer = $('#freeAreaMapsDrawer'),\r\n// s = getSize(),\r\n// w = Math.max(s[0] - 360, 100),\r\n// h = Math.max(s[1] - 360, 100);\r\n\r\n\r\n\r\n//$freeAreaMapDrawer.mapDrawer({\r\n// center: { lat: result.Data.Latitude, lng: result.Data.Longitude },\r\n// width: w,\r\n// height: h,\r\n// pathToIcons: cdnPath + \"/APP_THEMES/SPTv2/icons/\",\r\n// pathToButtons: cdnPath + \"/APP_THEMES/\" + currentButtonTheme + \"/icons/\",\r\n// LayerDefinitions: window.freeAreaLayerDefinitions\r\n//});","module MapDrawing {\r\n\r\n export class ImageMapOverlay { //extends google.maps.OverlayView {\r\n static initializePrototype() {\r\n if (Object.setPrototypeOf) {\r\n Object.setPrototypeOf(ImageMapOverlay.prototype, google.maps.OverlayView.prototype);\r\n } else {\r\n var curproto = ImageMapOverlay.prototype;\r\n\r\n ImageMapOverlay.prototype = Object.create(google.maps.OverlayView.prototype as any);\r\n ImageMapOverlay.prototype.constructor = ImageMapOverlay;\r\n\r\n Object.keys(curproto).filter(k => k.toLowerCase() !== \"constructor\").forEach(k => {\r\n ImageMapOverlay.prototype[k] = curproto[k];\r\n });\r\n }\r\n }\r\n\r\n constructor(id: string, src: string, bounds: BoundsLatLng, map: google.maps.Map, orientation?: number, name?: string) {\r\n google.maps.OverlayView.call(this); //super();\r\n this._bounds = bounds;\r\n this._src = src;\r\n this._id = id;\r\n this._orientation = orientation || 0;\r\n this._name = name;\r\n\r\n ko.track(this, ['_orientation', '_refLength', '_alpha', '_bounds']);\r\n\r\n if (map)\r\n this.setMap(map);\r\n }\r\n\r\n _refLength: number = 0;\r\n _orientation: number;\r\n _alpha: number = 1;\r\n _bounds: BoundsLatLng;\r\n _name: string;\r\n _id: string;\r\n _src: string;\r\n private _div: HTMLElement;\r\n private _img: HTMLImageElement;\r\n\r\n boundsChanged: () => void = null;\r\n\r\n onBoundsChanged() {\r\n if (this.boundsChanged) this.boundsChanged();\r\n }\r\n\r\n setMap: (map: google.maps.Map) => void;\r\n getMap: () => google.maps.Map;\r\n getPanes: () => google.maps.MapPanes;\r\n getProjection: () => google.maps.MapCanvasProjection;\r\n\r\n setBounds(bounds: BoundsLatLng, skipBoundsChangeEvent?: boolean) {\r\n this._bounds = bounds;\r\n this.draw();\r\n ko.valueHasMutated(this, '_bounds');\r\n if (!skipBoundsChangeEvent)\r\n this.onBoundsChanged();\r\n }\r\n\r\n getBounds(): BoundsLatLng {\r\n return this._bounds || null;\r\n }\r\n\r\n setOrientation(orientation: number) {\r\n this._orientation = orientation;\r\n this.draw();\r\n }\r\n\r\n setAlpha(alpha: number) {\r\n this._alpha = alpha;\r\n this.draw();\r\n }\r\n\r\n onAdd() {\r\n var div = this._div = document.createElement('div');\r\n div.style.borderStyle = 'none';\r\n div.style.borderWidth = '0';\r\n div.style.position = 'absolute';\r\n div.style.overflow = 'visible';\r\n\r\n // Create the img element and attach it to the div.\r\n var img = this._img = document.createElement('img') as HTMLImageElement;\r\n img.src = this._src;\r\n img.style.width = '100%';\r\n img.style.height = '100%';\r\n img.style.position = 'absolute';\r\n img.style.transform = 'rotate(' + this._orientation + 'deg)';\r\n img.style.opacity = '' + this._alpha;\r\n div.appendChild(img);\r\n\r\n // Add the element to the \"overlayLayer\" pane.\r\n var panes = this.getPanes();\r\n panes.overlayLayer.appendChild(div);\r\n\r\n }\r\n\r\n draw() {\r\n var overlayProjection = this.getProjection();\r\n\r\n var sw = overlayProjection.fromLatLngToDivPixel(this._bounds.Min.ToGMLatLng());\r\n var ne = overlayProjection.fromLatLngToDivPixel(this._bounds.Max.ToGMLatLng());\r\n\r\n var div = this._div;\r\n div.style.left = sw.x + 'px';\r\n div.style.top = ne.y + 'px';\r\n div.style.width = (ne.x - sw.x) + 'px';\r\n div.style.height = (sw.y - ne.y) + 'px';\r\n\r\n var img = this._img;\r\n img.style.transform = 'rotate(' + this._orientation + 'deg)';\r\n img.style.opacity = '' + this._alpha;\r\n }\r\n\r\n onRemove() {\r\n ko.untrack(this, ['_orientation', '_refLength', '_alpha']);\r\n this._div.parentNode.removeChild(this._div);\r\n this._div = null;\r\n }\r\n\r\n applyTransform(transformation: Transformation3D, mapDrawer: MapDrawer) {\r\n var pts = this._bounds.Corners.map(ll => ll.ToPoint2D());\r\n var c = Point2D.computeCenter(pts);\r\n //var tr = new Transformation().multiplyMatrices(transformation, Transformation.Rotation(this._orientation / 180 * Math.PI, c));\r\n var tr = Transformation3D.Rotation(-this._orientation / 180 * Math.PI, c);\r\n pts = pts.map(p => tr.transform(p));\r\n pts = pts.map(p => transformation.transform(p));\r\n c = Point2D.computeCenter(pts);\r\n\r\n var delta = pts[1].sub(pts[0]);\r\n var orientation = Math.atan2(delta.y, delta.x) || 0;\r\n var rtr = Transformation3D.Rotation(-orientation, c);\r\n\r\n var bounds = new BoundsLatLng();\r\n\r\n pts.forEach(p => {\r\n bounds.Expand(LatLng.FromPoint2D(rtr.transform(p)));\r\n });\r\n\r\n this._bounds = bounds;\r\n this._orientation = -orientation / Math.PI * 180;\r\n\r\n this.draw();\r\n ko.valueHasMutated(this, '_bounds');\r\n }\r\n }\r\n\r\n export class CanvasOverlayDrawable {\r\n protected _visible: boolean = true;\r\n canvasOverlay: CanvasOverlay;\r\n\r\n getVisible(ctx: CanvasRenderingContext2D, pxFactor: number) {\r\n return this._visible;\r\n }\r\n\r\n setVisible(value: boolean) {\r\n if (this._visible !== value) {\r\n this._visible = value;\r\n this.update();\r\n }\r\n }\r\n\r\n getBounds(ctx: CanvasRenderingContext2D, pxFactor: number): BoundsLatLng { return null; }\r\n\r\n setCanvasOverlay(canvasOverlay: CanvasOverlay) {\r\n if (canvasOverlay) {\r\n let index = canvasOverlay.drawables.indexOf(this);\r\n if (index < 0)\r\n canvasOverlay.drawables.push(this);\r\n canvasOverlay.update();\r\n } else if (this.canvasOverlay) {\r\n let index = this.canvasOverlay.drawables.indexOf(this);\r\n if (index >= 0)\r\n this.canvasOverlay.drawables.splice(index, 1);\r\n this.canvasOverlay.update();\r\n }\r\n this.canvasOverlay = canvasOverlay || null;\r\n return this;\r\n }\r\n\r\n draw(ctx: CanvasRenderingContext2D, pxFactor: number, boundsLatLng: BoundsLatLng, pixelBounds: Bounds2D) { }\r\n\r\n update() {\r\n if (this.canvasOverlay)\r\n this.canvasOverlay.update();\r\n }\r\n }\r\n\r\n export interface OverlayTextOptions {\r\n size?: number;\r\n margin?: number;\r\n angle?: number;\r\n text?: string;\r\n font?: string;\r\n fontStyle?: string;\r\n latLng?: LatLng;\r\n maxWidth?: number;\r\n fillStyle?: string | CanvasGradient | CanvasPattern;\r\n textStyle?: string | CanvasGradient | CanvasPattern;\r\n visible?: boolean;\r\n fillPadding?: number;\r\n alignUpper?: boolean;\r\n }\r\n\r\n export class OverlayText extends CanvasOverlayDrawable {\r\n\r\n size: number = 12;\r\n private textWidth: number;\r\n angle: number = 0;\r\n margin: number = 0;\r\n fillPadding: number = 0;\r\n maxWidth: number = 0;\r\n alignUpper: boolean = false;\r\n text: string = \"\";\r\n font: string = \"Arial\";\r\n fontStyle: string = \"normal\";\r\n latLng: LatLng = new LatLng();\r\n fillStyle: string | CanvasGradient | CanvasPattern = null;\r\n textStyle: string | CanvasGradient | CanvasPattern = \"#000000\";\r\n private textDeltaSize: number;\r\n\r\n set(opts: OverlayTextOptions) {\r\n if (opts) {\r\n Object.keys(opts).forEach(k => {\r\n this[k] = opts[k];\r\n });\r\n this.onChanged();\r\n }\r\n return this;\r\n }\r\n\r\n getVisible(ctx: CanvasRenderingContext2D, pxFactor: number) {\r\n if (this._visible && this.maxWidth) {\r\n var textWidth = (this.textWidth || this.calcTextWidth(ctx)) / pxFactor;\r\n return textWidth * 0.5 <= this.maxWidth;\r\n }\r\n return this._visible;\r\n }\r\n\r\n private onChanged() {\r\n this.textWidth = 0;\r\n this.textDeltaSize = 0;\r\n this.update();\r\n return this;\r\n }\r\n\r\n private calcTextWidth(ctx: CanvasRenderingContext2D) {\r\n var textHeight = this.size;\r\n ctx.save();\r\n ctx.font = `${this.fontStyle} ${textHeight}px ${this.font}`;\r\n var textWidth = this.textWidth = ctx.measureText(this.text).width;\r\n ctx.restore();\r\n return textWidth;\r\n }\r\n\r\n private calcDeltaSize(ctx: CanvasRenderingContext2D) {\r\n var h = this.size + this.margin;\r\n var w = (this.textWidth || this.calcTextWidth(ctx)) * 0.5;\r\n return this.textDeltaSize = Math.sqrt(w * w + h * h);\r\n }\r\n\r\n getBounds(ctx: CanvasRenderingContext2D, pxFactor: number): BoundsLatLng {\r\n if (!this.getVisible(ctx, pxFactor))\r\n return null;\r\n\r\n var deltaSize = this.textDeltaSize || this.calcDeltaSize(ctx);\r\n\r\n var p = this.latLng.ToPoint2D().mul(pxFactor);\r\n var t = new Point2D(deltaSize, deltaSize);\r\n\r\n return new BoundsLatLng(LatLng.FromPoint2D(p.sub(t).divide(pxFactor)), LatLng.FromPoint2D(p.add(t).divide(pxFactor)));\r\n }\r\n\r\n draw(ctx: CanvasRenderingContext2D, pxFactor: number, boundsLatLng: BoundsLatLng, pixelBounds: Bounds2D) {\r\n var text = this.text;\r\n var textHeight = this.size;\r\n var textWidth = (this.textWidth || this.calcTextWidth(ctx));\r\n\r\n ctx.save();\r\n ctx.rotate(((Math.PI - this.angle - LatLng.PiHalf) % Math.PI + Math.PI) % Math.PI - LatLng.PiHalf);\r\n\r\n if (this.maxWidth && (textWidth / pxFactor) > this.maxWidth) {\r\n var sc = Math.max(0.5, this.maxWidth / (textWidth / pxFactor));\r\n ctx.scale(sc, sc);\r\n }\r\n\r\n var alignUpper = this.alignUpper;\r\n var margin = this.margin;\r\n var yOff = alignUpper ? textHeight + margin : -margin;\r\n\r\n ctx.strokeStyle = this.textStyle;\r\n ctx.lineWidth = 1;\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(0, 0);\r\n ctx.lineTo(0, alignUpper ? margin : -margin);\r\n ctx.stroke();\r\n\r\n ctx.translate(-textWidth * 0.5, yOff);\r\n\r\n if (this.fillStyle) {\r\n var fontDescent = this.size / 8;\r\n var fp = this.fillPadding;\r\n var fp2 = fp * 2;\r\n ctx.fillStyle = this.fillStyle;\r\n ctx.fillRect(-fp, fontDescent - textHeight - fp, textWidth + fp2, textHeight + fp2);\r\n }\r\n\r\n ctx.font = `${this.fontStyle} ${textHeight}px ${this.font}`;\r\n ctx.fillStyle = this.textStyle;\r\n\r\n ctx.fillText(text, 0, 0);\r\n\r\n ctx.restore();\r\n }\r\n\r\n dispose() {\r\n this.setCanvasOverlay(null);\r\n }\r\n }\r\n\r\n export class OverlayPolygon extends CanvasOverlayDrawable {\r\n latLngs: LatLng[][] = [];\r\n closed: boolean = true;\r\n style: CanvasDrawing.IStyle = null;\r\n\r\n getVisible(ctx: CanvasRenderingContext2D, pxFactor: number): boolean {\r\n return !!(this._visible && this.latLngs.length && this.style && (this.style.fillStyle || this.style.strokeStyle));\r\n }\r\n\r\n set(opts: { latLngs?: LatLng[][], closed?: boolean, style?: CanvasDrawing.IStyle }) {\r\n if (opts) {\r\n Object.keys(opts).forEach(k => {\r\n this[k] = opts[k];\r\n });\r\n this.onChanged();\r\n }\r\n return this;\r\n }\r\n\r\n private onChanged() {\r\n this.update();\r\n return this;\r\n }\r\n\r\n getBounds(ctx: CanvasRenderingContext2D, pxFactor: number): BoundsLatLng {\r\n if (!this.getVisible(ctx, pxFactor))\r\n return null;\r\n\r\n return BoundsLatLng.FromLatLngs(this.latLngs);\r\n }\r\n\r\n draw(ctx: CanvasRenderingContext2D, pxFactor: number, boundsLatLng: BoundsLatLng, pixelBounds: Bounds2D) {\r\n\r\n ctx.save();\r\n\r\n let boundsCenter = boundsLatLng.Center.ToPoint2D(),\r\n boundsDelta = boundsLatLng.Max.ToPoint2D().sub(boundsLatLng.Min.ToPoint2D()),\r\n scale = new Point2D(pixelBounds.Delta.x / boundsDelta.x, -pixelBounds.Delta.y / boundsDelta.y),\r\n polys = this.latLngs.map(lls => lls.map(ll => ll.ToPoint2D().sub(boundsCenter).multiply(scale))),\r\n style = this.style;\r\n\r\n //ctx.lineWidth = 1;\r\n\r\n polys.forEach(pts => {\r\n ctx.beginPath();\r\n ctx.moveTo(pts[0].x, pts[0].y);\r\n for (var i = 1, l = pts.length; i < l; i++) {\r\n let p = pts[i];\r\n ctx.lineTo(p.x, p.y);\r\n }\r\n if (closed)\r\n ctx.closePath();\r\n });\r\n\r\n style.applyToContext(ctx, pxFactor);\r\n\r\n if (style.fillStyle)\r\n ctx.fill();\r\n\r\n if (style.strokeStyle)\r\n ctx.stroke();\r\n\r\n ctx.restore();\r\n }\r\n\r\n dispose() {\r\n this.setCanvasOverlay(null);\r\n }\r\n }\r\n\r\n export class CanvasOverlay { //extends google.maps.OverlayView {\r\n static initializePrototype() {\r\n if (Object.setPrototypeOf) {\r\n Object.setPrototypeOf(CanvasOverlay.prototype, google.maps.OverlayView.prototype);\r\n } else {\r\n var curproto = CanvasOverlay.prototype;\r\n\r\n CanvasOverlay.prototype = Object.create(google.maps.OverlayView.prototype as any);\r\n CanvasOverlay.prototype.constructor = CanvasOverlay;\r\n\r\n Object.keys(curproto).filter(k => k.toLowerCase() !== \"constructor\").forEach(k => {\r\n CanvasOverlay.prototype[k] = curproto[k];\r\n });\r\n }\r\n }\r\n\r\n constructor(mapDrawer: MapDrawer) {\r\n google.maps.OverlayView.call(this); //super();\r\n this.init(mapDrawer);\r\n }\r\n\r\n init(mapDrawer: MapDrawer) {\r\n this.mapDrawer = mapDrawer;\r\n if (mapDrawer && mapDrawer.map) {\r\n setTimeout(() => {\r\n this.setMap(mapDrawer.map);\r\n mapDrawer.map.addListener(\"idle\", this.update.bind(this));\r\n mapDrawer.map.addListener(\"bounds_changed\", this.clearCanvas.bind(this));\r\n }, 0);\r\n }\r\n }\r\n\r\n draw() { }\r\n\r\n onAdd() {\r\n var div = this._div = document.createElement('div');\r\n div.style.borderStyle = 'none';\r\n div.style.borderWidth = '0';\r\n div.style.position = 'absolute';\r\n div.style.top = \"0\";\r\n div.style.left = \"0\";\r\n div.style.pointerEvents = \"none\";\r\n\r\n var isActive = false;\r\n\r\n var map = this.getMap() as google.maps.Map;\r\n\r\n var mapDiv = map.getDiv() as HTMLElement;\r\n\r\n var cr = mapDiv.getBoundingClientRect();\r\n\r\n var w = cr.width;\r\n var h = cr.height;\r\n\r\n var panes = this.getPanes();\r\n\r\n var p = panes.overlayLayer.parentElement;\r\n if (p) {\r\n p = p.parentElement;\r\n if (p) {\r\n p = p.parentElement;\r\n p.appendChild(div);\r\n isActive = true;\r\n }\r\n }\r\n\r\n if (w < 10 || h < 10)\r\n isActive = false;\r\n\r\n var canvas = this.canvas = document.createElement('canvas') as HTMLCanvasElement;\r\n //canvas.style.pointerEvents = \"none\";\r\n canvas.className = \"OverlayCanvas\";\r\n\r\n this.isActive = isActive;\r\n\r\n if (!isActive)\r\n div.style.display = \"none\";\r\n\r\n div.appendChild(canvas);\r\n this.ctx = canvas.getContext(\"2d\");\r\n\r\n this.setSize(w, h);\r\n\r\n this.update();\r\n }\r\n\r\n onResize() {\r\n var map = this.getMap() as google.maps.Map;\r\n if (!map)\r\n return;\r\n var mapDiv = map.getDiv() as HTMLElement;\r\n var cr = mapDiv.getBoundingClientRect();\r\n\r\n var w = cr.width;\r\n var h = cr.height;\r\n\r\n this.setSize(w, h);\r\n }\r\n\r\n setSize(w: number, h: number) {\r\n if (w > 32 && h > 32) {\r\n this._div.style.width = w + \"px\";\r\n this.canvas.width = w;\r\n \r\n this._div.style.height = h + \"px\";\r\n this.canvas.height = h;\r\n } else\r\n this.isActive = false;\r\n }\r\n\r\n onRemove() {\r\n //ko.untrack(this);\r\n this.mapDrawer = null;\r\n if (this._div && this._div.parentNode)\r\n this._div.parentNode.removeChild(this._div);\r\n this._div = null;\r\n }\r\n\r\n private clearCanvas() {\r\n var canvas = this.canvas;\r\n var ctx = this.ctx;\r\n if (!canvas || !ctx)\r\n return;\r\n\r\n ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n this._needsUpdate = true;\r\n }\r\n\r\n private drawCanvas() {\r\n var mapDrawer = this.mapDrawer,\r\n map = mapDrawer.map,\r\n canvas = this.canvas,\r\n ctx = this.ctx;\r\n if (!canvas || !ctx)\r\n return;\r\n var pxFactor = mapDrawer.getPixelFactor();\r\n\r\n var mapBounds = BoundsLatLng.FromGMLatLngBounds(map.getBounds());\r\n var pxMapBounds = mapBounds.ToBounds2D(pxFactor);\r\n var mapBoundsHeight = Math.round(pxMapBounds.Delta.y);\r\n\r\n ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n this.drawables.forEach(drawable => {\r\n if (!drawable.getVisible(ctx, pxFactor))\r\n return;\r\n var bds = drawable.getBounds(ctx, pxFactor);\r\n if (bds && mapBounds.Overlaps(bds)) {\r\n var pxBds = bds.ToBounds2D(pxFactor),\r\n off = pxBds.Center.sub(pxMapBounds.Min);\r\n ctx.setTransform(1, 0, 0, 1, off.x, mapBoundsHeight - off.y);\r\n\r\n //ctx.save();\r\n //ctx.strokeStyle = \"#FF0000\";\r\n //ctx.strokeRect(pxBds.Delta.x * -0.5, pxBds.Delta.y * -0.5, pxBds.Delta.x, pxBds.Delta.y);\r\n //ctx.restore();\r\n\r\n drawable.draw(ctx, pxFactor, bds, pxBds);\r\n }\r\n });\r\n }\r\n\r\n update() {\r\n this._needsUpdate = true;\r\n this.checkUpdate();\r\n }\r\n\r\n clear() {\r\n this.drawables.slice().forEach(d => { d.setCanvasOverlay(null) });\r\n }\r\n\r\n private checkUpdate() {\r\n if (this._needsUpdate && !this._isUpdating) {\r\n\r\n this._needsUpdate = false;\r\n this._isUpdating = true;\r\n\r\n setTimeout(() => {\r\n this.drawCanvas();\r\n\r\n this._isUpdating = false;\r\n\r\n this.checkUpdate();\r\n }, 0);\r\n }\r\n }\r\n\r\n static drawArrowHead(context: CanvasRenderingContext2D, from: Point2D, to: Point2D, angle?: number) {\r\n\r\n let d = to.sub(from),\r\n dLenSq = d.GetLengthSquared();\r\n\r\n if (!angle || angle <= 0)\r\n angle = Math.PI / 6;\r\n\r\n if (dLenSq <= 0)\r\n return;\r\n\r\n let n = d.GetNormalized().LeftHandNormal().mul(Math.tan(angle) * Math.sqrt(dLenSq));\r\n\r\n context.beginPath();\r\n context.moveTo(from.x + n.x, from.y + n.y);\r\n context.lineTo(to.x, to.y);\r\n context.lineTo(from.x - n.x, from.y - n.y);\r\n context.closePath();\r\n\r\n }\r\n\r\n drawables: CanvasOverlayDrawable[] = [];\r\n isActive: boolean;\r\n mapDrawer: MapDrawer;\r\n _div: HTMLElement;\r\n canvas: HTMLCanvasElement;\r\n ctx: CanvasRenderingContext2D;\r\n private _needsUpdate: boolean;\r\n private _isUpdating: boolean;\r\n\r\n setMap: (map: google.maps.Map) => void;\r\n getMap: () => google.maps.Map;\r\n getPanes: () => google.maps.MapPanes;\r\n getProjection: () => google.maps.MapCanvasProjection;\r\n }\r\n\r\n export class TileProvider {\r\n x: number;\r\n y: number;\r\n z: number;\r\n\r\n constructor(x: number, y: number, z: number, url: string, map: google.maps.Map) {\r\n this.x = x;\r\n this.y = y;\r\n this.url = url;\r\n\r\n var projection = map.getProjection(),\r\n tilesize = LatLng.TILE_SIZE,\r\n tilesizeHalf = LatLng.TILE_SIZE_HALF,\r\n zoom = z;\r\n\r\n\r\n var cx = (x + 0.5) * tilesize;\r\n var cy = (y + 0.5) * tilesize;\r\n\r\n var nz = this.z = Math.min(21, zoom); //max zoom is 21\r\n var dz = 1 << (zoom - nz); //Math.pow(2, zoom - nz)\r\n var ts = dz * tilesize;\r\n var ts2 = ts * 0.5;\r\n var scale = (1 << zoom);\r\n\r\n var tx = Math.floor(cx / ts) * ts;\r\n var ty = Math.floor(cy / ts) * ts;\r\n\r\n var ix = tx + ts2;\r\n var iy = ty + ts2;\r\n\r\n this.scale = dz;\r\n\r\n this.latLng = LatLng.FromGMLatLng(projection.fromPointToLatLng(new google.maps.Point(ix / scale, iy / scale), false));\r\n this.position = `${(tx - cx + tilesizeHalf)}px ${(ty - cy + tilesizeHalf)}px`;\r\n }\r\n\r\n loading: boolean = false;\r\n isLoaded: boolean = false;\r\n url: string;\r\n position: string;\r\n scale: number;\r\n latLng: LatLng;\r\n img: HTMLImageElement;\r\n references: string[] = [];\r\n\r\n get src(): string {\r\n\r\n var latlng = this.latLng,\r\n tilesize = LatLng.TILE_SIZE;\r\n\r\n return `${this.url}¢er=${latlng.Latitude},${latlng.Longitude}&zoom=${this.z}&size=${tilesize}x${tilesize}&scale=1`;\r\n }\r\n\r\n getGmSrc() {\r\n //http://khms1.googleapis.com/kh?v=865&x=17687&y=11573&z=15\r\n return `https://khms${this.x % 2}.googleapis.com/kh?v=865&x=${this.x}&y=${this.y}&z=${this.z}`;\r\n }\r\n\r\n getBmSrc() {\r\n var q = MapDrawer.getQuadtreeQuadrant(this.x, this.y, this.z);\r\n //http://ak.dynamic.t2.tiles.virtualearth.net/comp/ch/12020312303120022?it=A,G,L&key=AtnOc3Jm2frbsoaRJ7zRC2-s9q9HQ45N5VPTV_8z08nxO27ZzVnDLoclvQWYZPc8\r\n return `http://ak.dynamic.t${q[q.length - 1]}.tiles.virtualearth.net/comp/ch/${q.join(\"\")}?it=A,G,L&key=AtnOc3Jm2frbsoaRJ7zRC2-s9q9HQ45N5VPTV_8z08nxO27ZzVnDLoclvQWYZPc8`;\r\n }\r\n\r\n private listeners: ((tile: TileProvider) => void)[] = [];\r\n\r\n private beginLoad() {\r\n this.loading = true;\r\n //console.log(\"loading: \" + this.x + \" \" + this.y + \" \" + this.z);\r\n this.img = spt.Utils.LoadImage(this.src, this.endLoad.bind(this));\r\n }\r\n\r\n private endLoad(img: HTMLImageElement) {\r\n this.isLoaded = true;\r\n this.loading = false;\r\n if (this.listeners.length) {\r\n this.listeners.forEach(fn => { fn(this); });\r\n this.listeners = [];\r\n }\r\n if (this.img)\r\n delete this.img;\r\n }\r\n\r\n load(fn: (tile: TileProvider) => void): void {\r\n if (this.isLoaded) {\r\n fn(this);\r\n } else {\r\n this.listeners.push(fn);\r\n if (!this.loading)\r\n this.beginLoad();\r\n }\r\n }\r\n\r\n abort() {\r\n this.isLoaded = false;\r\n this.loading = false;\r\n if (this.img) {\r\n this.img.src = \"\";\r\n delete this.img;\r\n }\r\n if (this.listeners.length) {\r\n this.listeners = [];\r\n }\r\n }\r\n }\r\n\r\n export class TileManager {\r\n constructor(mapDrawer: MapDrawer, url: string, name: string) {\r\n this.mapDrawer = mapDrawer;\r\n this.url = url;\r\n this.name = name;\r\n }\r\n\r\n mapDrawer: MapDrawer;\r\n url: string;\r\n name: string;\r\n tiles: { [key: string]: TileProvider } = {};\r\n divs: { [id: string]: string } = {};\r\n\r\n getKey(x: number, y: number, zoom: number) {\r\n return `${x}_${y}_${zoom}`;\r\n }\r\n\r\n getTile(x: number, y: number, zoom: number, k?: string) {\r\n if (!k)\r\n k = this.getKey(x, y, zoom);\r\n return this.tiles[k] || (this.tiles[k] = new TileProvider(x, y, zoom, this.url, this.mapDrawer.map));\r\n }\r\n\r\n private setDivStyle(div: HTMLDivElement, tile: TileProvider, x: number, y: number, zoom: number, useGm?: boolean, useBm?: boolean) {\r\n if (div.getAttribute(\"tile-killed\"))\r\n return;\r\n //var map = this.mapDrawer.map,\r\n //projection = map.getProjection(),\r\n var tilesize = LatLng.TILE_SIZE,\r\n tilesizeHalf = LatLng.TILE_SIZE_HALF;\r\n\r\n var cx = (x + 0.5) * tilesize;\r\n var cy = (y + 0.5) * tilesize;\r\n\r\n var nz = tile.z;\r\n var dz = 1 << (zoom - nz); //Math.pow(2, zoom - nz)\r\n var ts = dz * tilesize;\r\n //var ts2 = ts * 0.5;\r\n //var scale = (1 << zoom);\r\n\r\n var tx = Math.floor(cx / ts) * ts;\r\n var ty = Math.floor(cy / ts) * ts;\r\n\r\n //var ix = tx + ts2;\r\n //var iy = ty + ts2;\r\n\r\n var bgscale = dz * 100;\r\n\r\n //var latlng = projection.fromPointToLatLng(new google.maps.Point(ix / scale, iy / scale), false);\r\n\r\n div.style.backgroundImage = useGm ? `url(\"${tile.getGmSrc()}\")` : (useBm ? `url(\"${tile.getBmSrc()}\")` : `url(\"${tile.src}\")`);\r\n //div.style.backgroundImage = `url(\"${this.url}¢er=${latlng.lat()},${latlng.lng()}&zoom=${nz}&size=${tilesize}x${tilesize}&scale=1\")`;\r\n div.style.backgroundSize = `${bgscale}% ${bgscale}%`;\r\n div.style.backgroundPosition = `${(tx - cx + tilesizeHalf)}px ${(ty - cy + tilesizeHalf)}px`;\r\n div.innerHTML = \"\";\r\n }\r\n\r\n getTileDiv(coord: IPoint2D, zoom: number, ownerDocument: HTMLDocument): HTMLElement {\r\n var x = coord.x,\r\n y = coord.y,\r\n sx = coord.x,\r\n sy = coord.y,\r\n sz = zoom,\r\n k = this.getKey(sx, sy, sz),\r\n id = `md-tile-${this.name}-${k}`;\r\n\r\n var maxZoom = Math.min(21, sz);\r\n //var minZoom = Math.max(1, maxZoom - 3);\r\n\r\n while (sz > maxZoom) {\r\n sx = Math.floor(sx / 2);\r\n sy = Math.floor(sy / 2);\r\n sz--;\r\n }\r\n\r\n var srcTile = this.getTile(sx, sy, sz, k);\r\n\r\n var div = ownerDocument.createElement('div');\r\n div.className = \"md-tile-url\";\r\n div.id = id;\r\n\r\n this.divs[id] = k;\r\n\r\n srcTile.references.push(id);\r\n\r\n if (!srcTile.isLoaded) {\r\n\r\n var tmpTile = this.getTile(sx, sy, sz);\r\n var useBm = this.name === \"BING\";\r\n var useGm = !useBm;\r\n while (sz > 19 && !tmpTile.isLoaded) {\r\n sx = Math.floor(sx / 2);\r\n sy = Math.floor(sy / 2);\r\n sz--;\r\n tmpTile = this.getTile(sx, sy, sz);\r\n }\r\n\r\n this.setDivStyle(div, tmpTile, x, y, zoom, !tmpTile.isLoaded && useGm, !tmpTile.isLoaded && useBm);\r\n\r\n }\r\n\r\n srcTile.load(t => {\r\n if (!this.divs[id])\r\n return;\r\n this.setDivStyle(div, t, x, y, zoom);\r\n });\r\n\r\n return div;\r\n }\r\n\r\n releaseTile(div: HTMLElement) {\r\n if (div) {\r\n if (div.parentElement)\r\n div.parentElement.removeChild(div);\r\n if (div.style && div.style.backgroundImage)\r\n div.style.backgroundImage = \"\";\r\n var id = div.id;\r\n if (this.divs[id]) {\r\n var k = this.divs[id];\r\n var tile = this.tiles[k];\r\n if (tile) {\r\n var index = tile.references.indexOf(id);\r\n if (index > -1)\r\n tile.references.splice(index, 1);\r\n if (tile.references.length <= 0)\r\n tile.abort();\r\n }\r\n delete this.divs[id];\r\n }\r\n }\r\n }\r\n\r\n abortAll(): void {\r\n var tiles = this.tiles;\r\n Object.keys(tiles).map(k => tiles[k]).forEach(tile => {\r\n tile.abort();\r\n });\r\n this.tiles = {};\r\n }\r\n }\r\n\r\n export class OCRTileManager extends TileManager {\r\n constructor(mapDrawer: MapDrawer, googleUrl: string, name: string, size = 256) {\r\n super(mapDrawer, googleUrl, name);\r\n\r\n this.size = size;\r\n this.ocr = new GMapsUtils.OctantNodeRenderer(size, size);\r\n }\r\n\r\n size: number;\r\n ocr: GMapsUtils.OctantNodeRenderer;\r\n \r\n getTileDiv(coord: IPoint2D, zoom: number, ownerDocument: HTMLDocument): HTMLElement {\r\n if (zoom < 20)\r\n return super.getTileDiv(coord, zoom, ownerDocument);\r\n\r\n var x = coord.x,\r\n y = coord.y,\r\n k = this.getKey(x, y, zoom),\r\n id = `md-tile-${this.name}-${k}`,\r\n size = this.size;\r\n\r\n var canvas = ownerDocument.createElement('canvas');\r\n canvas.width = canvas.height = size;\r\n canvas.className = \"md-canvas-url\";\r\n canvas.id = id;\r\n\r\n this.divs[id] = k;\r\n\r\n //console.log(\"request tile at zoom \" + zoom);\r\n\r\n this.ocr.requestRender(this.getBounds(x, y, zoom, this.mapDrawer.map), 21, () => {\r\n if (!canvas.parentElement || !this.divs[canvas.id])\r\n return null;\r\n return canvas as HTMLCanvasElement;\r\n }, null, size, size);\r\n\r\n return canvas;\r\n }\r\n\r\n getBounds(x: number, y: number, zoom: number, map: google.maps.Map) {\r\n var projection = map.getProjection(),\r\n tilesize = this.size;\r\n \r\n var cx = (x + 0.5) * tilesize;\r\n var cy = (y + 0.5) * tilesize;\r\n\r\n //var nz = Math.min(21, zoom); //max zoom is 21\r\n //var dz = 1 << (zoom - zoom); //Math.pow(2, zoom - nz)\r\n var ts = tilesize;\r\n var ts2 = ts * 0.5;\r\n var scale = (1 << zoom);\r\n\r\n var tx = Math.floor(cx / ts) * ts;\r\n var ty = Math.floor(cy / ts) * ts;\r\n\r\n var ix = tx + ts2;\r\n var iy = ty + ts2;\r\n \r\n var latLng = LatLng.FromGMLatLng(projection.fromPointToLatLng(new google.maps.Point(ix / scale, iy / scale), false));\r\n\r\n return BoundsLatLng.FromCenterAndZoom(latLng, zoom, this.size, this.size);\r\n }\r\n\r\n //releaseTile(div: HTMLElement) {\r\n // if (div) {\r\n // if (div.parentElement)\r\n // div.parentElement.removeChild(div);\r\n // var id = div.id;\r\n // if (this.divs[id])\r\n // delete this.divs[id];\r\n // }\r\n //}\r\n }\r\n\r\n export interface ITriangleDefinition {\r\n idx: number;\r\n tr: number[][];\r\n edge: Segment2D;\r\n n: Point3D;\r\n nearestNeighboorIdx: number;\r\n faceUpwards: boolean;\r\n slope: number;\r\n collectedIdx: number[];\r\n }\r\n}\r\n","module MapDrawing {\r\n import ObservableValue = spt.Utils.ObservableValue;\r\n\r\n export class ViewModel {\r\n\r\n constructor(mapDrawer: MapDrawer, view: Element, editorMode: number) {\r\n\r\n ko.track(this);\r\n\r\n this.init(mapDrawer, view, editorMode);\r\n\r\n this.UseImperialSystem = window.UseImperialSystem;\r\n this.usemeteronroof = window.usemeteronroof;\r\n\r\n this.valueAdjustOpts = {\r\n notImperial: true,\r\n precision: window.UseImperialSystem || window.usemeteronroof ? 3 : 0,\r\n from: \"mm\",\r\n to: window.UseImperialSystem ? \"ft\" : (window.usemeteronroof ? \"m\" : \"mm\")\r\n };\r\n\r\n this.slopeAdjustOpts = {\r\n notImperial: true,\r\n precision: 3\r\n };\r\n\r\n this.scaleAdjustOpts = {\r\n notImperial: true,\r\n precision: 2,\r\n scale: 100\r\n };\r\n\r\n this.rotateAdjustOpts = {\r\n notImperial: true,\r\n precision: 2\r\n };\r\n\r\n ko.defineProperty(this, 'detailsIconOffset', () => {\r\n return !this.detailsViewVisible ? `-${1 * 20}px -${2 * 20}px` : `-${0 * 20}px -${2 * 20}px`;\r\n });\r\n\r\n ko.defineProperty(this, 'currentLayer',\r\n {\r\n get: () => {\r\n return this.layer.typeName[this.selectedLayerTypeName] || this.layer.referenceLayer;\r\n },\r\n set: (p: PolygonLayer) => {\r\n this.selectedLayerTypeName = p ? p.typeName : null;\r\n }\r\n });\r\n\r\n ko.defineProperty(this, 'currentSubViewModel',\r\n {\r\n get: () => {\r\n return this._currentSubView && this.subViewModels[this._currentSubView] ? this.subViewModels[this._currentSubView] : null;\r\n },\r\n set: (p: ISubModelView) => {\r\n this._currentSubView = p ? p.name : null;\r\n }\r\n });\r\n\r\n ko.defineProperty(this, \"bounds\", () => {\r\n var layers = this.layer.all;\r\n var bounds: BoundsLatLng = null;\r\n layers.forEach(layer => {\r\n var bd = layer.bounds;\r\n if (bd) {\r\n if (bounds)\r\n bounds.Expand(bd);\r\n else\r\n bounds = new BoundsLatLng(bd.Min, bd.Max);\r\n }\r\n });\r\n return bounds || new BoundsLatLng();\r\n });\r\n\r\n ko.defineProperty(this, \"currentImportedImage\", () => {\r\n if (!this.currentImportedImageId)\r\n return this.importedImages.length ? this.importedImages[0] : null;\r\n for (var i = 0, j = this.importedImages.length; i < j; i++) {\r\n var img = this.importedImages[i];\r\n if (img._id === this.currentImportedImageId)\r\n return img;\r\n }\r\n return null;\r\n });\r\n\r\n ko.defineProperty(this, \"referenceLatLng\", () => {\r\n var layer = this.layer.referenceLayer;\r\n var bd = layer.bounds;\r\n if (layer.polygons.length) {\r\n var data = layer.polygons[0].userData as ShapeData;\r\n if (data && data.southMarker && data.southMarker.orientation)\r\n return LatLng.FromPoint2D(data.getOrientedOrigin());\r\n }\r\n if (bd && bd.Initialized)\r\n return layer.bounds.Min;\r\n return this.mapDrawer.center;\r\n });\r\n\r\n ko.defineProperty(this, \"referenceOrientation\", () => {\r\n var layer = this.layer.referenceLayer;\r\n if (layer.polygons.length) {\r\n var data = layer.polygons[0].userData as ShapeData;\r\n if (data && data.southMarker && data.southMarker.orientation)\r\n return data.southMarker.orientation;\r\n }\r\n return 0;\r\n });\r\n\r\n ko.defineProperty(this, \"referenceMarker\", () => {\r\n var latLng = this.referenceLatLng,\r\n orientation = this.referenceOrientation,\r\n refMarker = this._referenceMarker,\r\n mapDrawer = this.mapDrawer;\r\n\r\n if (!mapDrawer.map || !latLng)\r\n return null;\r\n\r\n var vx = Point2D.FromOrientation(-orientation).mul(20),\r\n vy = vx.rot90(),\r\n r = 14,\r\n r2 = r * 2,\r\n ps = `M${-r},0 a${r},${r} 0 0,0 ${r2},0 a${r},${r} 0 0,0 ${-r2},0 M${-vx.x},${-vx.y} L${vx.x},${vx.y} M${-vy.x},${-vy.y} L${vy.x},${vy.y}`,\r\n opts: google.maps.MarkerOptions = {\r\n position: latLng.ToGMLatLng(),\r\n icon: {\r\n path: ps,\r\n strokeWeight: 1,\r\n strokeColor: \"rgb(179,255,255)\",\r\n strokeOpacity: 0.7\r\n }\r\n };\r\n\r\n if (!refMarker) {\r\n refMarker = this._referenceMarker = new google.maps.Marker($.extend({\r\n clickable: false,\r\n draggable: false,\r\n map: mapDrawer.map,\r\n zIndex: 0,\r\n visible: true\r\n }, opts));\r\n } else {\r\n refMarker.setOptions(opts);\r\n }\r\n\r\n return refMarker;\r\n });\r\n\r\n ko.getObservable(this, \"referenceMarker\").subscribe((v) => {\r\n //this function is needed! Even when it does nothing, we need a subscriber so knockout updates the referenceMarker when it changes.\r\n });\r\n\r\n ko.defineProperty(this, \"referenceAxis\", () => {\r\n return Point2D.FromOrientation(this.referenceOrientation);\r\n });\r\n\r\n ko.defineProperty(this, \"saveDisabled\", () => {\r\n return this.overlayTemplate != null || (this._currentSubView != null && this._currentSubView !== \"referenceLength\") || this.selectedToolName === \"ImportImageHelperTool\";\r\n });\r\n\r\n ko.defineProperty(this, \"uploadDisabled\", () => {\r\n return this.overlayTemplate != null || (this._currentSubView != null && this._currentSubView !== \"referenceLength\") || this.selectedToolName === \"ImportImageHelperTool\";\r\n });\r\n\r\n ko.getObservable(this, \"selection\").subscribe(this.onSelectionChanged.bind(this), null, \"arrayChange\");\r\n\r\n ko.getObservable(this, \"showCoords\").subscribe((v) => {\r\n if (this.layer.building)\r\n this.layer.building.forceUpdateAllPolygons();\r\n if (this.layer.interference)\r\n this.layer.interference.forceUpdateAllPolygons();\r\n if (this.layer.freeArea)\r\n this.layer.freeArea.forceUpdateAllPolygons();\r\n });\r\n\r\n ko.getObservable(this, \"showLengths\").subscribe((v) => {\r\n if (this.layer.building)\r\n this.layer.building.forceUpdateAllPolygons();\r\n if (this.layer.interference)\r\n this.layer.interference.forceUpdateAllPolygons();\r\n if (this.layer.freeArea)\r\n this.layer.freeArea.forceUpdateAllPolygons();\r\n });\r\n\r\n ko.getObservable(this, \"showCoordNumbers\").subscribe((v) => {\r\n if (this.layer.building)\r\n this.layer.building.forceUpdateAllPolygons();\r\n if (this.layer.interference)\r\n this.layer.interference.forceUpdateAllPolygons();\r\n if (this.layer.freeArea)\r\n this.layer.freeArea.forceUpdateAllPolygons();\r\n });\r\n\r\n ko.getObservable(this, \"showAngle\").subscribe((v) => {\r\n if (this.layer.building)\r\n this.layer.building.forceUpdateAllPolygons();\r\n if (this.layer.interference)\r\n this.layer.interference.forceUpdateAllPolygons();\r\n if (this.layer.freeArea)\r\n this.layer.freeArea.forceUpdateAllPolygons();\r\n });\r\n\r\n ko.defineProperty(this, 'toolsDisabled',\r\n {\r\n get: () => {\r\n return this.allTools.every(t => t.disabled);\r\n },\r\n set: (b: boolean) => {\r\n this.allTools.forEach(t => { t.disabled = !!b; });\r\n }\r\n });\r\n\r\n this.keyBoardSteps = new ObservableValue(100, { internalUnit: \"mm\", viewUnit: UseImperialSystem ? \"in\" : \"mm\", precision: 2 });\r\n this.interferenceLineThickness = new ObservableValue(250, { internalUnit: \"mm\", viewUnit: UseImperialSystem ? \"in\" : \"mm\", precision: 2 });\r\n\r\n if ($(\".mdDetailsContent\").length) {\r\n var mdDetailsContent = $(\".mdDetailsContent\").get(0) as HTMLDivElement;\r\n\r\n document.addEventListener(\"mousedown\", (ev) => {\r\n this.detailsContentHasFocus = false;\r\n }, true);\r\n\r\n mdDetailsContent.addEventListener(\"mousedown\", (ev) => {\r\n this.detailsContentHasFocus = true;\r\n }, true);\r\n }\r\n }\r\n\r\n clear() {\r\n this.layer.all.forEach(layer => {\r\n this.mapDrawer.deleteSelectables(layer.polygons.map(poly => poly.userData as ShapeData));\r\n });\r\n this.helperLines.removeAll().forEach(helperLine => {\r\n helperLine.dispose();\r\n });\r\n this.importedImages.removeAll().forEach(im => {\r\n im.setMap(null);\r\n });\r\n if (this._referenceMarker) {\r\n this._referenceMarker.setMap(null);\r\n this._referenceMarker = null;\r\n }\r\n }\r\n\r\n init(mapDrawer: MapDrawer, view: Element, editorMode: number) {\r\n this.mapDrawer = mapDrawer;\r\n this.view = view;\r\n this.editorMode = editorMode || 0;\r\n\r\n if (this._referenceMarker) {\r\n this._referenceMarker.setMap(null);\r\n this._referenceMarker = null;\r\n }\r\n\r\n if (this.multiShapeData === undefined) {\r\n var multiShapeData: MultiShapeData = null;\r\n Object.defineProperty(this, 'multiShapeData',\r\n {\r\n configurable: true,\r\n enumerable: true,\r\n get: () => {\r\n if (!multiShapeData)\r\n multiShapeData = new MultiShapeData(this.mapDrawer);\r\n return multiShapeData;\r\n }\r\n });\r\n }\r\n\r\n this.layer = new LayerHolder(mapDrawer, this.editorMode);\r\n\r\n if (this.subViewModels) {\r\n Object.keys(this.subViewModels).forEach(name => {\r\n ko.untrack(this.subViewModels[name]);\r\n });\r\n }\r\n\r\n this.subViewModels = {\r\n importLayer: new ImportLayerModel(mapDrawer),\r\n backgroundSetting: new ImportImageModel(mapDrawer),\r\n referenceLength: new ReferenceLengthModel(mapDrawer),\r\n multipleRidges: new MultipleRidgesModel(mapDrawer)\r\n };\r\n\r\n Object.keys(this.subViewModels).forEach(name => {\r\n (this.subViewModels[name]).name = name;\r\n });\r\n\r\n this.toolIcons = {};\r\n this.allTools.removeAll();\r\n\r\n //tools\r\n Object.keys(MapDrawing).filter((n) => typeof MapDrawing[n] === \"function\" && (MapDrawing[n]).prototype instanceof BaseToolIcon).forEach(n => {\r\n this.allTools.push(this.toolIcons[n] = new MapDrawing[n](mapDrawer, n) as BaseToolIcon);\r\n });\r\n\r\n if (this.selection.length)\r\n this.selection.removeAll();\r\n if (this.importedImages.length)\r\n this.importedImages.removeAll();\r\n\r\n this.selectedLayerTypeName = null;\r\n this.isReadOnly = mapDrawer.options.isReadOnly;\r\n this.selectedToolName = this.isReadOnly ? 'HandTool' : 'SelectTool';\r\n this.slideOutVisible = false;\r\n this.viewWidth = 0;\r\n this.viewHeight = 0;\r\n this.currentImportedImageId = null;\r\n this._currentSubView = null;\r\n this.detailsViewVisible = false;\r\n this.overlayTemplate = null;\r\n this.cadPreviewSrc = null;\r\n this.cadImportEnabled = false;\r\n\r\n //mapDrawer.selectToolClick(this.selectedToolName);\r\n //mapDrawer.selectTool(this.selectedToolName);\r\n }\r\n\r\n get currentTool(): BaseToolIcon {\r\n return this.toolIcons[this.selectedToolName || 'SelectTool'];\r\n }\r\n\r\n set currentTool(v: BaseToolIcon) {\r\n this.selectedToolName = (v ? v.name : 'SelectTool') || 'SelectTool';\r\n }\r\n\r\n editorMode: number = 0;\r\n layer: LayerHolder = null;\r\n instances: { [id: string]: ISelectableItem } = {};\r\n selection: ISelectableItem[] = [];\r\n multiShapeData: MultiShapeData;\r\n currentLayer: PolygonLayer;\r\n selectedLayerTypeName: string = null;\r\n toolIcons: { [name: string]: BaseToolIcon };\r\n allTools: BaseToolIcon[] = [];\r\n isReadOnly: boolean = false;\r\n selectedToolName: string = 'SelectTool';\r\n isDragging: boolean = false;\r\n detailsContentHasFocus: boolean = false;\r\n mapDrawer: MapDrawer;\r\n view: Element;\r\n slideOutVisible = false;\r\n viewWidth = 0;\r\n viewHeight = 0;\r\n importedImages: ImageMapOverlay[] = [];\r\n currentImportedImageId: string = null;\r\n currentImportedImage: ImageMapOverlay;\r\n referenceLatLng: LatLng;\r\n referenceAxis: Point2D;\r\n referenceOrientation: number;\r\n private _referenceMarker: google.maps.Marker;\r\n referenceMarker: google.maps.Marker;\r\n bounds: BoundsLatLng;\r\n helperLines: Helperline[] = [];\r\n readonly keyBoardSteps: ObservableValue;\r\n readonly interferenceLineThickness: ObservableValue;\r\n hoveredId: string = null;\r\n toolsDisabled: boolean;\r\n dragInfo: {\r\n id: string;\r\n start: Point2D;\r\n lastLatLng: LatLng;\r\n firstLatLng: LatLng;\r\n active: boolean;\r\n } = null;\r\n cmdInputVal = \"\";\r\n cmdEdgeLength = 0;\r\n showCoords = false;\r\n showAngle = false;\r\n showAngleWhileDrawing = true;\r\n showLengths = true;\r\n showCoordNumbers = false;\r\n coordsRelative = false;\r\n enableDepthCalculation = false;\r\n isActiveCorrectionRightAngle = true;\r\n\r\n mapDrawerRenderCallback: () => void;\r\n\r\n afterMapDrawerRender() {\r\n if (this.mapDrawerRenderCallback)\r\n this.mapDrawerRenderCallback();\r\n }\r\n\r\n toggleOsmTool(b) {\r\n this.mapDrawer.selectTool(b ? \"OsmBuildingsTool\" : null);\r\n }\r\n\r\n setEdgeLength(v: number | string) {\r\n var l = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: 0,\r\n max: 1000000,\r\n precision: 0,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.valueAdjustOpts.to,\r\n to: \"mm\"\r\n });\r\n\r\n this.cmdEdgeLength = l;\r\n }\r\n\r\n onCommandEnter(input: HTMLInputElement) {\r\n var $input = $(input);\r\n\r\n var cmd = \"\" + $input.val();\r\n\r\n if (this.selectedToolName === 'DrawTool')\r\n this.currentTool.onCommandText(this.mapDrawer, cmd);\r\n\r\n setTimeout(() => {\r\n $input.val(\"\");\r\n this.cmdInputVal = \"\";\r\n }, 0);\r\n\r\n $input.focus();\r\n }\r\n\r\n //setKeyBoardSteps(v: string | number) {\r\n // this.keyBoardSteps = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n // {\r\n // min: 0,\r\n // max: 1000000,\r\n // applyArithmetic: true,\r\n // isFeet: window.UseImperialSystem,\r\n // notImperial: !window.UseImperialSystem,\r\n // from: this.valueAdjustOpts.to,\r\n // to: \"mm\"\r\n // });\r\n //}\r\n\r\n setInstance(id: string, item: ISelectableItem) {\r\n this.instances[id] = item;\r\n ko.valueHasMutated(this, 'instances');\r\n }\r\n\r\n hasInstance(id: string) {\r\n return !!this.instances[id];\r\n }\r\n\r\n removeInstance(id: string) {\r\n if (this.instances[id]) {\r\n delete this.instances[id];\r\n ko.valueHasMutated(this, 'instances');\r\n }\r\n }\r\n\r\n foreachSelected(fn: (s: ISelectableItem) => void, excludeId?: string, includeLocked?: boolean): void {\r\n this.selection.forEach(sel => {\r\n if (!sel._isDisposed && sel.id !== excludeId && (!sel.locked || includeLocked))\r\n fn(sel);\r\n });\r\n }\r\n\r\n foreachItem(fn: (s: ISelectableItem) => void, excludeId?: string, includeLocked?: boolean): void {\r\n var layers = this.layer.all;\r\n\r\n for (var i = 0, j = layers.length; i < j; i++) {\r\n var layer = layers[i];\r\n layer.polygons.forEach(sel => {\r\n if (!sel._isDisposed && sel.userData && sel.userData.id !== excludeId && (!sel.userData.locked || includeLocked))\r\n fn(sel.userData as ShapeData);\r\n });\r\n }\r\n\r\n this.helperLines.forEach(sel => {\r\n if (!sel._isDisposed && sel.id !== excludeId)\r\n fn(sel);\r\n });\r\n }\r\n\r\n _currentSubView: string = null;\r\n currentSubViewModel: ISubModelView;\r\n subViewModels: {\r\n importLayer: ImportLayerModel;\r\n backgroundSetting: ImportImageModel;\r\n referenceLength: ReferenceLengthModel;\r\n multipleRidges: MultipleRidgesModel;\r\n };\r\n\r\n saveDisabled: boolean;\r\n uploadDisabled: boolean;\r\n\r\n detailsViewVisible: boolean = false;\r\n detailsIconOffset: string;\r\n showOverlay = false;\r\n overlayTemplate: string = null;\r\n\r\n cadImportImageNeedsUpdate: boolean;\r\n isAlreadyLoadingCadImage: boolean;\r\n cadPreviewSrc: string = null;\r\n cadImportEnabled: boolean = false;\r\n\r\n UseImperialSystem: boolean;\r\n usemeteronroof: boolean;\r\n\r\n slopeAdjustOpts: spt.Utils.IFloatFromInputOptions;\r\n valueAdjustOpts: spt.Utils.IFloatFromInputOptions;\r\n scaleAdjustOpts: spt.Utils.IFloatFromInputOptions;\r\n rotateAdjustOpts: spt.Utils.IFloatFromInputOptions;\r\n\r\n updateCadImportImage() {\r\n this.cadImportImageNeedsUpdate = true;\r\n this.checkCadImportImage();\r\n }\r\n\r\n editBackground(img: ImageMapOverlay) {\r\n this.currentImportedImageId = img._id;\r\n this.mapDrawer.selectTool(\"ImportImageHelperTool\");\r\n }\r\n\r\n private checkCadImportImage() {\r\n if (this.cadImportImageNeedsUpdate && !this.isAlreadyLoadingCadImage) {\r\n LoaderManager.addLoadingJob();\r\n\r\n this.cadImportImageNeedsUpdate = false;\r\n this.isAlreadyLoadingCadImage = true;\r\n\r\n if (!this.cadImportEnabled) {\r\n this.isAlreadyLoadingCadImage = false;\r\n this.cadPreviewSrc = null;\r\n LoaderManager.finishLoadingJob();\r\n }\r\n\r\n setTimeout(() => {\r\n var layer: string[] = [];\r\n var frozen: boolean[] = [];\r\n this.subViewModels.importLayer.layers.forEach(l => {\r\n layer.push(l.name);\r\n frozen.push(!l.isActive);\r\n });\r\n if (!$('.md-html-overlay-view', this.mapDrawer.view).length) {\r\n this.isAlreadyLoadingCadImage = false;\r\n this.cadPreviewSrc = null;\r\n LoaderManager.finishLoadingJob();\r\n this.checkCadImportImage();\r\n return;\r\n }\r\n AManager.AjaxWithLoading('AppServices.asmx', 'SetMultipleCadImportLayerActiveDeactive', { layers: layer, frozen: frozen }, () => {\r\n if (!$('.md-html-overlay-view', this.mapDrawer.view).length) {\r\n this.isAlreadyLoadingCadImage = false;\r\n this.cadPreviewSrc = null;\r\n LoaderManager.finishLoadingJob();\r\n this.checkCadImportImage();\r\n return;\r\n }\r\n\r\n var cr = $('.md-html-overlay-view', this.mapDrawer.view).get(0).getBoundingClientRect();\r\n var w = Math.round(+cr.width) - 20;\r\n var h = Math.round(+cr.height) - 20;\r\n\r\n spt.Utils.LoadImage(`/handler/ImageHandler.ashx?ID=CADImportPreview&size=${w}&height=${h}&Guid=${spt.Utils.GenerateGuid()}`,\r\n (img) => {\r\n this.isAlreadyLoadingCadImage = false;\r\n this.cadPreviewSrc = img.src;\r\n LoaderManager.finishLoadingJob();\r\n this.checkCadImportImage();\r\n\r\n //DynToolTip.showHowToInfo('_HowToImportDWG', 'howTo_mapDrawerViewWrapper', 'mapDrawerImportCad');\r\n });\r\n\r\n }, () => {\r\n this.isAlreadyLoadingCadImage = false;\r\n this.cadPreviewSrc = null;\r\n LoaderManager.finishLoadingJob();\r\n this.checkCadImportImage();\r\n });\r\n }, 100);\r\n }\r\n }\r\n\r\n toggleSlideOut() {\r\n this.slideOutVisible = !this.slideOutVisible;\r\n }\r\n\r\n setSlideOutVisible(v) {\r\n this.slideOutVisible = !!v;\r\n }\r\n\r\n selectLayer(layer: PolygonLayer) {\r\n this.selectedLayerTypeName = layer ? (layer.typeName || null) : null;\r\n this.mapDrawer.updateDrawingManagerLayerStyles();\r\n }\r\n\r\n selectLayerByTypeName(layerTypeName: string) {\r\n this.selectedLayerTypeName = layerTypeName || null;\r\n this.mapDrawer.updateDrawingManagerLayerStyles();\r\n }\r\n\r\n viewLayer(layer: PolygonLayer) {\r\n this.mapDrawer.fitBounds(layer.polygons);\r\n }\r\n\r\n toggleDetailsPane() {\r\n this.detailsViewVisible = !this.detailsViewVisible;\r\n }\r\n\r\n beginFileUpload(data: any, ev: Event) {\r\n var input = (ev.target || ev.srcElement) as HTMLInputElement;\r\n\r\n if (!input || !input.value)\r\n return;\r\n\r\n this.mapDrawer.selectTool(\"SelectTool\");\r\n\r\n AManager.UploadFile(input, \"Dach\", \"UploadCADOrImageFileForDrawing\", { paramName: 'fileBase' }, (result: IImportCadResult) => {\r\n\r\n if (!result || result.ErrorCode !== CadImportErrorCodeEnum.Success) {\r\n DManager.showErrorMessage(\"ErrorCode: \" + result.ErrorCode + \" - \" + spt.Utils.ConvertCamelCase(CadImportErrorCodeEnum[result.ErrorCode]));\r\n return;\r\n }\r\n\r\n this.mapDrawer.setMapTypeId(MapDrawer.EmptyCanvas);\r\n\r\n if (result.IsCADImport) {\r\n\r\n var importLayerModel = this.subViewModels.importLayer;\r\n\r\n importLayerModel.importAsImage = false;\r\n importLayerModel.isMetric = true;\r\n importLayerModel.scale = 1;\r\n importLayerModel.realWidth = +result.RealWidth;\r\n importLayerModel.realHeight = +result.RealHeight;\r\n importLayerModel.layers.removeAll();\r\n\r\n var cadLayerOptions = result.CadLayerSelection.map((ln, idx) => new NameValue(ln, idx));\r\n\r\n result.CadLayers.forEach(cl => importLayerModel.layers.push(new NameSelect(cl, cadLayerOptions)));\r\n\r\n importLayerModel.layers.forEach(ns => {\r\n ko.getObservable(ns, 'isActive').subscribe(() => { this.updateCadImportImage(); });\r\n });\r\n\r\n this.currentSubViewModel = this.subViewModels.importLayer;\r\n this.detailsViewVisible = true;\r\n\r\n this.cadPreviewSrc = null;\r\n this.cadImportEnabled = true;\r\n this.toolsDisabled = true;\r\n this.updateCadImportImage();\r\n this.showOverlay = true;\r\n this.overlayTemplate = 'cadpreview-md-template';\r\n\r\n DynToolTip.showHowToInfo('_HowToImportDWG', 'howTo_mapDrawerViewWrapper', 'mapDrawerImportCad');\r\n } else\r\n this.mapDrawer.load(() => {\r\n var self = this;\r\n ko.tasks.runEarly();\r\n //setTimeout(() => { this.mapDrawer.selectTool('ImportImageHelperTool'); }, 0);\r\n setTimeout(() => { DynToolTip.showHowToInfo('_HowToImportImage', 'howTo_mapDrawerViewWrapper', 'mapDrawerImportImage', function () { self.mapDrawer.selectTool('ImportImageHelperTool'); }); }, 0);\r\n });\r\n\r\n input.value = null;\r\n });\r\n\r\n }\r\n\r\n finishImportCad() {\r\n this.cadPreviewSrc = null;\r\n this.cadImportEnabled = false;\r\n this.toolsDisabled = false;\r\n //this.updateCadImportImage();\r\n this.showOverlay = false;\r\n this.overlayTemplate = null;\r\n this.currentSubViewModel = null;\r\n this.detailsViewVisible = false;\r\n\r\n this.mapDrawer.load();\r\n }\r\n\r\n readImportCad() {\r\n var importLayerModel = this.subViewModels.importLayer;\r\n var layerValues: number[] = [];\r\n var metric = !!importLayerModel.isMetric;\r\n var wcs = !!importLayerModel.iswcs;\r\n var roofFormId = $('input[name=\"Roof.RoofForm_Id\"]').filter(':checked').val() || null;\r\n var scale = spt.Utils.GetFloatFromInputValue(\"\" + importLayerModel.scale,\r\n {\r\n min: 0,\r\n isFeet: false,\r\n notImperial: true\r\n });\r\n var roofHeight = 0;\r\n if ($(\"#Roof_RoofHeight\").length) {\r\n roofHeight = spt.Utils.GetFloatFromInput(\"#Roof_RoofHeight\",\r\n {\r\n min: 0,\r\n max: 1000000,\r\n applyArithmetic: false,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.valueAdjustOpts.to,\r\n to: \"mm\"\r\n }) || 0;\r\n }\r\n\r\n if (scale <= 0) {\r\n DManager.showErrorMessage(\"Scale is too small.\");\r\n return;\r\n }\r\n\r\n importLayerModel.layers.forEach(l => {\r\n if (l.isActive)\r\n layerValues.push(parseInt(l.selected.value));\r\n });\r\n\r\n AManager.AjaxWithLoading('AppServices.asmx', 'ReadCadImport', { layerValues: layerValues, metric: metric, scale: scale, wcs: wcs, roofFormIdStr: roofFormId, roofHeight: roofHeight }, this.onReadImportCadFinished.bind(this), this.onReadImportCadFinished.bind(this));\r\n }\r\n\r\n private onReadImportCadFinished(result: { Data: { Error: boolean, Message: string } }) {\r\n if (result && result.Data && result.Data.Error)\r\n DManager.showErrorMessage(result.Data.Message);\r\n else if (result && result.Data && result.Data.Message)\r\n console.log(result.Data.Message);\r\n\r\n this.finishImportCad();\r\n }\r\n\r\n onSelectionChanged(changes: { value: ISelectableItem, status: string }[]) {\r\n var multiShapeData = this.multiShapeData;\r\n\r\n changes.forEach((change) => {\r\n var item = change.value;\r\n if (item && !item._isDisposed && item instanceof ShapeData) {\r\n\r\n switch (change.status) {\r\n case \"deleted\":\r\n multiShapeData.shapeDatas.remove(im => im.id === item.id);\r\n break;\r\n case \"added\":\r\n multiShapeData.shapeDatas.push(item);\r\n break;\r\n }\r\n }\r\n });\r\n\r\n multiShapeData.detailsViewVisible = false;\r\n\r\n multiShapeData.updateStyle();\r\n }\r\n\r\n onSelectableClick(selectable: MapDrawing.ISelectableItem, ev: google.maps.MouseEvent) {\r\n var mapDrawer = this.mapDrawer;\r\n\r\n if (this.isDragging)\r\n return;\r\n\r\n if (mapDrawer.viewModel.selectedToolName === 'SelectTool' && selectable && !selectable.locked) {\r\n this.hoveredId = selectable.id;\r\n selectable.hovered = true;\r\n mapDrawer.doSelectSelectable(selectable);\r\n if (selectable instanceof ShapeData && selectable.children.length && ev.latLng)\r\n selectable.selectChildren(LatLng.FromGMLatLng(ev.latLng));\r\n }\r\n else if (mapDrawer.viewModel.selectedToolName === 'EraserTool' && selectable && !selectable.locked)\r\n mapDrawer.deleteSelectable(selectable);\r\n\r\n }\r\n\r\n cleanUpDragInfo() {\r\n if (this.dragInfo)\r\n this.dragInfo = null;\r\n }\r\n\r\n onSelectableMouseover(selectable: MapDrawing.ISelectableItem) {\r\n if (selectable) {\r\n this.hoveredId = selectable.id;\r\n if (this.selectedToolName === 'SelectTool' && selectable && !selectable.locked && !this.isDragging)\r\n selectable.hovered = true;\r\n }\r\n\r\n }\r\n\r\n onSelectableMouseout(selectable: MapDrawing.ISelectableItem) {\r\n if (selectable) {\r\n if (this.hoveredId === selectable.id)\r\n this.hoveredId = null;\r\n if (this.selectedToolName === 'SelectTool' && selectable && !selectable.locked && !this.isDragging)\r\n selectable.hovered = false;\r\n }\r\n }\r\n\r\n onPolygonMousedown(poly: IGoogleMapsPolygon, ev: MouseEvent) {\r\n var dragInfo = this.dragInfo;\r\n //console.log('onPolygonMousedown');\r\n\r\n if (dragInfo) {\r\n let shapeData = (this.instances[dragInfo.id]);\r\n\r\n if (dragInfo.active && !shapeData._isDisposed)\r\n this.onPolygonDragEnd(shapeData.poly);\r\n\r\n this.cleanUpDragInfo();\r\n }\r\n\r\n if (poly && !poly._isDisposed && this.selectedToolName === 'SelectTool' && poly.userData) {\r\n\r\n let data = poly.userData as ShapeData,\r\n latLng = LatLng.FromGMLatLng(this.mapDrawer.GetLatLngFromMouseEvent(ev)),\r\n start = latLng.ToPoint2D();\r\n\r\n if (data instanceof ShapeData && data.selected && !data.isOnEdgePoint(start)) {\r\n\r\n this.dragInfo = {\r\n id: poly.userData.id,\r\n start: start,\r\n lastLatLng: latLng,\r\n firstLatLng: latLng,\r\n active: false\r\n };\r\n\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n }\r\n }\r\n\r\n //console.log(dragInfo);\r\n }\r\n\r\n\r\n onMousemove(ev: MouseEvent) {\r\n var dragInfo = this.dragInfo;\r\n if (dragInfo) {\r\n let mapDrawer = this.mapDrawer,\r\n shapeData = (this.instances[dragInfo.id]);\r\n\r\n if (!dragInfo.active && mapDrawer.GetPoint2DFromMouseEvent(ev).sub(dragInfo.start).mul(mapDrawer.getPixelFactor()).GetLengthSquared() > 100) {\r\n dragInfo.active = true;\r\n this.onPolygonDragStart(shapeData.poly);\r\n }\r\n if (dragInfo.active && !shapeData._isDisposed) {\r\n var curLatLng = LatLng.FromGMLatLng(this.mapDrawer.GetLatLngFromMouseEvent(ev));\r\n\r\n if (mapDrawer.shiftDown) {\r\n var snap = Helperline.GetSnapByHelperlines(null, dragInfo.firstLatLng, curLatLng, mapDrawer, true, false);\r\n curLatLng = snap.result;\r\n }\r\n\r\n shapeData.moveByLatLng(curLatLng.sub(dragInfo.lastLatLng));\r\n\r\n this.onPolygonDragged(shapeData.poly);\r\n\r\n dragInfo.lastLatLng = curLatLng;\r\n }\r\n }\r\n }\r\n\r\n /*\r\n onMousemove(ev: MouseEvent) {\r\n\t var dragInfo = this.dragInfo;\r\n\t if (dragInfo) {\r\n\t\t let mapDrawer = this.mapDrawer,\r\n\t\t\t shapeData = (this.instances[dragInfo.id]);\r\n\t\t console.log('onMousemove draginfo?');\r\n\t\t // && mapDrawer.GetPoint2DFromMouseEvent(ev).sub(dragInfo.start).mul(mapDrawer.getPixelFactor()).GetLengthSquared() > 100\r\n\t\t if (!dragInfo.active) {\r\n\t\t\t dragInfo.active = true;\r\n\t\t\t console.log(\"onPolygonDragStart\");\r\n\t\t\t console.log(ev);\r\n\t\t\t this.onPolygonDragStart(shapeData.poly);\r\n\t\t }\r\n\t\t if (dragInfo.active && !shapeData._isDisposed) {\r\n\t\t\t console.log(\"onPolygonDragged\");\r\n\t\t\t var curLatLng = LatLng.FromGMLatLng(this.mapDrawer.GetLatLngFromMouseEvent(ev));\r\n\r\n\t\t\t if (mapDrawer.shiftDown) {\r\n\t\t\t\t var snap = Helperline.GetSnapByHelperlines(null, dragInfo.firstLatLng, curLatLng, mapDrawer, true, false);\r\n\t\t\t\t curLatLng = snap.result;\r\n\t\t\t }\r\n\r\n\t\t\t shapeData.moveByLatLng(curLatLng.sub(dragInfo.lastLatLng));\r\n\t\t\t this.onPolygonDragged(shapeData.poly);\r\n\t\t\t dragInfo.lastLatLng = curLatLng;\r\n\t\t }\r\n\t }\r\n }\r\n */\r\n\r\n onMouseup(ev: MouseEvent) {\r\n var dragInfo = this.dragInfo;\r\n\r\n if (dragInfo) {\r\n let shapeData = (this.instances[dragInfo.id]);\r\n\r\n if (dragInfo.active && !shapeData._isDisposed) {\r\n this.onPolygonDragEnd(shapeData.poly);\r\n\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n }\r\n\r\n this.dragInfo = null;\r\n }\r\n }\r\n\r\n onPolygonDragStart(poly: IGoogleMapsPolygon) {\r\n this.isDragging = true;\r\n\r\n if (poly._isDisposed)\r\n return;\r\n\r\n poly.setOptions({\r\n editable: false,\r\n draggable: false\r\n });\r\n\r\n var data = poly.userData as ShapeData,\r\n paths = poly.getPaths();\r\n\r\n if (!data || !paths || !paths.getLength())\r\n return;\r\n\r\n var path = paths.getAt(0);\r\n\r\n if (path && path.getLength()) {\r\n data.dragPosition = LatLng.FromGMLatLng(path.getAt(0));\r\n\r\n if (data.typeName === window.BuildingTypeName)\r\n this.foreachItem(sel => {\r\n if (sel instanceof ShapeData)\r\n sel.poly.setOptions({\r\n editable: false,\r\n draggable: false\r\n });\r\n }, data.id);\r\n else\r\n this.foreachSelected(sel => {\r\n if (sel instanceof ShapeData)\r\n sel.poly.setOptions({\r\n editable: false,\r\n draggable: false\r\n });\r\n }, data.id);\r\n }\r\n\r\n //#region strg copy\r\n\r\n if (this.mapDrawer.ctrlDown && data instanceof ShapeData && data.selected) {\r\n\r\n var viewModel = this;\r\n var dataLayer = viewModel.layer.typeName[data.typeName];\r\n\r\n if (!dataLayer.controlledByParent && !dataLayer.locked) {\r\n var tempData: PolyData[] = this.mapDrawer.tempPolyData = [PolyData.fromShapeData(data, spt.Utils.GenerateGuid())];\r\n\r\n this.foreachSelected(sel => {\r\n if (sel instanceof ShapeData) {\r\n let layer = viewModel.layer.typeName[sel.typeName];\r\n if (!layer.controlledByParent && !layer.locked) {\r\n tempData.push(PolyData.fromShapeData(sel, spt.Utils.GenerateGuid()));\r\n }\r\n }\r\n }, data.id);\r\n }\r\n\r\n }\r\n\r\n //#endregion\r\n }\r\n\r\n onPolygonDragged(poly: IGoogleMapsPolygon) {\r\n if (poly._isDisposed)\r\n return;\r\n\r\n var data = poly.userData as ShapeData,\r\n paths = poly.getPaths();\r\n\r\n if (!data || !paths || !paths.getLength())\r\n return;\r\n\r\n //#region strg copy\r\n console.log(\"dragging shape\");\r\n if (this.mapDrawer.ctrlDown && data instanceof ShapeData && data.selected && this.mapDrawer.tempPolyData.length) {\r\n var viewModel = this;\r\n var dataLayer = viewModel.layer.typeName[data.typeName];\r\n\r\n if (!dataLayer.controlledByParent && !dataLayer.locked) {\r\n var layerCounter: { [typeName: string]: number } = {};\r\n\r\n viewModel.foreachSelected(sel => {\r\n if (sel instanceof ShapeData) {\r\n let layer = viewModel.layer.typeName[sel.typeName];\r\n if (!layer.controlledByParent && !layer.locked) {\r\n if (!layerCounter[sel.typeName])\r\n layerCounter[sel.typeName] = layer.polygons.length + 1;\r\n sel.title = layer.getNewName(layerCounter[sel.typeName]++);\r\n }\r\n }\r\n });\r\n\r\n this.mapDrawer.tempPolyData.forEach(data => {\r\n this.mapDrawer.addPolygonByData(data);\r\n });\r\n }\r\n\r\n this.mapDrawer.tempPolyData = [];\r\n }\r\n\r\n //#endregion\r\n\r\n var path = paths.getAt(0);\r\n\r\n if (path && path.getLength() && data.dragPosition) {\r\n var curpos = LatLng.FromGMLatLng(path.getAt(0)),\r\n delta = curpos.sub(data.dragPosition);\r\n\r\n if (data.typeName === window.BuildingTypeName)\r\n this.foreachItem(sel => {\r\n sel.moveByLatLng(delta);\r\n }, data.id);\r\n else\r\n this.foreachSelected(sel => {\r\n sel.moveByLatLng(delta);\r\n }, data.id);\r\n\r\n data.dragPosition = curpos;\r\n }\r\n }\r\n\r\n onPolygonDragEnd(poly: IGoogleMapsPolygon) {\r\n setTimeout(() => { this.isDragging = false; }, 0);\r\n this.mapDrawer.tempPolyData = [];\r\n\r\n if (poly._isDisposed) {\r\n if (poly.userData as ShapeData) {\r\n poly.userData.update();\r\n poly.userData.hovered = false;\r\n }\r\n return;\r\n }\r\n\r\n var data = poly.userData as ShapeData,\r\n paths = poly.getPaths();\r\n\r\n if (!data || !paths || !paths.getLength()) {\r\n if (poly.userData as ShapeData) {\r\n poly.userData.update();\r\n poly.userData.hovered = false;\r\n }\r\n return;\r\n }\r\n\r\n var path = paths.getAt(0);\r\n\r\n if (data && path && path.getLength() && data.dragPosition) {\r\n var curpos = LatLng.FromGMLatLng(path.getAt(0)),\r\n delta = curpos.sub(data.dragPosition);\r\n\r\n if (data.typeName === window.BuildingTypeName)\r\n this.foreachItem(sel => {\r\n sel.moveByLatLng(delta);\r\n if (sel instanceof ShapeData)\r\n sel.updateStyle();\r\n sel.update();\r\n }, data.id);\r\n else\r\n this.foreachSelected(sel => {\r\n sel.moveByLatLng(delta);\r\n if (sel instanceof ShapeData)\r\n sel.updateStyle();\r\n sel.update();\r\n }, data.id);\r\n\r\n delete data.dragPosition;\r\n\r\n data.update();\r\n\r\n data.hovered = false;\r\n data.updateStyle();\r\n }\r\n\r\n\r\n }\r\n\r\n }\r\n\r\n export interface ISubModelView {\r\n template: string;\r\n name: string;\r\n }\r\n\r\n export class LayerHolder {\r\n constructor(mapDrawer: MapDrawer, editorMode: number) {\r\n\r\n switch (editorMode) {\r\n case MapDrawing.EditorModeEnum.Area:\r\n {\r\n this.all.push(this.area = this.referenceLayer = this.mainLayer = new PolygonLayer({\r\n typeName: window.AreaTypeName,\r\n layerName: window.AreaLayerName,\r\n shapeStyle: { fillColor: \"#a7ac00\", strokeColor: \"#2b4300\" },\r\n shapeHoveredStyle: { fillColor: \"#a7ac00\", strokeColor: \"#2b4300\" },\r\n shapeSelectedStyle: { fillColor: \"#486e00\", strokeColor: \"#2b4300\" },\r\n shapeSelectedHoveredStyle: { fillColor: \"#486e00\", strokeColor: \"#2b4300\" },\r\n zIndex: 1,\r\n maxCount: 1\r\n }, mapDrawer));\r\n\r\n this.all.push(this.interference = this.area.child = new PolygonLayer({\r\n typeName: window.InterfernceTypeName,\r\n layerName: window.InterfernceLayerName,\r\n shapeStyle: { fillColor: \"#07AC00\", strokeColor: \"#0B3818\" },\r\n shapeHoveredStyle: { fillColor: \"#07AC00\", strokeColor: \"#0B3818\" },\r\n shapeSelectedStyle: { fillColor: \"#135B27\", strokeColor: \"#0B3818\" },\r\n shapeSelectedHoveredStyle: { fillColor: \"#135B27\", strokeColor: \"#0B3818\" },\r\n zIndex: 6,\r\n parent: this.area\r\n }, mapDrawer));\r\n }\r\n break;\r\n case MapDrawing.EditorModeEnum.FreeArea:\r\n {\r\n this.all.push(this.area = this.referenceLayer = new PolygonLayer({\r\n typeName: window.AreaTypeName,\r\n layerName: window.AreaLayerName,\r\n shapeStyle: { fillColor: \"#b5b5b5\", strokeColor: \"#9e0808\", fillOpacity: 0.1 },\r\n shapeHoveredStyle: { fillColor: \"#b5b5b5\", strokeColor: \"#9e0808\", fillOpacity: 0.1 },\r\n shapeSelectedStyle: { fillColor: \"#dbdbdb\", strokeColor: \"#9e0808\", fillOpacity: 0.4 },\r\n shapeSelectedHoveredStyle: { fillColor: \"#dbdbdb\", strokeColor: \"#9e0808\", fillOpacity: 0.4 },\r\n zIndex: 1,\r\n maxCount: 1,\r\n isPassive: true,\r\n }, mapDrawer));\r\n\r\n this.all.push(this.freeArea = this.mainLayer = this.area.child = new PolygonLayer({\r\n typeName: window.FreeAreaTypeName,\r\n layerName: window.FreeAreaLayerName,\r\n shapeStyle: { fillColor: \"#00ac73\", strokeColor: \"#053133\" },\r\n shapeHoveredStyle: { fillColor: \"#00ac73\", strokeColor: \"#053133\" },\r\n shapeSelectedStyle: { fillColor: \"#32cf93\", strokeColor: \"#053133\" },\r\n shapeSelectedHoveredStyle: { fillColor: \"#32cf93\", strokeColor: \"#053133\" },\r\n zIndex: 2,\r\n parent: this.area\r\n }, mapDrawer));\r\n\r\n this.all.push(this.interference = this.freeArea.child = new PolygonLayer({\r\n typeName: window.InterfernceTypeName,\r\n layerName: window.InterfernceLayerName,\r\n shapeStyle: { fillColor: \"#314570\", strokeColor: \"#0b1221\" },\r\n shapeHoveredStyle: { fillColor: \"#314570\", strokeColor: \"#0b1221\" },\r\n shapeSelectedStyle: { fillColor: \"#133d9c\", strokeColor: \"#0b1221\" },\r\n shapeSelectedHoveredStyle: { fillColor: \"#133d9c\", strokeColor: \"#0b1221\" },\r\n zIndex: 6,\r\n parent: this.freeArea\r\n }, mapDrawer));\r\n }\r\n break;\r\n default: //roof/building\r\n {\r\n this.all.push(this.building = this.referenceLayer = this.mainLayer = new PolygonLayer({\r\n typeName: window.BuildingTypeName,\r\n layerName: window.BuildingLayerName,\r\n shapeStyle: { fillOpacity: 0 },\r\n shapeHoveredStyle: { fillOpacity: 0 },\r\n shapeSelectedStyle: { fillOpacity: 0 },\r\n shapeSelectedHoveredStyle: { fillOpacity: 0 },\r\n zIndex: 4,\r\n maxCount: 1\r\n }, mapDrawer));\r\n\r\n this.all.push(this.roof = this.building.child = new PolygonLayer({\r\n typeName: window.RoofTypeName,\r\n layerName: window.RoofLayerName,\r\n zIndex: 3,\r\n parent: this.building,\r\n controlledByParent: true\r\n }, mapDrawer));\r\n\r\n this.all.push(this.interference = this.roof.child = new PolygonLayer({\r\n typeName: window.InterfernceTypeName,\r\n layerName: window.InterfernceLayerName,\r\n shapeStyle: { fillColor: \"#07AC00\", strokeColor: \"#0B3818\" },\r\n shapeHoveredStyle: { fillColor: \"#07AC00\", strokeColor: \"#0B3818\" },\r\n shapeSelectedStyle: { fillColor: \"#135B27\", strokeColor: \"#0B3818\" },\r\n shapeSelectedHoveredStyle: { fillColor: \"#135B27\", strokeColor: \"#0B3818\" },\r\n zIndex: 6,\r\n parent: this.roof\r\n }, mapDrawer));\r\n }\r\n break;\r\n }\r\n\r\n Object.keys(this).forEach(k => {\r\n if (k && this[k] && this[k] instanceof PolygonLayer) {\r\n var l = this[k] as PolygonLayer;\r\n this.typeName[l.typeName] = l;\r\n }\r\n });\r\n }\r\n\r\n referenceLayer: PolygonLayer = null;\r\n mainLayer: PolygonLayer = null;\r\n area: PolygonLayer = null;\r\n building: PolygonLayer = null;\r\n roof: PolygonLayer = null;\r\n roofArea: PolygonLayer = null;\r\n freeArea: PolygonLayer = null;\r\n interference: PolygonLayer = null;\r\n\r\n typeName: { [typeName: string]: PolygonLayer } = {};\r\n\r\n all: PolygonLayer[] = [];\r\n }\r\n\r\n export class NameValue {\r\n constructor(name: string, value?: any) {\r\n this.value = value !== undefined ? value : null;\r\n ko.track(this);\r\n\r\n this.name = name;\r\n }\r\n\r\n name: string;\r\n value: any;\r\n }\r\n\r\n export class NameSelect {\r\n constructor(name: string, options?: NameValue[], isActive?: boolean) {\r\n this.isActive = isActive === undefined ? true : !!isActive;\r\n this.options = options || [];\r\n this.selected = null;\r\n ko.track(this);\r\n\r\n this.name = name;\r\n }\r\n\r\n isActive: boolean;\r\n name: string;\r\n selected: NameValue;\r\n options: NameValue[];\r\n }\r\n\r\n export class ImportLayerModel implements ISubModelView {\r\n constructor(mapDrawer: MapDrawer) {\r\n ko.track(this);\r\n\r\n ko.defineProperty(this, 'allActive',\r\n {\r\n get: () => {\r\n return this.layers.every(l => l.isActive);\r\n },\r\n set: (b) => {\r\n this.layers.forEach(l => { l.isActive = b; });\r\n }\r\n });\r\n\r\n ko.defineProperty(this, 'scaledWidth', () => Math.round(this.realWidth * this.scale));\r\n ko.defineProperty(this, 'scaledHeight', () => Math.round(this.realHeight * this.scale));\r\n }\r\n\r\n name: string;\r\n importAsImage: boolean = false;\r\n allActive: boolean;\r\n template: string = 'importLayer-md-template';\r\n isMetric: boolean = true;\r\n scale: number = 1;\r\n iswcs: boolean = true;\r\n realWidth: number = 0;\r\n realHeight: number = 0;\r\n scaledWidth: number;\r\n scaledHeight: number;\r\n layers: NameSelect[] = [];\r\n }\r\n\r\n export class ImportImageModel implements ISubModelView {\r\n constructor(mapDrawer: MapDrawer) {\r\n ko.track(this);\r\n\r\n this.mapDrawer = mapDrawer;\r\n\r\n ko.defineProperty(this, 'pos',\r\n {\r\n get: () => {\r\n var img = this.mapDrawer.viewModel.currentImportedImage,\r\n mapDrawer = this.mapDrawer;\r\n if (!img || !mapDrawer)\r\n return Point2D.Zero;\r\n var refLatLng = mapDrawer.viewModel.referenceLatLng;\r\n if (!refLatLng || !img._bounds)\r\n return Point2D.Zero;\r\n return img._bounds.Initialized ? refLatLng.DirectionTo(img._bounds.Min).mul(1000) : Point2D.Zero;\r\n },\r\n set: (p: Point2D) => {\r\n var img = this.mapDrawer.viewModel.currentImportedImage,\r\n mapDrawer = this.mapDrawer;\r\n if (!img || !img._bounds || !mapDrawer)\r\n return;\r\n\r\n var t = p.sub(this.pos).mul(0.001);\r\n\r\n img.setBounds(img._bounds.OffsetMeters(t.y, t.x));\r\n }\r\n });\r\n\r\n ko.defineProperty(this, 'rotation',\r\n {\r\n get: () => {\r\n var img = this.mapDrawer.viewModel.currentImportedImage;\r\n if (!img || !img._bounds)\r\n return 0;\r\n return -img._orientation;\r\n },\r\n set: (r: number) => {\r\n var img = this.mapDrawer.viewModel.currentImportedImage;\r\n if (!img || !img._bounds)\r\n return;\r\n\r\n img.setOrientation(-r);\r\n }\r\n });\r\n\r\n ko.defineProperty(this, 'alpha',\r\n {\r\n get: () => {\r\n var img = this.mapDrawer.viewModel.currentImportedImage;\r\n if (!img || !img._bounds)\r\n return 0;\r\n return img._alpha;\r\n },\r\n set: (r: number) => {\r\n var img = this.mapDrawer.viewModel.currentImportedImage;\r\n if (!img || !img._bounds)\r\n return;\r\n\r\n img.setAlpha(r);\r\n }\r\n });\r\n\r\n ko.defineProperty(this, 'refLength',\r\n {\r\n get: () => {\r\n var img = this.mapDrawer.viewModel.currentImportedImage;\r\n var imgTool = this.mapDrawer.viewModel.toolIcons[\"ImportImageHelperTool\"] as ImportImageHelperTool;\r\n if (!img || !img._bounds || !imgTool)\r\n return 0;\r\n return img._refLength;\r\n },\r\n set: (r: number) => {\r\n var img = this.mapDrawer.viewModel.currentImportedImage;\r\n var imgTool = this.mapDrawer.viewModel.toolIcons[\"ImportImageHelperTool\"] as ImportImageHelperTool;\r\n if (!img || !img._bounds || !imgTool)\r\n return;\r\n\r\n var rl = this.refLength;\r\n\r\n if (r > 0 && rl > 0) {\r\n var sc = r / rl;\r\n\r\n var s = imgTool.Start.ToPoint2D();\r\n var e = imgTool.End.ToPoint2D();\r\n\r\n var c = e.add(s).mul(0.5);\r\n //var t = e.sub(s);\r\n\r\n var transform = Transformation3D.Translation(-c.x, -c.y).multiply(Transformation3D.Scale(sc, sc)).multiply(Transformation3D.Translation(c.x, c.y));\r\n\r\n img.setBounds(new BoundsLatLng(LatLng.FromPoint2D(transform.transform(img._bounds.Min.ToPoint2D())), LatLng.FromPoint2D(transform.transform(img._bounds.Max.ToPoint2D()))));\r\n\r\n imgTool.setStartEnd(LatLng.FromPoint2D(transform.transform(s)), LatLng.FromPoint2D(transform.transform(e)));\r\n }\r\n }\r\n });\r\n\r\n ko.defineProperty(this, 'scale',\r\n {\r\n get: () => {\r\n return this._scale;\r\n },\r\n set: (v: number) => {\r\n var img = this.mapDrawer.viewModel.currentImportedImage;\r\n if (!img || !img._bounds)\r\n return 0;\r\n var s = v / this._scale;\r\n this._scale = v;\r\n if (s != 1) {\r\n img.setBounds(img._bounds.Scale(s));\r\n }\r\n }\r\n });\r\n }\r\n\r\n name: string;\r\n template: string = 'bg-details-md-template';\r\n\r\n mapDrawer: MapDrawer;\r\n refLength: number;\r\n rotation: number;\r\n alpha: number;\r\n pos: Point2D;\r\n private _scale: number = 1;\r\n scale: number;\r\n\r\n setRefLength(v: number | string) {\r\n var l = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: 0,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n });\r\n this.refLength = l;\r\n }\r\n\r\n setPosX(v: string | number) {\r\n var y = this.pos.y;\r\n var x = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: -1000000,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n });\r\n this.pos = new Point2D(x, y);\r\n }\r\n\r\n setPosY(v: string | number) {\r\n var x = this.pos.x;\r\n var y = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: -1000000,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n });\r\n this.pos = new Point2D(x, y);\r\n }\r\n\r\n setRotation(v: string | number) {\r\n var r = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: -360,\r\n max: 360,\r\n applyArithmetic: true,\r\n notImperial: true\r\n });\r\n this.rotation = r;\r\n }\r\n\r\n setAlpha(v: string | number) {\r\n var s = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: 0,\r\n max: 100,\r\n applyArithmetic: true,\r\n notImperial: true,\r\n scale: 1 / 100\r\n });\r\n this.alpha = s;\r\n }\r\n\r\n setScale(v: string | number) {\r\n var s = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: 0,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n notImperial: true,\r\n scale: 1 / 100\r\n });\r\n this.scale = s;\r\n }\r\n }\r\n\r\n export enum ReferenceLengthScaleMode {\r\n scale = 0,\r\n scaleAlongEdge = 1,\r\n stretch = 2,\r\n expandLeft = 3,\r\n expandRight = 4\r\n }\r\n\r\n export class ReferenceLengthModel implements ISubModelView {\r\n name: string;\r\n template: string = 'rf-len-md-template';\r\n\r\n orientation = 0;\r\n slope = 0;\r\n\r\n mapDrawer: MapDrawer;\r\n\r\n readonly refLength: number;\r\n newLength: number = 0;\r\n\r\n readonly refInclinedLength: number;\r\n newInclinedLength: number;\r\n\r\n scaleImage = true;\r\n hasImage = false;\r\n imageBounds: BoundsLatLng;\r\n scaleEdgeMode: number = 0;\r\n scaleEdgeModes: { name: string, val: number }[];\r\n private shapeBackups: SolarProTool.MapShape[] = [];\r\n private selectedPolyId: string = null;\r\n //private previousTransform: { oldLength: number, newLength: number, scaleAlongEdge: boolean };\r\n\r\n private GetReferenceLengthTool() {\r\n return this.mapDrawer.viewModel.toolIcons[\"ReferenceLengthTool\"] as ReferenceLengthTool;\r\n }\r\n\r\n origStart: LatLng = new LatLng();\r\n origEnd: LatLng = new LatLng();\r\n Start: LatLng = new LatLng();\r\n End: LatLng = new LatLng();\r\n\r\n constructor(mapDrawer: MapDrawer) {\r\n ko.track(this);\r\n\r\n this.scaleEdgeModes = window.MdScaleEdgeModes;\r\n\r\n this.mapDrawer = mapDrawer;\r\n\r\n ko.defineProperty(this, 'refLength', () => {\r\n var s = this.Start,\r\n e = this.End;\r\n\r\n return s.DistanceTo(e) * 1000;\r\n });\r\n\r\n ko.defineProperty(this, 'refInclinedLength', () => {\r\n\r\n var s = this.Start,\r\n e = this.End,\r\n slope = Math.abs(this.slope);\r\n\r\n if (slope <= 0 || slope > 89)\r\n return s.DistanceTo(e) * 1000;\r\n\r\n var d = s.DirectionTo(e),\r\n dir = Point2D.FromOrientation(this.orientation),\r\n dx = Math.abs(dir.dot(d)),\r\n dy = Math.abs(dir.LeftHandNormal().dot(d) / Math.cos(slope / 180 * Math.PI));\r\n\r\n return Math.sqrt(dx * dx + dy * dy) * 1000;\r\n });\r\n\r\n ko.defineProperty(this, 'newInclinedLength',\r\n {\r\n get: () => {\r\n return this.newLength * this.refInclinedLength / this.refLength;\r\n },\r\n set: (v: number) => {\r\n this.newLength = v * this.refLength / this.refInclinedLength;\r\n }\r\n });\r\n }\r\n\r\n setNewLength(v: number | string) {\r\n var l = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: 0,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n });\r\n this.newLength = l;\r\n }\r\n\r\n setNewInclinedLength(v: number | string) {\r\n var l = spt.Utils.GetFloatFromInputValue(\"\" + v,\r\n {\r\n min: 0,\r\n max: 1000000,\r\n applyArithmetic: true,\r\n isFeet: window.UseImperialSystem,\r\n notImperial: !window.UseImperialSystem,\r\n from: this.mapDrawer.viewModel.valueAdjustOpts.to,\r\n to: \"mm\"\r\n });\r\n this.newInclinedLength = l;\r\n }\r\n\r\n revertPrevious() {\r\n if (this.shapeBackups.length)\r\n this.mapDrawer.importShapes(this.shapeBackups);\r\n if (this.imageBounds) {\r\n var img = this.mapDrawer.viewModel.currentImportedImage;\r\n if (img)\r\n img.setBounds(this.imageBounds.Clone());\r\n }\r\n this.Start = this.origStart.Clone();\r\n this.End = this.origEnd.Clone();\r\n }\r\n\r\n initLengths(start: LatLng, end: LatLng, shapeDataId: string, orientation: number, slope: number) {\r\n var mapDrawer = this.mapDrawer;\r\n if (!mapDrawer.viewModel.hasInstance(shapeDataId))\r\n return;\r\n this.orientation = orientation;\r\n this.slope = slope;\r\n\r\n this.Start = start.Clone();\r\n this.End = end.Clone();\r\n this.origStart = start.Clone();\r\n this.origEnd = end.Clone();\r\n\r\n this.selectedPolyId = shapeDataId;\r\n var shapeData = mapDrawer.viewModel.instances[shapeDataId] as ShapeData;\r\n this.shapeBackups.removeAll();\r\n this.shapeBackups.push(mapDrawer.exportShape(shapeData));\r\n\r\n if (shapeData.typeName === window.BuildingTypeName && shapeData.mType === 'ShapeData') {\r\n //add interference fields\r\n mapDrawer.viewModel.foreachItem(sel => {\r\n if (sel instanceof ShapeData && sel.typeName === window.InterfernceTypeName) {\r\n this.shapeBackups.push(mapDrawer.exportShape(sel));\r\n }\r\n }, shapeData.id);\r\n }\r\n\r\n this.newLength = this.refLength;\r\n var img = mapDrawer.viewModel.currentImportedImage;\r\n this.imageBounds = null;\r\n\r\n if (img && img._bounds)\r\n this.imageBounds = img.getBounds().Clone();\r\n\r\n this.hasImage = !!img && !!this.imageBounds;\r\n\r\n //this.previousTransform = null;\r\n }\r\n\r\n revertNewLength() {\r\n this.revertPrevious();\r\n this.GetReferenceLengthTool().updatePolyline(this.Start, this.End, this.mapDrawer);\r\n ko.tasks.runEarly();\r\n this.newLength = this.refLength;\r\n }\r\n\r\n applyNewLength() {\r\n setTimeout(() => {\r\n ko.tasks.runEarly();\r\n var oldLength = this.refLength,\r\n newLength = this.newLength;\r\n\r\n if (oldLength > 0 && newLength > 0 && oldLength !== newLength) {\r\n this.revertPrevious();\r\n ko.tasks.runEarly();\r\n //this.previousTransform = { oldLength: this.refLength, newLength: newLength, scaleAlongEdge: this.scaleEdgeMode === ReferenceLengthScaleMode.scaleAlongEdge };\r\n this.applyTransform(this.Start, this.End, newLength, this.scaleEdgeMode);\r\n }\r\n }, 0);\r\n }\r\n\r\n applyTransform(start: LatLng, end: LatLng, newLength: number, mode: number) {\r\n var oldLength = start.DistanceTo(end) * 1000;\r\n\r\n if (oldLength > 0 && newLength > 0 && oldLength !== newLength && this.shapeBackups.length && this.shapeBackups[0].IdString === this.selectedPolyId && this.mapDrawer.viewModel.hasInstance(this.selectedPolyId)) {\r\n\r\n var s = start.ToPoint2D(),\r\n e = end.ToPoint2D(),\r\n sc = newLength / oldLength,\r\n center = e.add(s).mul(0.5);\r\n\r\n var mapDrawer = this.mapDrawer,\r\n refLenTool = this.GetReferenceLengthTool(),\r\n shapeData = this.mapDrawer.viewModel.instances[this.selectedPolyId] as ShapeData;\r\n\r\n if (shapeData) {\r\n if (shapeData.controlledByParent)\r\n shapeData = shapeData.parent;\r\n\r\n switch (mode) {\r\n case ReferenceLengthScaleMode.scaleAlongEdge:\r\n case ReferenceLengthScaleMode.scale:\r\n {\r\n var transform: Transformation3D;\r\n if (mode === ReferenceLengthScaleMode.scaleAlongEdge) {\r\n var se = e.sub(s),\r\n rad = Math.atan2(se.y, se.x);\r\n transform = Transformation3D.Translation(-center.x, -center.y).multiply(Transformation3D.Rotation(-rad)).multiply(Transformation3D.Scale(sc, 1)).multiply(Transformation3D.Rotation(rad)).multiply(Transformation3D.Translation(center.x, center.y));\r\n } else\r\n transform = Transformation3D.Translation(-center.x, -center.y).multiply(Transformation3D.Scale(sc, sc)).multiply(Transformation3D.Translation(center.x, center.y));\r\n\r\n if (shapeData.typeName === window.BuildingTypeName && shapeData.mType === 'ShapeData') {\r\n //apply to interferences\r\n mapDrawer.viewModel.foreachItem(sel => {\r\n if (sel instanceof ShapeData && sel.typeName === window.InterfernceTypeName) {\r\n sel.applyTransform(transform, mapDrawer, null, true);\r\n }\r\n }, shapeData.id);\r\n }\r\n\r\n shapeData.applyTransform(transform, mapDrawer, null, true);\r\n\r\n this.Start = LatLng.FromPoint2D(transform.transform(s));\r\n this.End = LatLng.FromPoint2D(transform.transform(e));\r\n\r\n var img = this.mapDrawer.viewModel.currentImportedImage;\r\n if (img && this.hasImage && this.scaleImage && mode === ReferenceLengthScaleMode.scale)\r\n img.setBounds(new BoundsLatLng(LatLng.FromPoint2D(transform.transform(img._bounds.Min.ToPoint2D())), LatLng.FromPoint2D(transform.transform(img._bounds.Max.ToPoint2D()))));\r\n }\r\n break;\r\n case ReferenceLengthScaleMode.stretch:\r\n {\r\n var d = e.sub(s),\r\n dLen = d.GetLength(),\r\n dir = d.divide(dLen),\r\n maxOff = Math.abs(dLen * sc - dLen) * 0.5;\r\n\r\n var sdt = dir.dot(s.sub(center)),\r\n soff = sdt * sc - sdt,\r\n edt = dir.dot(e.sub(center)),\r\n eoff = edt * sc - edt;\r\n\r\n this.Start = LatLng.FromPoint2D(s.add(dir.mul(Math.max(-maxOff, Math.min(maxOff, soff)))));\r\n this.End = LatLng.FromPoint2D(e.add(dir.mul(Math.max(-maxOff, Math.min(maxOff, eoff)))));\r\n\r\n shapeData.poly.setPaths(shapeData.getBorderPoints().map(ps => ps.map(p => {\r\n var dt = dir.dot(p.sub(center)),\r\n off = dt * sc - dt;\r\n return LatLng.Point2DToGMLatLng(p.add(dir.mul(Math.max(-maxOff, Math.min(maxOff, off)))));\r\n })));\r\n\r\n if (shapeData.separationPolylines && shapeData.separationPolylines.length) {\r\n shapeData.separationPolylines.forEach(sp => {\r\n sp.polyline.setPath(sp.polyline.getPath().getArray().map(ll => {\r\n var p = LatLng.GMLatLngToPoint2D(ll),\r\n dt = dir.dot(p.sub(center)),\r\n off = dt * sc - dt;\r\n return LatLng.Point2DToGMLatLng(p.add(dir.mul(Math.max(-maxOff, Math.min(maxOff, off)))));\r\n }));\r\n });\r\n }\r\n\r\n if (shapeData.typeName === window.BuildingTypeName && shapeData.mType === 'ShapeData') {\r\n //apply to interferences\r\n mapDrawer.viewModel.foreachItem(sel => {\r\n if (sel instanceof ShapeData && sel.typeName === window.InterfernceTypeName) {\r\n\r\n sel.poly.setPaths(sel.getBorderPoints().map(ps => ps.map(p => {\r\n var dt = dir.dot(p.sub(center)),\r\n off = dt * sc - dt;\r\n return LatLng.Point2DToGMLatLng(p.add(dir.mul(Math.max(-maxOff, Math.min(maxOff, off)))));\r\n })));\r\n\r\n sel.update();\r\n }\r\n }, shapeData.id);\r\n }\r\n\r\n shapeData.update();\r\n }\r\n break;\r\n case ReferenceLengthScaleMode.expandRight:\r\n {\r\n let np = LatLng.FromPoint2D(e.add(s.sub(e).mul(sc)));\r\n shapeData.movePoint(start, np, null);\r\n shapeData.update();\r\n\r\n this.Start = np;\r\n this.End = end.Clone();\r\n }\r\n break;\r\n case ReferenceLengthScaleMode.expandLeft:\r\n {\r\n let np = LatLng.FromPoint2D(s.add(e.sub(s).mul(sc)));\r\n shapeData.movePoint(end, np, null);\r\n shapeData.update();\r\n\r\n this.Start = start.Clone();\r\n this.End = np;\r\n }\r\n break;\r\n }\r\n\r\n ko.tasks.runEarly();\r\n\r\n refLenTool.updatePolyline(this.Start, this.End, mapDrawer);\r\n }\r\n\r\n }\r\n }\r\n\r\n }\r\n\r\n export class MultipleRidgesModel implements ISubModelView {\r\n name: string;\r\n template: string = 'rf-mul-ridge-md-template';\r\n\r\n mapDrawer: MapDrawer;\r\n count: number = 3;\r\n\r\n constructor(mapDrawer: MapDrawer) {\r\n ko.track(this);\r\n\r\n this.mapDrawer = mapDrawer;\r\n }\r\n\r\n getCount(): number {\r\n return spt.Utils.GetFloatFromInputValue(\"\" + this.count, { min: 2 });\r\n }\r\n\r\n incrementCount(val: number): void {\r\n this.count = Math.round(Math.max(2, this.getCount() + val));\r\n }\r\n }\r\n}","module MapDrawing {\r\n export class MapDrawer implements IEventManager {\r\n\r\n constructor(view: Element, options?: IMapDrawerOptions) {\r\n\r\n if (!MapDrawer.staticInitialized) {\r\n MapDrawer.staticInitialized = true;\r\n\r\n ImageMapOverlay.initializePrototype();\r\n CanvasOverlay.initializePrototype();\r\n\r\n }\r\n\r\n this.view = view;\r\n\r\n //if (window[\"GMapsUtils\"] && window[\"GMapsUtils\"].OctantNodeRenderer && this.mapTypeIds && this.mapTypeIds.indexOf(\"Google HD\") === -1)\r\n // this.mapTypeIds.push(\"Google HD\");\r\n\r\n //var mouseEventCreation = false;\r\n //try {\r\n // var ev = new MouseEvent(\"mousemove\", {\r\n // screenX: 0,\r\n // screenY: 0,\r\n // clientX: 1,\r\n // clientY: 1\r\n // });\r\n //} catch (err) {\r\n // mouseEventCreation = true;\r\n //}\r\n //this.mouseEventCreation = mouseEventCreation;\r\n this.init(options);\r\n }\r\n\r\n static staticInitialized: boolean;\r\n\r\n static EmptyCanvas: string = \"Canvas\";\r\n\r\n init(options?: IMapDrawerOptions, skipBindings?: boolean) {\r\n\r\n this.options = {\r\n center: { lat: 0, lng: 0 },\r\n width: 200,\r\n height: 200,\r\n pathToIcons: \"~/\",\r\n pathToButtons: \"~/\",\r\n dialogId: null,\r\n tileUrl: \"../../handler/StaticImagesHandler.ashx\",\r\n isReadOnly: false\r\n };\r\n\r\n if (options) {\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key))\r\n this.options[key] = options[key];\r\n }\r\n }\r\n\r\n options = this.options;\r\n\r\n if (options.pathToIcons.slice(-1) !== \"/\")\r\n options.pathToIcons += \"/\";\r\n\r\n if (options.dialogId) {\r\n this.dialog = document.getElementById(options.dialogId);\r\n DManager.init(this.dialog, 'auto', 'auto', SetWidthDialogTitleBarWidth, this.onDialogClose.bind(this), { closeOnEscape: false });\r\n }\r\n\r\n var view = this.view;\r\n\r\n var viewModel = this.viewModel;\r\n\r\n if (!viewModel)\r\n this.viewModel = viewModel = new ViewModel(this, view, options.editorMode);\r\n else\r\n viewModel.init(this, view, options.editorMode);\r\n\r\n if ($(\".mapDrawerViewWrapper\", this.view).length === 0 && !skipBindings) {\r\n //div not yet available. try apply knockout first and init again later.\r\n\r\n viewModel.mapDrawerRenderCallback = this.init.bind(this, options, true);\r\n ko.applyBindings(viewModel, view);\r\n return;\r\n }\r\n\r\n viewModel.mapDrawerRenderCallback = null;\r\n\r\n var mapsViewWrapper = this.mapsViewWrapper = $(\".mapDrawerViewWrapper\", this.view).get(0);\r\n var mapsView = this.mapsView = $(\".mapDrawerView\", mapsViewWrapper).get(0);\r\n\r\n var map = this.map;\r\n var zoom = 21;\r\n let tilesize = LatLng.TILE_SIZE;\r\n var applyBindings = !skipBindings;\r\n var url = options.tileUrl;\r\n\r\n var mapTypeId = options.mapTypeId || MapDrawer.EmptyCanvas;\r\n\r\n this.center.set(options.center.lat, options.center.lng);\r\n\r\n mapsViewWrapper.style.width = mapsView.style.width = options.width + \"px\";\r\n mapsViewWrapper.style.height = mapsView.style.height = options.height + \"px\";\r\n viewModel.viewWidth = options.width;\r\n viewModel.viewHeight = options.height;\r\n\r\n if (map) {\r\n google.maps.event.trigger(map, \"resize\");\r\n\r\n map.setCenter(options.center);\r\n\r\n map.setZoom(zoom);\r\n\r\n map.setMapTypeId(mapTypeId);\r\n\r\n applyBindings = false;\r\n }\r\n else {\r\n map = new google.maps.Map(mapsView, {\r\n zoom: zoom,\r\n center: new google.maps.LatLng(options.center.lat, options.center.lng),\r\n mapTypeId: google.maps.MapTypeId.SATELLITE,\r\n heading: 0,\r\n tilt: 0,\r\n mapTypeControl: true,\r\n mapTypeControlOptions: {\r\n mapTypeIds: this.mapTypeIds,\r\n style: google.maps.MapTypeControlStyle.DROPDOWN_MENU\r\n },\r\n streetViewControl: false,\r\n disableDoubleClickZoom: true,\r\n overviewMapControl: false,\r\n panControl: false,\r\n rotateControl: false,\r\n scaleControl: false,\r\n scrollwheel: true,\r\n zoomControl: false,\r\n disableDefaultUI: true,\r\n gestureHandling: 'greedy',\r\n });\r\n\r\n\r\n let $controlCorrectionRightAngle = $('#roofMapControlAutoCorrectionRightAngle').clone();\r\n $controlCorrectionRightAngle.removeClass('d-none');\r\n let $buttonCorrection = $controlCorrectionRightAngle.find('.checkbox').first();\r\n if (this.viewModel.isActiveCorrectionRightAngle)\r\n $buttonCorrection.checkbox('check');\r\n\r\n $buttonCorrection.checkbox({\r\n onChange: () => {\r\n this.viewModel.isActiveCorrectionRightAngle = !this.viewModel.isActiveCorrectionRightAngle;\r\n //$buttonCorrection.checkbox('toggle');\r\n }\r\n });\r\n\r\n map.controls[google.maps.ControlPosition.TOP_LEFT].push($controlCorrectionRightAngle.get(0));\r\n\r\n\r\n let $stepHelper = $('#showRoofHelperOnStep').clone();\r\n $stepHelper.removeClass('d-none');\r\n map.controls[google.maps.ControlPosition.BOTTOM_CENTER].push($stepHelper.get(0))\r\n\r\n //var dragedMapListener = google.maps.event.addListener(this.marker, 'dragend', () => {\r\n // this.geocodePosition(this.marker.getPosition());\r\n //});\r\n\r\n var mapMaxZoom = 25;\r\n\r\n //map.mapTypes.set(\"OSM\", new google.maps.ImageMapType({\r\n // getTileUrl: (coord: IPoint2D, zoom: number) => {\r\n // return \"http://tile.openstreetmap.org/\" + zoom + \"/\" + coord.x + \"/\" + coord.y + \".png\";\r\n // },\r\n // tileSize: new google.maps.Size(Tilesize, Tilesize),\r\n // name: \"OpenStreetMap\",\r\n // maxZoom: mapMaxZoom\r\n //}));\r\n\r\n //map.mapTypes.set(\"Google\", new google.maps.ImageMapType({\r\n // getTileUrl: (coord, zoom) => {\r\n // var scale = (1 << zoom) / Tilesize;\r\n // var projection = map.getProjection();\r\n // var latlng = projection.fromPointToLatLng(new google.maps.Point((coord.x + 0.5) / scale, (coord.y + 0.5) / scale), false);\r\n\r\n // var url = url +\"?ID=GoogleHybrid¢er=\" + latlng.lat() + \",\" + latlng.lng() + \"&zoom=\" + zoom + \"&size=\" + Tilesize + \"x\" + Tilesize + \"&scale=1\";\r\n\r\n // return url;\r\n // },\r\n // tileSize: new google.maps.Size(Tilesize, Tilesize),\r\n // name: \"Google\",\r\n // maxZoom: mapMaxZoom,\r\n // minZoom: 1\r\n //}));\r\n\r\n var tileManager = this.tileManager,\r\n ocrManager = this.ocrManager;\r\n\r\n if (!tileManager) {\r\n tileManager = this.tileManager = [\r\n null\r\n , new TileManager(this, url + \"?ID=GoogleHybrid\", this.mapTypeIds[1])\r\n , new TileManager(this, url + \"?ID=Bing\", this.mapTypeIds[2])\r\n //,null\r\n ];\r\n }\r\n\r\n if (!ocrManager && this.mapTypeIds[3])\r\n ocrManager = this.ocrManager = new OCRTileManager(this, url + \"?ID=GoogleSatellite\", this.mapTypeIds[3]);\r\n\r\n map.mapTypes.set(this.mapTypeIds[0],\r\n {\r\n getTile: (coord: google.maps.Point, zoom: number, ownerDocument: Document) => {\r\n\r\n var div = ownerDocument.createElement('div');\r\n\r\n div.className = \"md-tile\";\r\n //div.innerHTML = coord.x + \"_\" + coord.y + \"_\" + zoom;\r\n\r\n return div;\r\n },\r\n releaseTile: (tile: Element) => {\r\n if (tile && tile.parentElement)\r\n tile.parentElement.removeChild(tile);\r\n },\r\n tileSize: new google.maps.Size(tilesize, tilesize),\r\n name: this.mapTypeIds[0],\r\n maxZoom: mapMaxZoom,\r\n minZoom: 0\r\n });\r\n\r\n map.mapTypes.set(this.mapTypeIds[1],\r\n {\r\n getTile: tileManager[1].getTileDiv.bind(tileManager[1]),\r\n releaseTile: tileManager[1].releaseTile.bind(tileManager[1]),\r\n tileSize: new google.maps.Size(tilesize, tilesize),\r\n name: this.mapTypeIds[1],\r\n maxZoom: mapMaxZoom,\r\n minZoom: 1\r\n });\r\n\r\n map.mapTypes.set(this.mapTypeIds[2], {\r\n getTile: tileManager[2].getTileDiv.bind(tileManager[2]),\r\n releaseTile: tileManager[2].releaseTile.bind(tileManager[2]),\r\n tileSize: new google.maps.Size(tilesize, tilesize),\r\n name: this.mapTypeIds[2],\r\n maxZoom: mapMaxZoom,\r\n minZoom: 1\r\n });\r\n\r\n if (ocrManager) {\r\n map.mapTypes.set(this.mapTypeIds[3], {\r\n getTile: ocrManager.getTileDiv.bind(ocrManager),\r\n releaseTile: ocrManager.releaseTile.bind(ocrManager),\r\n tileSize: new google.maps.Size(tilesize, tilesize),\r\n name: this.mapTypeIds[3],\r\n maxZoom: mapMaxZoom,\r\n minZoom: 1\r\n });\r\n viewModel.enableDepthCalculation = true;\r\n } else\r\n viewModel.enableDepthCalculation = false;\r\n\r\n //map.mapTypes.set(this.mapTypeIds[1],\r\n // {\r\n // getTile: (coord: google.maps.Point, zoom: number, ownerDocument: Document) => {\r\n // return MapDrawer.getTileDiv(map, coord, zoom, ownerDocument, url +\"?ID=GoogleHybrid\");\r\n // },\r\n // releaseTile: (tile: Element) => {\r\n // if (tile && tile.parentElement)\r\n // tile.parentElement.removeChild(tile);\r\n // },\r\n // tileSize: new google.maps.Size(tilesize, tilesize),\r\n // name: this.mapTypeIds[1],\r\n // maxZoom: mapMaxZoom,\r\n // minZoom: 1\r\n // });\r\n\r\n //map.mapTypes.set(this.mapTypeIds[2], new google.maps.ImageMapType({\r\n // getTileUrl: (coord, zoom) => {\r\n // var scale = (1 << zoom) / tilesize;\r\n // var projection = map.getProjection();\r\n // var latlng = projection.fromPointToLatLng(new google.maps.Point((coord.x + 0.5) / scale, (coord.y + 0.5) / scale), false);\r\n\r\n // var url = url +\"?ID=GoogleHybrid¢er=\" + latlng.lat() + \",\" + latlng.lng() + \"&zoom=\" + zoom + \"&size=\" + tilesize + \"x\" + tilesize + \"&scale=1\";\r\n\r\n // return url;\r\n // },\r\n // tileSize: new google.maps.Size(tilesize, tilesize),\r\n // name: this.mapTypeIds[2],\r\n // maxZoom: mapMaxZoom,\r\n // minZoom: 1\r\n //}));\r\n\r\n //map.mapTypes.set(this.mapTypeIds[2], {\r\n // getTile: (coord: google.maps.Point, zoom: number, ownerDocument: Document) => {\r\n // return MapDrawer.getTileDiv(map, coord, zoom, ownerDocument, url +\"?ID=Bing\");\r\n // },\r\n // releaseTile: (tile: Element) => {\r\n // if (tile && tile.parentElement)\r\n // tile.parentElement.removeChild(tile);\r\n // },\r\n // tileSize: new google.maps.Size(tilesize, tilesize),\r\n // name: this.mapTypeIds[2],\r\n // maxZoom: mapMaxZoom,\r\n // minZoom: 1\r\n //});\r\n\r\n //map.mapTypes.set(\"BING\", new google.maps.ImageMapType({\r\n // getTileUrl: (coord: google.maps.Point, zoom: number) => {\r\n // var scale = (1 << zoom) / tilesize;\r\n // var projection = map.getProjection();\r\n // var latlng = projection.fromPointToLatLng(new google.maps.Point((coord.x + 0.5) / scale, (coord.y + 0.5) / scale), false);\r\n\r\n // var url = url +\"?ID=Bing¢er=\" + latlng.lat() + \",\" + latlng.lng() + \"&zoom=\" + zoom + \"&size=\" + tilesize + \"x\" + tilesize + \"&scale=1\";\r\n\r\n // return url;\r\n\r\n // //var q = MapDrawer.getQuadtreeQuadrant(coord.x, coord.y, zoom);\r\n // //var url = \"http://t\" + q[q.length - 1] + \".ssl.ak.tiles.virtualearth.net/tiles/a\" + q.join(\"\") + \".jpeg?g=3533&n=z\";\r\n // //return url;\r\n // },\r\n // tileSize: new google.maps.Size(tilesize, tilesize),\r\n // name: \"Bing\",\r\n // maxZoom: mapMaxZoom,\r\n // minZoom: 1\r\n //}));\r\n\r\n map.setMapTypeId(mapTypeId);\r\n\r\n this.map = map;\r\n\r\n setTimeout(() => {\r\n google.maps.event.trigger(map, \"resize\");\r\n }, 0);\r\n }\r\n\r\n if (!this.elevationService)\r\n this.elevationService = new google.maps.ElevationService();\r\n\r\n var drawingManager = this.drawingManager;\r\n\r\n if (!drawingManager) {\r\n drawingManager = this.drawingManager = new google.maps.drawing.DrawingManager({\r\n drawingMode: null,\r\n drawingControl: false,\r\n map: map\r\n });\r\n\r\n if (!options.isReadOnly)\r\n this.bindEvents();\r\n } else\r\n drawingManager.setMap(map);\r\n\r\n if (!this.canvasOverlay)\r\n this.canvasOverlay = new CanvasOverlay(this);\r\n else {\r\n this.canvasOverlay.clear();\r\n this.canvasOverlay.init(this);\r\n }\r\n\r\n if (!this.osmBuildings) {\r\n this.osmBuildings = new OsmBuildings();\r\n }\r\n\r\n if (applyBindings)\r\n ko.applyBindings(this.viewModel, this.dialog || this.view);\r\n\r\n\r\n this.load();\r\n }\r\n\r\n onOverlaycomplete(newShape: google.maps.Polygon | google.maps.Circle | google.maps.Rectangle, ignoreDrawingMode = false) {\r\n if (newShape instanceof google.maps.Rectangle) {\r\n newShape.setMap(null);\r\n if (this.rectSelectMode) {\r\n var rectBounds = (newShape as google.maps.Rectangle).getBounds();\r\n this.selectShapes(this.getAllPolygons().filter(poly => {\r\n if (poly && poly.userData) {\r\n var sh = poly.userData as ShapeData;\r\n if (sh.locked || (sh.controlledByParent && sh.parent && sh.parent.locked))\r\n return false;\r\n }\r\n return rectBounds.intersects(this.getBoundsFromPolygon(poly));\r\n }).map(poly => poly.userData as ShapeData), !this.ctrlDown && !this.shiftDown, !this.ctrlDown && this.shiftDown, this.ctrlDown && this.shiftDown);\r\n return;\r\n }\r\n newShape = this.convertRectangleToPolygon(newShape as google.maps.Rectangle);\r\n } else if (newShape instanceof google.maps.Circle) {\r\n newShape.setMap(null);\r\n newShape = this.convertCircleToPolygon(newShape as google.maps.Circle);\r\n }\r\n\r\n if (!ignoreDrawingMode && !this.drawingMode) {\r\n newShape.setMap(null);\r\n return;\r\n }\r\n\r\n if (newShape instanceof google.maps.Polygon) {\r\n var paths = newShape.getPaths();\r\n var path = paths && paths.getLength() ? paths.getAt(0) : null;\r\n var area = path ? google.maps.geometry.spherical.computeSignedArea(path) : 0; //in m²\r\n var layer = this.viewModel.currentLayer;\r\n if (!path || path.getLength() < 3 || Math.abs(area) <= 0.01 || (layer && layer.locked)) {\r\n newShape.setMap(null);\r\n if (layer && layer.locked)\r\n this.selectTool(null);\r\n } else {\r\n this.addPolygon(newShape as any);\r\n }\r\n } else\r\n (newShape).setMap(null);\r\n }\r\n\r\n unBindEvents() {\r\n var view = this.view;\r\n //var drawingManager = this.drawingManager;\r\n //var map = this.map;\r\n\r\n this._mapEventListener.splice(0, this._mapEventListener.length).forEach(listener => {\r\n if (listener.remove)\r\n listener.remove();\r\n });\r\n\r\n //google.maps.event.clearInstanceListeners(drawingManager);\r\n //google.maps.event.clearInstanceListeners(map);\r\n\r\n document.removeEventListener('keydown', this.keyDownHandler);\r\n document.removeEventListener('keyup', this.keyUpHandler);\r\n\r\n if (!$.isTouchCapable()) {\r\n document.removeEventListener('mousedown', this.mouseDownHandler, true);\r\n document.removeEventListener('mouseup', this.mouseUpHandler, true);\r\n view.removeEventListener('mousedown', this.viewMouseDownHandler, true);\r\n view.removeEventListener('mousemove', this.mouseMoveHandler, true);\r\n }\r\n else {\r\n view.removeEventListener('touchstart', this.viewMouseDownHandler, true);\r\n view.removeEventListener('touchmove', this.mouseMoveHandler, true);\r\n view.removeEventListener('touchend', this.mouseUpHandler, true);\r\n }\r\n\r\n\r\n this.keyDownHandler = null;\r\n this.keyUpHandler = null;;\r\n this.mouseDownHandler = null;;\r\n this.viewMouseDownHandler = null;;\r\n }\r\n\r\n mapMovePosition: ElementPositionType;\r\n\r\n // helper\r\n appendToTouchEventLatLngFromPixel(event: google.maps.MouseEvent, touch: JQueryTouchEvents.TouchEvent, map: google.maps.Map): google.maps.MouseEvent {\r\n\r\n let mapPadding = 50;\r\n if ($.isTouchCapable())\r\n mapPadding = 20;\r\n let mapElement = $(this.mapsView); //$(touch.target);\r\n let minVector = new THREE.Vector2(mapPadding, mapPadding);\r\n let maxVector = new THREE.Vector2(mapElement.width() - mapPadding, mapElement.height() - mapPadding);\r\n let mapBoxPadding = new THREE.Box2(minVector, maxVector); // map bounds\r\n\r\n var absoluteMapPoint = touch.position;\r\n var absoluteMapTargetOffset = mapElement.offset();\r\n var relativeMapPoint = new google.maps.Point(\r\n absoluteMapPoint.x - absoluteMapTargetOffset.left,\r\n absoluteMapPoint.y - absoluteMapTargetOffset.top);\r\n\r\n let latLng = this.fromPixelToLatLng(map, relativeMapPoint);\r\n let relativeMapVector = new THREE.Vector2(relativeMapPoint.x, relativeMapPoint.y);\r\n // out of bounds => will be negative values\r\n //console.log(map.getBounds().)\r\n if (!mapBoxPadding.containsPoint(relativeMapVector)) {\r\n let clampPoint = new THREE.Vector2();\r\n clampPoint = mapBoxPadding.clampPoint(relativeMapVector, clampPoint);\r\n\r\n this.mapMovePosition = ElementPositionType.None;\r\n if (mapBoxPadding.min.x === clampPoint.x)\r\n this.mapMovePosition |= ElementPositionType.Left;\r\n if (mapBoxPadding.min.y === clampPoint.y)\r\n this.mapMovePosition |= ElementPositionType.Top;\r\n if (mapBoxPadding.max.x === clampPoint.x)\r\n this.mapMovePosition |= ElementPositionType.Right;\r\n if (mapBoxPadding.max.y === clampPoint.y)\r\n this.mapMovePosition |= ElementPositionType.Bottom;\r\n\r\n //this.moveGoogleMapsCamera(this.mapMovePosition);\r\n }\r\n else\r\n this.mapMovePosition = ElementPositionType.None;\r\n\r\n event.latLng = latLng;\r\n return event;\r\n }\r\n\r\n moveGoogleMapsCamera(elementPosition: ElementPositionType, speedInPixel: number) {\r\n let isDraggable: boolean = this.map.get('draggable');\r\n if (elementPosition === ElementPositionType.None || isDraggable)\r\n return;\r\n\r\n let offsetPoint = new google.maps.Point(0, 0);\r\n if ((elementPosition & ElementPositionType.Left) === ElementPositionType.Left)\r\n offsetPoint.x = -speedInPixel;\r\n if ((elementPosition & ElementPositionType.Right) === ElementPositionType.Right)\r\n offsetPoint.x = speedInPixel;\r\n if ((elementPosition & ElementPositionType.Top) === ElementPositionType.Top)\r\n offsetPoint.y = -speedInPixel;\r\n if ((elementPosition & ElementPositionType.Bottom) === ElementPositionType.Bottom)\r\n offsetPoint.y = speedInPixel;\r\n\r\n //this.map.setOptions({ draggable: true });\r\n this.map.panBy(offsetPoint.x, offsetPoint.y);\r\n //this.map.setOptions({ draggable: false });\r\n }\r\n\r\n mapMoveTimerId: NodeJS.Timeout;\r\n\r\n createMapMove() {\r\n let interval = 120; // repeat with the interval of 100ms\r\n let speedInPixel = 20;\r\n if ($.isTouchCapable()) {\r\n //interval = 500;\r\n //speedInPixel = 10;\r\n }\r\n\r\n this.mapMoveTimerId = setInterval(() => this.moveGoogleMapsCamera(this.mapMovePosition, speedInPixel), interval);\r\n }\r\n\r\n removeMapMove() {\r\n clearInterval(this.mapMoveTimerId);\r\n }\r\n\r\n // helper\r\n fromPixelToLatLng(map: google.maps.Map, point: google.maps.Point): google.maps.LatLng {\r\n let projection = map.getProjection();\r\n let topRight = projection.fromLatLngToPoint(map.getBounds().getNorthEast());\r\n let bottomLeft = projection.fromLatLngToPoint(map.getBounds().getSouthWest());\r\n let scale = 1 << map.getZoom(); // Math.pow(2, map.getZoom());\r\n return projection.fromPointToLatLng(new google.maps.Point(point.x / scale + bottomLeft.x, point.y / scale + topRight.y));\r\n };\r\n\r\n fromLatLngToPixel(latLng: google.maps.LatLng): google.maps.Point {\r\n let projection = this.map.getProjection();\r\n let bounds = this.map.getBounds();\r\n let topRight = projection.fromLatLngToPoint(bounds.getNorthEast());\r\n let bottomLeft = projection.fromLatLngToPoint(bounds.getSouthWest());\r\n let scale = Math.pow(2, this.map.getZoom());\r\n let worldPoint = projection.fromLatLngToPoint(latLng);\r\n let point = new google.maps.Point(\r\n Math.floor((worldPoint.x - bottomLeft.x) * scale),\r\n Math.floor((worldPoint.y - topRight.y) * scale));\r\n return point;\r\n }\r\n\r\n isViewMouseDown = false;\r\n isViewMouseMoving = false;\r\n isViewStartMoving = false;\r\n lastMouseDownEvent: google.maps.MouseEvent = null;\r\n isGoogleMapsMoved = false;\r\n viewMovedCount = 0;\r\n\r\n bindEvents() {\r\n var view = this.view;\r\n var drawingManager = this.drawingManager;\r\n var map = this.map;\r\n\r\n this._mapEventListener.push(google.maps.event.addListener(drawingManager, 'overlaycomplete', (e: google.maps.drawing.OverlayCompleteEvent) => {\r\n this.onOverlaycomplete(e.overlay);\r\n }));\r\n\r\n //this._mapEventListener.push(google.maps.event.addListener(map, 'click', (ev: google.maps.MouseEvent) => {\r\n // if ($.isTouchCapable())\r\n // return;\r\n // console.log('GM click event');\r\n // this.viewModel.currentTool.onClick(ev, this);\r\n //}));\r\n\r\n this._mapEventListener.push(google.maps.event.addListener(map, 'mousedown', (event: google.maps.MouseEvent) => {\r\n this.viewModel.currentTool.isDragging = false;\r\n this.lastMouseDownEvent = event;\r\n //console.log('GM mousedown event');\r\n this.viewModel.currentTool.onClick(event, this);\r\n }));\r\n\r\n this._mapEventListener.push(google.maps.event.addListener(map, 'mouseup', (event: google.maps.MouseEvent) => {\r\n //console.log(\"GM mouseup\");\r\n //this.viewModel.currentTool.onClick(event, this);\r\n this.viewModel.currentTool?.onMouseUp(event, this);\r\n }));\r\n\r\n this._mapEventListener.push(google.maps.event.addListener(map, 'mousemove', (event: google.maps.MouseEvent) => {\r\n //event = this.appendToTouchEventLatLngFromPixel(event, touch, map);\r\n //if (!event.latLng)\r\n // return;\r\n this.isGoogleMapsMoved = true;\r\n //console.log(\"GM mousemove\");\r\n //let ev: any = event;\r\n //this.mouseMoveHandler(ev);\r\n this.viewModel.currentTool.onMousemove(event, this);\r\n }));\r\n\r\n this._mapEventListener.push(google.maps.event.addListener(map, 'drag', (event: google.maps.MouseEvent) => {\r\n //console.log(\"GM drag\");\r\n // drag event is undefined!\r\n\r\n //let lastMouseDownEvent: any = {};\r\n //lastMouseDownEvent.latLng = this.lastMouseDownEvent.latLng;\r\n //lastMouseDownEvent.isDragging = true;\r\n\r\n this.viewModel.currentTool.isDragging = true;\r\n }));\r\n\r\n //$(this.mapsView).on('tapmove', (event: google.maps.MouseEvent, touch) => {\r\n // console.log('tapmove event');\r\n // event = this.appendToTouchEventLatLngFromPixel(event, touch, map);\r\n // if (!event.latLng)\r\n // return;\r\n\r\n // //let ev: any = event;\r\n // //this.mouseMoveHandler(ev);\r\n // this.viewModel.currentTool.onMousemove(event, this);\r\n //});\r\n\r\n this.keyDownHandler = (e: KeyboardEvent) => {\r\n var code = (e.keyCode ? e.keyCode : e.which) as number;\r\n switch (code) {\r\n case 16: //shift\r\n this.shiftDown = true;\r\n break;\r\n case 17: //ctrl\r\n this.ctrlDown = true;\r\n if (this.hasFocus)\r\n e.preventDefault();\r\n break;\r\n case 18: //alt\r\n this.altDown = true;\r\n if (this.hasFocus)\r\n e.preventDefault();\r\n break;\r\n case 32: //space\r\n this.spaceDown = true;\r\n break;\r\n case 37:\r\n case 38:\r\n case 39:\r\n case 40: //arrows\r\n if (this.hasFocus) {\r\n\r\n var dir: Point2D;\r\n\r\n switch (code) {\r\n case 37:\r\n dir = new Point2D(-1, 0);\r\n break;\r\n case 38:\r\n dir = new Point2D(0, 1);\r\n break;\r\n case 39:\r\n dir = new Point2D(1, 0);\r\n break;\r\n case 40:\r\n dir = new Point2D(0, -1);\r\n break;\r\n }\r\n\r\n if (this.shiftDown)\r\n dir = Helperline.SnapDirection(dir, this);\r\n\r\n var off = dir.mul(this.viewModel.keyBoardSteps.internalValue * 0.001);\r\n\r\n if (this.viewModel.selection.some(sel => sel.typeName === this.viewModel.layer.referenceLayer.typeName)) {\r\n this.viewModel.foreachItem(sel => {\r\n if (sel instanceof ShapeData && !sel.controlledByParent) {\r\n sel.moveByOffset(off);\r\n sel.update();\r\n }\r\n });\r\n } else {\r\n this.viewModel.foreachSelected(sel => {\r\n sel.moveByOffset(off);\r\n sel.update();\r\n });\r\n }\r\n\r\n return;\r\n }\r\n break;\r\n }\r\n if (this.hasFocus)\r\n this.viewModel.currentTool.onKeyDown(code, this);\r\n };\r\n\r\n this.keyUpHandler = (e: KeyboardEvent) => {\r\n var code = (e.keyCode ? e.keyCode : e.which) as number;\r\n switch (code) {\r\n case 16: //shift\r\n this.shiftDown = false;\r\n break;\r\n case 17: //ctrl\r\n this.ctrlDown = false;\r\n if (this.hasFocus)\r\n e.preventDefault();\r\n break;\r\n case 18: //alt\r\n this.altDown = false;\r\n if (this.hasFocus)\r\n e.preventDefault();\r\n break;\r\n case 32: //space\r\n this.spaceDown = false;\r\n break;\r\n case 46: //delete\r\n if (this.hasFocus)\r\n this.deleteSelection();\r\n return;\r\n case 27: //escape\r\n if (this.hasFocus)\r\n this.selectTool(null);\r\n return;\r\n }\r\n if (this.hasFocus)\r\n this.viewModel.currentTool.onKeyUp(code, this);\r\n };\r\n\r\n this.mouseDownHandler = (e: MouseEvent) => {\r\n this.hasFocus = false;\r\n //console.log(\"mouseDownHandler hasFocus false\");\r\n };\r\n\r\n this.mouseUpHandler = (e: any | MouseEvent | TouchEvent) => {\r\n this.isViewMouseDown = false;\r\n //console.log(\"mouseUpHandler\");\r\n let firstTouchPoint = null;\r\n if (e.touches && e.touches[0])\r\n firstTouchPoint = e.touches[0];\r\n if (firstTouchPoint == null && e.changedTouches && e.changedTouches[0])\r\n firstTouchPoint = e.changedTouches[0];\r\n if (firstTouchPoint) {\r\n\r\n e.clientX = firstTouchPoint.clientX\r\n e.clientY = firstTouchPoint.clientY;\r\n //e.force: 1\r\n //e.identifier: 0\r\n e.pageX = firstTouchPoint.pageX;\r\n e.pageY = firstTouchPoint.pageY;\r\n //e.radiusX: 14.935065269470215\r\n //e.radiusY: 14.935065269470215\r\n //e.rotationAngle: 0\r\n e.screenX = firstTouchPoint.screenX;\r\n e.screenY = firstTouchPoint.screenY;\r\n }\r\n this.viewModel.onMouseup(e);\r\n };\r\n\r\n this.mouseMoveHandler = (e: any | MouseEvent | TouchEvent) => {\r\n // bugfix for strange google maps move bug: if too many polygon points are clicked then the googleMapsMove event dont trigger\r\n if (this.viewMovedCount == 0)\r\n this.isGoogleMapsMoved = false;\r\n this.viewMovedCount++;\r\n if (this.viewMovedCount > 2) {\r\n this.viewMovedCount = 0;\r\n if (!this.isGoogleMapsMoved && this.viewModel.selectedToolName === 'DrawTool' && !this.viewModel.currentTool.isDragging) {\r\n this.map.setZoom(this.map.getZoom());\r\n }\r\n }\r\n\r\n let firstTouchPoint = null;\r\n if (e.touches && e.touches[0])\r\n firstTouchPoint = e.touches[0];\r\n if (firstTouchPoint == null && e.changedTouches && e.changedTouches[0])\r\n firstTouchPoint = e.changedTouches[0];\r\n if (firstTouchPoint) {\r\n\r\n e.clientX = firstTouchPoint.clientX\r\n e.clientY = firstTouchPoint.clientY;\r\n //e.force: 1\r\n //e.identifier: 0\r\n e.pageX = firstTouchPoint.pageX;\r\n e.pageY = firstTouchPoint.pageY;\r\n //e.radiusX: 14.935065269470215\r\n //e.radiusY: 14.935065269470215\r\n //e.rotationAngle: 0\r\n e.screenX = firstTouchPoint.screenX;\r\n e.screenY = firstTouchPoint.screenY;\r\n }\r\n\r\n this.viewModel.onMousemove(e);\r\n this.isViewMouseMoving = true;\r\n };\r\n\r\n this.viewMouseDownHandler = (e: any | MouseEvent | TouchEvent) => {\r\n //this.viewModel.currentTool.isDragging = false;\r\n this.isViewStartMoving = false;\r\n this.isViewMouseDown = true;\r\n this.isViewMouseMoving = false;\r\n\r\n let firstTouchPoint = null;\r\n if (e.touches && e.touches[0])\r\n firstTouchPoint = e.touches[0];\r\n if (firstTouchPoint == null && e.changedTouches && e.changedTouches[0])\r\n firstTouchPoint = e.changedTouches[0];\r\n if (firstTouchPoint) {\r\n\r\n e.clientX = firstTouchPoint.clientX\r\n e.clientY = firstTouchPoint.clientY;\r\n //e.force: 1\r\n //e.identifier: 0\r\n e.pageX = firstTouchPoint.pageX;\r\n e.pageY = firstTouchPoint.pageY;\r\n //e.radiusX: 14.935065269470215\r\n //e.radiusY: 14.935065269470215\r\n //e.rotationAngle: 0\r\n e.screenX = firstTouchPoint.screenX;\r\n e.screenY = firstTouchPoint.screenY;\r\n }\r\n this.hasFocus = true;\r\n var viewModel = this.viewModel,\r\n hoveredId = this.viewModel.hoveredId;\r\n\r\n //console.log(\"view mousedown\");\r\n if ($.isTouchCapable()) {\r\n // check hover id\r\n //let touch = {} as JQueryTouchEvents.TouchEvent;\r\n //touch.position = {} as JQueryTouchEvents.Point;\r\n //touch.position.x = e.pageX;\r\n //touch.position.y = e.pageY;\r\n //let event = this.appendToTouchEventLatLngFromPixel(e, touch, map);\r\n //let latLng = event.latLng;\r\n let latLng = this.GetLatLngFromMouseEvent(e);\r\n let polys = this.getPolygonsByPoint(latLng);\r\n if (polys && polys.length) {\r\n hoveredId = polys[0].userData.id;\r\n this.viewModel.hoveredId = hoveredId;\r\n //let test = viewModel.instances[hoveredId];\r\n //if (test instanceof ShapeData) {\r\n // e.latLng = latLng;\r\n // this.viewModel.onSelectableClick(test, e);\r\n //}\r\n\r\n //polys[0].userData.hovered = true;\r\n }\r\n else {\r\n if (hoveredId && viewModel.instances[hoveredId]) {\r\n let data = viewModel.instances[hoveredId];\r\n //data.hovered = false;\r\n hoveredId = null;\r\n this.viewModel.hoveredId = hoveredId;\r\n }\r\n }\r\n }\r\n\r\n //console.log(\"hoverid\" + hoveredId);\r\n if (hoveredId && viewModel.instances[hoveredId]) {\r\n var data = viewModel.instances[hoveredId];\r\n if (data instanceof ShapeData && !data._isDisposed)\r\n this.viewModel.onPolygonMousedown(data.poly, e);\r\n }\r\n\r\n };\r\n\r\n document.addEventListener('keydown', this.keyDownHandler);\r\n window.addEventListener('keyup', this.keyUpHandler, true);\r\n\r\n if (!$.isTouchCapable()) {\r\n document.addEventListener('mousedown', this.mouseDownHandler, true);\r\n view.addEventListener('mousedown', this.viewMouseDownHandler, true);\r\n view.addEventListener('mousemove', this.mouseMoveHandler, true);\r\n document.addEventListener('mouseup', this.mouseUpHandler, true); //view.addEventListener('mouseup', this.mouseUpHandler, true);\r\n }\r\n else {\r\n //let onlyMapView = $('#howTo_mapDrawerViewWrapper').get(0);\r\n //document.addEventListener('touchstart', this.mouseDownHandler, true);\r\n view.addEventListener('touchstart', this.viewMouseDownHandler, true);\r\n view.addEventListener('touchmove', this.mouseMoveHandler, true);\r\n view.addEventListener('touchend', this.mouseUpHandler, true); //view.addEventListener('mouseup', this.mouseUpHandler, true);\r\n }\r\n\r\n //$('body').on('tapstart', (e: any, touch) => {\r\n // e = this.toMouseEventCheck(e, touch);\r\n // this.mouseDownHandler(e);\r\n //});\r\n //$(this.mapsView).on('tapstart', (e: MouseEvent, touch) => {\r\n // console.log('view mousedown event');\r\n // e = this.toMouseEventCheck(e, touch);\r\n // this.viewMouseDownHandler(e);\r\n //});\r\n //$(this.mapsView).on('tapmove', (e: any, touch) => {\r\n // console.log(\"mapsView move\");\r\n // e = this.toMouseEventCheck(e, touch);\r\n // this.mouseMoveHandler(e);\r\n //});\r\n //// $('body')\r\n //$(this.mapsView).on('tapend', (e: MouseEvent, touch) => {\r\n // e = this.toMouseEventCheck(e, touch);\r\n // this.mouseUpHandler(e);\r\n //});\r\n\r\n }\r\n\r\n toMouseEventCheck(sourceEvent: any, touch: JQueryTouchEvents.TouchEvent): MouseEvent {\r\n sourceEvent.pageX = touch.position.x;\r\n sourceEvent.pageY = touch.position.y;\r\n return sourceEvent;\r\n }\r\n\r\n enableRectangleSelect() {\r\n this.rectSelectMode = true;\r\n\r\n this.drawingManager.setDrawingMode(google.maps.drawing.OverlayType.RECTANGLE);\r\n\r\n this.drawingManager.setOptions({\r\n rectangleOptions: this.rectSelectStyle\r\n });\r\n\r\n }\r\n\r\n disableRectangleSelect() {\r\n this.rectSelectMode = false;\r\n\r\n var layer = this.viewModel.currentLayer,\r\n shapeSelectedStyle = layer ? layer.shapeSelectedStyle : this.shapeSelectedStyle;\r\n\r\n this.drawingManager.setOptions({\r\n rectangleOptions: shapeSelectedStyle\r\n });\r\n\r\n this.drawingManager.setDrawingMode(null);\r\n }\r\n\r\n GetLatLngFromMouseEvent(e: MouseEvent): google.maps.LatLng {\r\n var map = this.map;\r\n var scale = Math.pow(2, map.getZoom());\r\n var projection = map.getProjection();\r\n var offset = map.getDiv().getBoundingClientRect();\r\n var mousePixels = new google.maps.Point(e.pageX - offset.left, e.pageY - offset.top);\r\n var mapBounds = map.getBounds();\r\n if (!mapBounds)\r\n return null;\r\n var mapNE = mapBounds.getNorthEast();\r\n var mapSW = mapBounds.getSouthWest();\r\n\r\n var mapNW = new google.maps.LatLng(mapNE.lat(), mapSW.lng());\r\n var pNW = projection.fromLatLngToPoint(mapNW);\r\n var point = new google.maps.Point(((pNW.x * scale) + mousePixels.x) / scale, ((pNW.y * scale) + mousePixels.y) / scale);\r\n\r\n return projection.fromPointToLatLng(point, false);\r\n }\r\n\r\n GetPoint2DFromMouseEvent(e: MouseEvent): Point2D {\r\n return LatLng.GMLatLngToPoint2D(this.GetLatLngFromMouseEvent(e));\r\n }\r\n\r\n getBoundsFromPolygons(polys: IGoogleMapsPolygon[]) {\r\n var bounds = new google.maps.LatLngBounds();\r\n polys.forEach(poly => {\r\n var paths = poly.getPaths();\r\n paths.forEach(path => {\r\n path.forEach(latLng => {\r\n bounds.extend(latLng);\r\n });\r\n });\r\n });\r\n return bounds;\r\n }\r\n\r\n getBoundsFromPolygon(poly: IGoogleMapsPolygon) {\r\n var bounds = new google.maps.LatLngBounds();\r\n var paths = poly.getPaths();\r\n paths.forEach(path => {\r\n path.forEach(latLng => {\r\n bounds.extend(latLng);\r\n });\r\n });\r\n return bounds;\r\n }\r\n\r\n convertCircleToPolygon(circle: google.maps.Circle) {\r\n var points: google.maps.LatLng[] = [],\r\n center = circle.getCenter(),\r\n radius = circle.getRadius(),\r\n numPoints = Math.floor(Math.min(32, Math.max(8, radius * 2))),\r\n degreeStep = 360 / numPoints;\r\n\r\n for (var i = 0; i < numPoints; i++) {\r\n points.push(google.maps.geometry.spherical.computeOffset(center, radius, degreeStep * i));\r\n }\r\n\r\n var layer = this.viewModel.currentLayer,\r\n shapeStyle = layer ? layer.shapeStyle : this.shapeStyle;\r\n\r\n return new google.maps.Polygon($.extend({}, {\r\n map: this.map,\r\n clickable: !this.zoomOnlyMode,\r\n draggable: false,\r\n editable: false,\r\n paths: points\r\n }, shapeStyle) as google.maps.PolygonOptions);\r\n }\r\n\r\n convertRectangleToPolygon(rectangle: google.maps.Rectangle) {\r\n var bounds = rectangle.getBounds();\r\n var sw = bounds.getSouthWest(),\r\n ne = bounds.getNorthEast();\r\n\r\n var layer = this.viewModel.currentLayer,\r\n shapeStyle = layer ? layer.shapeStyle : this.shapeStyle;\r\n\r\n return new google.maps.Polygon($.extend({}, {\r\n map: this.map,\r\n clickable: !this.zoomOnlyMode,\r\n draggable: false,\r\n editable: false,\r\n paths: [sw, new google.maps.LatLng(sw.lat(), ne.lng()), ne, new google.maps.LatLng(ne.lat(), sw.lng())]\r\n }, shapeStyle) as google.maps.PolygonOptions);\r\n }\r\n\r\n clearSelection() {\r\n var viewModel = this.viewModel;\r\n viewModel.selection.splice(0, viewModel.selection.length).forEach(item => {\r\n\r\n item.selected = false;\r\n\r\n //var data = shape.userData as ShapeData;\r\n //if (data) {\r\n // var layer = viewModel.getLayerByTypeName(data.typeName);\r\n // shape.setOptions(layer ? layer.shapeStyle : this.shapeStyle);\r\n //}\r\n\r\n //shape.setEditable(false);\r\n //shape.setDraggable(false);\r\n\r\n });\r\n }\r\n\r\n deleteAll() {\r\n var viewModel = this.viewModel;\r\n viewModel.layer.all.forEach(layer => {\r\n this.deleteSelectables(layer.polygons.map(poly => poly.userData as ShapeData));\r\n });\r\n }\r\n\r\n clear() {\r\n this.viewModel.clear();\r\n }\r\n\r\n deleteRoofClick(roof: ISelectableItem) {\r\n if (roof && confirm(\"Delete roof?\"))\r\n this.deleteSelectable(roof);\r\n }\r\n\r\n deleteSelection() {\r\n var viewModel = this.viewModel;\r\n var items = viewModel.selection.splice(0, viewModel.selection.length);\r\n this.deleteSelectables(items);\r\n }\r\n\r\n deleteSelectables(items: ISelectableItem[]) {\r\n if (!items)\r\n return;\r\n\r\n this.viewModel.cleanUpDragInfo();\r\n\r\n items.forEach(item => {\r\n this.deleteSelectable(item);\r\n });\r\n\r\n if (this.viewModel.layer.all.every(layer => !layer.polygons.length))\r\n this.viewModel.detailsViewVisible = false;\r\n }\r\n\r\n deleteSelectableClick(item: ISelectableItem) {\r\n if (!item.locked)\r\n this.deleteSelectable(item);\r\n }\r\n\r\n deleteSelectable(item: ISelectableItem) {\r\n if (item) {\r\n this.removeItemFromSelection(item);\r\n\r\n item.remove(this);\r\n\r\n if (item.typeName !== window.InterfernceLayerName)\r\n this.autoSelectLayer();\r\n }\r\n }\r\n\r\n exportShapes(): SolarProTool.MapShape[] {\r\n\r\n if (!this.viewModel.layer.referenceLayer.polygons.length)\r\n return [];\r\n\r\n var referenceLayer = this.viewModel.layer.referenceLayer,\r\n referencePoly = referenceLayer.polygons.length ? referenceLayer.polygons[0] : null;\r\n\r\n //var roofLayer = this.viewModel.layer.roof,\r\n // roofPoly = roofLayer.polygons.length ? roofLayer.polygons[0] : null;\r\n\r\n if (!referencePoly || referencePoly._isDisposed || !referencePoly.userData)\r\n return null;\r\n\r\n let referenceData = referencePoly.userData as ShapeData;\r\n\r\n referenceData.regenerate();\r\n\r\n let referenceOrientation = referenceData.southMarker ? referenceData.southMarker.orientation : 0,\r\n referenceOrigin = LatLng.FromPoint2D(referenceData.getOrientedOrigin());\r\n\r\n var result = this.getAllPolygons().filter(poly => poly.userData && !poly._isDisposed).map(poly => {\r\n return this.exportShape(poly.userData as ShapeData, referenceData, referenceOrigin, referenceOrientation);\r\n\r\n //var polys: SolarProTool.MapPolygon[] = [];\r\n\r\n //var data = poly.userData as ShapeData;\r\n\r\n //data.regenerate();\r\n\r\n //var bd = new BoundsLatLng();\r\n\r\n //poly.getPaths().forEach((path) => {\r\n // var lls = LatLng.FromGMLatLngArray(path);\r\n // bd.ExpandByLatLngs(lls);\r\n // //var poly = this.pathToMapPolygon(lls, data.southMarker ? data.southMarker.orientation : buildingOrientation, buildingOrigin, data.height, data.slope, data.useProjection);\r\n // var poly = this.pathToMapPolygon(lls, data.southMarker ? data.southMarker.orientation : referenceOrientation, data.southMarker ? LatLng.FromPoint2D(data.getOrientedOrigin()) : referenceOrigin, data.height, data.slope, referenceData.useProjection);\r\n // if (poly)\r\n // polys.push(poly);\r\n //});\r\n\r\n //var spPolylines: SolarProTool.MapPolygon[] = [],\r\n // cutPolylines: SolarProTool.MapPolygon[] = [];\r\n\r\n //if (data.separationPolylines && data.separationPolylines.length) {\r\n // data.separationPolylines.forEach(sp => {\r\n // var mp = this.pathToMapPolygon(\r\n // LatLng.FromGMLatLngArray(sp.polyline.getPath()),\r\n // data.southMarker ? data.southMarker.orientation : referenceOrientation,\r\n // data.southMarker ? LatLng.FromPoint2D(data.getOrientedOrigin()) : referenceOrigin,\r\n // referenceData.height,\r\n // referenceData.slope,\r\n // referenceData.useProjection,\r\n // true);\r\n // if (sp.isCutting)\r\n // cutPolylines.push(mp);\r\n // else\r\n // spPolylines.push(mp);\r\n // });\r\n //}\r\n\r\n //let result: SolarProTool.MapShape = {\r\n // IdString: data.id,\r\n // TypeName: data.typeName,\r\n // Title: data.title,\r\n // borders: polys,\r\n // IsParallel: data.isParallel,\r\n // mapSouthMarker: data.southMarker ? data.southMarker.getLatLngOrientation() : null,\r\n // IsActive: data.isActive,\r\n // separationPolylines: spPolylines,\r\n // cuttingPolylines: cutPolylines,\r\n // SlopeOverride: data.slopeOverride\r\n // };\r\n //return result;\r\n });\r\n return result;\r\n }\r\n\r\n exportShape(data: ShapeData, referenceData?: ShapeData, referenceOrigin?: LatLng, referenceOrientation?: number): SolarProTool.MapShape {\r\n data.regenerate();\r\n\r\n if (!referenceData) {\r\n if (this.viewModel.layer.referenceLayer.typeName === data.typeName) {\r\n referenceData = data;\r\n }\r\n else {\r\n if (!this.viewModel.layer.referenceLayer.polygons.length)\r\n return null;\r\n\r\n var referenceLayer = this.viewModel.layer.referenceLayer,\r\n referencePoly = referenceLayer.polygons.length ? referenceLayer.polygons[0] : null;\r\n\r\n if (!referencePoly || referencePoly._isDisposed || !referencePoly.userData)\r\n return null;\r\n\r\n referenceData = referencePoly.userData as ShapeData;\r\n\r\n referenceData.regenerate();\r\n }\r\n }\r\n\r\n if (!referenceOrigin) {\r\n referenceOrigin = LatLng.FromPoint2D(referenceData.getOrientedOrigin());\r\n }\r\n\r\n if (referenceOrientation === null || isNaN(referenceOrientation)) {\r\n referenceOrientation = referenceData.southMarker ? referenceData.southMarker.orientation : 0;\r\n }\r\n\r\n var polys: SolarProTool.MapPolygon[] = [],\r\n poly = data.poly;\r\n\r\n var bd = new BoundsLatLng();\r\n\r\n poly.getPaths().forEach((path) => {\r\n var lls = LatLng.FromGMLatLngArray(path);\r\n bd.ExpandByLatLngs(lls);\r\n //var poly = this.pathToMapPolygon(lls, data.southMarker ? data.southMarker.orientation : buildingOrientation, buildingOrigin, data.height, data.slope, data.useProjection);\r\n var poly = this.pathToMapPolygon(lls, data.southMarker ? data.southMarker.orientation : referenceOrientation, data.southMarker ? LatLng.FromPoint2D(data.getOrientedOrigin()) : referenceOrigin, data.height, data.slope, referenceData.useProjection);\r\n if (poly)\r\n polys.push(poly);\r\n });\r\n\r\n var spPolylines: SolarProTool.MapPolygon[] = [],\r\n cutPolylines: SolarProTool.MapPolygon[] = [];\r\n\r\n if (data.separationPolylines && data.separationPolylines.length) {\r\n data.separationPolylines.forEach(sp => {\r\n var mp = this.pathToMapPolygon(\r\n LatLng.FromGMLatLngArray(sp.polyline.getPath()),\r\n data.southMarker ? data.southMarker.orientation : referenceOrientation,\r\n data.southMarker ? LatLng.FromPoint2D(data.getOrientedOrigin()) : referenceOrigin,\r\n referenceData.height,\r\n referenceData.slope,\r\n referenceData.useProjection,\r\n true);\r\n if (sp.isCutting)\r\n cutPolylines.push(mp);\r\n else\r\n spPolylines.push(mp);\r\n });\r\n }\r\n\r\n let result: SolarProTool.MapShape = {\r\n IdString: data.id,\r\n TypeName: data.typeName,\r\n Title: data.title,\r\n borders: polys,\r\n IsParallel: data.isParallel,\r\n mapSouthMarker: data.southMarker ? data.southMarker.getLatLngOrientation() : null,\r\n IsActive: data.isActive,\r\n separationPolylines: spPolylines,\r\n cuttingPolylines: cutPolylines,\r\n SlopeOverride: data.slopeOverride\r\n };\r\n return result;\r\n }\r\n\r\n importShape(shape: SolarProTool.MapShape, bounds?: google.maps.LatLngBounds): ShapeData {\r\n var paths: google.maps.LatLng[][] = [];\r\n\r\n if (!bounds)\r\n bounds = new google.maps.LatLngBounds();\r\n\r\n var h = 0;\r\n var slope = 0;\r\n var useProjection = true;\r\n\r\n shape.borders.forEach(poly => {\r\n paths.push(poly.points.map(p => {\r\n var latLng = new google.maps.LatLng(p.latitude, p.longitude);\r\n if (p.z > h)\r\n h = p.z;\r\n bounds.extend(latLng);\r\n return latLng;\r\n }));\r\n slope = poly.slope || 0;\r\n useProjection = poly.useProjection === undefined ? true : !!poly.useProjection;\r\n });\r\n\r\n var layer = this.viewModel.layer.typeName[shape.TypeName],\r\n shapeStyle = layer ? layer.shapeStyle : this.shapeStyle;\r\n\r\n var gPoly = new google.maps.Polygon($.extend({}, {\r\n map: this.map,\r\n clickable: !this.zoomOnlyMode,\r\n draggable: false,\r\n editable: false,\r\n paths: paths\r\n }, shapeStyle) as google.maps.PolygonOptions);\r\n\r\n var isFrozen = false;\r\n\r\n if (shape.IdString && this.viewModel.hasInstance(shape.IdString)) {\r\n var prev = this.viewModel.instances[shape.IdString] as ShapeData;\r\n isFrozen = !prev.controlledByParent && prev.frozen;\r\n prev.remove(this);\r\n this.viewModel.removeInstance(shape.IdString);\r\n }\r\n\r\n var shapeData = new ShapeData(this, gPoly as any, shape.IdString, shape.Title, shape.TypeName);\r\n\r\n shapeData.slopeOverride = !!shape.SlopeOverride;\r\n shapeData.isActive = !!shape.IsActive;\r\n shapeData.slope = slope;\r\n shapeData.customSlope = slope;\r\n shapeData.useProjection = useProjection;\r\n shapeData.isParallel = !!shape.IsParallel;\r\n if (isFrozen)\r\n shapeData.frozen = true;\r\n\r\n (gPoly as any).userData = shapeData;\r\n\r\n if (shape.mapSouthMarker) {\r\n var pos = new LatLng(shape.mapSouthMarker.Latitude, shape.mapSouthMarker.Longitude);\r\n shapeData.southMarker = new SouthMarker(pos, shape.mapSouthMarker.Orientation, true, this);\r\n }\r\n\r\n if (shape.separationPolylines && shape.separationPolylines.length) {\r\n shape.separationPolylines.forEach(poly => {\r\n var arr = poly.points.map(p => {\r\n var latLng = new google.maps.LatLng(p.latitude, p.longitude);\r\n if (p.z > h)\r\n h = p.z;\r\n bounds.extend(latLng);\r\n return latLng;\r\n });\r\n var separationPolyline = new SeparationPolyline(this, shapeData, null, arr);\r\n });\r\n }\r\n\r\n if (shape.cuttingPolylines && shape.cuttingPolylines.length) {\r\n shape.cuttingPolylines.forEach(poly => {\r\n var arr = poly.points.map(p => {\r\n var latLng = new google.maps.LatLng(p.latitude, p.longitude);\r\n if (p.z > h)\r\n h = p.z;\r\n bounds.extend(latLng);\r\n return latLng;\r\n });\r\n if (arr.length > 1)\r\n var cuttingPolyline = new SeparationPolyline(this, shapeData, null, arr, true);\r\n });\r\n }\r\n\r\n shapeData.height = h;\r\n\r\n this.addPolygon(gPoly as any);\r\n\r\n return shapeData;\r\n }\r\n\r\n importShapes(shapes: SolarProTool.MapShape[]): BoundsLatLng {\r\n if (shapes && shapes.length) {\r\n\r\n var bounds = new google.maps.LatLngBounds();\r\n\r\n var building: ShapeData = null;\r\n\r\n var buildingShape = shapes.filter(shape => shape.TypeName === window.BuildingTypeName);\r\n\r\n if (buildingShape.length)\r\n building = this.importShape(buildingShape[0], bounds);\r\n\r\n shapes.filter(shape => shape.TypeName !== window.BuildingTypeName).forEach(shape => {\r\n var shapeData = this.importShape(shape, bounds);\r\n\r\n if (building && shape.TypeName === window.RoofTypeName) {\r\n building.children.push(shapeData);\r\n shapeData.parent = building;\r\n }\r\n });\r\n\r\n if (building)\r\n building.update();\r\n\r\n if (!bounds.isEmpty())\r\n return BoundsLatLng.FromGMLatLngBounds(bounds);\r\n }\r\n return new BoundsLatLng();\r\n }\r\n\r\n addPolygonByData(data: PolyData) {\r\n var layer = this.viewModel.layer.typeName[data.typeName],\r\n shapeStyle = layer ? layer.shapeStyle : this.shapeStyle;\r\n\r\n var gPoly = new google.maps.Polygon($.extend({}, {\r\n map: this.map,\r\n clickable: !this.zoomOnlyMode,\r\n draggable: false,\r\n editable: false,\r\n paths: new google.maps.MVCArray(data.latLngs.map(lls => new google.maps.MVCArray(lls.map(ll => ll.ToGMLatLng()))))\r\n }, shapeStyle) as google.maps.PolygonOptions);\r\n\r\n var shapeData = new ShapeData(this, gPoly as any, data.id || spt.Utils.GenerateGuid(), data.title, data.typeName);\r\n\r\n shapeData.height = data.height;\r\n\r\n (gPoly as any).userData = shapeData;\r\n\r\n this.addPolygon(gPoly as any);\r\n }\r\n\r\n addPolygon(poly: IGoogleMapsPolygon): IGoogleMapsPolygon {\r\n var data = poly.userData as ShapeData;\r\n var layer = (data ? this.viewModel.layer.typeName[data.typeName] : null) || this.viewModel.currentLayer;\r\n\r\n if (layer) {\r\n layer.addPolygon(poly, this);\r\n } else {\r\n if (data)\r\n data.dispose();\r\n else\r\n poly.setMap(null);\r\n DManager.showErrorMessage(\"Can't add Polygon of unknown type.\");\r\n return null;\r\n }\r\n\r\n return poly;\r\n }\r\n\r\n selectShapes(shapes: ISelectableItem[], forceSelection?: boolean, forceAdd?: boolean, forceRemove?: boolean) {\r\n\r\n var ctrlDown = this.ctrlDown;\r\n var shiftDown = this.shiftDown;\r\n\r\n if (((!forceAdd && !shiftDown && !ctrlDown) || forceSelection) && !forceRemove) {\r\n this.clearSelection();\r\n }\r\n\r\n shapes.forEach(s => this.doSelectSelectable(s, false, !forceRemove, forceRemove));\r\n }\r\n\r\n doSelectSelectable(item: ISelectableItem, forceSelection?: boolean, forceAdd?: boolean, forceRemove?: boolean) {\r\n if (!item || !item.getMap() || item.locked)\r\n return;\r\n var ctrlDown = this.ctrlDown,\r\n shiftDown = this.shiftDown;\r\n if (forceSelection) {\r\n ctrlDown = false;\r\n shiftDown = false;\r\n } else if (forceAdd) {\r\n ctrlDown = false;\r\n shiftDown = true;\r\n } else if (forceRemove) {\r\n ctrlDown = true;\r\n shiftDown = true;\r\n }\r\n //var data = shape.userData as ShapeData;\r\n //var layer = data ? viewModel.getLayerByTypeName(data.typeName) : null;\r\n //if (!layer)\r\n // return;\r\n\r\n //var shapeHovered = true;\r\n\r\n if (this.eraseMode) {\r\n this.deleteSelectable(item);\r\n return;\r\n }\r\n\r\n var isSelected = item.selected;\r\n\r\n if (ctrlDown && !shiftDown) {\r\n //toogle selection\r\n if (isSelected) {\r\n this.removeItemFromSelection(item);\r\n\r\n //item.selected = false;\r\n //shape.setEditable(false);\r\n //shape.setDraggable(false);\r\n //shape.setOptions(shapeHovered ? layer.shapeHoveredStyle : layer.shapeStyle);\r\n //viewModel.selection.remove(s => s.id === item.id);\r\n } else {\r\n this.addItemToSelection(item);\r\n\r\n //item.selected = true;\r\n //item.setEditable(true);\r\n //item.setDraggable(true);\r\n //item.setOptions(shapeHovered ? layer.shapeSelectedHoveredStyle : layer.shapeSelectedStyle);\r\n //viewModel.selection.push(item);\r\n }\r\n } else if (!ctrlDown && shiftDown) {\r\n //only add to selection\r\n if (!isSelected) {\r\n this.addItemToSelection(item);\r\n\r\n //item.selected = true;\r\n //item.setEditable(true);\r\n //item.setDraggable(true);\r\n //item.setOptions(shapeHovered ? layer.shapeSelectedHoveredStyle : layer.shapeSelectedStyle);\r\n //viewModel.selection.push(item);\r\n }\r\n } else if (ctrlDown && shiftDown) {\r\n //only remove from selection\r\n if (isSelected) {\r\n this.removeItemFromSelection(item);\r\n\r\n //item.selected = false;\r\n //item.setEditable(false);\r\n //item.setDraggable(false);\r\n //item.setOptions(shapeHovered ? layer.shapeHoveredStyle : layer.shapeStyle);\r\n //viewModel.selection.remove(s => s.id === item.id);\r\n }\r\n } else {\r\n //select only this shape\r\n this.clearSelection();\r\n\r\n this.addItemToSelection(item);\r\n\r\n //item.selected = true;\r\n //item.setEditable(true);\r\n //item.setDraggable(true);\r\n //item.setOptions(shapeHovered ? layer.shapeSelectedHoveredStyle : layer.shapeSelectedStyle);\r\n //viewModel.selection.push(item);\r\n }\r\n }\r\n\r\n removeFromSelection(id: string) {\r\n if (id)\r\n this.viewModel.selection.remove(s => s.id === id).forEach(s => { s.selected = false; });\r\n }\r\n\r\n removeItemFromSelection(item: ISelectableItem) {\r\n if (item) {\r\n if (item.typeName) {\r\n var layer = this.viewModel.layer.typeName[item.typeName];\r\n if (layer)\r\n layer.lastClickedIndex = -1;\r\n }\r\n this.removeFromSelection(item.id);\r\n }\r\n }\r\n\r\n addItemToSelection(item: ISelectableItem) {\r\n var selection = this.viewModel.selection;\r\n if (item && !item.selected && !item._isDisposed) {\r\n if (item.typeName) {\r\n var layer = this.viewModel.layer.typeName[item.typeName];\r\n if (layer)\r\n layer.lastClickedIndex = -1;\r\n }\r\n item.selected = true;\r\n selection.push(item);\r\n }\r\n }\r\n\r\n addItemsToSelection(items: ISelectableItem[]) {\r\n var selection = this.viewModel.selection;\r\n if (items && items.length)\r\n items = items.filter(item => !item.selected && !item._isDisposed);\r\n if (items && items.length) {\r\n items.forEach(item => {\r\n item.selected = true;\r\n if (item.typeName) {\r\n var layer = this.viewModel.layer.typeName[item.typeName];\r\n if (layer)\r\n layer.lastClickedIndex = -1;\r\n }\r\n });\r\n selection.push.apply(selection, items);\r\n }\r\n }\r\n\r\n toggleEditImportedImage() {\r\n var viewModel = this.viewModel;\r\n if (viewModel.selectedToolName === 'ImportImageHelperTool') {\r\n this.selectTool(null);\r\n } else {\r\n this.selectTool('ImportImageHelperTool');\r\n }\r\n }\r\n\r\n revertImportedImage() {\r\n var viewModel = this.viewModel;\r\n if (viewModel.selectedToolName === 'ImportImageHelperTool') {\r\n this.selectTool(null);\r\n this.loadImportImages();\r\n }\r\n }\r\n\r\n deleteImportedImage() {\r\n\r\n var imgIds = this.viewModel.importedImages.map(img => img._id);\r\n\r\n if (!imgIds.length) {\r\n this.selectTool(null);\r\n return;\r\n }\r\n\r\n SolarProTool.Ajax(\"WebServices/MapServices.asmx\").Call(\"DeleteImportedImages\").Data({ ids: imgIds }).CallBack((result) => {\r\n this.selectTool(null);\r\n\r\n this.viewModel.currentImportedImageId = null;\r\n this.viewModel.importedImages.removeAll().forEach(im => {\r\n im.setMap(null);\r\n });\r\n });\r\n }\r\n\r\n selectToolClick(toolName: string, subTool?: string) {\r\n\r\n (window).lsSidebar.close('mapSettingsSlider');\r\n\r\n var viewModel = this.viewModel,\r\n tool = viewModel.toolIcons[toolName];\r\n\r\n if (tool && tool.disabled)\r\n return;\r\n\r\n let dropdownButton = $('#dropdownMenuToolbar' + toolName);\r\n let dropdownParent = dropdownButton.parent();\r\n let isLandscape = window.innerHeight <= window.innerWidth;\r\n\r\n let cssOrientation = isLandscape ? \"dropright\" : \"dropdown\";\r\n let cssOrientationOther = !isLandscape ? \"dropright\" : \"dropdown\";\r\n dropdownParent.removeClass(cssOrientationOther);\r\n dropdownParent.addClass(cssOrientation);\r\n\r\n if (!dropdownButton.data('init')) {\r\n dropdownButton.dropdown();\r\n dropdownButton.data('init', true);\r\n dropdownButton.dropdown('toggle');\r\n }\r\n\r\n if (subTool)\r\n dropdownButton.dropdown('toggle');\r\n\r\n this.selectTool(toolName, subTool);\r\n }\r\n\r\n selectTool(toolName: string, subTool?: string) {\r\n var viewModel = this.viewModel,\r\n oldTool = viewModel.currentTool,\r\n tool = viewModel.toolIcons[toolName];\r\n\r\n viewModel.cleanUpDragInfo();\r\n\r\n if (!tool || tool.disabled) {\r\n toolName = \"SelectTool\";\r\n tool = viewModel.toolIcons[toolName];\r\n }\r\n\r\n if (oldTool)\r\n oldTool.deselect(this);\r\n\r\n viewModel.currentTool = tool;\r\n\r\n if (toolName === \"SelectTool\" || toolName === \"SelectRectTool\" || toolName === \"EraserTool\") {\r\n this.getAllPolygons().forEach(poly => {\r\n if (poly.userData) {\r\n poly.userData.frozen = false;\r\n poly.setOptions({ clickable: true });\r\n }\r\n });\r\n this.viewModel.helperLines.forEach(hl => {\r\n hl.frozen = false;\r\n });\r\n } else {\r\n this.getAllPolygons().forEach(poly => {\r\n if (poly.userData) {\r\n poly.userData.frozen = true;\r\n poly.setOptions({ clickable: false });\r\n }\r\n\r\n });\r\n this.viewModel.helperLines.forEach(hl => {\r\n hl.frozen = true;\r\n });\r\n }\r\n\r\n if (tool)\r\n tool.select(this, oldTool, subTool || null);\r\n }\r\n\r\n fitBounds(polys: IGoogleMapsPolygon[]) {\r\n if (polys && polys.length) {\r\n this.map.fitBounds(this.getBoundsFromPolygons(polys));\r\n this.selectShapes(polys.map(poly => poly.userData as ShapeData), true);\r\n }\r\n }\r\n\r\n fromViewPointToLatLng(p: { x: number, y: number }) {\r\n var map = this.map,\r\n scale = this.getPixelFactor(),\r\n mapBounds = map.getBounds(),\r\n mapNE = mapBounds.getNorthEast(),\r\n mapSW = mapBounds.getSouthWest(),\r\n pNW = new LatLng(mapNE.lat(), mapSW.lng()).ToPoint2D(); // this.fromLatLngToPoint(new google.maps.LatLng(mapNE.lat(), mapSW.lng()));\r\n\r\n return LatLng.FromPoint2D(new Point2D(((pNW.x * scale) + p.x) / scale, ((pNW.y * scale) + p.y) / scale)); // this.fromPointToLatLng(new google.maps.Point(((pNW.x * scale) + p.x) / scale, ((pNW.y * scale) + p.y) / scale), false);\r\n }\r\n\r\n static getQuadtreeQuadrant(x, y, zoom) {\r\n var cx = Math.abs(+x);\r\n var cy = Math.abs(+y);\r\n var q = [];\r\n for (var z = zoom; z >= 1; z--) {\r\n var fx = cx % 2;\r\n var fy = cy % 2;\r\n q.unshift(fy * 2 + fx);\r\n cx = (cx - fx) / 2;\r\n cy = (cy - fy) / 2;\r\n }\r\n return q;\r\n }\r\n\r\n //static getTileDiv(map: google.maps.Map, coord: IPoint2D, zoom: number, ownerDocument: HTMLDocument, url: string): HTMLElement {\r\n // var projection = map.getProjection(),\r\n // tilesize = LatLng.TILE_SIZE,\r\n // tilesizeHalf = LatLng.TILE_SIZE_HALF;\r\n\r\n // //console.log(coord.x + \" \" + coord.y + \" \" + zoom);\r\n // var cx = (coord.x + 0.5) * tilesize;\r\n // var cy = (coord.y + 0.5) * tilesize;\r\n\r\n // var nz = Math.min(21, zoom); //max zoom is 21\r\n // var dz = 1 << (zoom - nz); //Math.pow(2, zoom - nz)\r\n // var ts = dz * tilesize;\r\n // var ts2 = ts * 0.5;\r\n // var scale = (1 << zoom);\r\n\r\n // var tx = Math.floor(cx / ts) * ts;\r\n // var ty = Math.floor(cy / ts) * ts;\r\n\r\n // var ix = tx + ts2;\r\n // var iy = ty + ts2;\r\n\r\n // var bgscale = dz * 100;\r\n\r\n // var latlng = projection.fromPointToLatLng(new google.maps.Point(ix / scale, iy / scale), false);\r\n\r\n // var div = ownerDocument.createElement('div');\r\n\r\n // //var url = `../../handler/StaticImagesHandler.ashx?ID=GoogleHybrid¢er=${latlng.lat()},${latlng.lng()}&zoom=${nz}&size=${tilesize}x${tilesize}&scale=1`;\r\n\r\n // div.className = \"md-tile-url\";\r\n // div.style.backgroundSize = `${bgscale}% ${bgscale}%`;\r\n // div.style.backgroundPosition = `${(tx - cx + tilesizeHalf)}px ${(ty - cy + tilesizeHalf)}px`;\r\n // div.style.backgroundImage = `url(\"${url}¢er=${latlng.lat()},${latlng.lng()}&zoom=${nz}&size=${tilesize}x${tilesize}&scale=1\")`;\r\n\r\n // //$(div).attr(\"tile-coord\", coord.x + \"_\" + coord.y + \"_\" + zoom);\r\n\r\n // return div;\r\n\r\n\r\n // // var scale = (1 << zoom) / tilesize;\r\n // // var projection = map.getProjection();\r\n // // var latlng = projection.fromPointToLatLng(new google.maps.Point((coord.x + 0.5) / scale, (coord.y + 0.5) / scale), false);\r\n\r\n // // var url = url +\"?ID=GoogleHybrid¢er=\" + latlng.lat() + \",\" + latlng.lng() + \"&zoom=\" + zoom + \"&size=\" + tilesize + \"x\" + tilesize + \"&scale=1\";\r\n\r\n // // return url;\r\n //}\r\n\r\n load(callBack?: () => void) {\r\n SolarProTool.Ajax(\"WebServices/MapServices.asmx\").Call(\"GetDataForMapDrawer\").Data().CallBack((result) => {\r\n this.clear();\r\n\r\n var bounds = new BoundsLatLng();\r\n\r\n if (!result)\r\n result = {} as any;\r\n\r\n if (result.Shapes) {\r\n let bds = this.importShapes(result.Shapes);\r\n if (!bds.IsEmpty)\r\n bounds.Expand(bds);\r\n }\r\n\r\n if (result.ImportedImages) {\r\n let bds = this.importImages(result.ImportedImages);\r\n if (!bds.IsEmpty && bds.Width < 1000000 && bds.Height < 1000000 && bds.Center.DistanceTo(bounds.Center) < 1000000)\r\n bounds.Expand(bds);\r\n }\r\n\r\n if (this.ghostShapes && this.ghostShapes.length) {\r\n this.ghostShapes.forEach(gp => {\r\n gp.setMap(null);\r\n });\r\n this.ghostShapes = null;\r\n }\r\n\r\n if (result.GhostBorders && result.GhostBorders.length) {\r\n var gPaths: google.maps.LatLng[][] = [];\r\n\r\n result.GhostBorders.forEach(poly => {\r\n gPaths.push(poly.points.map(p => new google.maps.LatLng(p.latitude, p.longitude)));\r\n });\r\n\r\n var gPoly = new google.maps.Polygon($.extend({}, {\r\n map: this.map,\r\n paths: gPaths\r\n }, this.ghostShapeStyle) as google.maps.PolygonOptions);\r\n\r\n this.ghostShapes = [gPoly as any];\r\n }\r\n\r\n this.autoSelectLayer();\r\n\r\n this.clearSelection();\r\n if (result.mapTypeId) {\r\n if (this.mapTypeIds.some(m => m === result.mapTypeId)) {\r\n this.map.setMapTypeId(result.mapTypeId);\r\n } else if (result.mapTypeId.indexOf(\"Google\") !== -1) {\r\n this.map.setMapTypeId(this.mapTypeIds[1]);\r\n }\r\n }\r\n\r\n if (!bounds.IsEmpty)\r\n this.map.fitBounds(bounds.ToGMLatLngBounds());\r\n\r\n // select tool on startup\r\n var selectedToolName = this.options.isReadOnly ? 'HandTool' : 'DrawTool';\r\n this.selectTool(selectedToolName);\r\n\r\n if (callBack && typeof callBack === \"function\")\r\n callBack();\r\n });\r\n }\r\n\r\n loadImportImages(callBack?: () => void) {\r\n SolarProTool.Ajax(\"WebServices/MapServices.asmx\").Call(\"GetImportedImagesForMapDrawer\").Data().CallBack((result) => {\r\n this.viewModel.importedImages.removeAll().forEach(im => {\r\n im.setMap(null);\r\n });\r\n\r\n var bounds = new BoundsLatLng();\r\n\r\n if (!this.viewModel.bounds.IsEmpty)\r\n bounds.Expand(this.viewModel.bounds);\r\n\r\n if (result.ImportedImages) {\r\n let bds = this.importImages(result.ImportedImages);\r\n if (!bds.IsEmpty && bds.Width < 1000000 && bds.Height < 1000000 && bds.Center.DistanceTo(bounds.Center) < 1000000)\r\n bounds.Expand(bds);\r\n }\r\n\r\n if (!bounds.IsEmpty)\r\n this.map.fitBounds(bounds.ToGMLatLngBounds());\r\n\r\n this.clearSelection();\r\n\r\n if (callBack && typeof callBack === \"function\")\r\n callBack();\r\n });\r\n }\r\n\r\n autoSelectLayer() {\r\n var viewModel = this.viewModel,\r\n layers = viewModel.layer.all;\r\n\r\n for (var i = 0, j = layers.length; i < j; i++) {\r\n var layer = layers[i];\r\n if (!layer.locked) {\r\n viewModel.selectedLayerTypeName = layer.typeName;\r\n break;\r\n }\r\n }\r\n\r\n if ((viewModel.layer.roof && viewModel.layer.roof.polygons.length) ||\r\n (viewModel.layer.freeArea && viewModel.layer.freeArea.polygons.length))\r\n viewModel.detailsViewVisible = true;\r\n }\r\n\r\n testDepthCanvas() {\r\n let bd = new MapDrawing.BoundsLatLng();\r\n let llPolys: MapDrawing.LatLng[][] = [];\r\n //let gpolys: google.maps.Polygon[] = [];\r\n\r\n this.getAllPolygons().filter(poly => poly.userData && !poly._isDisposed).forEach(poly => {\r\n var shapeData = poly.userData as ShapeData;\r\n if (shapeData.typeName === window.RoofTypeName) {\r\n llPolys.push(shapeData.latLngs[0]);\r\n //let gpoly = new google.maps.Polygon({ paths: poly.getPaths() });\r\n //gpolys.push(gpoly);\r\n //shapeData.latLngs\r\n bd.Expand(shapeData.bounds);\r\n }\r\n });\r\n\r\n bd = bd.Extend(5);\r\n\r\n let w = bd.Width,\r\n h = bd.Height;\r\n\r\n if (w > 0 && w < 1000 && h > 0 && h < 1000) {\r\n var ocr = this.ocrManager.ocr,\r\n zoom: number,\r\n pxSize = 256,\r\n sizeFactor = Math.min(pxSize / w, pxSize / h),\r\n maxSize = Math.max(w, h),\r\n width = Math.round(w * sizeFactor),\r\n height = Math.round(h * sizeFactor);\r\n\r\n if (maxSize > 500)\r\n zoom = 18;\r\n else if (maxSize > 250)\r\n zoom = 19;\r\n else\r\n zoom = 23;\r\n\r\n ocr.request({\r\n bounds: bd,\r\n level: zoom,\r\n renderWidth: width,\r\n renderHeight: height,\r\n depthMaterial: true,\r\n drawFn: (canvas, gl) => {\r\n\r\n var t0 = performance.now();\r\n\r\n var depthCanvas = document.createElement(\"canvas\");\r\n\r\n depthCanvas.width = width;\r\n depthCanvas.height = height;\r\n\r\n depthCanvas.style.position = \"absolute\";\r\n depthCanvas.style.top = \"100px\";\r\n depthCanvas.style.left = \"100px\";\r\n depthCanvas.style.width = width + \"px\";\r\n depthCanvas.style.height = height + \"px\";\r\n depthCanvas.style.zIndex = \"1\";\r\n document.body.appendChild(depthCanvas);\r\n\r\n var numPixels = width * height,\r\n gldata = new Uint8Array(numPixels * 4),\r\n x: number,\r\n y: number,\r\n d: number;\r\n\r\n gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, gldata);\r\n\r\n var pts: THREE.Vector4[] = [];\r\n\r\n var plys: number[][][] = [],\r\n planes: THREE.Plane[] = [];\r\n\r\n llPolys.forEach(llPoly => {\r\n var positions: number[] = [],\r\n minZ = Number.MAX_VALUE;\r\n\r\n var poly = llPoly.map(ll => {\r\n let v = bd.Min.DirectionTo(ll);\r\n return [Math.round(v.x * width / w), Math.round(v.y * height / h)];\r\n });\r\n\r\n GMapsUtils.triangulationUtils.pointsInPolygon([poly], (x, y) => {\r\n if (x > 0 && x < width && y > 0 && y < height) {\r\n let idx = y * (width * 4) + x * 4,\r\n r = gldata[idx],\r\n g = gldata[idx + 1],\r\n b = gldata[idx + 2],\r\n d = r / 256 + g + b * 256;\r\n\r\n positions.push(x / width * w, y / height * h, d);\r\n pts.push(new THREE.Vector4((x / width * w) * 1000, (y / height * h) * 1000, d * 1000, 4));\r\n if (d < minZ)\r\n minZ = d;\r\n }\r\n });\r\n\r\n var plane = spt.ThreeJs.utils.approximatePlaneFromPositionArray(positions, minZ);\r\n\r\n plys.push(poly);\r\n planes.push(plane.clone());\r\n\r\n });\r\n\r\n var minDepth = Number.MAX_VALUE,\r\n maxDepth = 0;\r\n\r\n //calc min and max depth\r\n for (y = 0; y < height; y++) {\r\n for (x = 0; x < width; x++) {\r\n const gidx = y * (width * 4) + x * 4,\r\n r = gldata[gidx],\r\n g = gldata[gidx + 1],\r\n b = gldata[gidx + 2];\r\n\r\n d = r / 256 + g + b * 256;\r\n\r\n if (d < minDepth)\r\n minDepth = d;\r\n if (d > maxDepth)\r\n maxDepth = d;\r\n }\r\n }\r\n\r\n var ctx = depthCanvas.getContext(\"2d\"),\r\n imageData = ctx.createImageData(canvas.width, canvas.height),\r\n data = imageData.data,\r\n deltaDepth = maxDepth - minDepth;\r\n\r\n for (y = 0; y < height; y++) {\r\n for (x = 0; x < width; x++) {\r\n const idx = (height - 1 - y) * (width * 4) + x * 4,\r\n gidx = y * (width * 4) + x * 4,\r\n r = gldata[gidx],\r\n g = gldata[gidx + 1],\r\n b = gldata[gidx + 2];\r\n\r\n d = r / 256 + g + b * 256;\r\n\r\n d = Math.min(1, Math.max(0, (d - minDepth) / deltaDepth)) * 255;\r\n\r\n data[idx] = d;\r\n data[idx + 1] = d;\r\n data[idx + 2] = d;\r\n data[idx + 3] = 255;\r\n }\r\n }\r\n\r\n plys.forEach((poly, i) => {\r\n var plane = planes[i],\r\n r = plane.normal.x * 127.5 + 127.5,\r\n g = plane.normal.y * 127.5 + 127.5,\r\n b = plane.normal.z * 127.5 + 127.5;\r\n\r\n console.log(`plane normal x: ${plane.normal.x}, y: ${plane.normal.y}, z: ${plane.normal.z}, angle: ${plane.normal.angleTo(new THREE.Vector3(0, 0, 1)) / Math.PI * 180}`);\r\n\r\n GMapsUtils.triangulationUtils.pointsInPolygon([poly], (x, y) => {\r\n if (x > 0 && x < width && y > 0 && y < height) {\r\n let idx = (height - 1 - Math.round(y)) * (width * 4) + Math.round(x) * 4;\r\n imageData.data[idx] = r;\r\n imageData.data[idx + 1] = g;\r\n imageData.data[idx + 2] = b;\r\n }\r\n });\r\n\r\n });\r\n\r\n console.log(`buidling height: ${deltaDepth} m`);\r\n\r\n spt.ThreeJs.utils.DebugPolygons(null, null, pts);\r\n\r\n ctx.putImageData(imageData, 0, 0);\r\n\r\n var t1 = performance.now();\r\n\r\n console.log(`Call to plane approximation took ${(t1 - t0) * 0.001} seconds.`);\r\n }\r\n });\r\n }\r\n }\r\n\r\n save(callback?: () => void) {\r\n if (LoaderManager.isLoading())\r\n return false;\r\n\r\n LoaderManager.addLoadingJob();\r\n\r\n let selectedToolName = this.options.isReadOnly ? 'HandTool' : 'SelectTool';\r\n this.selectTool(selectedToolName);\r\n\r\n ko.tasks.runEarly();\r\n\r\n setTimeout(this.saveIntern.bind(this, callback), 0);\r\n\r\n }\r\n\r\n private saveIntern(callback?: () => void) {\r\n LoaderManager.finishLoadingJob();\r\n\r\n var shapes = this.exportShapes(),\r\n mapType = \"\" + this.map.getMapTypeId(),\r\n isGoogleHD = mapType === \"Google HD\";\r\n\r\n var data: SolarProTool.MapDrawerData = {\r\n mapTypeId: mapType,\r\n Shapes: shapes,\r\n ImageId: null,\r\n ImageWidth: 0,\r\n ImageHeight: 0,\r\n ImageLatitude: 0,\r\n ImageLongitude: 0,\r\n ImageOrientation: 0,\r\n MapsImageData: null,\r\n MapsImageMinLatitude: 0,\r\n MapsImageMinLongitude: 0,\r\n MapsImageMaxLatitude: 0,\r\n MapsImageMaxLongitude: 0\r\n };\r\n\r\n var img = this.viewModel.currentImportedImage;\r\n\r\n if (img && img._bounds) {\r\n\r\n var bd = img._bounds;\r\n var c = bd.Center;\r\n\r\n data.ImageId = img._id;\r\n data.ImageWidth = bd.Width * 1000;\r\n data.ImageHeight = bd.Height * 1000;\r\n data.ImageLatitude = c.Latitude;\r\n data.ImageLongitude = c.Longitude;\r\n data.ImageOrientation = img._orientation;\r\n }\r\n\r\n if (isGoogleHD) {\r\n\r\n let bd = new MapDrawing.BoundsLatLng();\r\n\r\n this.getAllPolygons().filter(poly => poly.userData && !poly._isDisposed).forEach(poly => {\r\n var shapeData = poly.userData as ShapeData;\r\n bd.Expand(shapeData.bounds);\r\n });\r\n\r\n let w = bd.Width,\r\n h = bd.Height;\r\n\r\n if (w > 0 && w < 1000 && h > 0 && h < 1000) {\r\n var ocr = this.ocrManager.ocr,\r\n canvas = document.createElement(\"canvas\"),\r\n zoom: number,\r\n pxSize = 1024,\r\n sizeFactor = Math.min(pxSize / w, pxSize / h),\r\n maxSize = Math.max(w, h),\r\n pxWidth = Math.round(w * sizeFactor),\r\n pxHeight = Math.round(h * sizeFactor);\r\n\r\n if (maxSize > 500)\r\n zoom = 18;\r\n else if (maxSize > 250)\r\n zoom = 19;\r\n else\r\n zoom = 23;\r\n\r\n canvas.width = pxWidth;\r\n canvas.height = pxHeight;\r\n\r\n //canvas.style.position = \"absolute\";\r\n //canvas.style.top = \"100px\";\r\n //canvas.style.left = \"100px\";\r\n //canvas.style.width = pxWidth + \"px\";\r\n //canvas.style.height = pxHeight + \"px\";\r\n //canvas.style.zIndex = \"1\";\r\n //var ctx = canvas.getContext(\"2d\");\r\n //ctx.fillStyle = \"white\";\r\n //ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n //document.body.appendChild(canvas);\r\n\r\n LoaderManager.addLoadingJob();\r\n\r\n ocr.requestRender(bd, zoom, () => canvas, (success) => {\r\n LoaderManager.finishLoadingJob();\r\n\r\n if (success && canvas && typeof canvas.toDataURL == \"function\") {\r\n data.MapsImageData = canvas.toDataURL(\"image/png\");\r\n data.MapsImageMinLatitude = bd.Min.Latitude;\r\n data.MapsImageMinLongitude = bd.Min.Longitude;\r\n data.MapsImageMaxLatitude = bd.Max.Latitude;\r\n data.MapsImageMaxLongitude = bd.Max.Longitude;\r\n }\r\n\r\n this.saveData(data);\r\n }, pxWidth, pxHeight);\r\n\r\n //this.testDepthCanvas();\r\n\r\n return;\r\n }\r\n\r\n }\r\n\r\n this.saveData(data, callback);\r\n }\r\n\r\n private saveData(data: SolarProTool.MapDrawerData, callback?: () => void) {\r\n SolarProTool.Ajax(\"WebServices/MapServices.asmx\").Call(\"SaveMapDrawerData\").Data({ data: data }).CallBack((result) => {\r\n if (!result)\r\n result = {} as any;\r\n if (result.ErrorMessage)\r\n DManager.showErrorMessage(result.ErrorMessage);\r\n else {\r\n if (this.dialog)\r\n DManager.hide(this.dialog);\r\n\r\n var valueAdjustOpts = this.viewModel.valueAdjustOpts;\r\n\r\n if ($('#Roof_Orientation').length) {\r\n spt.Utils.SetFloatInInput('#Roof_Orientation', spt.Utils.GetFloatFromInputValue(\"\" + result.RoofOrientation,\r\n {\r\n notImperial: true\r\n }));\r\n spt.Utils.SetFloatInInput('#Roof_RoofHeight', spt.Utils.GetFloatFromInputValue(\"\" + result.RoofHeight,\r\n {\r\n notImperial: true,\r\n from: \"mm\",\r\n to: valueAdjustOpts.to\r\n }));\r\n spt.Utils.SetFloatInInput('#Roof_Angle', Math.round(spt.Utils.GetFloatFromInputValue(\"\" + result.RoofAngle,\r\n {\r\n notImperial: true\r\n }) * 100) / 100);\r\n\r\n if (result.RoofName) {\r\n if ($('#Roof_Title').length)\r\n $('#Roof_Title').val(result.RoofName);\r\n if ($('#prInfoRoofTitle').length)\r\n $('#prInfoRoofTitle').text(result.RoofName);\r\n }\r\n\r\n if (result.IsMultiRoofBuilding !== undefined)\r\n window.isMultiRoofBuilding = !!result.IsMultiRoofBuilding;\r\n\r\n if (result.ProcessStep >= 5) {\r\n window.ConfirmDialogSaveOnlyClick = function () {\r\n DManager.hide('confirmation_dialog_saveOrReCreate');\r\n };\r\n\r\n window.ConfirmDialogSaveAndReCreateClick = function () {\r\n AManager.AjaxWithLoading('AnordnungsService.asmx', 'GenerateAll', { multiRoof: window.isMultiRoofBuilding }, window.ConfirmDialogSaveOnlyClick);\r\n };\r\n\r\n DManager.show('confirmation_dialog_saveOrReCreate');\r\n }\r\n }\r\n }\r\n\r\n if (callback && typeof callback === \"function\")\r\n callback();\r\n });\r\n }\r\n\r\n ghostShapeStyle: IShapeStyle = {\r\n strokeWeight: 2,\r\n fillColor: \"#616161\",\r\n fillOpacity: 0.5,\r\n strokeColor: \"#262626\",\r\n strokeOpacity: 0.8,\r\n clickable: false,\r\n editable: false,\r\n draggable: false,\r\n visible: true\r\n };\r\n //mouseEventCreation: boolean;\r\n viewModel: ViewModel;\r\n dialog: Element;\r\n view: Element;\r\n mapsViewWrapper: HTMLElement;\r\n mapsView: HTMLElement;\r\n map: google.maps.Map;\r\n ghostShapes: IGoogleMapsPolygon[];\r\n elevationService: google.maps.ElevationService;\r\n drawingManager: google.maps.drawing.DrawingManager;\r\n eraseMode = false;\r\n private drawingMode = false;\r\n rectSelectMode = false;\r\n zoomOnlyMode = false;\r\n shiftDown = false;\r\n ctrlDown = false;\r\n altDown = false;\r\n spaceDown = false;\r\n private _hasFocus = false;\r\n private _mapEventListener: google.maps.MapsEventListener[] = [];\r\n\r\n get hasFocus(): boolean {\r\n return this._hasFocus && (!this.viewModel || !this.viewModel.detailsContentHasFocus);\r\n }\r\n\r\n set hasFocus(v: boolean) {\r\n this._hasFocus = v;\r\n }\r\n\r\n setSeparationLinesFrozen(frozen: boolean) {\r\n var viewmodel = this.viewModel,\r\n buildingLayer = viewmodel.layer.building,\r\n buildingPolys = buildingLayer ? buildingLayer.polygons : null;\r\n if (buildingPolys != null)\r\n buildingPolys.forEach(poly => {\r\n if (poly.userData && (poly.userData as ShapeData).separationPolylines)\r\n (poly.userData as ShapeData).separationPolylines.forEach(sp => { sp.frozen = frozen; });\r\n });\r\n }\r\n\r\n mouseDown = false;\r\n options: IMapDrawerOptions;\r\n _projection: google.maps.Projection = null;\r\n center: LatLng = new LatLng();\r\n mapTypeIds = [MapDrawer.EmptyCanvas, \"Google\", \"BING\"/*, \"hybrid\"*/];\r\n tileManager: TileManager[];\r\n ocrManager: OCRTileManager;\r\n tempPolyData: PolyData[] = [];\r\n canvasOverlay: CanvasOverlay;\r\n osmBuildings: OsmBuildings;\r\n\r\n getPixelFactor() {\r\n if (this.map)\r\n return Math.pow(2, this.map.getZoom());\r\n return 0;\r\n }\r\n\r\n setDrawingMode(b: boolean) {\r\n this.drawingMode = !!b;\r\n }\r\n\r\n getPolygonsByPoint(viewPosition: google.maps.LatLng) {\r\n var pointInPolygon = google.maps.geometry.poly.containsLocation;\r\n return this.getAllPolygons().filter(shape => pointInPolygon(viewPosition, shape as any));\r\n }\r\n\r\n getAllPolygons(): IGoogleMapsPolygon[] {\r\n var result: IGoogleMapsPolygon[] = [];\r\n this.viewModel.layer.all.forEach(layer => {\r\n layer.polygons.forEach(p => result.push(p));\r\n });\r\n return result;\r\n }\r\n\r\n getByBoundsLatLng(bounds: BoundsLatLng, layers?: PolygonLayer[], noHelperlines?: boolean): ISelectableItem[] {\r\n var result: ISelectableItem[] = [];\r\n if (!layers)\r\n layers = this.viewModel.layer.all;\r\n for (var i = 0, j = layers.length; i < j; i++) {\r\n var layer = layers[i];\r\n if (layer && layer.bounds) {\r\n if (!layer.bounds.Overlaps(bounds))\r\n continue;\r\n var polygons = layer.polygons;\r\n for (var k = 0, l = polygons.length; k < l; k++) {\r\n var poly = polygons[k],\r\n data = poly.userData as ShapeData;\r\n if (data && data.bounds) {\r\n var b = data.bounds;\r\n if (b.Overlaps(bounds))\r\n result.push(data);\r\n }\r\n }\r\n }\r\n\r\n }\r\n if (!noHelperlines) {\r\n var helperLines = this.viewModel.helperLines;\r\n for (var m = 0, n = helperLines.length; m < n; m++) {\r\n result.push(helperLines[m]);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getByLatLng(latLng: LatLng, clickTolerance: number, layers?: PolygonLayer[], noHelperlines?: boolean): ISelectableItem[] {\r\n var pxFactor = Math.pow(2, this.map.getZoom()),\r\n offset = clickTolerance / pxFactor,\r\n p = latLng.ToPoint2D(),\r\n t = new Point2D(offset, offset),\r\n bounds = new BoundsLatLng(LatLng.FromPoint2D(p.sub(t)), LatLng.FromPoint2D(p.add(t)));\r\n\r\n return this.getByBoundsLatLng(bounds, layers, noHelperlines);\r\n }\r\n\r\n getSegmentByPoint(latLng: LatLng, clickTolerance: number, layers?: PolygonLayer[], noHelperlines?: boolean, noGhostShapes?: boolean): Segment2D {\r\n\r\n var result: Segment2D = null,\r\n minDist = Number.MAX_VALUE,\r\n pxFactor = Math.pow(2, this.map.getZoom()),\r\n p = latLng.ToPoint2D();\r\n\r\n this.getByLatLng(latLng, clickTolerance, layers, noHelperlines).map((item: ISelectableItem) => {\r\n item.getSegments().forEach(seg => {\r\n var dist = seg.distanceToPoint(p) * pxFactor;\r\n if (dist <= clickTolerance && dist < minDist) {\r\n minDist = dist;\r\n result = seg;\r\n }\r\n });\r\n });\r\n\r\n if (!result && !noGhostShapes && this.ghostShapes && this.ghostShapes.length) {\r\n this.ghostShapes.forEach(sh => {\r\n\r\n sh.getPaths().getArray().forEach(path => {\r\n var points = LatLng.GMLatLngArrayToPoint2D(path.getArray()),\r\n len = points.length;\r\n\r\n for (var i = 0; i < len; i++) {\r\n var p1 = points[i],\r\n p2 = points[(i + 1) % len],\r\n seg = new Segment2D(p1, p2);\r\n\r\n var dist = seg.distanceToPoint(p) * pxFactor;\r\n if (dist <= clickTolerance && dist < minDist) {\r\n minDist = dist;\r\n result = seg;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getPointByPoint(latLng: LatLng, clickTolerance: number, helperLineIntersections: boolean, snapPolygons: boolean, layers?: PolygonLayer[], noGhostShapes?: boolean): Point2D {\r\n\r\n var result: Point2D = null,\r\n minDist = Number.MAX_VALUE,\r\n pxFactor = Math.pow(2, this.map.getZoom()),\r\n p = latLng.ToPoint2D(),\r\n helperLines = this.viewModel.helperLines;\r\n\r\n if (helperLineIntersections) {\r\n var hl: Helperline[],\r\n len: number;\r\n\r\n if (helperLines.length > 1) {\r\n hl = helperLines.filter(helperLine => (helperLine.distanceToPoint(p) * pxFactor) <= clickTolerance);\r\n len = hl.length;\r\n if (len > 1) {\r\n for (let i = 0; i < len; i++) {\r\n var hl1 = hl[i];\r\n for (var j = i + 1; j < len; j++) {\r\n let hl2 = hl[j],\r\n pt = hl1.getIntersection(hl2.Segment);\r\n\r\n if (pt) {\r\n let dist = pt.DistanceTo(p) * pxFactor;\r\n if (dist <= clickTolerance && dist < minDist) {\r\n minDist = dist;\r\n result = pt;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (!result) {\r\n var seg = this.getSegmentByPoint(latLng, clickTolerance, layers, true);\r\n if (seg) {\r\n if (!hl) {\r\n hl = helperLines.filter(helperLine => (helperLine.distanceToPoint(p) * pxFactor) <= clickTolerance);\r\n len = hl.length;\r\n }\r\n for (let i = 0; i < len; i++) {\r\n let hl1 = hl[i],\r\n pt = hl1.getIntersection(seg);\r\n if (pt) {\r\n let dist = pt.DistanceTo(p) * pxFactor;\r\n if (dist <= clickTolerance && dist < minDist) {\r\n minDist = dist;\r\n result = pt;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (snapPolygons && !result) {\r\n var itms = this.getByLatLng(latLng, clickTolerance, layers, true);\r\n itms.forEach((item: ISelectableItem) => {\r\n item.getPoints().forEach((pts) => {\r\n pts.forEach(pt => {\r\n var dist = pt.DistanceTo(p) * pxFactor;\r\n if (dist <= clickTolerance && dist < minDist) {\r\n minDist = dist;\r\n result = pt;\r\n }\r\n });\r\n });\r\n });\r\n if (!result) {\r\n itms.forEach((item: ISelectableItem) => {\r\n item.getSegments().forEach(seg => {\r\n var mpt = seg.getCenter();\r\n var dist = mpt.DistanceTo(p) * pxFactor;\r\n if (dist <= clickTolerance && dist < minDist) {\r\n minDist = dist;\r\n result = mpt;\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n if (!result && !noGhostShapes && this.ghostShapes && this.ghostShapes.length) {\r\n this.ghostShapes.forEach(sh => {\r\n\r\n sh.getPaths().getArray().forEach(path => {\r\n var points = LatLng.GMLatLngArrayToPoint2D(path.getArray()),\r\n len = points.length;\r\n\r\n for (var i = 0; i < len; i++) {\r\n var pt = points[i],\r\n dist = pt.DistanceTo(p) * pxFactor;\r\n if (dist <= clickTolerance && dist < minDist) {\r\n minDist = dist;\r\n result = pt;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n closestPointByPoint(latLng: LatLng, clickTolerance: number): Point2D {\r\n\r\n var result: Point2D[] = [],\r\n pxFactor = Math.pow(2, this.map.getZoom()),\r\n p = latLng.ToPoint2D(),\r\n minDist = Number.MAX_VALUE,\r\n found: Point2D = null;\r\n\r\n this.getByLatLng(latLng, clickTolerance).forEach((item: ISelectableItem) => {\r\n item.getPoints().forEach((pts) => {\r\n pts.forEach(pt => {\r\n var dist = pt.DistanceTo(p) * pxFactor;\r\n if (dist <= clickTolerance && dist < minDist) {\r\n minDist = dist;\r\n found = pt;\r\n }\r\n });\r\n });\r\n });\r\n\r\n return found;\r\n }\r\n\r\n updateDrawingManagerLayerStyles(layer?: IPolygonLayer) {\r\n var drawingManager = this.drawingManager;\r\n layer = layer || this.viewModel.currentLayer;\r\n\r\n if (layer && drawingManager) {\r\n drawingManager.setOptions({\r\n circleOptions: layer.shapeSelectedStyle,\r\n rectangleOptions: this.rectSelectMode ? this.rectSelectStyle : layer.shapeSelectedStyle,\r\n polygonOptions: layer.shapeSelectedStyle\r\n });\r\n }\r\n }\r\n\r\n pathToMapPolygon(latLngs: LatLng[], orientationRad: number, origin: LatLng, depth: number, slopeDegree: number, useProjection: boolean, skipCheck?: boolean): SolarProTool.MapPolygon {\r\n //var latLngs: LatLng[] = [];\r\n\r\n //(path).forEach((ll: google.maps.LatLng) => {\r\n\r\n // latLngs.push(LatLng.FromGMLatLng(ll));\r\n //var latLng = LatLng.FromGMLatLng(ll);\r\n\r\n //bounds.Expand(latLng);\r\n\r\n //var pt = latLng.ToPoint2D(true);\r\n\r\n //points.push({\r\n // latitude: latLng.Latitude,\r\n // longitude: latLng.Longitude,\r\n // altitude: 0,\r\n // x: pt.x,\r\n // y: pt.y,\r\n // z: 0\r\n //});\r\n //});\r\n\r\n if (!skipCheck && latLngs.length < 3)\r\n return null;\r\n\r\n var boundsLatLng = BoundsLatLng.FromLatLngs(latLngs);\r\n if (!skipCheck && boundsLatLng.IsEmpty)\r\n return null;\r\n\r\n var xAxis = Point2D.FromOrientation(orientationRad);\r\n var yAxis = xAxis.rot90();\r\n var slopeFactor = useProjection ? 1 / Math.cos(slopeDegree / 180 * Math.PI) : 1;\r\n\r\n var points = latLngs.map(ll => {\r\n var p = origin.DirectionTo(ll).mul(1000);\r\n return new Point2D(xAxis.dot(p), yAxis.dot(p) * slopeFactor);\r\n });\r\n\r\n //if (orientation != 0) {\r\n // var rot = Transformation.Rotation(-orientation);\r\n\r\n // points = points.map(p => rot.transform(p));\r\n //}\r\n\r\n var bounds = Bounds2D.FromPoints(points);\r\n\r\n //var t = bounds.Min.neg();\r\n //points = points.map(p => p.add(t));\r\n //bounds.Offset(t);\r\n\r\n var isClockwise = Point2D.isClockwise(points);\r\n\r\n var resultPoints: SolarProTool.MapCoord[] = latLngs.map((latLng, i) => {\r\n return {\r\n latitude: latLng.Latitude,\r\n longitude: latLng.Longitude,\r\n altitude: 0,\r\n x: points[i].x,\r\n y: points[i].y,\r\n z: depth\r\n };\r\n });\r\n\r\n return {\r\n points: resultPoints,\r\n isClockwise: isClockwise,\r\n minLat: boundsLatLng.Min.Latitude,\r\n minLng: boundsLatLng.Min.Longitude,\r\n maxLat: boundsLatLng.Max.Latitude,\r\n maxLng: boundsLatLng.Max.Longitude,\r\n minx: Math.round(bounds.Min.x),\r\n miny: Math.round(bounds.Min.y),\r\n maxx: Math.round(bounds.Max.x),\r\n maxy: Math.round(bounds.Max.y),\r\n slope: slopeDegree,\r\n useProjection: useProjection,\r\n width: bounds.Delta.X,\r\n height: bounds.Delta.Y\r\n };\r\n\r\n //var sw = bounds.Min;\r\n //var ne = bounds.Max;\r\n\r\n //var mmScaleFactor = LatLng.MetersPerPixel * Math.cos(LatLng.Grad2Rad(bounds.Center.Latitude)) * 1000,\r\n // pRef1 = this.fromLatLngToPoint(ref1),\r\n // pRef2 = this.fromLatLngToPoint(ref2),\r\n // dp = this.subPoints(pRef2, pRef1),\r\n // lenSq = this.lengthSquared(dp);\r\n\r\n //if (lenSq <= 0)\r\n // return null;\r\n\r\n //var len = Math.sqrt(lenSq),\r\n // xAxis = new google.maps.Point(dp.x / len, dp.y / len),\r\n // yAxis = new google.maps.Point(-xAxis.y, xAxis.x),\r\n // minx = Number.MAX_VALUE,\r\n // miny = Number.MAX_VALUE,\r\n // maxx = -Number.MAX_VALUE,\r\n // maxy = -Number.MAX_VALUE;\r\n\r\n //for (var i = 0, j = points.length; i < j; i++) {\r\n // var pt = points[i],\r\n // dpt = this.subPoints(pt, pRef1);\r\n\r\n // pt.x = Math.round(this.dotProd(dpt, xAxis) * mmScaleFactor);\r\n // pt.y = Math.round(this.dotProd(dpt, yAxis) * mmScaleFactor);\r\n\r\n // minx = Math.min(pt.x, minx);\r\n // miny = Math.min(pt.y, miny);\r\n // maxx = Math.max(pt.x, maxx);\r\n // maxy = Math.max(pt.y, maxy);\r\n //}\r\n\r\n //return {\r\n // points: points,\r\n // isClockwise: this.polygonIsClockwise(points),\r\n // minLat: sw.lat(),\r\n // minLng: sw.lng(),\r\n // maxLat: ne.lat(),\r\n // maxLng: ne.lng(),\r\n // minx: minx,\r\n // miny: miny,\r\n // maxx: maxx,\r\n // maxy: maxy\r\n //};\r\n }\r\n\r\n shapeSelectedHoveredStyle: IShapeStyle = {\r\n strokeWeight: 1.5,\r\n fillColor: '#bf4900',\r\n fillOpacity: 0.6,\r\n strokeColor: '#bf4900',\r\n strokeOpacity: 0.9\r\n };\r\n\r\n shapeSelectedStyle: IShapeStyle = {\r\n strokeWeight: 4,\r\n fillColor: '#bf4900',\r\n fillOpacity: 0.5,\r\n strokeColor: '#bf4900',\r\n strokeOpacity: 0.8\r\n };\r\n\r\n shapeHoveredStyle: IShapeStyle = {\r\n strokeWeight: 1,\r\n fillColor: '#13235B',\r\n fillOpacity: 0.5,\r\n strokeColor: '#A500AC',\r\n strokeOpacity: 0.8\r\n };\r\n\r\n shapeStyle: IShapeStyle = {\r\n strokeWeight: 1,\r\n fillColor: '#13235B',\r\n fillOpacity: 0.4,\r\n strokeColor: '#A500AC',\r\n strokeOpacity: 0.7\r\n };\r\n\r\n rectSelectStyle: IShapeStyle = {\r\n strokeWeight: 1,\r\n fillColor: '#2194ce',\r\n fillOpacity: 0.5,\r\n strokeColor: '#195799',\r\n strokeOpacity: 0.75,\r\n zIndex: 10\r\n };\r\n\r\n addListener(type: string, listener: (event: IEventManagerEvent) => void): EventManager { return this; }\r\n\r\n hasListener(type: string, listener: (event: IEventManagerEvent) => void): boolean { return false; }\r\n\r\n removeListener(type?: string, listener?: (event: IEventManagerEvent) => void): void { }\r\n\r\n dispatchEvent(event: IEventManagerEvent): void { }\r\n\r\n importImages(importedImages: SolarProTool.ImportedImageFileInfo[]): BoundsLatLng {\r\n var viewModel = this.viewModel;\r\n var bounds = new BoundsLatLng();\r\n importedImages.forEach(importedImage => {\r\n if (importedImage.Id) {\r\n\r\n var center = new LatLng(importedImage.Latitude, importedImage.Longitude);\r\n\r\n let bds = BoundsLatLng.FromCenterWidthHeight(center, importedImage.RealWidth / 1000, importedImage.RealHeight / 1000);\r\n if (!bds.IsEmpty)\r\n bounds.Expand(bds);\r\n\r\n LoaderManager.addLoadingJob();\r\n spt.Utils.LoadImage(`/handler/ImageHandler.ashx?ID=ImageImportPreview&ImgId=${importedImage.Id}&Guid=${spt.Utils.GenerateGuid()}`,\r\n (img) => {\r\n viewModel.importedImages.push(new ImageMapOverlay(importedImage.Id,\r\n img.src,\r\n bds,\r\n this.map,\r\n importedImage.Orientation,\r\n importedImage.FileName));\r\n LoaderManager.finishLoadingJob();\r\n });\r\n }\r\n });\r\n return bounds;\r\n }\r\n\r\n saveImportedImage() {\r\n\r\n var img = this.viewModel.currentImportedImage;\r\n if (!img || !img._bounds) {\r\n this.selectTool(null);\r\n return;\r\n }\r\n var bd = img._bounds;\r\n var c = bd.Center;\r\n var data = {\r\n id: img._id,\r\n w: bd.Width * 1000,\r\n h: bd.Height * 1000,\r\n latitude: c.Latitude,\r\n longitude: c.Longitude,\r\n orientation: img._orientation\r\n };\r\n SolarProTool.Ajax(\"WebServices/MapServices.asmx\").Call(\"EditImportedImage\").Data(data).CallBack((result) => {\r\n this.selectTool(null);\r\n });\r\n }\r\n\r\n setMapTypeId(mapType: google.maps.MapTypeId | string) {\r\n var map = this.map;\r\n map.setMapTypeId(mapType);\r\n }\r\n\r\n createOverlayText(layer?: PolygonLayer) {\r\n if (!layer)\r\n layer = this.viewModel.currentLayer;\r\n\r\n var size = 16,\r\n margin = 6;\r\n\r\n return new OverlayText().set({\r\n size: size,\r\n fontStyle: \"bold\",\r\n fillPadding: 1,\r\n margin: margin,\r\n visible: false,\r\n textStyle: layer.shapeSelectedStyle.strokeColor,\r\n fillStyle: new Color().setStyle(layer.shapeStyle.fillColor).premultiplyAlpha(layer.shapeStyle.fillOpacity).toStringRgba(0.7)\r\n }).setCanvasOverlay(this.canvasOverlay);\r\n }\r\n\r\n setMeasureText(ot: OverlayText, ll1: LatLng, ll2: LatLng) {\r\n var valueAdjustOpts = this.viewModel.valueAdjustOpts;\r\n var imperial = window.UseImperialSystem;\r\n\r\n ot.set({\r\n text: spt.Utils.GetFloatFromInputValue(\"\" + ll1.DistanceTo(ll2),\r\n {\r\n precision: valueAdjustOpts.precision,\r\n isFeet: imperial,\r\n notImperial: !imperial,\r\n from: \"m\",\r\n to: valueAdjustOpts.to\r\n }) + \" \" + valueAdjustOpts.to,\r\n latLng: ll1.add(ll2).mul(0.5),\r\n visible: true,\r\n angle: ll1.AngleTo(ll2),\r\n maxWidth: ll1.ToPoint2D().DistanceTo(ll2.ToPoint2D()) * 0.8\r\n });\r\n }\r\n\r\n setAngleText(ot: OverlayText, left: LatLng, corner: LatLng, right: LatLng) {\r\n var l = left.ToPoint2D();\r\n var c = corner.ToPoint2D();\r\n var r = right.ToPoint2D();\r\n\r\n var tl = l.sub(c);\r\n var tr = r.sub(c);\r\n\r\n var lenl = tl.GetLength();\r\n var lenr = tr.GetLength();\r\n\r\n var nl = tl.divide(lenl);\r\n var nr = tr.divide(lenr);\r\n\r\n var ang = Math.acos(nl.dot(nr)) / Math.PI * 180;\r\n var angTxt = (Math.round(ang * 10) / 10) + \" °\";\r\n\r\n if (($).global.culture)\r\n angTxt.replace(\".\", ($).global.culture.numberFormat[\".\"]);\r\n\r\n var nc = nl.add(nr).GetNormalized();\r\n\r\n var tc = nc.rotr90();\r\n\r\n ot.set({\r\n text: angTxt,\r\n latLng: corner,\r\n visible: true,\r\n angle: Math.atan2(tc.y, tc.x),\r\n maxWidth: Math.min(lenl, lenr),\r\n alignUpper: Point2D.YAxis.dot(nc) > 0\r\n });\r\n }\r\n\r\n setCoordsText(ot: OverlayText, corner: LatLng) {\r\n var valueAdjustOpts = this.viewModel.valueAdjustOpts;\r\n var imperial = window.UseImperialSystem;\r\n\r\n var cord = this.viewModel.referenceLatLng.DirectionTo(corner);\r\n\r\n var xVal = Math.round(spt.Utils.GetFloatFromInputValue(\"\" + cord.x,\r\n {\r\n precision: valueAdjustOpts.precision,\r\n isFeet: imperial,\r\n notImperial: !imperial,\r\n from: \"m\",\r\n to: valueAdjustOpts.to\r\n }));\r\n\r\n var yVal = Math.round(spt.Utils.GetFloatFromInputValue(\"\" + cord.y,\r\n {\r\n precision: valueAdjustOpts.precision,\r\n isFeet: imperial,\r\n notImperial: !imperial,\r\n from: \"m\",\r\n to: valueAdjustOpts.to\r\n }));\r\n\r\n var coordsTxt = `(${xVal},${yVal})`;\r\n\r\n ot.set({\r\n text: coordsTxt,\r\n latLng: corner,\r\n visible: true,\r\n angle: 0,\r\n alignUpper: true\r\n });\r\n\r\n }\r\n\r\n setCoordNumberText(ot: OverlayText, corner: LatLng, num: number, hidden?: boolean) {\r\n ot.set({\r\n text: 'P ' + (num > 99 ? ('' + num) : ('0' + num).slice(-2)),\r\n latLng: corner,\r\n visible: !hidden,\r\n angle: 0,\r\n alignUpper: true\r\n });\r\n }\r\n\r\n keyDownHandler: (e: KeyboardEvent) => void;\r\n keyUpHandler: (e: KeyboardEvent) => void;\r\n mouseDownHandler: (e: MouseEvent) => void;\r\n mouseUpHandler: (e: MouseEvent) => void;\r\n mouseMoveHandler: (e: MouseEvent) => void;\r\n viewMouseDownHandler: (e: MouseEvent) => void;\r\n onDialogClose() {\r\n this.viewModel.currentTool.deselect(this);\r\n this.clear();\r\n this.unBindEvents();\r\n this.getAllPolygons().forEach(poly => {\r\n poly.setMap(null);\r\n });\r\n\r\n this.drawingManager.setMap(null);\r\n this.drawingManager = null;\r\n if (this.tileManager) {\r\n this.tileManager.forEach(tm => {\r\n if (tm)\r\n tm.abortAll();\r\n });\r\n }\r\n SetPaddingBack();\r\n }\r\n }\r\n\r\n EventManager.apply(MapDrawer.prototype);\r\n}","module MapDrawing {\r\n export class SelectTool extends BaseToolIcon {\r\n iconX = 0;\r\n iconY = 0;\r\n\r\n onSelect(mapDrawer: MapDrawer, prevTool: BaseToolIcon, subMenu: string) {\r\n //mapDrawer.map.setOptions({ draggable: true });\r\n }\r\n\r\n onDeselect(mapDrawer: MapDrawer) {\r\n mapDrawer.disableRectangleSelect();\r\n //mapDrawer.map.setOptions({ draggable: false });\r\n }\r\n\r\n onClick(ev: google.maps.MouseEvent, mapDrawer: MapDrawer) {\r\n //mapDrawer.map.setOptions({ draggable: true });\r\n if (!mapDrawer.shiftDown && !mapDrawer.ctrlDown)\r\n mapDrawer.clearSelection();\r\n }\r\n }\r\n\r\n export class HandTool extends BaseToolIcon {\r\n iconX = 7;\r\n iconY = 0;\r\n\r\n onSelect(mapDrawer: MapDrawer, prevTool: BaseToolIcon, subMenu: string) {\r\n //mapDrawer.map.setOptions({ draggable: true });\r\n }\r\n\r\n onDeselect(mapDrawer: MapDrawer) {\r\n mapDrawer.disableRectangleSelect();\r\n //mapDrawer.map.setOptions({ draggable: false });\r\n }\r\n\r\n onClick(ev: google.maps.MouseEvent, mapDrawer: MapDrawer) {\r\n //mapDrawer.map.setOptions({ draggable: true });\r\n }\r\n }\r\n\r\n export class SelectRectTool extends BaseToolIcon {\r\n iconX = 12;\r\n iconY = 4;\r\n\r\n onSelect(mapDrawer: MapDrawer, prevTool: BaseToolIcon, subMenu: string) {\r\n mapDrawer.enableRectangleSelect();\r\n }\r\n\r\n onDeselect(mapDrawer: MapDrawer) {\r\n mapDrawer.disableRectangleSelect();\r\n }\r\n }\r\n\r\n export class DrawTool extends BaseToolIcon {\r\n constructor(mapDrawer: MapDrawer, name: string) {\r\n super(mapDrawer, name);\r\n //this.Cursor = 'crosshair';\r\n this.Cursor = `url(\"${mapDrawer.options.pathToIcons}/cursor/edit.cur\"), default`;\r\n }\r\n\r\n static angleStep = Math.PI / 12;\r\n\r\n iconX = 13;\r\n iconY = 4;\r\n subMenu = [\r\n //new BaseSubToolIcon('Polygon', 9, 4),\r\n //new BaseSubToolIcon('Rectangle', 10, 4),\r\n //new BaseSubToolIcon('Circle', 11, 4),\r\n //new BaseSubToolIcon('Line', 1, 7)\r\n //new BaseSubToolIconNew('Polygon', 'ToolbarIcon-DrawPloy', 2), //'ToolbarIcon-DrawPloy' // default\r\n //new BaseSubToolIconNew('Rectangle', 'ToolbarIcon-DrawRect', 2), //ToolbarIcon-DrawRect\r\n //new BaseSubToolIconNew('Circle', 'ToolbarIcon-DrawCircle',2), //ToolbarIcon-DrawCircle\r\n //new BaseSubToolIconNew('Line', 'ToolbarIcon-MultiTraufe',2) //ToolbarIcon-MultiTraufe\r\n ];\r\n\r\n step: number = 0;\r\n\r\n polyline: google.maps.Polygon | google.maps.Polyline = null;\r\n startMarker: google.maps.Marker = null;\r\n hoverStartMarker: boolean = false;\r\n snapMarker: google.maps.Marker = null;\r\n snapped: boolean = false;\r\n measureTexts: OverlayText[] = [];\r\n angleTexts: OverlayText[] = [];\r\n coordsTexts: OverlayText[] = [];\r\n coordsNumberTexts: OverlayText[] = [];\r\n\r\n isMouseMoved = false;\r\n isMouseDown = false;\r\n mouseDownPoint: google.maps.LatLng = null;\r\n\r\n onSelect(mapDrawer: MapDrawer, prevTool: BaseToolIcon, subMenu: string) {\r\n //mapDrawer.map.setOptions({ draggable: true });\r\n\r\n this.curSubmenu = subMenu = subMenu || 'Polygon';\r\n\r\n var layer = mapDrawer.viewModel.currentLayer;\r\n if (!layer || layer.locked) {\r\n mapDrawer.selectTool(\"SelectTool\");\r\n return;\r\n }\r\n\r\n mapDrawer.setSeparationLinesFrozen(true);\r\n\r\n this.step = 0;\r\n this.hoverStartMarker = false;\r\n this.measureTexts = [];\r\n mapDrawer.viewModel.cmdInputVal = \"\";\r\n\r\n mapDrawer.map.setOptions({ draggableCursor: this.Cursor });\r\n\r\n mapDrawer.setDrawingMode(true);\r\n\r\n var polyLineOpts: google.maps.PolylineOptions = {\r\n map: mapDrawer.map,\r\n draggable: false,\r\n editable: false,\r\n clickable: false,\r\n };\r\n\r\n switch (subMenu) {\r\n case 'Rectangle':\r\n this.polyline = new google.maps.Polygon($.extend(polyLineOpts, layer.shapeSelectedStyle) as google.maps.PolygonOptions);\r\n this.measureTexts = [mapDrawer.createOverlayText(), mapDrawer.createOverlayText()];\r\n break;\r\n case 'Circle':\r\n this.polyline = new google.maps.Polyline($.extend(polyLineOpts, layer.shapeSelectedStyle) as google.maps.PolygonOptions);\r\n this.measureTexts = [mapDrawer.createOverlayText()];\r\n break;\r\n default: // 'Line', 'Polygon'\r\n this.polyline = new google.maps.Polyline($.extend(polyLineOpts, layer.shapeSelectedStyle) as google.maps.PolylineOptions);\r\n break;\r\n }\r\n\r\n this.createSnapMarker(mapDrawer);\r\n\r\n if (mapDrawer.viewModel.cmdEdgeLength <= 0)\r\n $('#md-input-EdgeLength').val(\"\");\r\n }\r\n\r\n onDeselect(mapDrawer: MapDrawer) {\r\n if (this.startMarker) {\r\n google.maps.event.clearListeners(this.startMarker, 'click');\r\n this.startMarker.setMap(null);\r\n this.startMarker = null;\r\n }\r\n if (this.snapMarker) {\r\n google.maps.event.clearListeners(this.snapMarker, 'click');\r\n this.snapMarker.setMap(null);\r\n this.snapMarker = null;\r\n }\r\n if (this.polyline) {\r\n this.polyline.setMap(null);\r\n this.polyline = null;\r\n }\r\n if (this.measureTexts.length) {\r\n this.measureTexts.forEach(ot => { ot.dispose(); });\r\n this.measureTexts = [];\r\n }\r\n if (this.angleTexts.length) {\r\n this.angleTexts.forEach(ot => { ot.dispose(); });\r\n this.angleTexts = [];\r\n }\r\n if (this.coordsTexts.length) {\r\n this.coordsTexts.forEach(ot => { ot.dispose(); });\r\n this.coordsTexts = [];\r\n }\r\n if (this.coordsNumberTexts.length) {\r\n this.coordsNumberTexts.forEach(ot => { ot.dispose(); });\r\n this.coordsNumberTexts = [];\r\n }\r\n\r\n mapDrawer.setSeparationLinesFrozen(false);\r\n\r\n this.hoverStartMarker = false;\r\n mapDrawer.viewModel.cmdInputVal = \"\";\r\n\r\n mapDrawer.map.setOptions({ draggableCursor: null });\r\n\r\n mapDrawer.setDrawingMode(false);\r\n }\r\n\r\n onstartMarkerMouseover(mapDrawer: MapDrawer) {\r\n this.hoverStartMarker = true;\r\n }\r\n\r\n onstartMarkerMouseout(mapDrawer: MapDrawer) {\r\n this.hoverStartMarker = false;\r\n }\r\n\r\n isSnapping(mapDrawer, first: google.maps.LatLng, second: google.maps.LatLng, pixelDistance: number): boolean {\r\n // checks in touch-device if snapping on start\r\n let start = mapDrawer.fromLatLngToPixel(first);\r\n let startPoint = new Point2D(start.x, start.y);\r\n\r\n let current = mapDrawer.fromLatLngToPixel(second);\r\n let currentPoint = new Point2D(current.x, current.y);\r\n\r\n let distance = startPoint.DistanceTo(currentPoint);\r\n let isSnapping = distance <= pixelDistance;\r\n return isSnapping;\r\n }\r\n\r\n // onMouseDown\r\n onClick(ev: { latLng: google.maps.LatLng }, mapDrawer: MapDrawer) {\r\n this.isMouseDown = true;\r\n this.isMouseMoved = false;\r\n this.mouseDownPoint = ev.latLng;\r\n\r\n if ($.isTouchCapable()) {\r\n if (this.polyline && ev.latLng) {\r\n if (this.curSubmenu === 'Rectangle' || this.curSubmenu === 'Circle')\r\n mapDrawer.map.setOptions({ draggable: false })\r\n\r\n let path = this.polyline.getPath();\r\n if (this.curSubmenu === 'Rectangle') {\r\n let gmevLatLng = this.getNextLatLng(null, null, LatLng.FromGMLatLng(ev.latLng), mapDrawer).ToGMLatLng();\r\n path.push(gmevLatLng);\r\n path.push(gmevLatLng);\r\n path.push(gmevLatLng);\r\n path.push(gmevLatLng);\r\n this.step = 1;\r\n }\r\n else if (this.curSubmenu === 'Circle') {\r\n let gmevLatLng = this.getNextLatLng(null, null, LatLng.FromGMLatLng(ev.latLng), mapDrawer).ToGMLatLng();\r\n path.push(gmevLatLng);\r\n path.push(gmevLatLng);\r\n this.step = 0; //1\r\n }\r\n }\r\n }\r\n }\r\n\r\n onMousemove(ev: { latLng: google.maps.LatLng }, mapDrawer: MapDrawer, ignoreTouchSnapping?: boolean) {\r\n //INFO ev.isDragging: boolean\r\n\r\n //if (!ignoreTouchSnapping && $.isTouchCapable()) {\r\n // let isSnapping = this.isSnapping(mapDrawer, this.mouseDownPoint, ev.latLng, 6);\r\n // //if (isSnapping)\r\n // // this.isMouseMoved = false;\r\n // //return;\r\n //}\r\n\r\n if ($.isTouchCapable() && (curSubmenu === 'Rectangle' || curSubmenu === 'Circle') && this.isMouseDown && !this.isMouseMoved) {\r\n if (mapDrawer.viewModel.showLengths)\r\n this.measureTexts.push(mapDrawer.createOverlayText());\r\n\r\n let path = this.polyline.getPath();\r\n path.push(ev.latLng);\r\n\r\n if (mapDrawer.viewModel.showCoords)\r\n this.coordsTexts.push(mapDrawer.createOverlayText());\r\n if (mapDrawer.viewModel.showCoordNumbers) {\r\n var coorNumText = mapDrawer.createOverlayText();\r\n mapDrawer.setCoordNumberText(coorNumText, new LatLng(), path.getLength(), true);\r\n this.coordsNumberTexts.push(coorNumText);\r\n }\r\n }\r\n\r\n var polyLine = this.polyline,\r\n curSubmenu = this.curSubmenu;\r\n if (polyLine && ev.latLng) {\r\n var path = this.polyline.getPath();\r\n if (curSubmenu === 'Rectangle') {\r\n //rectangle\r\n if (path.getLength() <= 0) {\r\n if (this.snapMarker)\r\n this.snapMarker.setPosition(this.getNextLatLng(null, null, LatLng.FromGMLatLng(ev.latLng), mapDrawer).ToGMLatLng());\r\n } else {\r\n let evLatLng = this.getNextLatLng(null, null, LatLng.FromGMLatLng(ev.latLng), mapDrawer);\r\n if (this.snapMarker)\r\n this.snapMarker.setPosition(evLatLng.ToGMLatLng());\r\n this.makeRectangle(path, evLatLng, mapDrawer);\r\n }\r\n }\r\n else if (curSubmenu === 'Circle') {\r\n //circle\r\n if (path.getLength() <= 0) {\r\n if (this.snapMarker)\r\n this.snapMarker.setPosition(this.getNextLatLng(null, null, LatLng.FromGMLatLng(ev.latLng), mapDrawer).ToGMLatLng());\r\n } else {\r\n var ll0 = path.getLength() > 0 ? LatLng.FromGMLatLng(path.getAt(0)) : null;\r\n let evLatLng = this.getNextLatLng(null, ll0, LatLng.FromGMLatLng(ev.latLng), mapDrawer);\r\n if (this.snapMarker)\r\n this.snapMarker.setPosition(evLatLng.ToGMLatLng());\r\n this.makeCircle(path, evLatLng, mapDrawer);\r\n }\r\n }\r\n else {\r\n //Line or Polygon\r\n var len = path.getLength();\r\n if (len) {\r\n let prevPrev = len > 2 ? LatLng.FromGMLatLng(path.getAt(len - 3) as google.maps.LatLng) : null;\r\n let llprev = len > 1 ? LatLng.FromGMLatLng(path.getAt(len - 2) as google.maps.LatLng) : null;\r\n let evLatLng = this.getNextLatLng(prevPrev, llprev, LatLng.FromGMLatLng(ev.latLng), mapDrawer);\r\n\r\n if (curSubmenu !== 'Line' && this.hoverStartMarker && this.startMarker && len > 2)\r\n evLatLng = LatLng.FromGMLatLng(this.startMarker.getPosition());\r\n\r\n if (this.snapMarker)\r\n this.snapMarker.setPosition(evLatLng.ToGMLatLng());\r\n\r\n if (ignoreTouchSnapping || !$.isTouchCapable()) {\r\n path.setAt(len - 1, evLatLng.ToGMLatLng());\r\n\r\n if (llprev && evLatLng && this.measureTexts.length)\r\n mapDrawer.setMeasureText(this.measureTexts[this.measureTexts.length - 1], llprev, evLatLng);\r\n\r\n if (len > 2 && this.angleTexts.length)\r\n mapDrawer.setAngleText(this.angleTexts[this.angleTexts.length - 1], LatLng.FromGMLatLng(path.getAt(len - 3) as google.maps.LatLng), llprev, evLatLng);\r\n\r\n if (this.coordsTexts.length)\r\n mapDrawer.setCoordsText(this.coordsTexts[this.coordsTexts.length - 1], evLatLng);\r\n\r\n if (this.coordsNumberTexts.length)\r\n this.coordsNumberTexts[this.coordsNumberTexts.length - 1].set({\r\n latLng: evLatLng,\r\n visible: true\r\n });\r\n }\r\n\r\n\r\n } else if (this.snapMarker)\r\n this.snapMarker.setPosition(this.getNextLatLng(null, null, LatLng.FromGMLatLng(ev.latLng), mapDrawer).ToGMLatLng());\r\n }\r\n } else if (this.snapMarker)\r\n this.snapMarker.setPosition(this.getNextLatLng(null, null, LatLng.FromGMLatLng(ev.latLng), mapDrawer).ToGMLatLng());\r\n\r\n if (this.snapMarker && this.snapped !== this.snapMarker.getVisible())\r\n this.snapMarker.setVisible(this.snapped);\r\n\r\n this.isMouseMoved = true;\r\n }\r\n\r\n onMouseUp(ev: { latLng: google.maps.LatLng }, mapDrawer: MapDrawer) {\r\n mapDrawer.map.setOptions({ draggable: true })\r\n\r\n if (!$.isTouchCapable() && (this.curSubmenu === 'Rectangle' || this.curSubmenu === 'Circle') && (this.isMouseMoved || this.isDragging))\r\n return;\r\n\r\n if (this.curSubmenu !== 'Rectangle' && this.curSubmenu !== 'Circle' && this.isMouseDown && (this.isMouseMoved || this.isDragging))\r\n return;\r\n\r\n if ($.isTouchCapable() && (this.curSubmenu === 'Rectangle' || this.curSubmenu === 'Circle') && this.isMouseDown && !this.isMouseMoved && !this.isDragging) {\r\n // if circle or rectangle is not dragged on mobile then reset tue current path points!\r\n // todo show toast message: please press and drag the finger to draw!\r\n let path = this.polyline.getPath();\r\n path.clear();\r\n return;\r\n }\r\n\r\n\r\n if ($.isTouchCapable())\r\n this.onMousemove(ev, mapDrawer, true);\r\n\r\n var polyLine = this.polyline;\r\n if (polyLine && ev.latLng) {\r\n //var latLng = LatLng.FromGMLatLng(ev.latLng);\r\n let path = this.polyline.getPath();\r\n\r\n if (this.curSubmenu === 'Rectangle') {\r\n //rectangle\r\n if (path.getLength() <= 0) {\r\n let gmevLatLng = this.getNextLatLng(null, null, LatLng.FromGMLatLng(ev.latLng), mapDrawer).ToGMLatLng();\r\n path.push(gmevLatLng);\r\n path.push(gmevLatLng);\r\n path.push(gmevLatLng);\r\n path.push(gmevLatLng);\r\n }\r\n else {\r\n this.makeRectangle(path, this.getNextLatLng(null, null, LatLng.FromGMLatLng(ev.latLng), mapDrawer), mapDrawer);\r\n var w = LatLng.FromGMLatLng(path.getAt(0)).DistanceTo(LatLng.FromGMLatLng(path.getAt(1)));\r\n var h = LatLng.FromGMLatLng(path.getAt(1)).DistanceTo(LatLng.FromGMLatLng(path.getAt(2)));\r\n if (w <= 0 || h <= 0)\r\n this.polyline = null;\r\n this.onPolylineClosed(mapDrawer);\r\n }\r\n\r\n }\r\n else if (this.curSubmenu === 'Circle') {\r\n //circle\r\n if (path.getLength() <= 0) {\r\n //this.polyline = null;\r\n let gmevLatLng = this.getNextLatLng(null, null, LatLng.FromGMLatLng(ev.latLng), mapDrawer).ToGMLatLng();\r\n path.push(gmevLatLng);\r\n path.push(gmevLatLng);\r\n }\r\n else {\r\n //if (path.getLength() <= 0)\r\n // this.polyline = null;\r\n //else {\r\n var ll0 = LatLng.FromGMLatLng(path.getAt(0));\r\n this.makeCircle(path, this.getNextLatLng(null, ll0, LatLng.FromGMLatLng(ev.latLng), mapDrawer), mapDrawer);\r\n var w = ll0.DistanceTo(LatLng.FromGMLatLng(path.getAt(1)));\r\n if (w <= 0)\r\n this.polyline = null;\r\n }\r\n this.onPolylineClosed(mapDrawer);\r\n //}\r\n }\r\n else {\r\n //Line or Polygon\r\n if (!path.getLength()) {\r\n\r\n let evLatLng = this.getNextLatLng(null, null, LatLng.FromGMLatLng(ev.latLng), mapDrawer);\r\n\r\n var icon: google.maps.Symbol = {\r\n path: google.maps.SymbolPath.CIRCLE,\r\n scale: 8,\r\n strokeWeight: 4,\r\n strokeOpacity: 0,\r\n fillOpacity: 1,\r\n fillColor: '#fff'\r\n };\r\n\r\n var layer = mapDrawer.viewModel.currentLayer;\r\n if (layer) {\r\n icon.strokeColor = layer.shapeSelectedStyle.strokeColor;\r\n icon.strokeOpacity = layer.shapeSelectedStyle.strokeOpacity;\r\n }\r\n\r\n this.startMarker = new google.maps.Marker({\r\n map: mapDrawer.map,\r\n clickable: true,\r\n draggable: false,\r\n position: evLatLng.ToGMLatLng(),\r\n icon: icon,\r\n zIndex: 10\r\n });\r\n\r\n this.snapMarker.setPosition(evLatLng.ToGMLatLng());\r\n\r\n this.startMarker.addListener('click', this.onPolylineClosed.bind(this, mapDrawer));\r\n this.startMarker.addListener('mouseover', this.onstartMarkerMouseover.bind(this, mapDrawer));\r\n this.startMarker.addListener('mouseout', this.onstartMarkerMouseout.bind(this, mapDrawer));\r\n\r\n path.push(evLatLng.ToGMLatLng());\r\n\r\n if (mapDrawer.viewModel.showCoords) {\r\n var coordsText = mapDrawer.createOverlayText();\r\n this.coordsTexts.push(coordsText);\r\n mapDrawer.setCoordsText(coordsText, evLatLng);\r\n }\r\n if (mapDrawer.viewModel.showCoordNumbers) {\r\n var coorNumText = mapDrawer.createOverlayText();\r\n mapDrawer.setCoordNumberText(coorNumText, evLatLng, path.getLength());\r\n this.coordsNumberTexts.push(coorNumText);\r\n }\r\n } else {\r\n if (mapDrawer.viewModel.showAngleWhileDrawing)\r\n this.angleTexts.push(mapDrawer.createOverlayText());\r\n if (this.startMarker && this.curSubmenu === 'Line') {\r\n this.startMarker.setPosition(path.getAt(path.getLength() - 1));\r\n this.onstartMarkerMouseover(mapDrawer);\r\n }\r\n }\r\n\r\n if (mapDrawer.viewModel.showLengths)\r\n this.measureTexts.push(mapDrawer.createOverlayText());\r\n\r\n path.push(ev.latLng);\r\n\r\n if (mapDrawer.viewModel.showCoords)\r\n this.coordsTexts.push(mapDrawer.createOverlayText());\r\n if (mapDrawer.viewModel.showCoordNumbers) {\r\n var coorNumText = mapDrawer.createOverlayText();\r\n mapDrawer.setCoordNumberText(coorNumText, new LatLng(), path.getLength(), true);\r\n this.coordsNumberTexts.push(coorNumText);\r\n }\r\n }\r\n }\r\n\r\n //reset bool events\r\n this.isMouseDown = false;\r\n this.isMouseMoved = false;\r\n }\r\n\r\n createSnapMarker(mapDrawer: MapDrawer) {\r\n if (!this.snapMarker) {\r\n var iconSnap: google.maps.Symbol = {\r\n path: google.maps.SymbolPath.CIRCLE,\r\n scale: 3,\r\n strokeWeight: 1,\r\n strokeOpacity: 0,\r\n fillOpacity: 1\r\n };\r\n\r\n var layer = mapDrawer.viewModel.currentLayer;\r\n\r\n if (layer) {\r\n iconSnap.fillColor = layer.shapeSelectedStyle.strokeColor;\r\n iconSnap.fillOpacity = layer.shapeSelectedStyle.strokeOpacity;\r\n iconSnap.scale = layer.shapeSelectedStyle.strokeWeight * 3;\r\n }\r\n\r\n var b = mapDrawer.map.getBounds();\r\n\r\n this.snapMarker = new google.maps.Marker({\r\n map: mapDrawer.map,\r\n clickable: false,\r\n draggable: false,\r\n position: b ? b.getSouthWest() : mapDrawer.map.getCenter(),\r\n icon: iconSnap\r\n });\r\n\r\n this.snapMarker.setVisible(false);\r\n }\r\n }\r\n\r\n makeRectangle(path: google.maps.MVCArray, latlng: LatLng, mapDrawer: MapDrawer): void {\r\n var helperLines = mapDrawer.viewModel.helperLines;\r\n\r\n if (!latlng)\r\n latlng = LatLng.FromGMLatLng(path.getAt(2));\r\n\r\n var ll0 = LatLng.FromGMLatLng(path.getAt(0)),\r\n p0 = ll0.ToPoint2D(),\r\n p2 = latlng.ToPoint2D(),\r\n pDelta = p2.sub(p0);\r\n\r\n var dx = Point2D.XAxis;\r\n var dy = Point2D.YAxis;\r\n\r\n if (helperLines.length && mapDrawer.shiftDown) {\r\n var helperLine = helperLines[0];\r\n dx = helperLine.dirs[0];\r\n dy = helperLine.dirs[1];\r\n }\r\n\r\n var lx = dx.dot(pDelta);\r\n var ly = dy.dot(pDelta);\r\n\r\n var ll1 = LatLng.FromPoint2D(p0.add(dx.mul(lx)));\r\n var ll2 = latlng;\r\n var ll3 = LatLng.FromPoint2D(p0.add(dy.mul(ly)));\r\n var kayBoardSteps = mapDrawer.viewModel.keyBoardSteps.internalValue;\r\n\r\n if (mapDrawer.viewModel.cmdEdgeLength > 0 || (mapDrawer.ctrlDown && kayBoardSteps > 0)) {\r\n var realLenX = ll0.DistanceTo(ll1) * 1000;\r\n var realLenY = ll0.DistanceTo(ll3) * 1000;\r\n\r\n var targetLenX = realLenX;\r\n var targetLenY = realLenY;\r\n\r\n if (mapDrawer.viewModel.cmdEdgeLength > 0) {\r\n targetLenX = targetLenY = mapDrawer.viewModel.cmdEdgeLength;\r\n } else {\r\n targetLenX = Math.round(realLenX / kayBoardSteps) * kayBoardSteps;\r\n targetLenY = Math.round(realLenY / kayBoardSteps) * kayBoardSteps;\r\n\r\n if (targetLenX <= 0)\r\n targetLenX = kayBoardSteps;\r\n if (realLenX <= 0)\r\n realLenX = targetLenX;\r\n\r\n if (targetLenY <= 0)\r\n targetLenY = kayBoardSteps;\r\n if (realLenY <= 0)\r\n realLenY = targetLenY;\r\n }\r\n\r\n lx *= targetLenX / realLenX;\r\n ly *= targetLenY / realLenY;\r\n ll1 = LatLng.FromPoint2D(p0.add(dx.mul(lx)));\r\n ll2 = LatLng.FromPoint2D(p0.add(dx.mul(lx)).add(dy.mul(ly)));\r\n ll3 = LatLng.FromPoint2D(p0.add(dy.mul(ly)));\r\n }\r\n\r\n path.setAt(1, ll1.ToGMLatLng());\r\n path.setAt(2, ll2.ToGMLatLng());\r\n path.setAt(3, ll3.ToGMLatLng());\r\n\r\n mapDrawer.setMeasureText(this.measureTexts[0], ll0, ll1);\r\n\r\n mapDrawer.setMeasureText(this.measureTexts[1], ll3, ll0);\r\n\r\n }\r\n\r\n makeCircle(path: google.maps.MVCArray, ll1: LatLng, mapDrawer: MapDrawer): void {\r\n var helperLines = mapDrawer.viewModel.helperLines,\r\n result: LatLng[] = [];\r\n\r\n if (ll1)\r\n path.setAt(1, ll1.ToGMLatLng());\r\n else\r\n ll1 = LatLng.FromGMLatLng(path.getAt(1));\r\n\r\n var shiftDown = mapDrawer.shiftDown,\r\n ll0 = LatLng.FromGMLatLng(path.getAt(0)),\r\n radius = ll0.DistanceTo(ll1),\r\n segments = Math.round(Math.max(5, Math.min(64, (shiftDown ? radius : radius * 2) * Math.PI * 3))),\r\n p1 = ll1.ToPoint2D(),\r\n pivot = shiftDown ? ll0.ToPoint2D().add(p1).mul(0.5) : ll0.ToPoint2D(),\r\n count = path.getLength(),\r\n pi2 = LatLng.Pi2;\r\n\r\n for (var i = 1; i <= segments; i++) {\r\n var p = p1.RotateByPivot(pi2 * i / segments, pivot),\r\n idx = i + 1;\r\n\r\n if (idx < count)\r\n path.setAt(idx, LatLng.Point2DToGMLatLng(p));\r\n else\r\n path.push(LatLng.Point2DToGMLatLng(p));\r\n }\r\n\r\n for (var j = segments + 2; count > j; j++) {\r\n path.removeAt(segments + 2);\r\n }\r\n\r\n mapDrawer.setMeasureText(this.measureTexts[0], ll0, ll1);\r\n\r\n }\r\n\r\n onKeyDown(keyCode: number, mapDrawer: MapDrawer) {\r\n if (keyCode === 16 || keyCode === 17) //shift, ctrl\r\n this.updateDrawing(mapDrawer);\r\n }\r\n\r\n onKeyUp(keyCode: number, mapDrawer: MapDrawer) {\r\n if (keyCode === 16 || keyCode === 17) //shift, ctrl\r\n this.updateDrawing(mapDrawer);\r\n }\r\n\r\n updateDrawing(mapDrawer: MapDrawer) {\r\n if (this.curSubmenu === 'Rectangle' && this.step === 1 && this.polyline)\r\n this.makeRectangle(this.polyline.getPath(), null, mapDrawer);\r\n else if (this.curSubmenu === 'Circle' && this.step === 1 && this.polyline)\r\n this.makeCircle(this.polyline.getPath(), null, mapDrawer);\r\n }\r\n\r\n getNextLatLng(prePrevLatLng: LatLng, prevLatLng: LatLng, curLatLng: LatLng, mapDrawer: MapDrawer): LatLng {\r\n\r\n var snap = Helperline.GetSnapByHelperlines(prePrevLatLng, prevLatLng, curLatLng, mapDrawer, mapDrawer.shiftDown, true);\r\n\r\n this.snapped = snap.snapped;\r\n\r\n if (prevLatLng && mapDrawer.viewModel.cmdEdgeLength > 0)\r\n snap.result = Helperline.SnapToFixedLength(prevLatLng, snap.result, mapDrawer.viewModel.cmdEdgeLength);\r\n if (mapDrawer.ctrlDown && prevLatLng && mapDrawer.viewModel.keyBoardSteps.internalValue > 0)\r\n snap.result = Helperline.SnapToNextIncrement(prevLatLng, snap.result, mapDrawer);\r\n\r\n if (!mapDrawer.shiftDown && mapDrawer.altDown && prevLatLng) {\r\n //15 degree\r\n let isActivePrevDirection = true;\r\n snap.result = this.snapOnAngleSteps(isActivePrevDirection, prePrevLatLng, prevLatLng, snap.result, DrawTool.angleStep);\r\n }\r\n else if (mapDrawer.viewModel.isActiveCorrectionRightAngle && prePrevLatLng && prevLatLng) {\r\n let angleStep = Math.PI / 2; //90�\r\n let toleranz = Math.PI / 18; // 10� => -5 und +5\r\n snap.result = this.snapOnAngleSteps(true, prePrevLatLng, prevLatLng, snap.result, angleStep, toleranz);\r\n }\r\n\r\n return snap.result;\r\n }\r\n\r\n snapOnAngleSteps(isActivePrevDirection: boolean, prePrevLatLng: LatLng, prevLatLng: LatLng, current: LatLng, angleStep: number, toleranz?: number) {\r\n\r\n // Plausibilit�tspr�fung f�r toleranz, ob toleranz nicht zu gro� gew�hlt worden ist, sodass sich die anglesteps und die tolernz �berschneiten w�rden\r\n if (!prevLatLng)\r\n return current;\r\n\r\n let diffPrevAngle = 0;\r\n if (isActivePrevDirection && prePrevLatLng) {\r\n let p = prePrevLatLng.ToPoint2D();\r\n let prevDir = prevLatLng.ToPoint2D().sub(p);\r\n let prevAngle = Math.atan2(prevDir.y, prevDir.x);\r\n diffPrevAngle = prevAngle % angleStep;\r\n }\r\n\r\n let halfToleranz = toleranz ? toleranz / 2 : 0;\r\n var p = prevLatLng.ToPoint2D();\r\n var t = current.ToPoint2D().sub(p);\r\n var angle = Math.atan2(t.y, t.x);\r\n\r\n let nAngle = 0;\r\n\r\n if (toleranz) {\r\n let foundSector = -1;\r\n let angleStepCount = Math.floor((Math.PI * 2) / angleStep); // => 360� / step\r\n for (let sector = 0; sector < angleStepCount; sector++) {\r\n let sectorAngle = sector * angleStep;\r\n let sectorAngleMax = sectorAngle + halfToleranz;\r\n let sectorAngleMin = sectorAngle - halfToleranz;\r\n\r\n let isInsideSectorZero = sectorAngleMin <= 0 && 0 <= sectorAngleMax;\r\n\r\n let angleCorrected = angle - diffPrevAngle;\r\n if (isInsideSectorZero)\r\n angleCorrected = angle - diffPrevAngle;\r\n else {\r\n if (angleCorrected < 0)\r\n angleCorrected = this.mod(angleCorrected, Math.PI * 2); // angleCorrected % (Math.PI * 2);\r\n }\r\n\r\n let isInsideSector = sectorAngleMin <= angleCorrected && angleCorrected <= sectorAngleMax;\r\n if (isInsideSector) {\r\n foundSector = sector;\r\n break;\r\n }\r\n }\r\n\r\n if (foundSector < 0)\r\n return current; // nAngle = (Math.round((angle - diffPrevAngle) / angleStep) * angleStep);\r\n else\r\n nAngle = foundSector * angleStep;\r\n }\r\n else\r\n nAngle = (Math.round((angle - diffPrevAngle) / angleStep) * angleStep);\r\n\r\n var tAngle = nAngle - angle;\r\n tAngle += diffPrevAngle;\r\n\r\n var cs = Math.cos(tAngle);\r\n var sn = Math.sin(tAngle);\r\n var res = new Point2D((t.x * cs) - (t.y * sn) + p.x, (t.x * sn) + (t.y * cs) + p.y);\r\n return LatLng.FromPoint2D(res);\r\n }\r\n\r\n mod(n, m) {\r\n // correct and fast mod version with negative n\r\n return ((n % m) + m) % m;\r\n }\r\n\r\n isEqualWithTolerance(a: number, b: number, tolerance: number) {\r\n return (Math.abs(a - b) < tolerance);\r\n }\r\n\r\n onPolylineClosed(mapDrawer: MapDrawer) {\r\n //console.log(\"close\");\r\n //var i = 2;\r\n var polyLine = this.polyline;\r\n var layer = mapDrawer.viewModel.currentLayer;\r\n var curSubmenu = this.curSubmenu;\r\n if (polyLine && layer) {\r\n let path = this.polyline.getPath();\r\n if (path && (path.getLength() > 3 || (curSubmenu === 'Line' && path.getLength() > 2))) {\r\n if (curSubmenu === 'Line') {\r\n path.pop();\r\n\r\n var lineWidth = Math.max(10, mapDrawer.viewModel.interferenceLineThickness.internalValue),\r\n latLngs = LatLng.FromGMLatLngArray(path.getArray()),\r\n latLngBounds = BoundsLatLng.FromLatLngs(latLngs),\r\n origin = latLngBounds.Min,\r\n pts = latLngs.map(ll => { var p = origin.DirectionTo(ll).mul(1000); return new THREE.Vector3(p.x, p.y, 0) });\r\n\r\n path.clear();\r\n\r\n var linePlys = spt.ThreeJs.utils.generateOffsetLinePolygons(pts, lineWidth).filter(ply => ply && ply.length > 2);\r\n if (layer.count + linePlys.length <= (layer.maxCount || 2000)) {\r\n linePlys.forEach(ply => {\r\n var arr = ply.map(p => origin.Offset(p.y * 0.001, p.x * 0.001).ToGMLatLng());\r\n var poly = new google.maps.Polygon({ paths: arr });\r\n mapDrawer.onOverlaycomplete(poly);\r\n });\r\n }\r\n }\r\n else if (curSubmenu === 'Polygon') {\r\n if (mapDrawer.shiftDown) {\r\n let len = path.getLength(),\r\n prevPrev = len > 2 ? LatLng.FromGMLatLng(path.getAt(len - 3) as google.maps.LatLng) : null,\r\n llprev = LatLng.FromGMLatLng(path.getAt(len - 2) as google.maps.LatLng),\r\n lllast = LatLng.FromGMLatLng(this.startMarker.getPosition()),\r\n evLatLng = this.getNextLatLng(prevPrev, llprev, lllast, mapDrawer);\r\n\r\n path.setAt(len - 2, (llprev.add(lllast.sub(evLatLng))).ToGMLatLng());\r\n }\r\n\r\n path.pop();\r\n\r\n // correct last angle\r\n if (mapDrawer.viewModel.isActiveCorrectionRightAngle && path.getLength() >= 4) {\r\n var pathLength = path.getLength();\r\n // start and prev coreners muste be in tolerance to 90�\r\n var startPoint = LatLng.FromGMLatLng(path.getAt(0)).ToPoint2D();\r\n var startNextPoint = LatLng.FromGMLatLng(path.getAt(1)).ToPoint2D();\r\n var endPoint = LatLng.FromGMLatLng(path.getAt(pathLength - 1)).ToPoint2D();\r\n var endPrevPoint = LatLng.FromGMLatLng(path.getAt(pathLength - 2)).ToPoint2D();\r\n\r\n var endPrevVector = endPrevPoint.sub(endPoint);\r\n var endVector = startPoint.sub(endPoint);\r\n\r\n var lengthOfProjection = endPrevVector.GetNormalized().dot(endVector);\r\n var newEndPoint = endPoint.add(endPrevVector.GetNormalized().mul(lengthOfProjection));\r\n\r\n var startVector = startNextPoint.sub(startPoint)\r\n var newEndVector = newEndPoint.sub(startPoint);\r\n var startCorenerAngleNewEnd = Math.abs(Point2D.AngleFromVectors(newEndVector, startVector));\r\n\r\n var endCorenerAngle = Math.abs(Point2D.AngleFromVectors(endPrevVector, endVector));\r\n if (this.isEqualWithTolerance(endCorenerAngle, 90, 10)) {\r\n if (this.isEqualWithTolerance(startCorenerAngleNewEnd, 90, 0.001)) {\r\n path.pop();\r\n path.push(LatLng.FromPoint2D(newEndPoint).ToGMLatLng());\r\n }\r\n }\r\n }\r\n\r\n } else if (curSubmenu === 'Circle') {\r\n path.removeAt(0);\r\n path.pop();\r\n }\r\n var pathArray = path.getArray();\r\n if (pathArray.length > 2) {\r\n var poly = new google.maps.Polygon({\r\n paths: pathArray\r\n });\r\n\r\n poly.setOptions({});\r\n mapDrawer.onOverlaycomplete(poly);\r\n\r\n if (layer.typeName === \"Building\")\r\n lsGoogleMaps.refreshStepNumber(2);\r\n }\r\n mapDrawer.selectTool(this.name, curSubmenu);\r\n }\r\n }\r\n }\r\n\r\n onCommandText(mapDrawer: MapDrawer, cmd: string) {\r\n if (cmd && typeof cmd === \"string\" && cmd.length) {\r\n var inputSplit = cmd.split(\",\");\r\n if (inputSplit.length === 2) {\r\n var xStr = inputSplit[0];\r\n var yStr = inputSplit[1];\r\n\r\n var valueAdjustOpts = mapDrawer.viewModel.valueAdjustOpts;\r\n var imperial = window.UseImperialSystem;\r\n\r\n var xVal = spt.Utils.GetFloatFromInputValue(\"\" + xStr,\r\n {\r\n applyArithmetic: true,\r\n isFeet: imperial,\r\n notImperial: !imperial,\r\n from: valueAdjustOpts.to,\r\n to: \"m\"\r\n });\r\n\r\n var yVal = spt.Utils.GetFloatFromInputValue(\"\" + yStr,\r\n {\r\n applyArithmetic: true,\r\n isFeet: imperial,\r\n notImperial: !imperial,\r\n from: valueAdjustOpts.to,\r\n to: \"m\"\r\n });\r\n\r\n if (xVal === null || isNaN(xVal) || !isFinite(xVal) || yVal === null || isNaN(yVal) || !isFinite(yVal))\r\n return;\r\n\r\n var rp = mapDrawer.viewModel.referenceLatLng;\r\n\r\n var path = this.polyline ? this.polyline.getPath() : null,\r\n pathLength = path ? path.getLength() : null;\r\n\r\n if (!path)\r\n return;\r\n\r\n if (mapDrawer.viewModel.coordsRelative) {\r\n if (pathLength)\r\n rp = LatLng.FromGMLatLng(path.getAt(pathLength - 1));\r\n }\r\n\r\n var latLng = rp.Offset(+yVal, +xVal);\r\n\r\n if (pathLength && this.curSubmenu === 'Polygon') {\r\n var fp = LatLng.FromGMLatLng(path.getAt(0));\r\n if (fp.Equals(latLng)) {\r\n this.onPolylineClosed(mapDrawer);\r\n return;\r\n }\r\n var lp = LatLng.FromGMLatLng(path.getAt(pathLength - 1));\r\n if (lp.Equals(latLng))\r\n return;\r\n }\r\n\r\n this.onMousemove({ latLng: latLng.ToGMLatLng() }, mapDrawer);\r\n this.onMouseUp({ latLng: latLng.ToGMLatLng() }, mapDrawer); // onClick changed adrian\r\n\r\n path = this.polyline ? this.polyline.getPath() : null;\r\n pathLength = path ? path.getLength() : null;\r\n\r\n var bds = BoundsLatLng.FromGmLatLngs(path);\r\n if (bds.Width < 50 || bds.Height < 50)\r\n bds = BoundsLatLng.FromCenterWidthHeight(bds.Center, Math.max(50, bds.Width), Math.max(50, bds.Height));\r\n\r\n mapDrawer.map.fitBounds(bds.ToGMLatLngBounds());\r\n }\r\n }\r\n }\r\n }\r\n\r\n export class HelperLinesTool extends BaseToolIcon {\r\n constructor(mapDrawer: MapDrawer, name: string) {\r\n super(mapDrawer, name);\r\n this.Cursor = 'crosshair';\r\n }\r\n\r\n iconX = 3;\r\n iconY = 4;\r\n\r\n helperLine: Helperline = null;\r\n snapMarker: google.maps.Marker = null;\r\n step: number = 0;\r\n snapped: boolean = false;\r\n\r\n onSelect(mapDrawer: MapDrawer, prevTool: BaseToolIcon, subMenu: string) {\r\n mapDrawer.map.setOptions({ draggableCursor: this.Cursor });\r\n\r\n mapDrawer.setSeparationLinesFrozen(true);\r\n\r\n mapDrawer.clearSelection();\r\n\r\n var c = LatLng.FromGMLatLng(mapDrawer.map.getCenter());\r\n\r\n this.step = 0;\r\n\r\n this.helperLine = this.createHelperLine(c, mapDrawer);\r\n\r\n this.snapMarker = new google.maps.Marker({\r\n map: mapDrawer.map,\r\n clickable: false,\r\n draggable: false,\r\n visible: false,\r\n position: c.ToGMLatLng(),\r\n icon: {\r\n path: google.maps.SymbolPath.CIRCLE,\r\n scale: Helperline.shapeStyle.strokeWeight * 3,\r\n fillColor: Helperline.shapeStyle.strokeColor,\r\n fillOpacity: Helperline.shapeStyle.strokeOpacity,\r\n strokeOpacity: 0\r\n },\r\n zIndex: 0\r\n });\r\n\r\n }\r\n\r\n onDeselect(mapDrawer: MapDrawer) {\r\n\r\n mapDrawer.setSeparationLinesFrozen(false);\r\n\r\n if (this.helperLine) {\r\n this.helperLine.setMap(null);\r\n this.helperLine = null;\r\n }\r\n if (this.snapMarker) {\r\n this.snapMarker.setMap(null);\r\n this.snapMarker = null;\r\n }\r\n\r\n mapDrawer.map.setOptions({ draggableCursor: null });\r\n\r\n }\r\n\r\n private createHelperLine(c: LatLng, mapDrawer: MapDrawer): Helperline {\r\n var helperLine = new Helperline(mapDrawer, c, c);\r\n helperLine.locked = true;\r\n //helperLine.isVisible = false;\r\n return helperLine;\r\n }\r\n\r\n onMouseUp(ev: google.maps.MouseEvent, mapDrawer: MapDrawer) {\r\n if (this.step === 1) {\r\n let curll = LatLng.FromGMLatLng(ev.latLng),\r\n ll = HelperLinesTool.getSnapPosition(this.helperLine.Start, curll, mapDrawer);\r\n mapDrawer.viewModel.helperLines.push(this.helperLine);\r\n this.helperLine = this.createHelperLine(ll, mapDrawer);\r\n this.step = 0;\r\n }\r\n else\r\n this.step++;\r\n }\r\n\r\n onClick(ev: google.maps.MouseEvent, mapDrawer: MapDrawer) {\r\n var helperLine = this.helperLine,\r\n snapMarker = this.snapMarker;\r\n if (helperLine && ev.latLng) {\r\n\r\n switch (this.step) {\r\n case 0:\r\n {\r\n let curll = LatLng.FromGMLatLng(ev.latLng),\r\n ll = HelperLinesTool.getSnapPosition(null, curll, mapDrawer);\r\n if (!ll) {\r\n ll = curll;\r\n this.snapped = false;\r\n } else\r\n this.snapped = true;\r\n //helperLine.End = ll;\r\n helperLine.setStartEnd(ll, ll);\r\n snapMarker.setPosition(ll.ToGMLatLng());\r\n this.helperLine.isVisible = true;\r\n //this.step = 1;\r\n }\r\n break;\r\n case 1:\r\n {\r\n let curll = LatLng.FromGMLatLng(ev.latLng),\r\n ll = HelperLinesTool.getSnapPosition(helperLine.Start, curll, mapDrawer);\r\n if (!ll) {\r\n ll = curll;\r\n this.snapped = false;\r\n } else\r\n this.snapped = true;\r\n helperLine.End = ll;\r\n //snapMarker.setPosition(ll.ToGMLatLng());\r\n this.helperLine.frozen = true;\r\n this.helperLine.locked = false;\r\n }\r\n break;\r\n }\r\n snapMarker.setVisible(false);\r\n }\r\n }\r\n\r\n onMousemove(ev: google.maps.MouseEvent, mapDrawer: MapDrawer) {\r\n\r\n var helperLine = this.helperLine,\r\n snapMarker = this.snapMarker;\r\n if (helperLine && ev.latLng) {\r\n\r\n switch (this.step) {\r\n case 0:\r\n {\r\n let curll = LatLng.FromGMLatLng(ev.latLng),\r\n ll = HelperLinesTool.getSnapPosition(null, curll, mapDrawer);\r\n if (!ll) {\r\n ll = curll;\r\n this.snapped = false;\r\n } else\r\n this.snapped = true;\r\n helperLine.setStartEnd(ll, ll);\r\n snapMarker.setPosition(ll.ToGMLatLng());\r\n }\r\n break;\r\n case 1:\r\n {\r\n let curll = LatLng.FromGMLatLng(ev.latLng),\r\n ll = HelperLinesTool.getSnapPosition(helperLine.Start, curll, mapDrawer);\r\n if (!ll) {\r\n ll = curll;\r\n this.snapped = false;\r\n } else\r\n this.snapped = true;\r\n helperLine.End = ll;\r\n snapMarker.setPosition(ll.ToGMLatLng());\r\n }\r\n break;\r\n }\r\n if (this.snapped !== snapMarker.getVisible())\r\n snapMarker.setVisible(this.snapped);\r\n }\r\n }\r\n\r\n static getSnapPosition(prevLatLng: LatLng, curLatLng: LatLng, mapDrawer: MapDrawer, layers?: PolygonLayer[]): LatLng {\r\n let result: LatLng = null,\r\n clickTolerance = Helperline.clickTolerance;\r\n\r\n let pt = mapDrawer.getPointByPoint(curLatLng, clickTolerance, true, true, layers),\r\n seg = !pt ? mapDrawer.getSegmentByPoint(curLatLng, clickTolerance, layers) : null;\r\n\r\n if (prevLatLng && mapDrawer.shiftDown) {\r\n let helperlinesResult = Helperline.GetSnapByHelperlines(null, prevLatLng, LatLng.FromPoint2D(pt) || LatLng.FromPoint2D(seg && seg.getClosestPoint(curLatLng.ToPoint2D())) || curLatLng, mapDrawer, true, false);\r\n if (curLatLng.DistanceTo(helperlinesResult.result) > 0.01) {\r\n if (pt)\r\n result = helperlinesResult.result;\r\n else if (seg && prevLatLng.DistanceTo(helperlinesResult.result) > 0.01) {\r\n var inter = seg.getIntersection(new Segment2D(prevLatLng.ToPoint2D(), helperlinesResult.result.ToPoint2D(), true));\r\n if (inter) {\r\n var pxFactor = Math.pow(2, mapDrawer.map.getZoom()),\r\n dist = inter.DistanceTo(helperlinesResult.result.ToPoint2D()) * pxFactor;\r\n if (dist <= clickTolerance)\r\n result = LatLng.FromPoint2D(inter);\r\n }\r\n }\r\n if (!result)\r\n result = helperlinesResult.result;\r\n }\r\n }\r\n\r\n if (!result) {\r\n if (pt) {\r\n result = LatLng.FromPoint2D(pt);\r\n } else if (seg) {\r\n var sp = seg.getClosestPoint(curLatLng.ToPoint2D());\r\n if (sp) {\r\n result = LatLng.FromPoint2D(sp);\r\n }\r\n }\r\n }\r\n\r\n //if (!result && prevLatLng && mapDrawer.shiftDown) {\r\n // let helperlinesResult = Helperline.GetSnapByHelperlines(prevLatLng, curLatLng, mapDrawer, true, false).result;\r\n // if (curLatLng.DistanceTo(helperlinesResult) > 0.01)\r\n // result = helperlinesResult;\r\n //}\r\n\r\n return result;\r\n }\r\n\r\n }\r\n\r\n export class SouthMarkerTool extends BaseToolIcon {\r\n constructor(mapDrawer: MapDrawer, name: string) {\r\n super(mapDrawer, name);\r\n // this.Cursor = `url(\"${mapDrawer.options.pathToIcons}/cursor/south.cur\"), default`;\r\n }\r\n\r\n iconX = 15;\r\n iconY = 4;\r\n\r\n segments: { [id: string]: Segment2D[] } = null;\r\n polyline: google.maps.Polyline = null;\r\n\r\n southMarker: SouthMarker = null;\r\n currentPolyId: string = null;\r\n southMarkerHovered: boolean = false;\r\n\r\n static clickTolerance = 25;\r\n\r\n static highlightStyle: IShapeStyle = {\r\n strokeWeight: 3,\r\n strokeColor: '#FFFFFF',\r\n strokeOpacity: 0.4\r\n };\r\n\r\n onSelect(mapDrawer: MapDrawer, prevTool: BaseToolIcon, subMenu: string) {\r\n var viewmodel = mapDrawer.viewModel,\r\n layer = viewmodel.layer.mainLayer,\r\n polys = layer.polygons;\r\n\r\n if (!polys.length) {\r\n mapDrawer.selectTool(\"SelectTool\");\r\n return;\r\n }\r\n\r\n this.segments = {};\r\n this.currentPolyId = null;\r\n this.southMarkerHovered = false;\r\n\r\n polys.forEach(poly => {\r\n var data = poly.userData as ShapeData;\r\n if (data && !data._isDisposed) {\r\n var segments = data.getSegments();\r\n if (segments && segments.length) {\r\n this.segments[data.id] = segments;\r\n }\r\n if (data.southMarker) {\r\n var southMarker = data.southMarker;\r\n southMarker.clickable = true;\r\n southMarker.hovered = false;\r\n }\r\n }\r\n });\r\n //mapDrawer.map.setOptions({ draggableCursor: this.Cursor });\r\n mapDrawer.map.setOptions({ draggableCursor: null });\r\n var polyLineOpts: google.maps.PolylineOptions = {\r\n map: mapDrawer.map,\r\n draggable: false,\r\n editable: false,\r\n clickable: false,\r\n visible: false,\r\n zIndex: 12,\r\n strokeWeight: layer.shapeSelectedHoveredStyle.strokeWeight + 2,\r\n strokeColor: layer.shapeSelectedHoveredStyle.strokeColor,\r\n strokeOpacity: 0.5,\r\n };\r\n\r\n this.polyline = new google.maps.Polyline(polyLineOpts);\r\n\r\n this.southMarker = this.createSouthMarker(mapDrawer);\r\n }\r\n\r\n onDeselect(mapDrawer: MapDrawer) {\r\n var viewmodel = mapDrawer.viewModel,\r\n layer = viewmodel.layer.mainLayer,\r\n polys = layer.polygons;\r\n\r\n this.segments = null;\r\n this.currentPolyId = null;\r\n if (this.southMarker) {\r\n this.southMarker.dispose();\r\n this.southMarker = null;\r\n }\r\n if (this.polyline) {\r\n this.polyline.setMap(null);\r\n this.polyline = null;\r\n }\r\n this.southMarkerHovered = false;\r\n if (polys) {\r\n polys.forEach(poly => {\r\n var data = poly.userData as ShapeData;\r\n if (data && !data._isDisposed && data.southMarker) {\r\n var southMarker = data.southMarker;\r\n southMarker.clickable = false;\r\n southMarker.hovered = false;\r\n }\r\n });\r\n }\r\n mapDrawer.map.setOptions({ draggableCursor: null });\r\n }\r\n\r\n createSouthMarker(mapDrawer: MapDrawer): SouthMarker {\r\n return new SouthMarker(null, 0, false, mapDrawer);\r\n }\r\n\r\n onMouseUp(ev: google.maps.MouseEvent, mapDrawer: MapDrawer) {\r\n if ($.isTouchCapable()) {\r\n if (this.isDragging)\r\n return;\r\n else\r\n this.onMousemove(ev, mapDrawer);\r\n }\r\n\r\n if (this.southMarker && this.southMarker.visible && this.currentPolyId) {\r\n\r\n var viewmodel = mapDrawer.viewModel,\r\n layer = viewmodel.layer.mainLayer,\r\n poly = layer.getPolygonById(this.currentPolyId);\r\n\r\n if (poly) {\r\n var data = poly.userData as ShapeData;\r\n this.removeSouthmarker(data);\r\n if (data) {\r\n data.southMarker = this.southMarker;\r\n this.southMarker = null;\r\n data.update();\r\n data.regenerate();\r\n lsGoogleMaps.refreshStepNumber(3);\r\n if (!$.isTouchCapable()) {\r\n if (layer.polygons.length > 1)\r\n mapDrawer.selectTool(\"SouthMarkerTool\");\r\n else\r\n mapDrawer.selectTool(\"SelectTool\");\r\n }\r\n else {\r\n mapDrawer.selectTool(\"SouthMarkerTool\");\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n\r\n // onMouseDown\r\n onClick(ev: google.maps.MouseEvent, mapDrawer: MapDrawer) {\r\n\r\n }\r\n\r\n onMousemove(ev: google.maps.MouseEvent, mapDrawer: MapDrawer) {\r\n var polyLine = this.polyline,\r\n found = false,\r\n southMarkerHovered = this.southMarkerHovered;\r\n\r\n if (polyLine && ev.latLng && !southMarkerHovered) {\r\n var latLng = LatLng.FromGMLatLng(ev.latLng),\r\n p = latLng.ToPoint2D();\r\n var s = this.tryGetSegment(p, mapDrawer);\r\n if (s) {\r\n\r\n var seg = s.segment,\r\n center = seg.getCenter(),\r\n orientation = seg.getOrientation(),\r\n normal = seg.Normal;\r\n\r\n if (normal.dot(p.sub(seg.Start)) > 0) {\r\n orientation += Math.PI;\r\n }\r\n\r\n this.currentPolyId = s.id;\r\n\r\n this.southMarker.position = LatLng.FromPoint2D(center);\r\n this.southMarker.orientation = orientation;\r\n this.southMarker.visible = true;\r\n\r\n this.polyline.setPath([LatLng.Point2DToGMLatLng(seg.Start), LatLng.Point2DToGMLatLng(seg.End)]);\r\n this.polyline.setVisible(true);\r\n\r\n mapDrawer.map.setOptions({ draggableCursor: 'pointer' });\r\n //mapDrawer.map.setOptions({ draggableCursor: this.Cursor });\r\n\r\n found = true;\r\n }\r\n }\r\n\r\n if (!found) {\r\n this.currentPolyId = null;\r\n this.southMarker.visible = false;\r\n this.polyline.setVisible(false);\r\n mapDrawer.map.setOptions({ draggableCursor: null });\r\n //mapDrawer.map.setOptions({ draggableCursor: this.Cursor });\r\n }\r\n }\r\n\r\n tryGetSegment(p: Point2D, mapDrawer: MapDrawer): { id: string, segment: Segment2D } {\r\n var result: { id: string, segment: Segment2D } = null;\r\n if (this.segments) {\r\n var minDist = Number.MAX_VALUE,\r\n clickTolerance = SouthMarkerTool.clickTolerance,\r\n pxFactor = mapDrawer.getPixelFactor(),\r\n foundSeg: Segment2D = null,\r\n foundId: string = null;\r\n\r\n Object.keys(this.segments).forEach(k => {\r\n this.segments[k].forEach(seg => {\r\n var dist = seg.distanceToPoint(p) * pxFactor;\r\n if (dist <= clickTolerance && dist < minDist) {\r\n minDist = dist;\r\n foundSeg = seg;\r\n foundId = k;\r\n }\r\n });\r\n });\r\n\r\n if (foundSeg && foundId) {\r\n result = {\r\n segment: foundSeg,\r\n id: foundId\r\n };\r\n }\r\n }\r\n //mapDrawer.map.setOptions({ draggableCursor: this.Cursor });\r\n return result;\r\n }\r\n\r\n onMouseoverSouthMarker(southMarker: SouthMarker, mapDrawer: MapDrawer) {\r\n this.southMarkerHovered = true;\r\n southMarker.hovered = true;\r\n }\r\n\r\n onMouseoutSouthMarker(southMarker: SouthMarker, mapDrawer: MapDrawer) {\r\n this.southMarkerHovered = false;\r\n southMarker.hovered = false;\r\n }\r\n\r\n onClickSouthMarker(southMarker: SouthMarker, mapDrawer: MapDrawer) {\r\n var viewmodel = mapDrawer.viewModel,\r\n layer = viewmodel.layer.mainLayer,\r\n polys = layer.polygons;\r\n\r\n if (southMarker && polys.length) {\r\n polys.filter(poly => poly && poly.userData && (poly.userData as ShapeData).southMarker && (poly.userData as ShapeData).southMarker.id === southMarker.id).forEach(poly => {\r\n this.removeSouthmarker(poly.userData as ShapeData);\r\n });\r\n }\r\n\r\n this.southMarkerHovered = false;\r\n }\r\n\r\n removeSouthmarker(shape: ShapeData) {\r\n if (shape && shape.southMarker) {\r\n shape.southMarker.dispose();\r\n shape.southMarker = null;\r\n }\r\n }\r\n }\r\n\r\n export class EraserTool extends BaseToolIcon {\r\n constructor(mapDrawer: MapDrawer, name: string) {\r\n super(mapDrawer, name);\r\n this.Cursor = '';//`url(\"${mapDrawer.options.pathToIcons}/cursor/eraser.cur\"), default`;\r\n }\r\n iconX = 5;\r\n iconY = 1;\r\n\r\n onSelect(mapDrawer: MapDrawer, prevTool: BaseToolIcon, subMenu: string) {\r\n var viewModel = mapDrawer.viewModel;\r\n if (viewModel.selection.length) {\r\n mapDrawer.deleteSelection();\r\n mapDrawer.eraseMode = false;\r\n mapDrawer.selectTool(prevTool.name !== 'EraserTool' ? prevTool.name : null);\r\n return;\r\n }\r\n if (!mapDrawer.eraseMode) {\r\n mapDrawer.eraseMode = true;\r\n mapDrawer.map.setOptions({ draggableCursor: this.Cursor });\r\n }\r\n }\r\n\r\n onDeselect(mapDrawer: MapDrawer) {\r\n if (mapDrawer.eraseMode) {\r\n mapDrawer.eraseMode = false;\r\n mapDrawer.map.setOptions({ draggableCursor: null });\r\n }\r\n }\r\n }\r\n\r\n export class ImportImageHelperTool extends BaseToolIcon {\r\n\r\n _Start: LatLng = new LatLng();\r\n _End: LatLng = new LatLng();\r\n\r\n get Start(): LatLng {\r\n return this._Start;\r\n }\r\n\r\n set Start(value: LatLng) {\r\n this._Start = value;\r\n this.updateMarker();\r\n }\r\n\r\n get End(): LatLng {\r\n return this._End;\r\n }\r\n\r\n set End(value: LatLng) {\r\n this._End = value;\r\n this.updateMarker();\r\n }\r\n\r\n get Enabled(): boolean {\r\n return !!this.startMarker;\r\n }\r\n\r\n setStartEnd(s: LatLng, e: LatLng) {\r\n this._Start = s;\r\n this._End = e;\r\n this.updateMarker();\r\n }\r\n\r\n private startMarker: google.maps.Marker = null;\r\n private endMarker: google.maps.Marker = null;\r\n private visibleMarkers: google.maps.Marker[] = null;\r\n private polyLine: google.maps.Polyline = null;\r\n rect: google.maps.Rectangle = null;\r\n\r\n static strokeColor: string = \"rgb(240,0,0)\";\r\n static strokeWeight: number = 2;\r\n static strokeOpacity: number = 0.9;\r\n\r\n static rectStrokeColor: string = \"rgb(0,155,240)\";\r\n static rectStrokeWeight: number = 1;\r\n static rectStrokeOpacity: number = 0.9;\r\n\r\n importedImage: ImageMapOverlay = null;\r\n\r\n onStartDrag() {\r\n var importedImage = this.importedImage;\r\n if (!this.Enabled || !importedImage)\r\n return;\r\n\r\n var s = this._Start = LatLng.FromGMLatLng(this.startMarker.getPosition());\r\n var e = this.End;\r\n\r\n this.polyLine.setPath([s.ToGMLatLng(), e.ToGMLatLng()]);\r\n importedImage._refLength = s.DistanceTo(e) * 1000;\r\n }\r\n\r\n onEndDrag() {\r\n var importedImage = this.importedImage;\r\n if (!this.Enabled || !importedImage)\r\n return;\r\n\r\n var s = this.Start;\r\n var e = this._End = LatLng.FromGMLatLng(this.endMarker.getPosition());\r\n\r\n this.polyLine.setPath([s.ToGMLatLng(), e.ToGMLatLng()]);\r\n importedImage._refLength = s.DistanceTo(e) * 1000;\r\n }\r\n\r\n onBoundsChanged() {\r\n\r\n if (!this.importedImage || !this.rect)\r\n return;\r\n\r\n var importedImage = this.importedImage;\r\n var rectBounds = BoundsLatLng.FromGMLatLngBounds(this.rect.getBounds());\r\n var rectSize = rectBounds.Size;\r\n var rectCenter = rectBounds.Center;\r\n\r\n var imgBounds = importedImage._bounds;\r\n var imgSize = imgBounds.Size;\r\n\r\n if (rectBounds.Equals(imgBounds))\r\n return;\r\n\r\n var f = Math.min(rectSize.x / imgSize.x, rectSize.y / imgSize.y);\r\n\r\n var newBounds = BoundsLatLng.FromCenterWidthHeight(rectCenter, imgSize.x * f, imgSize.y * f);\r\n\r\n if (imgBounds.Equals(newBounds))\r\n return;\r\n\r\n importedImage.setBounds(newBounds, true);\r\n\r\n }\r\n\r\n onSelect(mapDrawer: MapDrawer, prevTool: BaseToolIcon, subMenu: string) {\r\n var map = mapDrawer.map,\r\n viewModel = mapDrawer.viewModel,\r\n importedImage = viewModel.currentImportedImage;\r\n\r\n if (!importedImage || viewModel.currentSubViewModel != null) {\r\n mapDrawer.selectTool(\"SelectTool\");\r\n return;\r\n }\r\n\r\n viewModel.allTools.forEach(tool => {\r\n if (tool.name !== this.name && tool.name !== 'SelectTool')\r\n tool.disabled = true;\r\n });\r\n\r\n viewModel.currentSubViewModel = viewModel.subViewModels.backgroundSetting;\r\n\r\n this.importedImage = importedImage;\r\n\r\n var imgBounds = importedImage._bounds;\r\n if (!this.visibleMarkers)\r\n this.visibleMarkers = [];\r\n\r\n mapDrawer.map.fitBounds(importedImage._bounds.ToGMLatLngBounds());\r\n\r\n var s = this.Start = imgBounds.Corners[0];\r\n var e = this.End = imgBounds.Corners[1];\r\n\r\n importedImage._refLength = s.DistanceTo(e) * 1000;\r\n\r\n var is = 3;\r\n var il = 21;\r\n\r\n var lpath = `M${is},0.5 h${il} M-${is},0.5 h-${il} M0.5,${is} v${il} M0.5,-${is} v-${il}`;\r\n\r\n this.startMarker = new google.maps.Marker({\r\n position: s.ToGMLatLng(),\r\n icon: {\r\n path: google.maps.SymbolPath.CIRCLE,\r\n scale: 28,\r\n strokeWeight: 2,\r\n strokeColor: ImportImageHelperTool.strokeColor,\r\n strokeOpacity: ImportImageHelperTool.strokeOpacity\r\n },\r\n draggable: true,\r\n opacity: 0,\r\n map: map,\r\n zIndex: 4\r\n });\r\n\r\n var s1 = new google.maps.Marker({\r\n position: s.ToGMLatLng(),\r\n icon: {\r\n path: google.maps.SymbolPath.CIRCLE,\r\n scale: 28,\r\n strokeWeight: 2,\r\n strokeColor: ImportImageHelperTool.strokeColor,\r\n strokeOpacity: ImportImageHelperTool.strokeOpacity\r\n },\r\n draggable: false,\r\n clickable: false,\r\n map: map,\r\n zIndex: 4\r\n });\r\n s1.bindTo('position', this.startMarker, 'position');\r\n\r\n var s2 = new google.maps.Marker({\r\n position: s.ToGMLatLng(),\r\n icon: {\r\n path: lpath,\r\n //scale: 1,\r\n //strokeWeight: 0.5,\r\n strokeColor: ImportImageHelperTool.strokeColor\r\n //strokeOpacity: ImportImageHelperTool.strokeOpacity\r\n },\r\n draggable: false,\r\n clickable: false,\r\n map: map,\r\n zIndex: 4\r\n });\r\n s2.bindTo('position', this.startMarker, 'position');\r\n\r\n this.startMarker.addListener(\"drag\", this.onStartDrag.bind(this));\r\n this.startMarker.addListener(\"dragend\", this.onStartDrag.bind(this));\r\n\r\n this.endMarker = new google.maps.Marker({\r\n position: e.ToGMLatLng(),\r\n icon: {\r\n path: google.maps.SymbolPath.CIRCLE,\r\n scale: 28,\r\n strokeWeight: 2,\r\n strokeColor: ImportImageHelperTool.strokeColor,\r\n strokeOpacity: ImportImageHelperTool.strokeOpacity\r\n },\r\n draggable: true,\r\n opacity: 0,\r\n map: map,\r\n zIndex: 4\r\n });\r\n\r\n var e1 = new google.maps.Marker({\r\n position: e.ToGMLatLng(),\r\n icon: {\r\n path: google.maps.SymbolPath.CIRCLE,\r\n scale: 28,\r\n strokeWeight: 2,\r\n strokeColor: ImportImageHelperTool.strokeColor,\r\n strokeOpacity: ImportImageHelperTool.strokeOpacity\r\n },\r\n draggable: false,\r\n clickable: false,\r\n map: map,\r\n zIndex: 4\r\n });\r\n e1.bindTo('position', this.endMarker, 'position');\r\n\r\n var e2 = new google.maps.Marker({\r\n position: e.ToGMLatLng(),\r\n icon: {\r\n path: lpath,\r\n //scale: 1,\r\n //strokeWeight: 0.5,\r\n strokeColor: ImportImageHelperTool.strokeColor\r\n //strokeOpacity: ImportImageHelperTool.strokeOpacity\r\n },\r\n draggable: false,\r\n clickable: false,\r\n map: map,\r\n zIndex: 4\r\n });\r\n e2.bindTo('position', this.endMarker, 'position');\r\n\r\n this.endMarker.addListener(\"drag\", this.onEndDrag.bind(this));\r\n this.endMarker.addListener(\"dragend\", this.onEndDrag.bind(this));\r\n\r\n this.visibleMarkers.push(s1, s2, e1, e2);\r\n\r\n this.polyLine = new google.maps.Polyline({\r\n path: [s.ToGMLatLng(), e.ToGMLatLng()],\r\n strokeWeight: ImportImageHelperTool.strokeWeight,\r\n strokeColor: ImportImageHelperTool.strokeColor,\r\n strokeOpacity: ImportImageHelperTool.strokeOpacity * 0.7,\r\n map: map,\r\n editable: false,\r\n draggable: false,\r\n clickable: false,\r\n zIndex: 5\r\n });\r\n\r\n this.rect = new google.maps.Rectangle({\r\n draggable: true,\r\n bounds: importedImage._bounds.ToGMLatLngBounds(),\r\n editable: true,\r\n zIndex: 1,\r\n map: map,\r\n strokeWeight: ImportImageHelperTool.rectStrokeWeight,\r\n strokeColor: ImportImageHelperTool.rectStrokeColor,\r\n strokeOpacity: ImportImageHelperTool.rectStrokeOpacity,\r\n fillOpacity: 0.2,\r\n fillColor: '#8bd6ff'\r\n });\r\n\r\n this.rect.addListener('bounds_changed', this.onBoundsChanged.bind(this));\r\n\r\n this.importedImage.boundsChanged = () => {\r\n this.rect.setBounds(this.importedImage._bounds.ToGMLatLngBounds());\r\n };\r\n }\r\n\r\n onDeselect(mapDrawer: MapDrawer) {\r\n if (!this.Enabled)\r\n return;\r\n\r\n var viewModel = mapDrawer.viewModel;\r\n\r\n viewModel.allTools.forEach(tool => {\r\n if (tool.name !== this.name && tool.name !== 'SelectTool')\r\n tool.disabled = false;\r\n });\r\n\r\n viewModel.currentSubViewModel = null;\r\n viewModel.currentImportedImageId = null;\r\n\r\n google.maps.event.clearListeners(this.startMarker, 'drag');\r\n google.maps.event.clearListeners(this.startMarker, 'dragend');\r\n google.maps.event.clearListeners(this.endMarker, 'drag');\r\n google.maps.event.clearListeners(this.endMarker, 'dragend');\r\n google.maps.event.clearListeners(this.rect, 'bounds_changed');\r\n\r\n this.visibleMarkers.forEach(m => {\r\n m.unbindAll();\r\n m.setMap(null);\r\n });\r\n\r\n this.startMarker.setMap(null);\r\n this.endMarker.setMap(null);\r\n this.polyLine.setMap(null);\r\n this.rect.setMap(null);\r\n\r\n this.startMarker = null;\r\n this.endMarker = null;\r\n this.polyLine = null;\r\n this.visibleMarkers = null;\r\n this.rect = null;\r\n\r\n this.importedImage.boundsChanged = null;\r\n this.importedImage = null;\r\n\r\n //mapDrawer.load();\r\n }\r\n\r\n updateMarker() {\r\n var importedImage = this.importedImage;\r\n if (!this.Enabled || !importedImage)\r\n return;\r\n\r\n var s = this.Start;\r\n var e = this.End;\r\n\r\n this.startMarker.setPosition(s.ToGMLatLng());\r\n this.endMarker.setPosition(e.ToGMLatLng());\r\n this.polyLine.setPath([s.ToGMLatLng(), e.ToGMLatLng()]);\r\n importedImage._refLength = s.DistanceTo(e) * 1000;\r\n }\r\n }\r\n\r\n export class OsmBuildingsTool extends BaseToolIcon {\r\n buildingClicked(mapDrawer: MapDrawer, poly: google.maps.Polygon) {\r\n var layer = mapDrawer.viewModel.layer.building;\r\n if (poly && layer) {\r\n var path = poly.getPath();\r\n if (path && path.getLength() > 3) {\r\n\r\n if (layer.polygons.length)\r\n mapDrawer.deleteSelectables(layer.polygons.map(rp => rp.userData as ShapeData).filter(d => !!d));\r\n\r\n mapDrawer.viewModel.currentLayer = layer;\r\n\r\n mapDrawer.onOverlaycomplete(new google.maps.Polygon({ paths: path.getArray() }), true);\r\n }\r\n }\r\n mapDrawer.selectTool(\"SelectTool\");\r\n }\r\n\r\n onSelect(mapDrawer: MapDrawer) {\r\n mapDrawer.osmBuildings.start(mapDrawer, this.buildingClicked.bind(this, mapDrawer));\r\n }\r\n\r\n onDeselect(mapDrawer: MapDrawer) {\r\n mapDrawer.osmBuildings.stop();\r\n }\r\n }\r\n\r\n export class ReferenceLengthTool extends BaseToolIcon {\r\n iconX = 16;\r\n iconY = 4;\r\n\r\n segments: { [id: string]: Segment2D[] } = null;\r\n polyline: google.maps.Polyline = null;\r\n selectedPolyline: google.maps.Polyline = null;\r\n\r\n currentPolyId: string = null;\r\n selectedPolyId: string = null;\r\n\r\n onSelect(mapDrawer: MapDrawer, prevTool: BaseToolIcon, subMenu: string) {\r\n var viewmodel = mapDrawer.viewModel,\r\n layer = viewmodel.layer.mainLayer;\r\n\r\n if (!layer || viewmodel.currentSubViewModel != null || !layer.polygons.length) {\r\n mapDrawer.selectTool(\"SelectTool\");\r\n return;\r\n }\r\n\r\n mapDrawer.setSeparationLinesFrozen(true);\r\n\r\n var refLengthModel = viewmodel.currentSubViewModel = viewmodel.subViewModels.referenceLength;\r\n\r\n this.currentPolyId = null;\r\n this.selectedPolyId = null;\r\n\r\n this.updateSegments(mapDrawer);\r\n\r\n mapDrawer.map.setOptions({ draggableCursor: null });\r\n\r\n var polyLineOpts: google.maps.PolylineOptions = {\r\n map: mapDrawer.map,\r\n draggable: false,\r\n editable: false,\r\n clickable: false,\r\n visible: false,\r\n zIndex: 12,\r\n strokeWeight: layer.shapeSelectedHoveredStyle.strokeWeight + 2,\r\n strokeColor: layer.shapeSelectedHoveredStyle.strokeColor,\r\n strokeOpacity: 0.5\r\n };\r\n\r\n this.polyline = new google.maps.Polyline(polyLineOpts);\r\n\r\n polyLineOpts.strokeColor = \"rgb(255,149,0)\";\r\n polyLineOpts.strokeOpacity = 0.9;\r\n polyLineOpts.strokeWeight += 2;\r\n\r\n this.selectedPolyline = new google.maps.Polyline(polyLineOpts);\r\n\r\n refLengthModel.Start = new LatLng();\r\n refLengthModel.End = new LatLng();\r\n }\r\n\r\n onDeselect(mapDrawer: MapDrawer) {\r\n var viewModel = mapDrawer.viewModel;\r\n\r\n viewModel.currentSubViewModel = null;\r\n\r\n mapDrawer.setSeparationLinesFrozen(false);\r\n\r\n this.segments = null;\r\n\r\n if (this.polyline) {\r\n this.polyline.setMap(null);\r\n this.polyline = null;\r\n }\r\n\r\n if (this.selectedPolyline) {\r\n this.selectedPolyline.setMap(null);\r\n this.selectedPolyline = null;\r\n }\r\n\r\n this.currentPolyId = null;\r\n this.selectedPolyId = null;\r\n\r\n mapDrawer.map.setOptions({ draggableCursor: null });\r\n }\r\n\r\n tryGetSegment(p: Point2D, mapDrawer: MapDrawer): { id: string, segment: Segment2D } {\r\n return SouthMarkerTool.prototype.tryGetSegment.call(this, p, mapDrawer);\r\n }\r\n\r\n onClick(ev: google.maps.MouseEvent, mapDrawer: MapDrawer) {\r\n if (this.currentPolyId && mapDrawer.viewModel.hasInstance(this.currentPolyId)) {\r\n\r\n let viewmodel = mapDrawer.viewModel,\r\n refLengthModel = viewmodel.currentSubViewModel as ReferenceLengthModel,\r\n polyLine = this.polyline,\r\n selectedPolyline = this.selectedPolyline,\r\n path = polyLine.getPath().getArray().map(ll => LatLng.FromGMLatLng(ll));\r\n\r\n this.selectedPolyId = this.currentPolyId;\r\n\r\n selectedPolyline.setPath(path.map(ll => ll.ToGMLatLng()));\r\n selectedPolyline.setVisible(true);\r\n\r\n this.currentPolyId = null;\r\n polyLine.setVisible(false);\r\n\r\n var selectedData = viewmodel.instances[this.selectedPolyId] as ShapeData;\r\n\r\n var orientation = 0;\r\n var slope = 0;\r\n if (selectedData) {\r\n if (selectedData.typeName === window.BuildingTypeName && selectedData.children && selectedData.children.length) {\r\n for (var i = 0, l = selectedData.children.length; i < l; i++) {\r\n var child = selectedData.children[i];\r\n\r\n if (child.hasSegment(path[0], path[1])) {\r\n selectedData = child;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (selectedData.southMarker && selectedData.slope) {\r\n orientation = selectedData.southMarker.orientation;\r\n slope = selectedData.slope;\r\n }\r\n }\r\n\r\n refLengthModel.initLengths(path[0], path[1], this.selectedPolyId, orientation, slope);\r\n\r\n mapDrawer.map.setOptions({ draggableCursor: null });\r\n\r\n }\r\n }\r\n\r\n onMousemove(ev: google.maps.MouseEvent, mapDrawer: MapDrawer) {\r\n var polyLine = this.polyline,\r\n found = false;\r\n\r\n if (polyLine && ev.latLng) {\r\n var latLng = LatLng.FromGMLatLng(ev.latLng),\r\n p = latLng.ToPoint2D();\r\n\r\n var s = this.tryGetSegment(p, mapDrawer);\r\n if (s) {\r\n\r\n var seg = s.segment;\r\n\r\n found = true;\r\n\r\n if (this.selectedPolyId && this.selectedPolyId === s.id) {\r\n var spath = this.selectedPolyline.getPath().getArray().map(ll => LatLng.GMLatLngToPoint2D(ll));\r\n if (spath[0].Equals(seg.Start) && spath[1].Equals(seg.End))\r\n found = false;\r\n }\r\n\r\n if (found) {\r\n var path = [LatLng.Point2DToGMLatLng(seg.Start), LatLng.Point2DToGMLatLng(seg.End)];\r\n\r\n this.currentPolyId = s.id;\r\n\r\n this.polyline.setPath(path);\r\n this.polyline.setVisible(true);\r\n\r\n mapDrawer.map.setOptions({ draggableCursor: 'pointer' });\r\n }\r\n }\r\n }\r\n\r\n if (!found) {\r\n this.currentPolyId = null;\r\n this.polyline.setVisible(false);\r\n mapDrawer.map.setOptions({ draggableCursor: null });\r\n }\r\n }\r\n\r\n updatePolyline(start: LatLng, end: LatLng, mapDrawer: MapDrawer) {\r\n var polyLine = this.polyline,\r\n selectedPolyline = this.selectedPolyline;\r\n\r\n if (polyLine && polyLine.getVisible()) {\r\n polyLine.setPath([start.ToGMLatLng(), end.ToGMLatLng()]);\r\n //polyLine.setPath(polyLine.getPath().getArray().map(ll => LatLng.FromPoint2D(transform.transform(LatLng.FromGMLatLng(ll).ToPoint2D())).ToGMLatLng()));\r\n }\r\n\r\n if (selectedPolyline && selectedPolyline.getVisible()) {\r\n selectedPolyline.setPath([start.ToGMLatLng(), end.ToGMLatLng()]);\r\n //selectedPolyline.setPath(selectedPolyline.getPath().getArray().map(ll => LatLng.FromPoint2D(transform.transform(LatLng.FromGMLatLng(ll).ToPoint2D())).ToGMLatLng()));\r\n }\r\n\r\n ko.tasks.runEarly();\r\n\r\n mapDrawer.setSeparationLinesFrozen(true);\r\n\r\n this.updateSegments(mapDrawer);\r\n\r\n mapDrawer.map.setOptions({ draggableCursor: null });\r\n }\r\n\r\n private updateSegments(mapDrawer: MapDrawer) {\r\n var viewmodel = mapDrawer.viewModel,\r\n layer = viewmodel.layer.mainLayer,\r\n polys = layer.polygons;\r\n\r\n this.segments = {};\r\n\r\n polys.forEach(poly => {\r\n var data = poly.userData as ShapeData;\r\n\r\n if (data && !data._isDisposed) {\r\n var segments = data.getSegments(true);\r\n if (segments && segments.length) {\r\n this.segments[data.id] = segments;\r\n }\r\n }\r\n });\r\n\r\n this.currentPolyId = null;\r\n }\r\n }\r\n\r\n export class RidgeTool extends BaseToolIcon {\r\n constructor(mapDrawer: MapDrawer, name: string) {\r\n super(mapDrawer, name);\r\n this.Cursor = 'crosshair';\r\n this.isCutting = false;\r\n }\r\n\r\n iconX = 16;\r\n iconY = 1;\r\n\r\n subMenu = [\r\n new BaseSubToolIcon('Draw', 1, 7),\r\n new BaseSubToolIcon('Multiple', 0, 7)\r\n ];\r\n\r\n target: ShapeData = null;\r\n separationPolyline: SeparationPolyline = null;\r\n private polyLines: google.maps.Polyline[] = null;\r\n private snapMarker: google.maps.Marker = null;\r\n snapped: boolean = false;\r\n isCutting: boolean = false;\r\n step: number = 0;\r\n\r\n onSelect(mapDrawer: MapDrawer, prevTool: BaseToolIcon, subMenu: string) {\r\n var viewmodel = mapDrawer.viewModel,\r\n buildingLayer = viewmodel.layer.building,\r\n buildingPolys = buildingLayer ? buildingLayer.polygons : null;\r\n\r\n this.curSubmenu = subMenu = subMenu || 'Draw';\r\n\r\n if (!buildingLayer || !buildingPolys.length) {\r\n mapDrawer.selectTool(\"SelectTool\");\r\n return;\r\n }\r\n\r\n if (subMenu === 'Multiple') {\r\n if (viewmodel.currentSubViewModel != null) {\r\n mapDrawer.selectTool(\"SelectTool\");\r\n return;\r\n }\r\n viewmodel.currentSubViewModel = viewmodel.subViewModels.multipleRidges;\r\n }\r\n\r\n mapDrawer.clearSelection();\r\n\r\n buildingPolys.forEach(poly => {\r\n (poly.userData as ShapeData).separationPolylines.forEach(sp => {\r\n sp.frozen = true;\r\n });\r\n });\r\n\r\n //var target = this.target = viewmodel.selection[0] as ShapeData;\r\n\r\n this.target = buildingPolys[0].userData as ShapeData;\r\n\r\n var c = LatLng.FromGMLatLng(mapDrawer.map.getCenter());\r\n\r\n var shapeStyle = $.extend({}, SeparationPolyline.shapeStyle);\r\n if (this.isCutting)\r\n shapeStyle.strokeColor = '#bc0000';\r\n\r\n this.polyLines = [new google.maps.Polyline($.extend({\r\n map: mapDrawer.map,\r\n draggable: false,\r\n editable: false,\r\n clickable: false,\r\n visible: false,\r\n zIndex: 0,\r\n path: [c.ToGMLatLng(), c.ToGMLatLng()]\r\n }, shapeStyle) as google.maps.PolylineOptions)];\r\n\r\n this.step = 0;\r\n\r\n this.snapMarker = new google.maps.Marker({\r\n map: mapDrawer.map,\r\n clickable: false,\r\n draggable: false,\r\n visible: false,\r\n position: c.ToGMLatLng(),\r\n icon: {\r\n path: google.maps.SymbolPath.CIRCLE,\r\n scale: shapeStyle.strokeWeight * 3,\r\n fillColor: shapeStyle.strokeColor,\r\n fillOpacity: shapeStyle.strokeOpacity,\r\n strokeOpacity: 0\r\n },\r\n zIndex: 0\r\n });\r\n\r\n mapDrawer.setDrawingMode(true);\r\n\r\n mapDrawer.map.setOptions({ draggableCursor: this.Cursor });\r\n }\r\n\r\n onDeselect(mapDrawer: MapDrawer) {\r\n var viewmodel = mapDrawer.viewModel,\r\n layer = viewmodel.layer.building,\r\n polys = layer ? layer.polygons : null;\r\n\r\n viewmodel.currentSubViewModel = null;\r\n\r\n polys.forEach(poly => {\r\n (poly.userData as ShapeData).separationPolylines.forEach(sp => {\r\n sp.frozen = false;\r\n });\r\n });\r\n\r\n if (this.snapMarker) {\r\n this.snapMarker.setMap(null);\r\n this.snapMarker = null;\r\n }\r\n if (this.polyLines && this.polyLines.length) {\r\n this.polyLines.forEach(polyLine => {\r\n polyLine.setMap(null);\r\n });\r\n this.polyLines = null;\r\n }\r\n\r\n if (this.separationPolyline &&\r\n this.separationPolyline.isCutting &&\r\n this.separationPolyline.latLngs &&\r\n this.separationPolyline.latLngs.length <= 1) {\r\n this.separationPolyline.remove();\r\n }\r\n\r\n this.target = null;\r\n this.separationPolyline = null;\r\n\r\n mapDrawer.setDrawingMode(false);\r\n\r\n mapDrawer.map.setOptions({ draggableCursor: null });\r\n }\r\n\r\n onMousemove(ev: google.maps.MouseEvent, mapDrawer: MapDrawer) {\r\n\r\n let snapMarker = this.snapMarker,\r\n polyLine = this.polyLines[0],\r\n ll: LatLng;\r\n\r\n if (this.curSubmenu === \"Multiple\") {\r\n let lastll = this.step === 0 && polyLine.getVisible() ? LatLng.FromGMLatLng(polyLine.getPath().getAt(0)) : null;\r\n\r\n let curll = LatLng.FromGMLatLng(ev.latLng);\r\n\r\n ll = HelperLinesTool.getSnapPosition(lastll, curll, mapDrawer, [mapDrawer.viewModel.layer.building]);\r\n\r\n if (!ll) {\r\n ll = curll;\r\n this.snapped = false;\r\n } else\r\n this.snapped = true;\r\n\r\n if (this.step === 0) {\r\n if (polyLine.getVisible())\r\n polyLine.getPath().setAt(1, ll.ToGMLatLng());\r\n }\r\n else\r\n this.makeMultiple(ll, mapDrawer);\r\n\r\n } else {\r\n let lastll = polyLine.getVisible() ? LatLng.FromGMLatLng(polyLine.getPath().getAt(0)) : null;\r\n\r\n let curll = LatLng.FromGMLatLng(ev.latLng);\r\n\r\n ll = HelperLinesTool.getSnapPosition(lastll, curll, mapDrawer, [mapDrawer.viewModel.layer.building]);\r\n\r\n if (!ll) {\r\n ll = curll;\r\n this.snapped = false;\r\n } else\r\n this.snapped = true;\r\n\r\n if (polyLine.getVisible()) {\r\n let polyLinePath = polyLine.getPath();\r\n polyLinePath.setAt(1, ll.ToGMLatLng());\r\n }\r\n }\r\n\r\n snapMarker.setPosition(ll.ToGMLatLng());\r\n\r\n\r\n if (this.snapped !== snapMarker.getVisible())\r\n snapMarker.setVisible(this.snapped);\r\n\r\n }\r\n\r\n onClick(ev: google.maps.MouseEvent, mapDrawer: MapDrawer): void {\r\n if (this.target) {\r\n\r\n let curll = LatLng.FromGMLatLng(ev.latLng),\r\n lastll: LatLng,\r\n polyLine = this.polyLines[0];\r\n\r\n if (this.curSubmenu === \"Multiple\") {\r\n lastll = this.step === 0 && polyLine.getVisible() ? LatLng.FromGMLatLng(polyLine.getPath().getAt(0)) : null;\r\n let ll = HelperLinesTool.getSnapPosition(lastll, curll, mapDrawer, [mapDrawer.viewModel.layer.building]);\r\n if (!ll) {\r\n ll = curll;\r\n this.snapped = false;\r\n } else\r\n this.snapped = true;\r\n\r\n if (this.step === 0) {\r\n if (polyLine.getVisible()) {\r\n let polyLinePath = polyLine.getPath();\r\n polyLinePath.setAt(1, ll.ToGMLatLng());\r\n if (LatLng.FromGMLatLng(polyLinePath.getAt(0)).DistanceTo(ll) > 0.001)\r\n this.step = 1;\r\n } else {\r\n polyLine.setVisible(true);\r\n polyLine.setPath([ll.ToGMLatLng(), ll.ToGMLatLng()]);\r\n }\r\n } else {\r\n this.makeMultiple(ll, mapDrawer);\r\n\r\n this.polyLines.forEach(pl => {\r\n let sp = new SeparationPolyline(mapDrawer, this.target, undefined, pl.getPath().getArray().map(gmll => new google.maps.LatLng(gmll.lat(), gmll.lng())), !!this.isCutting);\r\n });\r\n\r\n this.target.update();\r\n\r\n mapDrawer.selectTool(this.name, this.curSubmenu);\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (this.target.separationPolylines.some(sp => sp.hovered))\r\n return;\r\n\r\n let separationPolyline = this.separationPolyline;\r\n lastll = polyLine.getVisible() ? LatLng.FromGMLatLng(polyLine.getPath().getAt(0)) : null;\r\n\r\n let ll = HelperLinesTool.getSnapPosition(lastll, curll, mapDrawer, [mapDrawer.viewModel.layer.building]);\r\n if (!ll) {\r\n ll = curll;\r\n this.snapped = false;\r\n } else\r\n this.snapped = true;\r\n\r\n if (this.snapped || google.maps.geometry.poly.containsLocation(ll.ToGMLatLng(), this.target.poly as any)) {\r\n\r\n if (!separationPolyline)\r\n separationPolyline = this.separationPolyline = new SeparationPolyline(mapDrawer, this.target, undefined, undefined, !!this.isCutting);\r\n\r\n separationPolyline.polyline.getPath().push(ll.ToGMLatLng());\r\n\r\n if (!polyLine.getVisible())\r\n polyLine.setVisible(true);\r\n\r\n polyLine.setPath([ll.ToGMLatLng(), ll.ToGMLatLng()]);\r\n\r\n this.target.update();\r\n }\r\n }\r\n\r\n }\r\n\r\n onKeyDown(keyCode: number, mapDrawer: MapDrawer) {\r\n if (keyCode === 68 && this.target) //d\r\n this.target.regenerate(true);\r\n else if (keyCode === 107) //add \r\n {\r\n let multipleRidgesModel = mapDrawer.viewModel.currentSubViewModel as MultipleRidgesModel;\r\n if (multipleRidgesModel) {\r\n multipleRidgesModel.incrementCount(+1);\r\n this.makeMultiple(null, mapDrawer);\r\n }\r\n }\r\n else if (keyCode === 109) //subtract\r\n {\r\n let multipleRidgesModel = mapDrawer.viewModel.currentSubViewModel as MultipleRidgesModel;\r\n if (multipleRidgesModel) {\r\n multipleRidgesModel.incrementCount(-1);\r\n this.makeMultiple(null, mapDrawer);\r\n }\r\n }\r\n }\r\n\r\n makeMultiple(ll: LatLng, mapDrawer: MapDrawer) {\r\n if (!this.polyLines || !this.polyLines.length || !this.polyLines[0] || this.step === 0)\r\n return;\r\n\r\n let polyLines = this.polyLines,\r\n polyLine = polyLines[0],\r\n polyLinePath = polyLine.getPath();\r\n\r\n if (!ll)\r\n ll = LatLng.FromGMLatLng(polyLines[polyLines.length - 1].getPath().getAt(1));\r\n\r\n let multipleRidgesModel = mapDrawer.viewModel.currentSubViewModel as MultipleRidgesModel,\r\n p1 = LatLng.GMLatLngToPoint2D(polyLinePath.getAt(0)),\r\n p2 = LatLng.GMLatLngToPoint2D(polyLinePath.getAt(1)),\r\n p3 = ll.ToPoint2D(),\r\n count = +multipleRidgesModel.getCount(),\r\n dir = p1.sub(p2);\r\n\r\n if (mapDrawer.shiftDown) {\r\n let n = dir.GetNormalized().LeftHandNormal();\r\n p3 = p2.add(n.mul(n.dot(p3.sub(p2))));\r\n }\r\n\r\n if (polyLines.length !== count) {\r\n for (let j = 1, c = polyLines.length; j < c; j++) {\r\n polyLines[j].setMap(null);\r\n polyLines[j] = null;\r\n }\r\n\r\n polyLines = this.polyLines = [this.polyLines[0]];\r\n\r\n for (let j = 1, c = count; j < c; j++) {\r\n polyLines.push(new google.maps.Polyline($.extend({\r\n map: mapDrawer.map,\r\n draggable: false,\r\n editable: false,\r\n clickable: false,\r\n visible: true,\r\n zIndex: 0,\r\n path: [LatLng.Point2DToGMLatLng(p1), LatLng.Point2DToGMLatLng(p1)]\r\n }, SeparationPolyline.shapeStyle) as google.maps.PolylineOptions));\r\n }\r\n }\r\n\r\n for (var i = 1, l = count - 1; i <= l; i++) {\r\n let t = i / l,\r\n s = p2.mul(1 - t).add(p3.mul(t));\r\n\r\n let polyPath = polyLines[i].getPath();\r\n\r\n polyPath.setAt(1, LatLng.Point2DToGMLatLng(s));\r\n polyPath.setAt(0, LatLng.Point2DToGMLatLng(s.add(dir)));\r\n }\r\n }\r\n }\r\n\r\n export class CutTool extends RidgeTool {\r\n\r\n iconX = 15;\r\n iconY = 6;\r\n\r\n constructor(mapDrawer: MapDrawer, name: string) {\r\n super(mapDrawer, name);\r\n this.isCutting = true;\r\n }\r\n }\r\n\r\n export class DeactivateTool extends BaseToolIcon {\r\n\r\n iconX = 1;\r\n iconY = 4;\r\n\r\n onSelect(mapDrawer: MapDrawer, prevTool: BaseToolIcon, subMenu: string) {\r\n var viewModel = mapDrawer.viewModel;\r\n\r\n }\r\n\r\n onDeselect(mapDrawer: MapDrawer) {\r\n var viewModel = mapDrawer.viewModel;\r\n\r\n }\r\n\r\n onClick(ev: google.maps.MouseEvent, mapDrawer: MapDrawer): void {\r\n var polys = mapDrawer.getPolygonsByPoint(ev.latLng).filter(poly => poly instanceof google.maps.Polygon && poly.userData && poly.userData instanceof MapDrawing.ShapeData && poly.userData.typeName === window.RoofTypeName);\r\n if (polys.length) {\r\n var sh = polys[0].userData as ShapeData;\r\n sh.isActive = !sh.isActive;\r\n }\r\n }\r\n }\r\n\r\n export class InfoButton extends BaseToolIcon {\r\n iconX = 16;\r\n iconY = 0;\r\n\r\n onSelect(mapDrawer: MapDrawer, prevTool: BaseToolIcon, subMenu: string) {\r\n var viewmodel = mapDrawer.viewModel;\r\n DynToolTip.showHowToInfo('_HowToMapDrawer', 'howTo_mapDrawerViewWrapper', 'mapDrawerStart', null, true);\r\n\r\n if (viewmodel.currentSubViewModel != null) {\r\n mapDrawer.selectTool(\"SelectTool\");\r\n return;\r\n }\r\n }\r\n\r\n onDeselect(mapDrawer: MapDrawer) {\r\n var viewModel = mapDrawer.viewModel;\r\n viewModel.currentSubViewModel = null;\r\n }\r\n }\r\n\r\n export class MappingTool extends BaseToolIcon {\r\n iconX = 7;\r\n iconY = 0;\r\n\r\n rectanglePoly: google.maps.Polygon = null;\r\n\r\n mappingPolygons: google.maps.Polygon[] = [];\r\n\r\n mappingOpts: google.maps.PolygonOptions = {\r\n draggable: false,\r\n editable: false,\r\n clickable: false,\r\n strokeWeight: 3,\r\n fillColor: '#f44b42',\r\n fillOpacity: 0.5,\r\n strokeColor: '#f44b42',\r\n strokeOpacity: 0.8,\r\n }\r\n\r\n onSelect(mapDrawer: MapDrawer, prevTool: BaseToolIcon, subMenu: string) {\r\n var center = mapDrawer.center;\r\n\r\n var rectangleOpts: google.maps.PolygonOptions = {\r\n map: mapDrawer.map,\r\n draggable: false,\r\n editable: false,\r\n clickable: false,\r\n strokeWeight: 1.5,\r\n fillColor: '#252525',\r\n fillOpacity: 0.2,\r\n strokeColor: '#252525',\r\n strokeOpacity: 0.8,\r\n paths: [new google.maps.LatLng(0, 0), new google.maps.LatLng(0, 0), new google.maps.LatLng(0, 0), new google.maps.LatLng(0, 0)]\r\n };\r\n\r\n this.mappingPolygons = [];\r\n this.rectanglePoly = new google.maps.Polygon(rectangleOpts);\r\n\r\n this.makeRectangle(this.rectanglePoly.getPath(), mapDrawer);\r\n }\r\n\r\n onDeselect(mapDrawer: MapDrawer) {\r\n if (this.rectanglePoly) {\r\n this.rectanglePoly.setMap(null);\r\n this.rectanglePoly = null;\r\n }\r\n if (this.mappingPolygons && this.mappingPolygons.length) {\r\n this.mappingPolygons.forEach(poly => {\r\n poly.setMap(null);\r\n });\r\n }\r\n this.mappingPolygons = [];\r\n }\r\n\r\n onMousemove(ev: google.maps.MouseEvent, mapDrawer: MapDrawer) {\r\n if (LoaderManager.isLoading())\r\n return;\r\n\r\n this.makeRectangle(this.rectanglePoly.getPath(), mapDrawer, LatLng.FromGMLatLng(ev.latLng));\r\n }\r\n\r\n showImg(lat: number, lng: number) {\r\n var src = \"../handler/StaticImagesHandler.ashx?ID=Experiment¢er=\" + lat + \",\" + lng + \"&zoom=18&size=300x300&scale=1\";\r\n\r\n if (!$('#mt-test_img').length) {\r\n $('
').appendTo(document.body);\r\n DManager.init('mt-test_img', 'auto', 'auto', SetWidthDialogTitleBarWidth, SetPaddingBack);\r\n } else {\r\n $('#mt-test_img').empty();\r\n }\r\n\r\n var img = new Image();\r\n\r\n img.width = 300;\r\n img.height = 300;\r\n\r\n $('#mt-test_img').get(0).appendChild(img);\r\n\r\n LoaderManager.addLoadingJob();\r\n\r\n img.onload = () => {\r\n\r\n LoaderManager.finishLoadingJob();\r\n\r\n img.onload = null;\r\n\r\n DManager.show('mt-test_img');\r\n };\r\n\r\n img.src = src;\r\n\r\n return true;\r\n }\r\n\r\n onClick(ev: google.maps.MouseEvent, mapDrawer: MapDrawer): void {\r\n if (LoaderManager.isLoading())\r\n return;\r\n\r\n var centerLatLng = LatLng.FromGMLatLng(ev.latLng);\r\n\r\n if (this.showImg(centerLatLng.Latitude, centerLatLng.Longitude))\r\n return;\r\n\r\n this.makeRectangle(this.rectanglePoly.getPath(), mapDrawer, centerLatLng);\r\n\r\n SolarProTool.Ajax(\"WebServices/MapServices.asmx\").Call(\"TestMapping\").Data({ lat: centerLatLng.Latitude, lng: centerLatLng.Longitude }).CallBack(res => {\r\n var mappingPolygons = this.mappingPolygons;\r\n if (mappingPolygons && mappingPolygons.length) {\r\n mappingPolygons.forEach(poly => {\r\n poly.setMap(null);\r\n });\r\n }\r\n mappingPolygons = [];\r\n if (res && res.length) {\r\n var mappingOpts = this.mappingOpts;\r\n\r\n res.forEach(pr => {\r\n mappingPolygons.push(new google.maps.Polygon($.extend({ map: mapDrawer.map, paths: pr.map(ll => new google.maps.LatLng(ll.Latitude, ll.Longitude)) }, mappingOpts) as google.maps.PolygonOptions));\r\n });\r\n }\r\n });\r\n\r\n }\r\n\r\n makeRectangle(path: google.maps.MVCArray, mapDrawer: MapDrawer, latlng?: LatLng): void {\r\n\r\n if (!latlng)\r\n latlng = LatLng.FromGMLatLng(mapDrawer.map.getCenter());\r\n\r\n var latLngBds = BoundsLatLng.FromCenterAndZoom(latlng, 18, 300, 300);\r\n\r\n var corners = latLngBds.Corners;\r\n\r\n path.setAt(0, corners[0].ToGMLatLng());\r\n path.setAt(1, corners[1].ToGMLatLng());\r\n path.setAt(2, corners[2].ToGMLatLng());\r\n path.setAt(3, corners[3].ToGMLatLng());\r\n\r\n }\r\n }\r\n}"]}